turbo-gulp
Version:
Gulp tasks to boost high-quality projects.
124 lines (122 loc) • 18.7 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
}
Object.defineProperty(exports, "__esModule", { value: true });
const child_process_1 = require("child_process");
const fs = __importStar(require("fs"));
const incident_1 = require("incident");
const stream_1 = require("stream");
const util_1 = require("util");
function asBuffer(val) {
return val instanceof Buffer ? val : new Buffer(val, "utf8");
}
class ExecFileError extends incident_1.Incident {
constructor(nativeError, stdout, stderr) {
const data = {
cmd: nativeError.cmd,
killed: nativeError.killed,
code: nativeError.code,
signal: nativeError.signal,
stdout: asBuffer(stdout),
stderr: asBuffer(stderr),
};
const message = `An error occured during the execution of: ${data.cmd}\n${nativeError.stack}`;
super(nativeError, "ExecFileError", data, message);
}
}
exports.ExecFileError = ExecFileError;
const _readFile = util_1.promisify(fs.readFile);
const _writeFile = util_1.promisify(fs.writeFile);
async function readText(file) {
return _readFile(file, "utf8");
}
exports.readText = readText;
async function writeText(file, text) {
return _writeFile(file, text);
}
exports.writeText = writeText;
async function execFile(file, args, options) {
return new Promise((resolve, reject) => {
const normalizedOptions = Object.assign({}, options, { encoding: "buffer" });
child_process_1.execFile(file, args, normalizedOptions, (error, stdout, stderr) => {
if (error !== null) {
reject(new ExecFileError(error, stdout, stderr));
return;
}
const result = {
stdout: asBuffer(stdout),
stderr: asBuffer(stderr),
};
resolve(result);
});
});
}
exports.execFile = execFile;
class SpawnedProcess {
constructor(file, args, options) {
this.stdoutChunks = [];
this.stderrChunks = [];
this.exit = undefined;
const detached = options.detached !== undefined ? options.detached : false;
this.process = child_process_1.spawn(file, args, { stdio: [process.stdin, "pipe", "pipe"], cwd: options.cwd, env: options.env, detached });
const stdout = new stream_1.PassThrough();
this.process.stdout.pipe(stdout);
const stderr = new stream_1.PassThrough();
this.process.stderr.pipe(stderr);
if (options.stdio === "inherit") {
stdout.pipe(process.stdout);
stderr.pipe(process.stderr);
}
stdout.on("data", (chunk) => {
this.stdoutChunks.push(chunk);
});
stderr.on("data", (chunk) => {
this.stderrChunks.push(chunk);
});
this.process.once("exit", (code, signal) => {
if (code !== null) {
this.exit = { type: "code", code };
}
else {
this.exit = { type: "signal", signal: signal };
}
});
}
async toPromise() {
return new Promise((resolve, reject) => {
if (this.exit !== undefined) {
const [stdout, stderr] = this.getBuffers();
resolve({ stdout, stderr, exit: this.exit });
}
else {
this.process.once("exit", (code, signal) => {
let exit;
if (code !== null) {
exit = { type: "code", code };
}
else {
exit = { type: "signal", signal: signal };
}
const [stdout, stderr] = this.getBuffers();
resolve({ stdout, stderr, exit });
});
}
});
}
getBuffers() {
const stdout = Buffer.concat(this.stdoutChunks);
const stderr = Buffer.concat(this.stderrChunks);
this.stdoutChunks.length = 0;
this.stderrChunks.length = 0;
this.stdoutChunks.push(stdout);
this.stderrChunks.push(stderr);
return [stdout, stderr];
}
}
exports.SpawnedProcess = SpawnedProcess;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QUFNLEVBQUUsSUFBSSxFQUFDLENBQUM7b0JBQzlCLENBQUM7b0JBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ04sSUFBSSxHQUFHLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTyxFQUFDLENBQUM7b0JBQzNDLENBQUM7b0JBQ0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBcUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM3RCxPQUFPLENBQUMsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDaEIsTUFBTSxNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBMUVELHdDQTBFQyIsImZpbGUiOiJ1dGlscy9ub2RlLWFzeW5jLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hpbGRQcm9jZXNzLFxuICBleGVjRmlsZSBhcyBfZXhlY0ZpbGUsXG4gIEV4ZWNGaWxlT3B0aW9ucyBhcyBfRXhlY0ZpbGVPcHRpb25zLFxuICBzcGF3biBhcyBfc3Bhd24sXG59IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IEluY2lkZW50IH0gZnJvbSBcImluY2lkZW50XCI7XG5pbXBvcnQgeyBQYXNzVGhyb3VnaCwgVHJhbnNmb3JtIGFzIFRyYW5zZm9ybVN0cmVhbSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJ1dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY0ZpbGVPcHRpb25zIHtcbiAgY3dkPzogc3RyaW5nO1xuICBlbnY/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgdGltZW91dD86IG51bWJlcjtcbiAgbWF4QnVmZmVyPzogbnVtYmVyO1xuICBraWxsU2lnbmFsPzogc3RyaW5nO1xuICB1aWQ/OiBudW1iZXI7XG4gIGdpZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGVjRmlsZVJlc3VsdCB7XG4gIHN0ZG91dDogQnVmZmVyO1xuICBzdGRlcnI6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGVjRmlsZUVycm9yRGF0YSB7XG4gIC8qKlxuICAgKiBFeGVjdXRlZCBjb21tYW5kXG4gICAqL1xuICBjbWQ6IHN0cmluZztcblxuICBraWxsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4aXQgY29kZTogMCBpZiB0aGUgZXhlY3V0aW9uIHdhcyBzdWNjZXNzZnVsLCBlbHNlIHRoZXJlIHdhcyBhIHJ1bnRpbWUgZXJyb3JcbiAgICovXG4gIGNvZGU6IG51bWJlcjtcblxuICAvLyBUT0RPOiBjaGVjayB0aGUgdHlwZSBvZiBgc2lnbmFsYFxuICBzaWduYWw6IG51bGwgfCBhbnk7XG5cbiAgc3Rkb3V0OiBCdWZmZXI7XG5cbiAgc3RkZXJyOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIGFzQnVmZmVyKHZhbDogc3RyaW5nIHwgQnVmZmVyKTogQnVmZmVyIHtcbiAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIEJ1ZmZlciA/IHZhbCA6IG5ldyBCdWZmZXIodmFsLCBcInV0ZjhcIik7XG59XG5cbmV4cG9ydCBjbGFzcyBFeGVjRmlsZUVycm9yIGV4dGVuZHMgSW5jaWRlbnQ8RXhlY0ZpbGVFcnJvckRhdGEsIFwiRXhlY0ZpbGVFcnJvclwiLCBFcnJvcj4ge1xuICBjb25zdHJ1Y3RvcihuYXRpdmVFcnJvcjogRXJyb3IsIHN0ZG91dDogQnVmZmVyIHwgc3RyaW5nLCBzdGRlcnI6IEJ1ZmZlciB8IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGE6IEV4ZWNGaWxlRXJyb3JEYXRhID0ge1xuICAgICAgY21kOiAoPEVycm9yICYge2NtZDogc3RyaW5nfT4gbmF0aXZlRXJyb3IpLmNtZCxcbiAgICAgIGtpbGxlZDogKDxFcnJvciAmIHtraWxsZWQ6IGJvb2xlYW59PiBuYXRpdmVFcnJvcikua2lsbGVkLFxuICAgICAgY29kZTogKDxFcnJvciAmIHtjb2RlOiBudW1iZXJ9PiBuYXRpdmVFcnJvcikuY29kZSxcbiAgICAgIHNpZ25hbDogKDxFcnJvciAmIHtzaWduYWw6IG51bGwgfCBhbnl9PiBuYXRpdmVFcnJvcikuc2lnbmFsLFxuICAgICAgc3Rkb3V0OiBhc0J1ZmZlcihzdGRvdXQpLFxuICAgICAgc3RkZXJyOiBhc0J1ZmZlcihzdGRlcnIpLFxuICAgIH07XG4gICAgY29uc3QgbWVzc2FnZTogc3RyaW5nID0gYEFuIGVycm9yIG9jY3VyZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Y6ICR7ZGF0YS5jbWR9XFxuJHtuYXRpdmVFcnJvci5zdGFja31gO1xuICAgIHN1cGVyKG5hdGl2ZUVycm9yLCBcIkV4ZWNGaWxlRXJyb3JcIiwgZGF0YSwgbWVzc2FnZSk7XG5cbiAgfVxufVxuXG5jb25zdCBfcmVhZEZpbGU6IChmaWxlbmFtZTogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz4gPSA8YW55PiBwcm9taXNpZnkoZnMucmVhZEZpbGUpO1xuY29uc3QgX3dyaXRlRmlsZTogKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gUHJvbWlzZTxhbnk+ID0gPGFueT4gcHJvbWlzaWZ5KGZzLndyaXRlRmlsZSk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkVGV4dChmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gX3JlYWRGaWxlKGZpbGUsIFwidXRmOFwiKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlVGV4dChmaWxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gX3dyaXRlRmlsZShmaWxlLCB0ZXh0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNGaWxlKGZpbGU6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBFeGVjRmlsZU9wdGlvbnMpOiBQcm9taXNlPEV4ZWNGaWxlUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxFeGVjRmlsZVJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRPcHRpb25zOiBfRXhlY0ZpbGVPcHRpb25zICYge2VuY29kaW5nOiBzdHJpbmd9ID0gey4uLm9wdGlvbnMsIGVuY29kaW5nOiBcImJ1ZmZlclwifTtcblxuICAgIF9leGVjRmlsZShcbiAgICAgIGZpbGUsXG4gICAgICBhcmdzLFxuICAgICAgbm9ybWFsaXplZE9wdGlvbnMsXG4gICAgICAoZXJyb3I6IEVycm9yIHwgbnVsbCwgc3Rkb3V0OiBCdWZmZXIgfCBzdHJpbmcsIHN0ZGVycjogQnVmZmVyIHwgc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXhlY0ZpbGVFcnJvcihlcnJvciwgc3Rkb3V0LCBzdGRlcnIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0OiBFeGVjRmlsZVJlc3VsdCA9IHtcbiAgICAgICAgICBzdGRvdXQ6IGFzQnVmZmVyKHN0ZG91dCksXG4gICAgICAgICAgc3RkZXJyOiBhc0J1ZmZlcihzdGRlcnIpLFxuICAgICAgICB9O1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9LFxuICAgICk7XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYXduT3B0aW9ucyB7XG4gIGN3ZD86IHN0cmluZztcbiAgZW52Pzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHN0ZGlvPzogXCJpbmhlcml0XCIgfCBcInBpcGVcIjtcbiAgLyoqXG4gICAqIFJ1biBpbiBkZXRhY2hlZCBtb2RlLiBEZWZhdWx0OiBgZmFsc2VgLlxuICAgKi9cbiAgZGV0YWNoZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYXduUmVzdWx0IHtcbiAgLyoqXG4gICAqIEJ1ZmZlciBjb250YWluaW5nIHRoZSB3aG9sZSBzdGFuZGFyZCBvdXRwdXQgb2YgdGhlIHNwYXduZWQgcHJvY2Vzcy5cbiAgICovXG4gIHN0ZG91dDogQnVmZmVyO1xuXG4gIC8qKlxuICAgKiBCdWZmZXIgY29udGFpbmluZyB0aGUgd2hvbGUgc3RhbmRhcmQgZXJyb3Igb2YgdGhlIHNwYXduZWQgcHJvY2Vzcy5cbiAgICovXG4gIHN0ZGVycjogQnVmZmVyO1xuXG4gIC8qKlxuICAgKiBFeGl0IHZhbHVlIG9mIHRoZSBzcGF3bmVkIHByb2Nlc3M6IGEgcmV0dXJuIGNvZGUgb3IgZXhpdCBzaWduYWwuXG4gICAqL1xuICBleGl0OiBFeGl0O1xufVxuXG4vKipcbiAqIEV4aXQgdmFsdWUgb2YgYSBzcGF3bmVkIHByb2Nlc3M6IGEgcmV0dXJuIGNvZGUgb3IgZXhpdCBzaWduYWxcbiAqL1xuZXhwb3J0IHR5cGUgRXhpdCA9IFNpZ25hbEV4aXQgfCBDb2RlRXhpdDtcblxuZXhwb3J0IGludGVyZmFjZSBDb2RlRXhpdCB7XG4gIHR5cGU6IFwiY29kZVwiO1xuICBjb2RlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsRXhpdCB7XG4gIHR5cGU6IFwic2lnbmFsXCI7XG4gIHNpZ25hbDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU3Bhd25lZFByb2Nlc3Mge1xuICByZWFkb25seSBwcm9jZXNzOiBDaGlsZFByb2Nlc3M7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGRvdXRDaHVua3M6IEJ1ZmZlcltdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0ZGVyckNodW5rczogQnVmZmVyW107XG4gIHByaXZhdGUgZXhpdD86IEV4aXQ7XG5cbiAgY29uc3RydWN0b3IoZmlsZTogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9uczogU3Bhd25PcHRpb25zKSB7XG4gICAgdGhpcy5zdGRvdXRDaHVua3MgPSBbXTtcbiAgICB0aGlzLnN0ZGVyckNodW5rcyA9IFtdO1xuICAgIHRoaXMuZXhpdCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGRldGFjaGVkOiBib29sZWFuID0gb3B0aW9ucy5kZXRhY2hlZCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXRhY2hlZCA6IGZhbHNlO1xuXG4gICAgdGhpcy5wcm9jZXNzID0gX3NwYXduKFxuICAgICAgZmlsZSxcbiAgICAgIGFyZ3MsXG4gICAgICB7c3RkaW86IFtwcm9jZXNzLnN0ZGluLCBcInBpcGVcIiwgXCJwaXBlXCJdLCBjd2Q6IG9wdGlvbnMuY3dkLCBlbnY6IG9wdGlvbnMuZW52LCBkZXRhY2hlZH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHN0ZG91dDogVHJhbnNmb3JtU3RyZWFtID0gbmV3IFBhc3NUaHJvdWdoKCk7XG4gICAgdGhpcy5wcm9jZXNzLnN0ZG91dC5waXBlKHN0ZG91dCk7XG4gICAgY29uc3Qgc3RkZXJyOiBUcmFuc2Zvcm1TdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcbiAgICB0aGlzLnByb2Nlc3Muc3RkZXJyLnBpcGUoc3RkZXJyKTtcbiAgICBpZiAob3B0aW9ucy5zdGRpbyA9PT0gXCJpbmhlcml0XCIpIHtcbiAgICAgIHN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0KTtcbiAgICAgIHN0ZGVyci5waXBlKHByb2Nlc3Muc3RkZXJyKTtcbiAgICB9XG5cbiAgICBzdGRvdXQub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnN0ZG91dENodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9KTtcbiAgICBzdGRlcnIub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnN0ZGVyckNodW5rcy5wdXNoKGNodW5rKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBzdHJpbmcgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmV4aXQgPSB7dHlwZTogXCJjb2RlXCIsIGNvZGV9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leGl0ID0ge3R5cGU6IFwic2lnbmFsXCIsIHNpZ25hbDogc2lnbmFsIX07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB0b1Byb21pc2UoKTogUHJvbWlzZTxTcGF3blJlc3VsdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTcGF3blJlc3VsdD4oKHJlc29sdmU6IChyZXM6IFNwYXduUmVzdWx0KSA9PiB2b2lkLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmV4aXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnJdOiBbQnVmZmVyLCBCdWZmZXJdID0gdGhpcy5nZXRCdWZmZXJzKCk7XG4gICAgICAgIHJlc29sdmUoe3N0ZG91dCwgc3RkZXJyLCBleGl0OiB0aGlzLmV4aXR9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5vbmNlKFwiZXhpdFwiLCAoY29kZTogbnVtYmVyIHwgbnVsbCwgc2lnbmFsOiBzdHJpbmcgfCBudWxsKTogdm9pZCA9PiB7XG4gICAgICAgICAgbGV0IGV4aXQ6IEV4aXQ7XG4gICAgICAgICAgaWYgKGNvZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4aXQgPSB7dHlwZTogXCJjb2RlXCIsIGNvZGV9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleGl0ID0ge3R5cGU6IFwic2lnbmFsXCIsIHNpZ25hbDogc2lnbmFsIX07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVycl06IFtCdWZmZXIsIEJ1ZmZlcl0gPSB0aGlzLmdldEJ1ZmZlcnMoKTtcbiAgICAgICAgICByZXNvbHZlKHtzdGRvdXQsIHN0ZGVyciwgZXhpdH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVmZmVycygpOiBbQnVmZmVyLCBCdWZmZXJdIHtcbiAgICBjb25zdCBzdGRvdXQ6IEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQodGhpcy5zdGRvdXRDaHVua3MpO1xuICAgIGNvbnN0IHN0ZGVycjogQnVmZmVyID0gQnVmZmVyLmNvbmNhdCh0aGlzLnN0ZGVyckNodW5rcyk7XG4gICAgdGhpcy5zdGRvdXRDaHVua3MubGVuZ3RoID0gMDtcbiAgICB0aGlzLnN0ZGVyckNodW5rcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuc3Rkb3V0Q2h1bmtzLnB1c2goc3Rkb3V0KTtcbiAgICB0aGlzLnN0ZGVyckNodW5rcy5wdXNoKHN0ZGVycik7XG4gICAgcmV0dXJuIFtzdGRvdXQsIHN0ZGVycl07XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiLi4ifQ==