| | |
| | | LENGTH: 'length must be an integer', |
| | | POSITION: 'position must be an integer', |
| | | }; |
| | | var ERRSTR_OPTS = function (tipeof) { return "Expected options to be either an object or a string, but got " + tipeof + " instead"; }; |
| | | var ERRSTR_OPTS = function (tipeof) { return "Expected options to be either an object or a string, but got ".concat(tipeof, " instead"); }; |
| | | // const ERRSTR_FLAG = flag => `Unknown file open flag: ${flag}`; |
| | | var ENOENT = 'ENOENT'; |
| | | var EBADF = 'EBADF'; |
| | |
| | | if (path2 === void 0) { path2 = ''; } |
| | | var pathFormatted = ''; |
| | | if (path) |
| | | pathFormatted = " '" + path + "'"; |
| | | pathFormatted = " '".concat(path, "'"); |
| | | if (path2) |
| | | pathFormatted += " -> '" + path2 + "'"; |
| | | pathFormatted += " -> '".concat(path2, "'"); |
| | | switch (errorCode) { |
| | | case ENOENT: |
| | | return "ENOENT: no such file or directory, " + func + pathFormatted; |
| | | return "ENOENT: no such file or directory, ".concat(func).concat(pathFormatted); |
| | | case EBADF: |
| | | return "EBADF: bad file descriptor, " + func + pathFormatted; |
| | | return "EBADF: bad file descriptor, ".concat(func).concat(pathFormatted); |
| | | case EINVAL: |
| | | return "EINVAL: invalid argument, " + func + pathFormatted; |
| | | return "EINVAL: invalid argument, ".concat(func).concat(pathFormatted); |
| | | case EPERM: |
| | | return "EPERM: operation not permitted, " + func + pathFormatted; |
| | | return "EPERM: operation not permitted, ".concat(func).concat(pathFormatted); |
| | | case EPROTO: |
| | | return "EPROTO: protocol error, " + func + pathFormatted; |
| | | return "EPROTO: protocol error, ".concat(func).concat(pathFormatted); |
| | | case EEXIST: |
| | | return "EEXIST: file already exists, " + func + pathFormatted; |
| | | return "EEXIST: file already exists, ".concat(func).concat(pathFormatted); |
| | | case ENOTDIR: |
| | | return "ENOTDIR: not a directory, " + func + pathFormatted; |
| | | return "ENOTDIR: not a directory, ".concat(func).concat(pathFormatted); |
| | | case EISDIR: |
| | | return "EISDIR: illegal operation on a directory, " + func + pathFormatted; |
| | | return "EISDIR: illegal operation on a directory, ".concat(func).concat(pathFormatted); |
| | | case EACCES: |
| | | return "EACCES: permission denied, " + func + pathFormatted; |
| | | return "EACCES: permission denied, ".concat(func).concat(pathFormatted); |
| | | case ENOTEMPTY: |
| | | return "ENOTEMPTY: directory not empty, " + func + pathFormatted; |
| | | return "ENOTEMPTY: directory not empty, ".concat(func).concat(pathFormatted); |
| | | case EMFILE: |
| | | return "EMFILE: too many open files, " + func + pathFormatted; |
| | | return "EMFILE: too many open files, ".concat(func).concat(pathFormatted); |
| | | case ENOSYS: |
| | | return "ENOSYS: function not implemented, " + func + pathFormatted; |
| | | return "ENOSYS: function not implemented, ".concat(func).concat(pathFormatted); |
| | | case ERR_FS_EISDIR: |
| | | return "[ERR_FS_EISDIR]: Path is a directory: " + func + " returned EISDIR (is a directory) " + path; |
| | | return "[ERR_FS_EISDIR]: Path is a directory: ".concat(func, " returned EISDIR (is a directory) ").concat(path); |
| | | default: |
| | | return errorCode + ": error occurred, " + func + pathFormatted; |
| | | return "".concat(errorCode, ": error occurred, ").concat(func).concat(pathFormatted); |
| | | } |
| | | } |
| | | function createError(errorCode, func, path, path2, Constructor) { |
| | |
| | | var pathFilename = pathToFilename(path); |
| | | this.wrapAsync(this.realpathBase, [pathFilename, opts.encoding], callback); |
| | | }; |
| | | Volume.prototype.lstatBase = function (filename, bigint) { |
| | | Volume.prototype.lstatBase = function (filename, bigint, throwIfNoEntry) { |
| | | if (bigint === void 0) { bigint = false; } |
| | | if (throwIfNoEntry === void 0) { throwIfNoEntry = false; } |
| | | var link = this.getLink(filenameToSteps(filename)); |
| | | if (!link) |
| | | if (link) { |
| | | return Stats_1.default.build(link.getNode(), bigint); |
| | | } |
| | | else if (!throwIfNoEntry) { |
| | | return undefined; |
| | | } |
| | | else { |
| | | throw createError(ENOENT, 'lstat', filename); |
| | | return Stats_1.default.build(link.getNode(), bigint); |
| | | } |
| | | }; |
| | | Volume.prototype.lstatSync = function (path, options) { |
| | | return this.lstatBase(pathToFilename(path), getStatOptions(options).bigint); |
| | | var _a = getStatOptions(options), _b = _a.throwIfNoEntry, throwIfNoEntry = _b === void 0 ? true : _b, _c = _a.bigint, bigint = _c === void 0 ? false : _c; |
| | | return this.lstatBase(pathToFilename(path), bigint, throwIfNoEntry); |
| | | }; |
| | | Volume.prototype.lstat = function (path, a, b) { |
| | | var _a = getStatOptsAndCb(a, b), opts = _a[0], callback = _a[1]; |
| | | this.wrapAsync(this.lstatBase, [pathToFilename(path), opts.bigint], callback); |
| | | var _a = getStatOptsAndCb(a, b), _b = _a[0], _c = _b.throwIfNoEntry, throwIfNoEntry = _c === void 0 ? true : _c, _d = _b.bigint, bigint = _d === void 0 ? false : _d, callback = _a[1]; |
| | | this.wrapAsync(this.lstatBase, [pathToFilename(path), bigint, throwIfNoEntry], callback); |
| | | }; |
| | | Volume.prototype.statBase = function (filename, bigint) { |
| | | Volume.prototype.statBase = function (filename, bigint, throwIfNoEntry) { |
| | | if (bigint === void 0) { bigint = false; } |
| | | if (throwIfNoEntry === void 0) { throwIfNoEntry = true; } |
| | | var link = this.getResolvedLink(filenameToSteps(filename)); |
| | | if (!link) |
| | | if (link) { |
| | | return Stats_1.default.build(link.getNode(), bigint); |
| | | } |
| | | else if (!throwIfNoEntry) { |
| | | return undefined; |
| | | } |
| | | else { |
| | | throw createError(ENOENT, 'stat', filename); |
| | | return Stats_1.default.build(link.getNode(), bigint); |
| | | } |
| | | }; |
| | | Volume.prototype.statSync = function (path, options) { |
| | | return this.statBase(pathToFilename(path), getStatOptions(options).bigint); |
| | | var _a = getStatOptions(options), _b = _a.bigint, bigint = _b === void 0 ? true : _b, _c = _a.throwIfNoEntry, throwIfNoEntry = _c === void 0 ? true : _c; |
| | | return this.statBase(pathToFilename(path), bigint, throwIfNoEntry); |
| | | }; |
| | | Volume.prototype.stat = function (path, a, b) { |
| | | var _a = getStatOptsAndCb(a, b), opts = _a[0], callback = _a[1]; |
| | | this.wrapAsync(this.statBase, [pathToFilename(path), opts.bigint], callback); |
| | | var _a = getStatOptsAndCb(a, b), _b = _a[0], _c = _b.bigint, bigint = _c === void 0 ? false : _c, _d = _b.throwIfNoEntry, throwIfNoEntry = _d === void 0 ? true : _d, callback = _a[1]; |
| | | this.wrapAsync(this.statBase, [pathToFilename(path), bigint, throwIfNoEntry], callback); |
| | | }; |
| | | Volume.prototype.fstatBase = function (fd, bigint) { |
| | | if (bigint === void 0) { bigint = false; } |
| | |
| | | } |
| | | // Rename should overwrite the new path, if that exists. |
| | | var name = newPathSteps[newPathSteps.length - 1]; |
| | | link.name = name; |
| | | link.steps = __spreadArray(__spreadArray([], newPathDirLink.steps, true), [name], false); |
| | | newPathDirLink.setChild(link.getName(), link); |
| | | }; |
| | |
| | | }; |
| | | FsReadStream.prototype.close = function (cb) { |
| | | var _this = this; |
| | | var _a; |
| | | if (cb) |
| | | this.once('close', cb); |
| | | if (this.closed || typeof this.fd !== 'number') { |
| | |
| | | } |
| | | return process_1.default.nextTick(function () { return _this.emit('close'); }); |
| | | } |
| | | this.closed = true; |
| | | // Since Node 18, there is only a getter for '.closed'. |
| | | // The first branch mimics other setters from Readable. |
| | | // See https://github.com/nodejs/node/blob/v18.0.0/lib/internal/streams/readable.js#L1243 |
| | | if (typeof ((_a = this._readableState) === null || _a === void 0 ? void 0 : _a.closed) === 'boolean') { |
| | | this._readableState.closed = true; |
| | | } |
| | | else { |
| | | this.closed = true; |
| | | } |
| | | this._vol.close(this.fd, function (er) { |
| | | if (er) |
| | | _this.emit('error', er); |
| | |
| | | if (this.pos !== undefined) |
| | | this.pos += size; |
| | | }; |
| | | FsWriteStream.prototype.close = function (cb) { |
| | | var _this = this; |
| | | var _a; |
| | | if (cb) |
| | | this.once('close', cb); |
| | | if (this.closed || typeof this.fd !== 'number') { |
| | | if (typeof this.fd !== 'number') { |
| | | this.once('open', closeOnOpen); |
| | | return; |
| | | } |
| | | return process_1.default.nextTick(function () { return _this.emit('close'); }); |
| | | } |
| | | // Since Node 18, there is only a getter for '.closed'. |
| | | // The first branch mimics other setters from Writable. |
| | | // See https://github.com/nodejs/node/blob/v18.0.0/lib/internal/streams/writable.js#L766 |
| | | if (typeof ((_a = this._writableState) === null || _a === void 0 ? void 0 : _a.closed) === 'boolean') { |
| | | this._writableState.closed = true; |
| | | } |
| | | else { |
| | | this.closed = true; |
| | | } |
| | | this._vol.close(this.fd, function (er) { |
| | | if (er) |
| | | _this.emit('error', er); |
| | | else |
| | | _this.emit('close'); |
| | | }); |
| | | this.fd = null; |
| | | }; |
| | | FsWriteStream.prototype._destroy = FsReadStream.prototype._destroy; |
| | | FsWriteStream.prototype.close = FsReadStream.prototype.close; |
| | | // There is no shutdown() for files. |
| | | FsWriteStream.prototype.destroySoon = FsWriteStream.prototype.end; |
| | | // ---------------------------------------- FSWatcher |
| | |
| | | this._link = this._vol.getLinkOrThrow(this._filename, 'FSWatcher'); |
| | | } |
| | | catch (err) { |
| | | var error = new Error("watch " + this._filename + " " + err.code); |
| | | var error = new Error("watch ".concat(this._filename, " ").concat(err.code)); |
| | | error.code = err.code; |
| | | error.errno = err.code; |
| | | throw error; |