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 | 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 | }
|
42 | exports.wrapFileReporter = wrapFileReporter;
|
43 | class 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 | }
|
79 | class 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 | }
|
98 | function 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 | }
|
112 | exports.wrapStreamReporter = wrapStreamReporter;
|
113 | class 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 | }
|
137 | class 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 | }
|
155 | function 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 | }
|
175 | exports.toVinylOnlyReporter = toVinylOnlyReporter;
|
176 | function 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvd3JhcC1pc3RhbmJ1bC1yZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUEwQjtBQUMxQiw0Q0FBb0I7QUFDcEIsOEVBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QixnREFBMkI7QUFDM0Isb0RBQTRCO0FBQzVCLGtEQUEwQjtBQU8xQix1QkFBdUIsT0FBdUI7SUFDNUMsTUFBTSxPQUFPLEdBQXNCLDZCQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFDLENBQUMsQ0FBQztLQUNuRTtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCwwQkFBaUMsUUFBMkI7SUFDMUQscUJBQXFCLE9BQWdDO1FBQ25ELElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztRQUMxQixPQUFPLGVBQUssQ0FBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQVMsRUFBRSxJQUE2QyxFQUFRLEVBQUU7WUFDbEcsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtnQkFDekMsT0FBTzthQUNSO1lBQ0QsTUFBTSxHQUFHLEdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFnQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELHNDQUFzQztZQUN0QyxNQUFNLE9BQU8sR0FBc0IsYUFBYSxDQUFDO2dCQUMvQyxNQUFNO2dCQUNOLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTthQUNWLENBQUMsQ0FBQztZQUM1QixNQUFNLElBQUksR0FBbUIsNkJBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QixJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxDQUFDO0FBQ3ZCLENBQUM7QUF0QkQsNENBc0JDO0FBRUQ7SUFLRSxZQUFZLElBQVksRUFBRSxHQUFXLEVBQUUsSUFBNkM7UUFDbEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUSxDQUFDLE1BQWMsRUFBRSxJQUFZO1FBQzFDLE1BQU0sT0FBTyxHQUFXLFlBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQVcsY0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFVLElBQUksZUFBSyxDQUFDO1lBQzdCLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLElBQUksRUFBRSxZQUFZO1lBQ2xCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBbUI7UUFDbEMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1NBQ3JFO1FBQ0QsTUFBTSxZQUFZLEdBQVcsY0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLE9BQWUsRUFBUSxFQUFFO1lBQ3RELE1BQU0sS0FBSyxHQUFVLElBQUksZUFBSyxDQUFDO2dCQUM3QixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxZQUFZO2dCQUNsQixRQUFRLEVBQUUsT0FBTzthQUNsQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBYztRQUMvQixPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDO0NBQ0Y7QUFFRDtJQUlFLFlBQVksSUFBK0I7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFXO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLEtBQUs7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztDQUNGO0FBRUQsNEJBQW1DLFFBQTJCO0lBQzVELHNCQUFzQixPQUFnQztRQUNwRCxNQUFNLE1BQU0sR0FBa0IsSUFBSSxnQkFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELE1BQU0sTUFBTSxHQUFpQixJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBc0IsYUFBYSxDQUFDO1lBQy9DLE1BQU07WUFDTixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7U0FDVixDQUFDLENBQUM7UUFDNUIsTUFBTSxJQUFJLEdBQW1CLDZCQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sRUFBQyxZQUFZLEVBQUMsQ0FBQztBQUN4QixDQUFDO0FBZEQsZ0RBY0M7QUFFRDtJQUlFLFlBQVksTUFBNkI7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7SUFDNUIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxNQUFjLEVBQUUsSUFBWTtRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFtQjtRQUNsQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM1QixJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7U0FDL0Y7UUFFRCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBYztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNGO0FBRUQ7SUFHRSxZQUFZLE1BQTZCO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFXO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUSxDQUFDLEdBQVc7UUFDekIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztDQUNGO0FBRUQsNkJBQW9DLFFBQXdCLEVBQUUsUUFBZ0I7SUFDNUUscUJBQXFCLE9BQWdDO1FBQ25ELElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBMEIsZUFBSyxDQUNoRCxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsRUFDbEIsQ0FBQyxDQUFTLEVBQUUsSUFBNkMsRUFBUSxFQUFFO1lBQ2pFLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0I7Z0JBQ3pDLE9BQU87YUFDUjtZQUNELE1BQU0sTUFBTSxHQUEwQixRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELElBQUksUUFBUSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7WUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLGdCQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU8sRUFBQyxXQUFXLEVBQUMsQ0FBQztBQUN2QixDQUFDO0FBdkJELGtEQXVCQztBQUVELHVCQUF1QixNQUE2QixFQUFFLFFBQWdCO0lBQ3BFLE1BQU0sR0FBRyxHQUFXLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFlBQVksR0FBVyxjQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6RCxPQUFPLElBQUksZUFBSyxDQUFDO1FBQ2YsR0FBRztRQUNILElBQUksRUFBRSxHQUFHO1FBQ1QsSUFBSSxFQUFFLFlBQVk7UUFDbEIsUUFBUSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsImZpbGUiOiJ3cmFwLWlzdGFuYnVsLXJlcG9ydGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZyb20yIGZyb20gXCJmcm9tMlwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGxpYlJlcG9ydCBmcm9tIFwiaXN0YW5idWwtbGliLXJlcG9ydFwiO1xuaW1wb3J0IG1lcmdlMiBmcm9tIFwibWVyZ2UyXCI7XG5pbXBvcnQgc3lzUGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwic3RyZWFtXCI7XG5pbXBvcnQgVmlueWwgZnJvbSBcInZpbnlsXCI7XG5pbXBvcnQgeyBSZXBvcnRPcHRpb25zLCBTdHJlYW1SZXBvcnRlciwgVmlueWxSZXBvcnRlciB9IGZyb20gXCIuL3JlcG9ydGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dE9wdGlvbnMgZXh0ZW5kcyBsaWJSZXBvcnQuQ29udGV4dCB7XG4gIHdyaXRlcjogbGliUmVwb3J0LkZpbGVXcml0ZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQob3B0aW9uczogQ29udGV4dE9wdGlvbnMpOiBhbnkge1xuICBjb25zdCBjb250ZXh0OiBsaWJSZXBvcnQuQ29udGV4dCA9IGxpYlJlcG9ydC5jcmVhdGVDb250ZXh0KG9wdGlvbnMpO1xuICBpZiAoY29udGV4dC53cml0ZXIgIT09IG9wdGlvbnMud3JpdGVyKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIFwid3JpdGVyXCIsIHt2YWx1ZTogb3B0aW9ucy53cml0ZXJ9KTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGaWxlUmVwb3J0ZXIocmVwb3J0ZXI6IGxpYlJlcG9ydC5WaXNpdG9yKTogVmlueWxSZXBvcnRlciB7XG4gIGZ1bmN0aW9uIHJlcG9ydFZpbnlsKG9wdGlvbnM6IFJlYWRvbmx5PFJlcG9ydE9wdGlvbnM+KTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHtcbiAgICBsZXQgZG9uZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHJldHVybiBmcm9tMih7b2JqZWN0TW9kZTogdHJ1ZX0sIChfOiBudW1iZXIsIG5leHQ6IChlcnI6IG51bGwgfCBFcnJvciwgb2JqOiBWaW55bCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgbmV4dChudWxsLCBudWxsIGFzIGFueSk7IC8vIGVuZCBvZiBzdHJlYW1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3Qgd3JpdGVyOiBWaW55bFdyaXRlciA9IG5ldyBWaW55bFdyaXRlcihjd2QsIGN3ZCwgbmV4dCk7XG4gICAgICAvLyBUT0RPOiBGaXggaXN0YW5idWwtbGliLXJlcG9ydCB0eXBlc1xuICAgICAgY29uc3QgY29udGV4dDogbGliUmVwb3J0LkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICAgICAgd3JpdGVyLFxuICAgICAgICBzb3VyY2VGaW5kZXI6IG9wdGlvbnMuc291cmNlRmluZGVyLFxuICAgICAgfSBhcyBhbnkgYXMgQ29udGV4dE9wdGlvbnMpO1xuICAgICAgY29uc3QgdHJlZTogbGliUmVwb3J0LlRyZWUgPSBsaWJSZXBvcnQuc3VtbWFyaXplcnMucGtnKG9wdGlvbnMubWFwKTtcbiAgICAgIHRyZWUudmlzaXQocmVwb3J0ZXIsIGNvbnRleHQpO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge3JlcG9ydFZpbnlsfTtcbn1cblxuY2xhc3MgVmlueWxXcml0ZXIgaW1wbGVtZW50cyBsaWJSZXBvcnQuRmlsZVdyaXRlciB7XG4gIHB1YmxpYyByZWFkb25seSBiYXNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0OiAoZXJyOiBudWxsIHwgRXJyb3IsIG9iajogVmlueWwpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoYmFzZTogc3RyaW5nLCBkaXI6IHN0cmluZywgbmV4dDogKGVycjogbnVsbCB8IEVycm9yLCBvYmo6IFZpbnlsKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5iYXNlID0gYmFzZTtcbiAgICB0aGlzLmRpciA9IGRpcjtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgcHVibGljIGNvcHlGaWxlKHNvdXJjZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50OiBCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoc291cmNlKTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGg6IHN0cmluZyA9IHN5c1BhdGguam9pbih0aGlzLmRpciwgZGVzdCk7XG4gICAgY29uc3QgdmlueWw6IFZpbnlsID0gbmV3IFZpbnlsKHtcbiAgICAgIGN3ZDogdGhpcy5iYXNlLFxuICAgICAgYmFzZTogdGhpcy5iYXNlLFxuICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgY29udGVudHM6IGNvbnRlbnQsXG4gICAgfSk7XG4gICAgdGhpcy5uZXh0KG51bGwsIHZpbnlsKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZUZpbGUoZmlsZTogc3RyaW5nIHwgbnVsbCk6IFZpbnlsQ29udGVudFdyaXRlciB7XG4gICAgaWYgKHR5cGVvZiBmaWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3RTdXBwb3J0ZWQ6IFN0cmVhbVdyaXRlciN3cml0ZUZpbGUoZmlsZTogbnVsbClcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkUGF0aDogc3RyaW5nID0gc3lzUGF0aC5qb2luKHRoaXMuZGlyLCBmaWxlKTtcbiAgICByZXR1cm4gbmV3IFZpbnlsQ29udGVudFdyaXRlcigoY29udGVudDogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB2aW55bDogVmlueWwgPSBuZXcgVmlueWwoe1xuICAgICAgICBjd2Q6IHRoaXMuYmFzZSxcbiAgICAgICAgYmFzZTogdGhpcy5iYXNlLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIGNvbnRlbnRzOiBjb250ZW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQobnVsbCwgdmlueWwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlRm9yRGlyKHN1YmRpcjogc3RyaW5nKTogVmlueWxXcml0ZXIge1xuICAgIHJldHVybiBuZXcgVmlueWxXcml0ZXIodGhpcy5iYXNlLCBzeXNQYXRoLmpvaW4odGhpcy5kaXIsIHN1YmRpciksIHRoaXMubmV4dCk7XG4gIH1cbn1cblxuY2xhc3MgVmlueWxDb250ZW50V3JpdGVyIGltcGxlbWVudHMgbGliUmVwb3J0LkNvbnRlbnRXcml0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNodW5rczogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9uZTogKGNvbnRlbnQ6IEJ1ZmZlcikgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihkb25lOiAoY29udGVudDogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICB0aGlzLmRvbmUgPSBkb25lO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChzdHIpO1xuICB9XG5cbiAgcHVibGljIHByaW50bG4oc3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlKHN0cik7XG4gICAgdGhpcy53cml0ZShcIlxcblwiKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xvcml6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5kb25lKEJ1ZmZlci5mcm9tKHRoaXMuY2h1bmtzLmpvaW4oXCJcIikpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFN0cmVhbVJlcG9ydGVyKHJlcG9ydGVyOiBsaWJSZXBvcnQuVmlzaXRvcik6IFN0cmVhbVJlcG9ydGVyIHtcbiAgZnVuY3Rpb24gcmVwb3J0U3RyZWFtKG9wdGlvbnM6IFJlYWRvbmx5PFJlcG9ydE9wdGlvbnM+KTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHtcbiAgICBjb25zdCBkdXBsZXg6IHN0cmVhbS5EdXBsZXggPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgY29uc3Qgd3JpdGVyOiBTdHJlYW1Xcml0ZXIgPSBuZXcgU3RyZWFtV3JpdGVyKGR1cGxleCk7XG4gICAgY29uc3QgY29udGV4dDogbGliUmVwb3J0LkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICAgIHdyaXRlcixcbiAgICAgIHNvdXJjZUZpbmRlcjogb3B0aW9ucy5zb3VyY2VGaW5kZXIsXG4gICAgfSBhcyBhbnkgYXMgQ29udGV4dE9wdGlvbnMpO1xuICAgIGNvbnN0IHRyZWU6IGxpYlJlcG9ydC5UcmVlID0gbGliUmVwb3J0LnN1bW1hcml6ZXJzLnBrZyhvcHRpb25zLm1hcCk7XG4gICAgdHJlZS52aXNpdChyZXBvcnRlciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGR1cGxleDtcbiAgfVxuXG4gIHJldHVybiB7cmVwb3J0U3RyZWFtfTtcbn1cblxuY2xhc3MgU3RyZWFtV3JpdGVyIGltcGxlbWVudHMgbGliUmVwb3J0LkZpbGVXcml0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtO1xuICBwcml2YXRlIGZpbGVOYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5maWxlTmFtZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBjb3B5RmlsZShzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm90U3VwcG9ydGVkOiBTdHJlYW1Xcml0ZXIjY29weUZpbGVcIik7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVGaWxlKGZpbGU6IHN0cmluZyB8IG51bGwpOiBTdHJlYW1Db250ZW50V3JpdGVyIHtcbiAgICBpZiAodHlwZW9mIGZpbGUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZpbGUgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWxlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZpbGVOYW1lID0gZmlsZTtcbiAgICB9IGVsc2UgaWYgKGZpbGUgIT09IHRoaXMuZmlsZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm90U3VwcG9ydGVkOiBXcml0ZSB0byBtdWx0aXBsZSBkaWZmZXJlbnQgZmlsZXM6ICR7dGhpcy5maWxlTmFtZX0sICR7ZmlsZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN0cmVhbUNvbnRlbnRXcml0ZXIodGhpcy5zdHJlYW0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlRm9yRGlyKHN1YmRpcjogc3RyaW5nKTogU3RyZWFtV3JpdGVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3RTdXBwb3J0ZWQ6IFN0cmVhbVdyaXRlciN3cml0ZUZvckRpclwiKTtcbiAgfVxufVxuXG5jbGFzcyBTdHJlYW1Db250ZW50V3JpdGVyIGltcGxlbWVudHMgbGliUmVwb3J0LkNvbnRlbnRXcml0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtO1xuXG4gIGNvbnN0cnVjdG9yKHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gIH1cblxuICBwdWJsaWMgd3JpdGUoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShCdWZmZXIuZnJvbShzdHIpKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludGxuKHN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy53cml0ZShzdHIpO1xuICAgIHRoaXMud3JpdGUoXCJcXG5cIik7XG4gIH1cblxuICBwdWJsaWMgY29sb3JpemUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5zdHJlYW0uZW5kKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVmlueWxPbmx5UmVwb3J0ZXIocmVwb3J0ZXI6IFN0cmVhbVJlcG9ydGVyLCBmaWxlTmFtZTogc3RyaW5nKTogVmlueWxSZXBvcnRlciB7XG4gIGZ1bmN0aW9uIHJlcG9ydFZpbnlsKG9wdGlvbnM6IFJlYWRvbmx5PFJlcG9ydE9wdGlvbnM+KTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHtcbiAgICBsZXQgZG9uZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGNvbnN0IHdyYXBwZWRTdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSA9IGZyb20yKFxuICAgICAge29iamVjdE1vZGU6IHRydWV9LFxuICAgICAgKF86IG51bWJlciwgbmV4dDogKGVycjogbnVsbCB8IEVycm9yLCBvYmo6IFZpbnlsKSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgbmV4dChudWxsLCBudWxsIGFzIGFueSk7IC8vIGVuZCBvZiBzdHJlYW1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gPSByZXBvcnRlci5yZXBvcnRTdHJlYW0ob3B0aW9ucyk7XG4gICAgICAgIG5leHQobnVsbCwgc3RyZWFtVG9WaW55bChzdHJlYW0sIGZpbGVOYW1lKSk7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbXM6IE5vZGVKUy5SZWFkYWJsZVN0cmVhbVtdID0gW3dyYXBwZWRTdHJlYW1dO1xuICAgIGlmIChyZXBvcnRlci5yZXBvcnRWaW55bCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzdHJlYW1zLnB1c2gocmVwb3J0ZXIucmVwb3J0VmlueWwob3B0aW9ucykpO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2UyKHN0cmVhbXMpO1xuICB9XG5cbiAgcmV0dXJuIHtyZXBvcnRWaW55bH07XG59XG5cbmZ1bmN0aW9uIHN0cmVhbVRvVmlueWwoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0sIGZpbGVOYW1lOiBzdHJpbmcpOiBWaW55bCB7XG4gIGNvbnN0IGN3ZDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgcmVzb2x2ZWRQYXRoOiBzdHJpbmcgPSBzeXNQYXRoLmpvaW4oY3dkLCBmaWxlTmFtZSk7XG4gIHJldHVybiBuZXcgVmlueWwoe1xuICAgIGN3ZCxcbiAgICBiYXNlOiBjd2QsXG4gICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgIGNvbnRlbnRzOiBzdHJlYW0sXG4gIH0pO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|