browserfs
Version:
A filesystem in your browser!
851 lines • 137 kB
JavaScript
"use strict";
var api_error_1 = require('./api_error');
var file_flag_1 = require('./file_flag');
var path = require('path');
var node_fs_stats_1 = require('./node_fs_stats');
var global = require('./global');
function wrapCb(cb, numArgs) {
if (RELEASE) {
return cb;
}
else {
if (typeof cb !== 'function') {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Callback must be a function.');
}
if (typeof __numWaiting === 'undefined') {
global.__numWaiting = 0;
}
__numWaiting++;
switch (numArgs) {
case 1:
return function (arg1) {
setImmediate(function () {
__numWaiting--;
return cb(arg1);
});
};
case 2:
return function (arg1, arg2) {
setImmediate(function () {
__numWaiting--;
return cb(arg1, arg2);
});
};
case 3:
return function (arg1, arg2, arg3) {
setImmediate(function () {
__numWaiting--;
return cb(arg1, arg2, arg3);
});
};
default:
throw new Error('Invalid invocation of wrapCb.');
}
}
}
function normalizeMode(mode, def) {
switch (typeof mode) {
case 'number':
return mode;
case 'string':
var trueMode = parseInt(mode, 8);
if (trueMode !== NaN) {
return trueMode;
}
default:
return def;
}
}
function normalizeTime(time) {
if (time instanceof Date) {
return time;
}
else if (typeof time === 'number') {
return new Date(time * 1000);
}
else {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid time.");
}
}
function normalizePath(p) {
if (p.indexOf('\u0000') >= 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Path must be a string without null bytes.');
}
else if (p === '') {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Path must not be empty.');
}
return path.resolve(p);
}
function normalizeOptions(options, defEnc, defFlag, defMode) {
switch (typeof options) {
case 'object':
return {
encoding: typeof options['encoding'] !== 'undefined' ? options['encoding'] : defEnc,
flag: typeof options['flag'] !== 'undefined' ? options['flag'] : defFlag,
mode: normalizeMode(options['mode'], defMode)
};
case 'string':
return {
encoding: options,
flag: defFlag,
mode: defMode
};
default:
return {
encoding: defEnc,
flag: defFlag,
mode: defMode
};
}
}
function nopCb() { }
;
var FS = (function () {
function FS() {
this.root = null;
this.fdMap = {};
this.nextFd = 100;
this.F_OK = 0;
this.R_OK = 4;
this.W_OK = 2;
this.X_OK = 1;
this._wrapCb = wrapCb;
}
FS.prototype.getFdForFile = function (file) {
var fd = this.nextFd++;
this.fdMap[fd] = file;
return fd;
};
FS.prototype.fd2file = function (fd) {
var rv = this.fdMap[fd];
if (rv) {
return rv;
}
else {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EBADF, 'Invalid file descriptor.');
}
};
FS.prototype.closeFd = function (fd) {
delete this.fdMap[fd];
};
FS.prototype.initialize = function (rootFS) {
if (!rootFS.constructor.isAvailable()) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Tried to instantiate BrowserFS with an unavailable file system.');
}
return this.root = rootFS;
};
FS.prototype._toUnixTimestamp = function (time) {
if (typeof time === 'number') {
return time;
}
else if (time instanceof Date) {
return time.getTime() / 1000;
}
throw new Error("Cannot parse time: " + time);
};
FS.prototype.getRootFS = function () {
if (this.root) {
return this.root;
}
else {
return null;
}
};
FS.prototype.rename = function (oldPath, newPath, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
this.root.rename(normalizePath(oldPath), normalizePath(newPath), newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.renameSync = function (oldPath, newPath) {
this.root.renameSync(normalizePath(oldPath), normalizePath(newPath));
};
FS.prototype.exists = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
return this.root.exists(normalizePath(path), newCb);
}
catch (e) {
return newCb(false);
}
};
FS.prototype.existsSync = function (path) {
try {
return this.root.existsSync(normalizePath(path));
}
catch (e) {
return false;
}
};
FS.prototype.stat = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 2);
try {
return this.root.stat(normalizePath(path), false, newCb);
}
catch (e) {
return newCb(e, null);
}
};
FS.prototype.statSync = function (path) {
return this.root.statSync(normalizePath(path), false);
};
FS.prototype.lstat = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 2);
try {
return this.root.stat(normalizePath(path), true, newCb);
}
catch (e) {
return newCb(e, null);
}
};
FS.prototype.lstatSync = function (path) {
return this.root.statSync(normalizePath(path), true);
};
FS.prototype.truncate = function (path, arg2, cb) {
if (arg2 === void 0) { arg2 = 0; }
if (cb === void 0) { cb = nopCb; }
var len = 0;
if (typeof arg2 === 'function') {
cb = arg2;
}
else if (typeof arg2 === 'number') {
len = arg2;
}
var newCb = wrapCb(cb, 1);
try {
if (len < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL);
}
return this.root.truncate(normalizePath(path), len, newCb);
}
catch (e) {
return newCb(e);
}
};
FS.prototype.truncateSync = function (path, len) {
if (len === void 0) { len = 0; }
if (len < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL);
}
return this.root.truncateSync(normalizePath(path), len);
};
FS.prototype.unlink = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
return this.root.unlink(normalizePath(path), newCb);
}
catch (e) {
return newCb(e);
}
};
FS.prototype.unlinkSync = function (path) {
return this.root.unlinkSync(normalizePath(path));
};
FS.prototype.open = function (path, flag, arg2, cb) {
var _this = this;
if (cb === void 0) { cb = nopCb; }
var mode = normalizeMode(arg2, 0x1a4);
cb = typeof arg2 === 'function' ? arg2 : cb;
var newCb = wrapCb(cb, 2);
try {
this.root.open(normalizePath(path), file_flag_1.FileFlag.getFileFlag(flag), mode, function (e, file) {
if (file) {
newCb(e, _this.getFdForFile(file));
}
else {
newCb(e);
}
});
}
catch (e) {
newCb(e, null);
}
};
FS.prototype.openSync = function (path, flag, mode) {
if (mode === void 0) { mode = 0x1a4; }
return this.getFdForFile(this.root.openSync(normalizePath(path), file_flag_1.FileFlag.getFileFlag(flag), normalizeMode(mode, 0x1a4)));
};
FS.prototype.readFile = function (filename, arg2, cb) {
if (arg2 === void 0) { arg2 = {}; }
if (cb === void 0) { cb = nopCb; }
var options = normalizeOptions(arg2, null, 'r', null);
cb = typeof arg2 === 'function' ? arg2 : cb;
var newCb = wrapCb(cb, 2);
try {
var flag = file_flag_1.FileFlag.getFileFlag(options['flag']);
if (!flag.isReadable()) {
return newCb(new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to readFile must allow for reading.'));
}
return this.root.readFile(normalizePath(filename), options.encoding, flag, newCb);
}
catch (e) {
return newCb(e, null);
}
};
FS.prototype.readFileSync = function (filename, arg2) {
if (arg2 === void 0) { arg2 = {}; }
var options = normalizeOptions(arg2, null, 'r', null);
var flag = file_flag_1.FileFlag.getFileFlag(options.flag);
if (!flag.isReadable()) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to readFile must allow for reading.');
}
return this.root.readFileSync(normalizePath(filename), options.encoding, flag);
};
FS.prototype.writeFile = function (filename, data, arg3, cb) {
if (arg3 === void 0) { arg3 = {}; }
if (cb === void 0) { cb = nopCb; }
var options = normalizeOptions(arg3, 'utf8', 'w', 0x1a4);
cb = typeof arg3 === 'function' ? arg3 : cb;
var newCb = wrapCb(cb, 1);
try {
var flag = file_flag_1.FileFlag.getFileFlag(options.flag);
if (!flag.isWriteable()) {
return newCb(new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to writeFile must allow for writing.'));
}
return this.root.writeFile(normalizePath(filename), data, options.encoding, flag, options.mode, newCb);
}
catch (e) {
return newCb(e);
}
};
FS.prototype.writeFileSync = function (filename, data, arg3) {
var options = normalizeOptions(arg3, 'utf8', 'w', 0x1a4);
var flag = file_flag_1.FileFlag.getFileFlag(options.flag);
if (!flag.isWriteable()) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to writeFile must allow for writing.');
}
return this.root.writeFileSync(normalizePath(filename), data, options.encoding, flag, options.mode);
};
FS.prototype.appendFile = function (filename, data, arg3, cb) {
if (cb === void 0) { cb = nopCb; }
var options = normalizeOptions(arg3, 'utf8', 'a', 0x1a4);
cb = typeof arg3 === 'function' ? arg3 : cb;
var newCb = wrapCb(cb, 1);
try {
var flag = file_flag_1.FileFlag.getFileFlag(options.flag);
if (!flag.isAppendable()) {
return newCb(new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to appendFile must allow for appending.'));
}
this.root.appendFile(normalizePath(filename), data, options.encoding, flag, options.mode, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.appendFileSync = function (filename, data, arg3) {
var options = normalizeOptions(arg3, 'utf8', 'a', 0x1a4);
var flag = file_flag_1.FileFlag.getFileFlag(options.flag);
if (!flag.isAppendable()) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Flag passed to appendFile must allow for appending.');
}
return this.root.appendFileSync(normalizePath(filename), data, options.encoding, flag, options.mode);
};
FS.prototype.fstat = function (fd, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 2);
try {
var file = this.fd2file(fd);
file.stat(newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.fstatSync = function (fd) {
return this.fd2file(fd).statSync();
};
FS.prototype.close = function (fd, cb) {
var _this = this;
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
this.fd2file(fd).close(function (e) {
if (!e) {
_this.closeFd(fd);
}
newCb(e);
});
}
catch (e) {
newCb(e);
}
};
FS.prototype.closeSync = function (fd) {
this.fd2file(fd).closeSync();
this.closeFd(fd);
};
FS.prototype.ftruncate = function (fd, arg2, cb) {
if (cb === void 0) { cb = nopCb; }
var length = typeof arg2 === 'number' ? arg2 : 0;
cb = typeof arg2 === 'function' ? arg2 : cb;
var newCb = wrapCb(cb, 1);
try {
var file = this.fd2file(fd);
if (length < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL);
}
file.truncate(length, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.ftruncateSync = function (fd, len) {
if (len === void 0) { len = 0; }
var file = this.fd2file(fd);
if (len < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL);
}
file.truncateSync(len);
};
FS.prototype.fsync = function (fd, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
this.fd2file(fd).sync(newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.fsyncSync = function (fd) {
this.fd2file(fd).syncSync();
};
FS.prototype.fdatasync = function (fd, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
this.fd2file(fd).datasync(newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.fdatasyncSync = function (fd) {
this.fd2file(fd).datasyncSync();
};
FS.prototype.write = function (fd, arg2, arg3, arg4, arg5, cb) {
if (cb === void 0) { cb = nopCb; }
var buffer, offset, length, position = null;
if (typeof arg2 === 'string') {
var encoding = 'utf8';
switch (typeof arg3) {
case 'function':
cb = arg3;
break;
case 'number':
position = arg3;
encoding = typeof arg4 === 'string' ? arg4 : 'utf8';
cb = typeof arg5 === 'function' ? arg5 : cb;
break;
default:
cb = typeof arg4 === 'function' ? arg4 : typeof arg5 === 'function' ? arg5 : cb;
return cb(new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, 'Invalid arguments.'));
}
buffer = new Buffer(arg2, encoding);
offset = 0;
length = buffer.length;
}
else {
buffer = arg2;
offset = arg3;
length = arg4;
position = typeof arg5 === 'number' ? arg5 : null;
cb = typeof arg5 === 'function' ? arg5 : cb;
}
var newCb = wrapCb(cb, 3);
try {
var file = this.fd2file(fd);
if (position == null) {
position = file.getPos();
}
file.write(buffer, offset, length, position, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.writeSync = function (fd, arg2, arg3, arg4, arg5) {
var buffer, offset = 0, length, position;
if (typeof arg2 === 'string') {
position = typeof arg3 === 'number' ? arg3 : null;
var encoding = typeof arg4 === 'string' ? arg4 : 'utf8';
offset = 0;
buffer = new Buffer(arg2, encoding);
length = buffer.length;
}
else {
buffer = arg2;
offset = arg3;
length = arg4;
position = typeof arg5 === 'number' ? arg5 : null;
}
var file = this.fd2file(fd);
if (position == null) {
position = file.getPos();
}
return file.writeSync(buffer, offset, length, position);
};
FS.prototype.read = function (fd, arg2, arg3, arg4, arg5, cb) {
if (cb === void 0) { cb = nopCb; }
var position, offset, length, buffer, newCb;
if (typeof arg2 === 'number') {
length = arg2;
position = arg3;
var encoding = arg4;
cb = typeof arg5 === 'function' ? arg5 : cb;
offset = 0;
buffer = new Buffer(length);
newCb = wrapCb((function (err, bytesRead, buf) {
if (err) {
return cb(err);
}
cb(err, buf.toString(encoding), bytesRead);
}), 3);
}
else {
buffer = arg2;
offset = arg3;
length = arg4;
position = arg5;
newCb = wrapCb(cb, 3);
}
try {
var file = this.fd2file(fd);
if (position == null) {
position = file.getPos();
}
file.read(buffer, offset, length, position, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.readSync = function (fd, arg2, arg3, arg4, arg5) {
var shenanigans = false;
var buffer, offset, length, position;
if (typeof arg2 === 'number') {
length = arg2;
position = arg3;
var encoding = arg4;
offset = 0;
buffer = new Buffer(length);
shenanigans = true;
}
else {
buffer = arg2;
offset = arg3;
length = arg4;
position = arg5;
}
var file = this.fd2file(fd);
if (position == null) {
position = file.getPos();
}
var rv = file.readSync(buffer, offset, length, position);
if (!shenanigans) {
return rv;
}
else {
return [buffer.toString(encoding), rv];
}
};
FS.prototype.fchown = function (fd, uid, gid, callback) {
if (callback === void 0) { callback = nopCb; }
var newCb = wrapCb(callback, 1);
try {
this.fd2file(fd).chown(uid, gid, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.fchownSync = function (fd, uid, gid) {
this.fd2file(fd).chownSync(uid, gid);
};
FS.prototype.fchmod = function (fd, mode, cb) {
var newCb = wrapCb(cb, 1);
try {
var numMode = typeof mode === 'string' ? parseInt(mode, 8) : mode;
this.fd2file(fd).chmod(numMode, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.fchmodSync = function (fd, mode) {
var numMode = typeof mode === 'string' ? parseInt(mode, 8) : mode;
this.fd2file(fd).chmodSync(numMode);
};
FS.prototype.futimes = function (fd, atime, mtime, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
var file = this.fd2file(fd);
if (typeof atime === 'number') {
atime = new Date(atime * 1000);
}
if (typeof mtime === 'number') {
mtime = new Date(mtime * 1000);
}
file.utimes(atime, mtime, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.futimesSync = function (fd, atime, mtime) {
this.fd2file(fd).utimesSync(normalizeTime(atime), normalizeTime(mtime));
};
FS.prototype.rmdir = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
path = normalizePath(path);
this.root.rmdir(path, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.rmdirSync = function (path) {
path = normalizePath(path);
return this.root.rmdirSync(path);
};
FS.prototype.mkdir = function (path, mode, cb) {
if (cb === void 0) { cb = nopCb; }
if (typeof mode === 'function') {
cb = mode;
mode = 0x1ff;
}
var newCb = wrapCb(cb, 1);
try {
path = normalizePath(path);
this.root.mkdir(path, mode, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.mkdirSync = function (path, mode) {
this.root.mkdirSync(normalizePath(path), normalizeMode(mode, 0x1ff));
};
FS.prototype.readdir = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 2);
try {
path = normalizePath(path);
this.root.readdir(path, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.readdirSync = function (path) {
path = normalizePath(path);
return this.root.readdirSync(path);
};
FS.prototype.link = function (srcpath, dstpath, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
srcpath = normalizePath(srcpath);
dstpath = normalizePath(dstpath);
this.root.link(srcpath, dstpath, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.linkSync = function (srcpath, dstpath) {
srcpath = normalizePath(srcpath);
dstpath = normalizePath(dstpath);
return this.root.linkSync(srcpath, dstpath);
};
FS.prototype.symlink = function (srcpath, dstpath, arg3, cb) {
if (cb === void 0) { cb = nopCb; }
var type = typeof arg3 === 'string' ? arg3 : 'file';
cb = typeof arg3 === 'function' ? arg3 : cb;
var newCb = wrapCb(cb, 1);
try {
if (type !== 'file' && type !== 'dir') {
return newCb(new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid type: " + type));
}
srcpath = normalizePath(srcpath);
dstpath = normalizePath(dstpath);
this.root.symlink(srcpath, dstpath, type, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.symlinkSync = function (srcpath, dstpath, type) {
if (type == null) {
type = 'file';
}
else if (type !== 'file' && type !== 'dir') {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid type: " + type);
}
srcpath = normalizePath(srcpath);
dstpath = normalizePath(dstpath);
return this.root.symlinkSync(srcpath, dstpath, type);
};
FS.prototype.readlink = function (path, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 2);
try {
path = normalizePath(path);
this.root.readlink(path, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.readlinkSync = function (path) {
path = normalizePath(path);
return this.root.readlinkSync(path);
};
FS.prototype.chown = function (path, uid, gid, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
path = normalizePath(path);
this.root.chown(path, false, uid, gid, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.chownSync = function (path, uid, gid) {
path = normalizePath(path);
this.root.chownSync(path, false, uid, gid);
};
FS.prototype.lchown = function (path, uid, gid, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
path = normalizePath(path);
this.root.chown(path, true, uid, gid, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.lchownSync = function (path, uid, gid) {
path = normalizePath(path);
this.root.chownSync(path, true, uid, gid);
};
FS.prototype.chmod = function (path, mode, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
var numMode = normalizeMode(mode, -1);
if (numMode < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid mode.");
}
this.root.chmod(normalizePath(path), false, numMode, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.chmodSync = function (path, mode) {
var numMode = normalizeMode(mode, -1);
if (numMode < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid mode.");
}
path = normalizePath(path);
this.root.chmodSync(path, false, numMode);
};
FS.prototype.lchmod = function (path, mode, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
var numMode = normalizeMode(mode, -1);
if (numMode < 0) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid mode.");
}
this.root.chmod(normalizePath(path), true, numMode, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.lchmodSync = function (path, mode) {
var numMode = normalizeMode(mode, -1);
if (numMode < 1) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.EINVAL, "Invalid mode.");
}
this.root.chmodSync(normalizePath(path), true, numMode);
};
FS.prototype.utimes = function (path, atime, mtime, cb) {
if (cb === void 0) { cb = nopCb; }
var newCb = wrapCb(cb, 1);
try {
this.root.utimes(normalizePath(path), normalizeTime(atime), normalizeTime(mtime), newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.utimesSync = function (path, atime, mtime) {
this.root.utimesSync(normalizePath(path), normalizeTime(atime), normalizeTime(mtime));
};
FS.prototype.realpath = function (path, arg2, cb) {
if (cb === void 0) { cb = nopCb; }
var cache = typeof arg2 === 'object' ? arg2 : {};
cb = typeof arg2 === 'function' ? arg2 : nopCb;
var newCb = wrapCb(cb, 2);
try {
path = normalizePath(path);
this.root.realpath(path, cache, newCb);
}
catch (e) {
newCb(e);
}
};
FS.prototype.realpathSync = function (path, cache) {
if (cache === void 0) { cache = {}; }
path = normalizePath(path);
return this.root.realpathSync(path, cache);
};
FS.prototype.watchFile = function (filename, arg2, listener) {
if (listener === void 0) { listener = nopCb; }
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.unwatchFile = function (filename, listener) {
if (listener === void 0) { listener = nopCb; }
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.watch = function (filename, arg2, listener) {
if (listener === void 0) { listener = nopCb; }
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.access = function (path, arg2, cb) {
if (cb === void 0) { cb = nopCb; }
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.accessSync = function (path, mode) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.createReadStream = function (path, options) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.prototype.createWriteStream = function (path, options) {
throw new api_error_1.ApiError(api_error_1.ErrorCode.ENOTSUP);
};
FS.Stats = node_fs_stats_1["default"];
return FS;
}());
exports.__esModule = true;
exports["default"] = FS;
var _ = new FS();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRlMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9GUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsMEJBQWtDLGFBQWEsQ0FBQyxDQUFBO0FBRWhELDBCQUF1QixhQUFhLENBQUMsQ0FBQTtBQUNyQyxJQUFPLElBQUksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUM5Qiw4QkFBa0IsaUJBQWlCLENBQUMsQ0FBQTtBQUdwQyxJQUFPLE1BQU0sV0FBVyxVQUFVLENBQUMsQ0FBQztBQWNwQyxnQkFBb0MsRUFBSyxFQUFFLE9BQWU7SUFDeEQsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sSUFBSSxvQkFBUSxDQUFDLHFCQUFTLENBQUMsTUFBTSxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUlELEVBQUUsQ0FBQyxDQUFDLE9BQU8sWUFBWSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELFlBQVksRUFBRSxDQUFDO1FBRWYsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNoQixLQUFLLENBQUM7Z0JBQ0osTUFBTSxDQUFPLFVBQVMsSUFBUztvQkFDN0IsWUFBWSxDQUFDO3dCQUNYLFlBQVksRUFBRSxDQUFDO3dCQUNmLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQztZQUNKLEtBQUssQ0FBQztnQkFDSixNQUFNLENBQU8sVUFBUyxJQUFTLEVBQUUsSUFBUztvQkFDeEMsWUFB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