mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.File = void 0;
|
|
const fs_node_utils_1 = require("@jsonjoy.com/fs-node-utils");
|
|
const { O_APPEND } = fs_node_utils_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
|