@jsonjoy.com/fs-core
Advanced tools
+9
-0
@@ -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; |
+13
-0
@@ -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"]} |
+3
-3
@@ -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" | ||
| } | ||
| } |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
226270
0.65%2175
1.02%+ Added
+ Added
- Removed
- Removed