"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