UNPKG

browserfs

Version:

A filesystem in your browser!

302 lines 38.3 kB
"use strict"; var mutex_1 = require('./mutex'); var LockedFS = (function () { function LockedFS(fs) { this._fs = fs; this._mu = new mutex_1["default"](); } LockedFS.prototype.getName = function () { return 'LockedFS<' + this._fs.getName() + '>'; }; LockedFS.prototype.getFSUnlocked = function () { return this._fs; }; LockedFS.prototype.initialize = function (cb) { this._fs.initialize(cb); }; LockedFS.prototype.diskSpace = function (p, cb) { this._fs.diskSpace(p, cb); }; LockedFS.prototype.isReadOnly = function () { return this._fs.isReadOnly(); }; LockedFS.prototype.supportsLinks = function () { return this._fs.supportsLinks(); }; LockedFS.prototype.supportsProps = function () { return this._fs.supportsProps(); }; LockedFS.prototype.supportsSynch = function () { return this._fs.supportsSynch(); }; LockedFS.prototype.rename = function (oldPath, newPath, cb) { var _this = this; this._mu.lock(function () { _this._fs.rename(oldPath, newPath, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.renameSync = function (oldPath, newPath) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.renameSync(oldPath, newPath); }; LockedFS.prototype.stat = function (p, isLstat, cb) { var _this = this; this._mu.lock(function () { _this._fs.stat(p, isLstat, function (err, stat) { _this._mu.unlock(); cb(err, stat); }); }); }; LockedFS.prototype.statSync = function (p, isLstat) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.statSync(p, isLstat); }; LockedFS.prototype.open = function (p, flag, mode, cb) { var _this = this; this._mu.lock(function () { _this._fs.open(p, flag, mode, function (err, fd) { _this._mu.unlock(); cb(err, fd); }); }); }; LockedFS.prototype.openSync = function (p, flag, mode) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.openSync(p, flag, mode); }; LockedFS.prototype.unlink = function (p, cb) { var _this = this; this._mu.lock(function () { _this._fs.unlink(p, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.unlinkSync = function (p) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.unlinkSync(p); }; LockedFS.prototype.rmdir = function (p, cb) { var _this = this; this._mu.lock(function () { _this._fs.rmdir(p, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.rmdirSync = function (p) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.rmdirSync(p); }; LockedFS.prototype.mkdir = function (p, mode, cb) { var _this = this; this._mu.lock(function () { _this._fs.mkdir(p, mode, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.mkdirSync = function (p, mode) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.mkdirSync(p, mode); }; LockedFS.prototype.readdir = function (p, cb) { var _this = this; this._mu.lock(function () { _this._fs.readdir(p, function (err, files) { _this._mu.unlock(); cb(err, files); }); }); }; LockedFS.prototype.readdirSync = function (p) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.readdirSync(p); }; LockedFS.prototype.exists = function (p, cb) { var _this = this; this._mu.lock(function () { _this._fs.exists(p, function (exists) { _this._mu.unlock(); cb(exists); }); }); }; LockedFS.prototype.existsSync = function (p) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.existsSync(p); }; LockedFS.prototype.realpath = function (p, cache, cb) { var _this = this; this._mu.lock(function () { _this._fs.realpath(p, cache, function (err, resolvedPath) { _this._mu.unlock(); cb(err, resolvedPath); }); }); }; LockedFS.prototype.realpathSync = function (p, cache) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.realpathSync(p, cache); }; LockedFS.prototype.truncate = function (p, len, cb) { var _this = this; this._mu.lock(function () { _this._fs.truncate(p, len, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.truncateSync = function (p, len) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.truncateSync(p, len); }; LockedFS.prototype.readFile = function (fname, encoding, flag, cb) { var _this = this; this._mu.lock(function () { _this._fs.readFile(fname, encoding, flag, function (err, data) { _this._mu.unlock(); cb(err, data); }); }); }; LockedFS.prototype.readFileSync = function (fname, encoding, flag) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.readFileSync(fname, encoding, flag); }; LockedFS.prototype.writeFile = function (fname, data, encoding, flag, mode, cb) { var _this = this; this._mu.lock(function () { _this._fs.writeFile(fname, data, encoding, flag, mode, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.writeFileSync = function (fname, data, encoding, flag, mode) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.writeFileSync(fname, data, encoding, flag, mode); }; LockedFS.prototype.appendFile = function (fname, data, encoding, flag, mode, cb) { var _this = this; this._mu.lock(function () { _this._fs.appendFile(fname, data, encoding, flag, mode, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.appendFileSync = function (fname, data, encoding, flag, mode) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.appendFileSync(fname, data, encoding, flag, mode); }; LockedFS.prototype.chmod = function (p, isLchmod, mode, cb) { var _this = this; this._mu.lock(function () { _this._fs.chmod(p, isLchmod, mode, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.chmodSync = function (p, isLchmod, mode) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.chmodSync(p, isLchmod, mode); }; LockedFS.prototype.chown = function (p, isLchown, uid, gid, cb) { var _this = this; this._mu.lock(function () { _this._fs.chown(p, isLchown, uid, gid, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.chownSync = function (p, isLchown, uid, gid) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.chownSync(p, isLchown, uid, gid); }; LockedFS.prototype.utimes = function (p, atime, mtime, cb) { var _this = this; this._mu.lock(function () { _this._fs.utimes(p, atime, mtime, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.utimesSync = function (p, atime, mtime) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.utimesSync(p, atime, mtime); }; LockedFS.prototype.link = function (srcpath, dstpath, cb) { var _this = this; this._mu.lock(function () { _this._fs.link(srcpath, dstpath, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.linkSync = function (srcpath, dstpath) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.linkSync(srcpath, dstpath); }; LockedFS.prototype.symlink = function (srcpath, dstpath, type, cb) { var _this = this; this._mu.lock(function () { _this._fs.symlink(srcpath, dstpath, type, function (err) { _this._mu.unlock(); cb(err); }); }); }; LockedFS.prototype.symlinkSync = function (srcpath, dstpath, type) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.symlinkSync(srcpath, dstpath, type); }; LockedFS.prototype.readlink = function (p, cb) { var _this = this; this._mu.lock(function () { _this._fs.readlink(p, function (err, linkString) { _this._mu.unlock(); cb(err, linkString); }); }); }; LockedFS.prototype.readlinkSync = function (p) { if (this._mu.isLocked()) throw new Error('invalid sync call'); return this._fs.readlinkSync(p); }; return LockedFS; }()); exports.__esModule = true; exports["default"] = LockedFS; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ja2VkX2ZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2dlbmVyaWMvbG9ja2VkX2ZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxzQkFBa0IsU0FBUyxDQUFDLENBQUE7QUFlNUI7SUFJRSxrQkFBWSxFQUFLO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksa0JBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCwwQkFBTyxHQUFQO1FBQ0UsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFJLEdBQUcsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0NBQWEsR0FBYjtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCw2QkFBVSxHQUFWLFVBQVcsRUFBNEI7UUFFL0IsSUFBSSxDQUFDLEdBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDRCQUFTLEdBQVQsVUFBVSxDQUFTLEVBQUUsRUFBd0M7UUFFM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCw2QkFBVSxHQUFWO1FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGdDQUFhLEdBQWI7UUFDRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZ0NBQWEsR0FBYjtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQ0FBYSxHQUFiO1FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENB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QUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDSCxlQUFDO0FBQUQsQ0FBQyxBQXZVRCxJQXVVQztBQXZVRDs2QkF1VUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBNdXRleCBmcm9tICcuL211dGV4JztcbmltcG9ydCB7RmlsZVN5c3RlbSwgU3luY2hyb25vdXNGaWxlU3lzdGVtfSBmcm9tICcuLi9jb3JlL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7QXBpRXJyb3IsIEVycm9yQ29kZX0gZnJvbSAnLi4vY29yZS9hcGlfZXJyb3InO1xuaW1wb3J0IHtGaWxlRmxhZywgQWN0aW9uVHlwZX0gZnJvbSAnLi4vY29yZS9maWxlX2ZsYWcnO1xuaW1wb3J0IHtkZWZhdWx0IGFzIFN0YXRzLCBGaWxlVHlwZX0gZnJvbSAnLi4vY29yZS9ub2RlX2ZzX3N0YXRzJztcbmltcG9ydCB7RmlsZX0gZnJvbSAnLi4vY29yZS9maWxlJztcblxuXG4vLy8gVGhpcyBjbGFzcyBzZXJpYWxpemVzIGFjY2VzcyB0byBhbiB1bmRlcmx5aW5nIGFzeW5jIGZpbGVzeXN0ZW0uXG4vLy8gRm9yIGV4YW1wbGUsIG9uIGFuIE92ZXJsYXlGUyBpbnN0YW5jZSB3aXRoIGFuIGFzeW5jIGxvd2VyXG4vLy8gZGlyZWN0b3J5IG9wZXJhdGlvbnMgbGlrZSByZW5hbWUgYW5kIHJtZGlyIG1heSBpbnZvbHZlIG11bHRpcGxlXG4vLy8gcmVxdWVzdHMgaW52b2x2aW5nIGJvdGggdGhlIHVwcGVyIGFuZCBsb3dlciBmaWxlc3lzdGVtcyAtLSB0aGV5XG4vLy8gYXJlIG5vdCBleGVjdXRlZCBpbiBhIHNpbmdsZSBhdG9taWMgc3RlcC4gIE92ZXJsYXlGUyB1c2VzIHRoaXNcbi8vLyBMb2NrZWRGUyB0byBhdm9pZCBoYXZpbmcgdG8gcmVhc29uIGFib3V0IHRoZSBjb3JyZWN0bmVzcyBvZlxuLy8vIG11bHRpcGxlIHJlcXVlc3RzIGludGVybGVhdmluZy5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvY2tlZEZTPFQgZXh0ZW5kcyBGaWxlU3lzdGVtPiBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0ge1xuICBwcml2YXRlIF9mczogVDtcbiAgcHJpdmF0ZSBfbXU6IE11dGV4O1xuXG4gIGNvbnN0cnVjdG9yKGZzOiBUKSB7XG4gICAgdGhpcy5fZnMgPSBmcztcbiAgICB0aGlzLl9tdSA9IG5ldyBNdXRleCgpO1xuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnTG9ja2VkRlM8JyArIHRoaXMuX2ZzLmdldE5hbWUoKSAgKyAnPic7XG4gIH1cblxuICBnZXRGU1VubG9ja2VkKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9mcztcbiAgfVxuXG4gIGluaXRpYWxpemUoY2I6IChlcnI/OiBBcGlFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIC8vIEZJWE1FOiBjaGVjayB0byBzZWUgaWYgRlMgc3VwcG9ydHMgaW5pdGlhbGl6YXRpb25cbiAgICAoPGFueT50aGlzLl9mcykuaW5pdGlhbGl6ZShjYik7XG4gIH1cblxuICBkaXNrU3BhY2UocDogc3RyaW5nLCBjYjogKHRvdGFsOiBudW1iZXIsIGZyZWU6IG51bWJlcikgPT4gYW55KTogdm9pZCB7XG4gICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGxvY2s/XG4gICAgdGhpcy5fZnMuZGlza1NwYWNlKHAsIGNiKTtcbiAgfVxuXG4gIGlzUmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLmlzUmVhZE9ubHkoKTtcbiAgfVxuXG4gIHN1cHBvcnRzTGlua3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnN1cHBvcnRzTGlua3MoKTtcbiAgfVxuXG4gIHN1cHBvcnRzUHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnN1cHBvcnRzUHJvcHMoKTtcbiAgfVxuXG4gIHN1cHBvcnRzU3luY2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnN1cHBvcnRzU3luY2goKTtcbiAgfVxuXG4gIHJlbmFtZShvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZywgY2I6IChlcnI/OiBBcGlFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX211LmxvY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZnMucmVuYW1lKG9sZFBhdGgsIG5ld1BhdGgsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVuYW1lU3luYyhvbGRQYXRoOiBzdHJpbmcsIG5ld1BhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5yZW5hbWVTeW5jKG9sZFBhdGgsIG5ld1BhdGgpO1xuICB9XG5cbiAgc3RhdChwOiBzdHJpbmcsIGlzTHN0YXQ6IGJvb2xlYW4sIGNiOiAoZXJyOiBBcGlFcnJvciwgc3RhdD86IFN0YXRzKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy5zdGF0KHAsIGlzTHN0YXQsIChlcnI/OiBBcGlFcnJvciwgc3RhdD86IFN0YXRzKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIsIHN0YXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0U3luYyhwOiBzdHJpbmcsIGlzTHN0YXQ6IGJvb2xlYW4pOiBTdGF0cyB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnN0YXRTeW5jKHAsIGlzTHN0YXQpO1xuICB9XG5cbiAgb3BlbihwOiBzdHJpbmcsIGZsYWc6IEZpbGVGbGFnLCBtb2RlOiBudW1iZXIsIGNiOiAoZXJyOiBBcGlFcnJvciwgZmQ/OiBGaWxlKSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLm9wZW4ocCwgZmxhZywgbW9kZSwgKGVycj86IEFwaUVycm9yLCBmZD86IEZpbGUpID0+IHtcbiAgICAgICAgdGhpcy5fbXUudW5sb2NrKCk7XG4gICAgICAgIGNiKGVyciwgZmQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuU3luYyhwOiBzdHJpbmcsIGZsYWc6IEZpbGVGbGFnLCBtb2RlOiBudW1iZXIpOiBGaWxlIHtcbiAgICBpZiAodGhpcy5fbXUuaXNMb2NrZWQoKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzeW5jIGNhbGwnKTtcbiAgICByZXR1cm4gdGhpcy5fZnMub3BlblN5bmMocCwgZmxhZywgbW9kZSk7XG4gIH1cblxuICB1bmxpbmsocDogc3RyaW5nLCBjYjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLnVubGluayhwLCAoZXJyPzogQXBpRXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5fbXUudW5sb2NrKCk7XG4gICAgICAgIGNiKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVubGlua1N5bmMocDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnVubGlua1N5bmMocCk7XG4gIH1cblxuICBybWRpcihwOiBzdHJpbmcsIGNiOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX211LmxvY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZnMucm1kaXIocCwgKGVycj86IEFwaUVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBybWRpclN5bmMocDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLnJtZGlyU3luYyhwKTtcbiAgfVxuXG4gIG1rZGlyKHA6IHN0cmluZywgbW9kZTogbnVtYmVyLCBjYjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLm1rZGlyKHAsIG1vZGUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbWtkaXJTeW5jKHA6IHN0cmluZywgbW9kZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLm1rZGlyU3luYyhwLCBtb2RlKTtcbiAgfVxuXG4gIHJlYWRkaXIocDogc3RyaW5nLCBjYjogKGVycjogQXBpRXJyb3IsIGZpbGVzPzogc3RyaW5nW10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLnJlYWRkaXIocCwgKGVycj86IEFwaUVycm9yLCBmaWxlcz86IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIsIGZpbGVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZGRpclN5bmMocDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5yZWFkZGlyU3luYyhwKTtcbiAgfVxuXG4gIGV4aXN0cyhwOiBzdHJpbmcsIGNiOiAoZXhpc3RzOiBib29sZWFuKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy5leGlzdHMocCwgKGV4aXN0czogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXhpc3RzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZXhpc3RzU3luYyhwOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fbXUuaXNMb2NrZWQoKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzeW5jIGNhbGwnKTtcbiAgICByZXR1cm4gdGhpcy5fZnMuZXhpc3RzU3luYyhwKTtcbiAgfVxuXG4gIHJlYWxwYXRoKHA6IHN0cmluZywgY2FjaGU6IHtbcGF0aDogc3RyaW5nXTogc3RyaW5nfSwgY2I6IChlcnI6IEFwaUVycm9yLCByZXNvbHZlZFBhdGg/OiBzdHJpbmcpID0+IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX211LmxvY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZnMucmVhbHBhdGgocCwgY2FjaGUsIChlcnI/OiBBcGlFcnJvciwgcmVzb2x2ZWRQYXRoPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIsIHJlc29sdmVkUGF0aCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWxwYXRoU3luYyhwOiBzdHJpbmcsIGNhY2hlOiB7W3BhdGg6IHN0cmluZ106IHN0cmluZ30pOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5yZWFscGF0aFN5bmMocCwgY2FjaGUpO1xuICB9XG5cbiAgdHJ1bmNhdGUocDogc3RyaW5nLCBsZW46IG51bWJlciwgY2I6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy50cnVuY2F0ZShwLCBsZW4sIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdHJ1bmNhdGVTeW5jKHA6IHN0cmluZywgbGVuOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbXUuaXNMb2NrZWQoKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzeW5jIGNhbGwnKTtcbiAgICByZXR1cm4gdGhpcy5fZnMudHJ1bmNhdGVTeW5jKHAsIGxlbik7XG4gIH1cblxuICByZWFkRmlsZShmbmFtZTogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nLCBmbGFnOiBGaWxlRmxhZywgY2I6IChlcnI6IEFwaUVycm9yLCBkYXRhPzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy5yZWFkRmlsZShmbmFtZSwgZW5jb2RpbmcsIGZsYWcsIChlcnI/OiBBcGlFcnJvciwgZGF0YT86IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZEZpbGVTeW5jKGZuYW1lOiBzdHJpbmcsIGVuY29kaW5nOiBzdHJpbmcsIGZsYWc6IEZpbGVGbGFnKTogYW55IHtcbiAgICBpZiAodGhpcy5fbXUuaXNMb2NrZWQoKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzeW5jIGNhbGwnKTtcbiAgICByZXR1cm4gdGhpcy5fZnMucmVhZEZpbGVTeW5jKGZuYW1lLCBlbmNvZGluZywgZmxhZyk7XG4gIH1cblxuICB3cml0ZUZpbGUoZm5hbWU6IHN0cmluZywgZGF0YTogYW55LCBlbmNvZGluZzogc3RyaW5nLCBmbGFnOiBGaWxlRmxhZywgbW9kZTogbnVtYmVyLCBjYjogKGVycjogQXBpRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLndyaXRlRmlsZShmbmFtZSwgZGF0YSwgZW5jb2RpbmcsIGZsYWcsIG1vZGUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgd3JpdGVGaWxlU3luYyhmbmFtZTogc3RyaW5nLCBkYXRhOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGZsYWc6IEZpbGVGbGFnLCBtb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbXUuaXNMb2NrZWQoKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBzeW5jIGNhbGwnKTtcbiAgICByZXR1cm4gdGhpcy5fZnMud3JpdGVGaWxlU3luYyhmbmFtZSwgZGF0YSwgZW5jb2RpbmcsIGZsYWcsIG1vZGUpO1xuICB9XG5cbiAgYXBwZW5kRmlsZShmbmFtZTogc3RyaW5nLCBkYXRhOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGZsYWc6IEZpbGVGbGFnLCBtb2RlOiBudW1iZXIsIGNiOiAoZXJyOiBBcGlFcnJvcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX211LmxvY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZnMuYXBwZW5kRmlsZShmbmFtZSwgZGF0YSwgZW5jb2RpbmcsIGZsYWcsIG1vZGUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwZW5kRmlsZVN5bmMoZm5hbWU6IHN0cmluZywgZGF0YTogYW55LCBlbmNvZGluZzogc3RyaW5nLCBmbGFnOiBGaWxlRmxhZywgbW9kZTogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLmFwcGVuZEZpbGVTeW5jKGZuYW1lLCBkYXRhLCBlbmNvZGluZywgZmxhZywgbW9kZSk7XG4gIH1cblxuICBjaG1vZChwOiBzdHJpbmcsIGlzTGNobW9kOiBib29sZWFuLCBtb2RlOiBudW1iZXIsIGNiOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX211LmxvY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZnMuY2htb2QocCwgaXNMY2htb2QsIG1vZGUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY2htb2RTeW5jKHA6IHN0cmluZywgaXNMY2htb2Q6IGJvb2xlYW4sIG1vZGU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5jaG1vZFN5bmMocCwgaXNMY2htb2QsIG1vZGUpO1xuICB9XG5cbiAgY2hvd24ocDogc3RyaW5nLCBpc0xjaG93bjogYm9vbGVhbiwgdWlkOiBudW1iZXIsIGdpZDogbnVtYmVyLCBjYjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLmNob3duKHAsIGlzTGNob3duLCB1aWQsIGdpZCwgKGVycj86IEFwaUVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjaG93blN5bmMocDogc3RyaW5nLCBpc0xjaG93bjogYm9vbGVhbiwgdWlkOiBudW1iZXIsIGdpZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX211LmlzTG9ja2VkKCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3luYyBjYWxsJyk7XG4gICAgcmV0dXJuIHRoaXMuX2ZzLmNob3duU3luYyhwLCBpc0xjaG93biwgdWlkLCBnaWQpO1xuICB9XG5cbiAgdXRpbWVzKHA6IHN0cmluZywgYXRpbWU6IERhdGUsIG10aW1lOiBEYXRlLCBjYjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLnV0aW1lcyhwLCBhdGltZSwgbXRpbWUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgdXRpbWVzU3luYyhwOiBzdHJpbmcsIGF0aW1lOiBEYXRlLCBtdGltZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy51dGltZXNTeW5jKHAsIGF0aW1lLCBtdGltZSk7XG4gIH1cblxuICBsaW5rKHNyY3BhdGg6IHN0cmluZywgZHN0cGF0aDogc3RyaW5nLCBjYjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9tdS5sb2NrKCgpID0+IHtcbiAgICAgIHRoaXMuX2ZzLmxpbmsoc3JjcGF0aCwgZHN0cGF0aCwgKGVycj86IEFwaUVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuX211LnVubG9jaygpO1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsaW5rU3luYyhzcmNwYXRoOiBzdHJpbmcsIGRzdHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoKTtcbiAgfVxuXG4gIHN5bWxpbmsoc3JjcGF0aDogc3RyaW5nLCBkc3RwYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgY2I6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy5zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIHR5cGUsIChlcnI/OiBBcGlFcnJvcikgPT4ge1xuICAgICAgICB0aGlzLl9tdS51bmxvY2soKTtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgc3ltbGlua1N5bmMoc3JjcGF0aDogc3RyaW5nLCBkc3RwYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5zeW1saW5rU3luYyhzcmNwYXRoLCBkc3RwYXRoLCB0eXBlKTtcbiAgfVxuXG4gIHJlYWRsaW5rKHA6IHN0cmluZywgY2I6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fbXUubG9jaygoKSA9PiB7XG4gICAgICB0aGlzLl9mcy5yZWFkbGluayhwLCAoZXJyPzogQXBpRXJyb3IsIGxpbmtTdHJpbmc/OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5fbXUudW5sb2NrKCk7XG4gICAgICAgIGNiKGVyciwgbGlua1N0cmluZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRsaW5rU3luYyhwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9tdS5pc0xvY2tlZCgpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN5bmMgY2FsbCcpO1xuICAgIHJldHVybiB0aGlzLl9mcy5yZWFkbGlua1N5bmMocCk7XG4gIH1cbn1cbiJdfQ==