🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@jsonjoy.com/fs-core

Package Overview
Dependencies
Maintainers
2
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@jsonjoy.com/fs-core - npm Package Compare versions

Comparing version
4.67.0
to
4.68.0
+9
-0
lib/Node.d.ts

@@ -21,2 +21,3 @@ import { FanOut } from 'thingies/lib/fanout';

private _ctime;
private _btime;
buf: Buffer;

@@ -34,2 +35,9 @@ /** Total allocated memory capacity for this node. */

get ctime(): Date;
/**
* Birth (creation) time of this node. Unlike `ctime`, it is set once when the
* node is created and is never advanced by writes or metadata changes. The
* setter exists only for restore paths, like snapshot deserialization.
*/
set btime(btime: Date);
get btime(): Date;
set uid(uid: number);

@@ -85,2 +93,3 @@ get uid(): number;

ctime: number;
btime: number;
perm: number;

@@ -87,0 +96,0 @@ mode: number;

@@ -28,2 +28,3 @@ "use strict";

this._ctime = new Date();
this._btime = new Date();
this.buf = EMPTY_BUFFER;

@@ -48,2 +49,13 @@ /** Total allocated memory capacity for this node. */

}
/**
* Birth (creation) time of this node. Unlike `ctime`, it is set once when the
* node is created and is never advanced by writes or metadata changes. The
* setter exists only for restore paths, like snapshot deserialization.
*/
set btime(btime) {
this._btime = btime;
}
get btime() {
return this._btime;
}
set uid(uid) {

@@ -291,2 +303,3 @@ this._uid = uid;

ctime: this.ctime.getTime(),
btime: this.btime.getTime(),
perm: this.perm,

@@ -293,0 +306,0 @@ mode: this.mode,

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"Node.js","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":"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","sourcesContent":["import { FanOut } from 'thingies/lib/fanout';\nimport process from './process';\nimport { Buffer, bufferAllocUnsafe, bufferFrom } from '@jsonjoy.com/fs-node-builtins/lib/internal/buffer';\nimport { constants, S } from '@jsonjoy.com/fs-node-utils';\n\nexport type NodeEventModify = [type: 'modify'];\n\nexport type NodeEventDelete = [type: 'delete'];\n\nexport type NodeEvent = NodeEventModify | NodeEventDelete;\n\nconst { S_IFMT, S_IFDIR, S_IFREG, S_IFLNK, S_IFCHR } = constants;\nconst getuid = (): number => process.getuid?.() ?? 0;\nconst getgid = (): number => process.getgid?.() ?? 0;\nconst EMPTY_BUFFER = bufferAllocUnsafe(0);\n\n/**\n * Node in a file system (like i-node, v-node).\n */\nexport class Node {\n /**\n * @deprecated Subscribe to the volume-level `Superblock.changes` bus or use\n * `CoreWatcher` instead.\n */\n public readonly changes = new FanOut<NodeEvent>();\n\n // i-node number.\n ino: number;\n\n // User ID and group ID.\n private _uid: number = getuid();\n private _gid: number = getgid();\n\n private _atime = new Date();\n private _mtime = new Date();\n private _ctime = new Date();\n\n buf: Buffer = EMPTY_BUFFER;\n\n /** Total allocated memory capacity for this node. */\n private capacity: number = 0;\n\n /** Actually used bytes to store content. */\n private size: number = 0;\n\n rdev: number = 0;\n\n mode: number; // S_IFDIR, S_IFREG, etc..\n\n // Number of hard links pointing at this Node.\n private _nlink = 1;\n\n // Path to another node, if this is a symlink.\n symlink: string;\n\n constructor(ino: number, mode: number = 0o666, uid: number = getuid(), gid: number = getgid()) {\n this.mode = mode;\n this.ino = ino;\n this._uid = uid;\n this._gid = gid;\n }\n\n public set ctime(ctime: Date) {\n this._ctime = ctime;\n }\n\n public get ctime(): Date {\n return this._ctime;\n }\n\n public set uid(uid: number) {\n this._uid = uid;\n this.ctime = new Date();\n }\n\n public get uid(): number {\n return this._uid;\n }\n\n public set gid(gid: number) {\n this._gid = gid;\n this.ctime = new Date();\n }\n\n public get gid(): number {\n return this._gid;\n }\n\n public set atime(atime: Date) {\n this._atime = atime;\n }\n\n public get atime(): Date {\n return this._atime;\n }\n\n public set mtime(mtime: Date) {\n this._mtime = mtime;\n this.ctime = new Date();\n }\n\n public get mtime(): Date {\n return this._mtime;\n }\n\n public get perm(): number {\n return this.mode & ~S_IFMT;\n }\n\n public set perm(perm: number) {\n this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);\n this.ctime = new Date();\n }\n\n public set nlink(nlink: number) {\n this._nlink = nlink;\n this.ctime = new Date();\n }\n\n public get nlink(): number {\n return this._nlink;\n }\n\n getString(encoding: BufferEncoding = 'utf8'): string {\n this.atime = new Date();\n return this.getBuffer().toString(encoding);\n }\n\n setString(str: string) {\n this._setBuf(bufferFrom(str, 'utf8'));\n }\n\n getBuffer(): Buffer {\n this.atime = new Date();\n if (!this.buf) this.buf = bufferAllocUnsafe(0);\n return bufferFrom(this.buf.subarray(0, this.size)); // Return a copy of used portion.\n }\n\n setBuffer(buf: Buffer) {\n const copy = bufferFrom(buf); // Creates a copy of data.\n this._setBuf(copy);\n }\n\n private _setBuf(buf: Buffer): void {\n const size = buf.length;\n this.buf = buf;\n this.capacity = size;\n this.size = size;\n this.touch();\n }\n\n getSize(): number {\n return this.size;\n }\n\n setModeProperty(property: number) {\n this.mode = property;\n }\n\n isFile() {\n return (this.mode & S_IFMT) === S_IFREG;\n }\n\n isDirectory() {\n return (this.mode & S_IFMT) === S_IFDIR;\n }\n\n isSymlink() {\n // return !!this.symlink;\n return (this.mode & S_IFMT) === S_IFLNK;\n }\n\n isCharacterDevice() {\n return (this.mode & S_IFMT) === S_IFCHR;\n }\n\n makeSymlink(symlink: string) {\n this.mode = S_IFLNK | 0o666;\n this.symlink = symlink;\n }\n\n write(buf: Buffer, off: number = 0, len: number = buf.length, pos: number = 0): number {\n const bufLength = buf.length;\n if (off + len > bufLength) len = bufLength - off;\n if (len <= 0) return 0;\n const requiredSize = pos + len;\n if (requiredSize > this.capacity) {\n let newCapacity = Math.max(this.capacity * 2, 64);\n while (newCapacity < requiredSize) newCapacity *= 2;\n const newBuf = bufferAllocUnsafe(newCapacity);\n if (this.size > 0) this.buf.copy(newBuf, 0, 0, this.size);\n this.buf = newBuf;\n this.capacity = newCapacity;\n }\n if (pos > this.size) this.buf.fill(0, this.size, pos);\n buf.copy(this.buf, pos, off, off + len);\n if (requiredSize > this.size) this.size = requiredSize;\n this.touch();\n return len;\n }\n\n /**\n * Read data from the file.\n *\n * @param buf Buffer to read data into.\n * @param off Offset int the `buf` where to start writing data.\n * @param len How many bytes to read. Equals to `buf.byteLength` by default.\n * @param pos Position offset in file where to start reading. Defaults to `0`.\n * @returns Returns the number of bytes read.\n */\n read(\n buf: Buffer | ArrayBufferView | DataView,\n off: number = 0,\n len: number = buf.byteLength,\n pos: number = 0,\n ): number {\n this.atime = new Date();\n if (pos >= this.size) return 0;\n let actualLen = len;\n if (actualLen > buf.byteLength) actualLen = buf.byteLength;\n if (actualLen + pos > this.size) actualLen = this.size - pos;\n if (actualLen <= 0) return 0;\n const buf2 = buf instanceof Buffer ? buf : Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n this.buf.copy(buf2, off, pos, pos + actualLen);\n return actualLen;\n }\n\n truncate(len: number = 0) {\n // A negative length is clamped to zero, matching Node.js `fs.truncate`,\n // which truncates to an empty file rather than producing a negative size.\n // Without this, `this.size` becomes negative and `getBuffer()`'s\n // `subarray(0, this.size)` reads past the used region, exposing\n // uninitialized heap memory from the unsafe-allocated backing buffer.\n if (len <= 0) {\n this.buf = EMPTY_BUFFER;\n this.capacity = 0;\n this.size = 0;\n this.touch();\n return;\n }\n if (len <= this.size) this.size = len;\n else {\n if (len > this.capacity) {\n let newCapacity = Math.max(this.capacity * 2, 64);\n while (newCapacity < len) newCapacity *= 2;\n const buf = bufferAllocUnsafe(newCapacity);\n if (this.size > 0) this.buf.copy(buf, 0, 0, this.size);\n buf.fill(0, this.size, len);\n this.buf = buf;\n this.capacity = newCapacity;\n } else this.buf.fill(0, this.size, len);\n this.size = len;\n }\n this.touch();\n }\n\n chmod(perm: number) {\n this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);\n this.touch();\n }\n\n chown(uid: number, gid: number) {\n this.uid = uid;\n this.gid = gid;\n this.touch();\n }\n\n touch() {\n this.mtime = new Date();\n this.changes.emit(['modify']);\n }\n\n canRead(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IROTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IRGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IRUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n canWrite(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IWOTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IWGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IWUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n canExecute(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IXOTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IXGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IXUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n del() {\n this.changes.emit(['delete']);\n }\n\n toJSON() {\n return {\n ino: this.ino,\n uid: this.uid,\n gid: this.gid,\n atime: this.atime.getTime(),\n mtime: this.mtime.getTime(),\n ctime: this.ctime.getTime(),\n perm: this.perm,\n mode: this.mode,\n nlink: this.nlink,\n symlink: this.symlink,\n data: this.getString(),\n };\n }\n}\n"]}
{"version":3,"file":"Node.js","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":"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","sourcesContent":["import { FanOut } from 'thingies/lib/fanout';\nimport process from './process';\nimport { Buffer, bufferAllocUnsafe, bufferFrom } from '@jsonjoy.com/fs-node-builtins/lib/internal/buffer';\nimport { constants, S } from '@jsonjoy.com/fs-node-utils';\n\nexport type NodeEventModify = [type: 'modify'];\n\nexport type NodeEventDelete = [type: 'delete'];\n\nexport type NodeEvent = NodeEventModify | NodeEventDelete;\n\nconst { S_IFMT, S_IFDIR, S_IFREG, S_IFLNK, S_IFCHR } = constants;\nconst getuid = (): number => process.getuid?.() ?? 0;\nconst getgid = (): number => process.getgid?.() ?? 0;\nconst EMPTY_BUFFER = bufferAllocUnsafe(0);\n\n/**\n * Node in a file system (like i-node, v-node).\n */\nexport class Node {\n /**\n * @deprecated Subscribe to the volume-level `Superblock.changes` bus or use\n * `CoreWatcher` instead.\n */\n public readonly changes = new FanOut<NodeEvent>();\n\n // i-node number.\n ino: number;\n\n // User ID and group ID.\n private _uid: number = getuid();\n private _gid: number = getgid();\n\n private _atime = new Date();\n private _mtime = new Date();\n private _ctime = new Date();\n private _btime = new Date();\n\n buf: Buffer = EMPTY_BUFFER;\n\n /** Total allocated memory capacity for this node. */\n private capacity: number = 0;\n\n /** Actually used bytes to store content. */\n private size: number = 0;\n\n rdev: number = 0;\n\n mode: number; // S_IFDIR, S_IFREG, etc..\n\n // Number of hard links pointing at this Node.\n private _nlink = 1;\n\n // Path to another node, if this is a symlink.\n symlink: string;\n\n constructor(ino: number, mode: number = 0o666, uid: number = getuid(), gid: number = getgid()) {\n this.mode = mode;\n this.ino = ino;\n this._uid = uid;\n this._gid = gid;\n }\n\n public set ctime(ctime: Date) {\n this._ctime = ctime;\n }\n\n public get ctime(): Date {\n return this._ctime;\n }\n\n /**\n * Birth (creation) time of this node. Unlike `ctime`, it is set once when the\n * node is created and is never advanced by writes or metadata changes. The\n * setter exists only for restore paths, like snapshot deserialization.\n */\n public set btime(btime: Date) {\n this._btime = btime;\n }\n\n public get btime(): Date {\n return this._btime;\n }\n\n public set uid(uid: number) {\n this._uid = uid;\n this.ctime = new Date();\n }\n\n public get uid(): number {\n return this._uid;\n }\n\n public set gid(gid: number) {\n this._gid = gid;\n this.ctime = new Date();\n }\n\n public get gid(): number {\n return this._gid;\n }\n\n public set atime(atime: Date) {\n this._atime = atime;\n }\n\n public get atime(): Date {\n return this._atime;\n }\n\n public set mtime(mtime: Date) {\n this._mtime = mtime;\n this.ctime = new Date();\n }\n\n public get mtime(): Date {\n return this._mtime;\n }\n\n public get perm(): number {\n return this.mode & ~S_IFMT;\n }\n\n public set perm(perm: number) {\n this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);\n this.ctime = new Date();\n }\n\n public set nlink(nlink: number) {\n this._nlink = nlink;\n this.ctime = new Date();\n }\n\n public get nlink(): number {\n return this._nlink;\n }\n\n getString(encoding: BufferEncoding = 'utf8'): string {\n this.atime = new Date();\n return this.getBuffer().toString(encoding);\n }\n\n setString(str: string) {\n this._setBuf(bufferFrom(str, 'utf8'));\n }\n\n getBuffer(): Buffer {\n this.atime = new Date();\n if (!this.buf) this.buf = bufferAllocUnsafe(0);\n return bufferFrom(this.buf.subarray(0, this.size)); // Return a copy of used portion.\n }\n\n setBuffer(buf: Buffer) {\n const copy = bufferFrom(buf); // Creates a copy of data.\n this._setBuf(copy);\n }\n\n private _setBuf(buf: Buffer): void {\n const size = buf.length;\n this.buf = buf;\n this.capacity = size;\n this.size = size;\n this.touch();\n }\n\n getSize(): number {\n return this.size;\n }\n\n setModeProperty(property: number) {\n this.mode = property;\n }\n\n isFile() {\n return (this.mode & S_IFMT) === S_IFREG;\n }\n\n isDirectory() {\n return (this.mode & S_IFMT) === S_IFDIR;\n }\n\n isSymlink() {\n // return !!this.symlink;\n return (this.mode & S_IFMT) === S_IFLNK;\n }\n\n isCharacterDevice() {\n return (this.mode & S_IFMT) === S_IFCHR;\n }\n\n makeSymlink(symlink: string) {\n this.mode = S_IFLNK | 0o666;\n this.symlink = symlink;\n }\n\n write(buf: Buffer, off: number = 0, len: number = buf.length, pos: number = 0): number {\n const bufLength = buf.length;\n if (off + len > bufLength) len = bufLength - off;\n if (len <= 0) return 0;\n const requiredSize = pos + len;\n if (requiredSize > this.capacity) {\n let newCapacity = Math.max(this.capacity * 2, 64);\n while (newCapacity < requiredSize) newCapacity *= 2;\n const newBuf = bufferAllocUnsafe(newCapacity);\n if (this.size > 0) this.buf.copy(newBuf, 0, 0, this.size);\n this.buf = newBuf;\n this.capacity = newCapacity;\n }\n if (pos > this.size) this.buf.fill(0, this.size, pos);\n buf.copy(this.buf, pos, off, off + len);\n if (requiredSize > this.size) this.size = requiredSize;\n this.touch();\n return len;\n }\n\n /**\n * Read data from the file.\n *\n * @param buf Buffer to read data into.\n * @param off Offset int the `buf` where to start writing data.\n * @param len How many bytes to read. Equals to `buf.byteLength` by default.\n * @param pos Position offset in file where to start reading. Defaults to `0`.\n * @returns Returns the number of bytes read.\n */\n read(\n buf: Buffer | ArrayBufferView | DataView,\n off: number = 0,\n len: number = buf.byteLength,\n pos: number = 0,\n ): number {\n this.atime = new Date();\n if (pos >= this.size) return 0;\n let actualLen = len;\n if (actualLen > buf.byteLength) actualLen = buf.byteLength;\n if (actualLen + pos > this.size) actualLen = this.size - pos;\n if (actualLen <= 0) return 0;\n const buf2 = buf instanceof Buffer ? buf : Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);\n this.buf.copy(buf2, off, pos, pos + actualLen);\n return actualLen;\n }\n\n truncate(len: number = 0) {\n // A negative length is clamped to zero, matching Node.js `fs.truncate`,\n // which truncates to an empty file rather than producing a negative size.\n // Without this, `this.size` becomes negative and `getBuffer()`'s\n // `subarray(0, this.size)` reads past the used region, exposing\n // uninitialized heap memory from the unsafe-allocated backing buffer.\n if (len <= 0) {\n this.buf = EMPTY_BUFFER;\n this.capacity = 0;\n this.size = 0;\n this.touch();\n return;\n }\n if (len <= this.size) this.size = len;\n else {\n if (len > this.capacity) {\n let newCapacity = Math.max(this.capacity * 2, 64);\n while (newCapacity < len) newCapacity *= 2;\n const buf = bufferAllocUnsafe(newCapacity);\n if (this.size > 0) this.buf.copy(buf, 0, 0, this.size);\n buf.fill(0, this.size, len);\n this.buf = buf;\n this.capacity = newCapacity;\n } else this.buf.fill(0, this.size, len);\n this.size = len;\n }\n this.touch();\n }\n\n chmod(perm: number) {\n this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);\n this.touch();\n }\n\n chown(uid: number, gid: number) {\n this.uid = uid;\n this.gid = gid;\n this.touch();\n }\n\n touch() {\n this.mtime = new Date();\n this.changes.emit(['modify']);\n }\n\n canRead(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IROTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IRGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IRUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n canWrite(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IWOTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IWGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IWUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n canExecute(uid: number = getuid(), gid: number = getgid()): boolean {\n if (this.perm & S.IXOTH) {\n return true;\n }\n\n if (gid === this.gid) {\n if (this.perm & S.IXGRP) {\n return true;\n }\n }\n\n if (uid === this.uid) {\n if (this.perm & S.IXUSR) {\n return true;\n }\n }\n\n return false;\n }\n\n del() {\n this.changes.emit(['delete']);\n }\n\n toJSON() {\n return {\n ino: this.ino,\n uid: this.uid,\n gid: this.gid,\n atime: this.atime.getTime(),\n mtime: this.mtime.getTime(),\n ctime: this.ctime.getTime(),\n btime: this.btime.getTime(),\n perm: this.perm,\n mode: this.mode,\n nlink: this.nlink,\n symlink: this.symlink,\n data: this.getString(),\n };\n }\n}\n"]}

@@ -6,3 +6,3 @@ {

},
"version": "4.67.0",
"version": "4.68.0",
"description": "Core filesystem primitives: Node, Link, File, Superblock",

@@ -84,6 +84,6 @@ "author": {

"dependencies": {
"@jsonjoy.com/fs-node-builtins": "4.67.0",
"@jsonjoy.com/fs-node-utils": "4.67.0",
"@jsonjoy.com/fs-node-builtins": "4.68.0",
"@jsonjoy.com/fs-node-utils": "4.68.0",
"thingies": "^2.5.0"
}
}