memfs
Version:
In-memory file-system with Node's fs API.
72 lines • 2.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.File = void 0;
const constants_1 = require("../constants");
const { O_APPEND } = constants_1.constants;
/**
* Represents an open file (file descriptor) that points to a `Link` (Hard-link) and a `Node`.
*
* @todo Rename to `OpenFile`.
*/
class File {
/**
* Open a Link-Node pair. `node` is provided separately as that might be a different node
* rather the one `link` points to, because it might be a symlink.
* @param link
* @param node
* @param flags
* @param fd
*/
constructor(link, node, flags, fd) {
this.link = link;
this.node = node;
this.flags = flags;
this.fd = fd;
this.position = 0;
if (this.flags & O_APPEND)
this.position = this.getSize();
}
getString(encoding = 'utf8') {
return this.node.getString();
}
setString(str) {
this.node.setString(str);
}
getBuffer() {
return this.node.getBuffer();
}
setBuffer(buf) {
this.node.setBuffer(buf);
}
getSize() {
return this.node.getSize();
}
truncate(len) {
this.node.truncate(len);
}
seekTo(position) {
this.position = position;
}
write(buf, offset = 0, length = buf.length, position) {
if (typeof position !== 'number')
position = this.position;
const bytes = this.node.write(buf, offset, length, position);
this.position = position + bytes;
return bytes;
}
read(buf, offset = 0, length = buf.byteLength, position) {
if (typeof position !== 'number')
position = this.position;
const bytes = this.node.read(buf, offset, length, position);
this.position = position + bytes;
return bytes;
}
chmod(perm) {
this.node.chmod(perm);
}
chown(uid, gid) {
this.node.chown(uid, gid);
}
}
exports.File = File;
//# sourceMappingURL=File.js.map