@jsonjoy.com/fs-core 4.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/Node.js ADDED
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Node = void 0;
4
+ const fanout_1 = require("thingies/lib/fanout");
5
+ const process_1 = require("./process");
6
+ const buffer_1 = require("@jsonjoy.com/fs-node-builtins/lib/internal/buffer");
7
+ const fs_node_utils_1 = require("@jsonjoy.com/fs-node-utils");
8
+ const { S_IFMT, S_IFDIR, S_IFREG, S_IFLNK, S_IFCHR } = fs_node_utils_1.constants;
9
+ const getuid = () => process_1.default.getuid?.() ?? 0;
10
+ const getgid = () => process_1.default.getgid?.() ?? 0;
11
+ const EMPTY_BUFFER = (0, buffer_1.bufferAllocUnsafe)(0);
12
+ /**
13
+ * Node in a file system (like i-node, v-node).
14
+ */
15
+ class Node {
16
+ constructor(ino, mode = 0o666) {
17
+ this.changes = new fanout_1.FanOut();
18
+ // User ID and group ID.
19
+ this._uid = getuid();
20
+ this._gid = getgid();
21
+ this._atime = new Date();
22
+ this._mtime = new Date();
23
+ this._ctime = new Date();
24
+ this.buf = EMPTY_BUFFER;
25
+ /** Total allocated memory capacity for this node. */
26
+ this.capacity = 0;
27
+ /** Actually used bytes to store content. */
28
+ this.size = 0;
29
+ this.rdev = 0;
30
+ // Number of hard links pointing at this Node.
31
+ this._nlink = 1;
32
+ this.mode = mode;
33
+ this.ino = ino;
34
+ }
35
+ set ctime(ctime) {
36
+ this._ctime = ctime;
37
+ }
38
+ get ctime() {
39
+ return this._ctime;
40
+ }
41
+ set uid(uid) {
42
+ this._uid = uid;
43
+ this.ctime = new Date();
44
+ }
45
+ get uid() {
46
+ return this._uid;
47
+ }
48
+ set gid(gid) {
49
+ this._gid = gid;
50
+ this.ctime = new Date();
51
+ }
52
+ get gid() {
53
+ return this._gid;
54
+ }
55
+ set atime(atime) {
56
+ this._atime = atime;
57
+ }
58
+ get atime() {
59
+ return this._atime;
60
+ }
61
+ set mtime(mtime) {
62
+ this._mtime = mtime;
63
+ this.ctime = new Date();
64
+ }
65
+ get mtime() {
66
+ return this._mtime;
67
+ }
68
+ get perm() {
69
+ return this.mode & ~S_IFMT;
70
+ }
71
+ set perm(perm) {
72
+ this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);
73
+ this.ctime = new Date();
74
+ }
75
+ set nlink(nlink) {
76
+ this._nlink = nlink;
77
+ this.ctime = new Date();
78
+ }
79
+ get nlink() {
80
+ return this._nlink;
81
+ }
82
+ getString(encoding = 'utf8') {
83
+ this.atime = new Date();
84
+ return this.getBuffer().toString(encoding);
85
+ }
86
+ setString(str) {
87
+ this._setBuf((0, buffer_1.bufferFrom)(str, 'utf8'));
88
+ }
89
+ getBuffer() {
90
+ this.atime = new Date();
91
+ if (!this.buf)
92
+ this.buf = (0, buffer_1.bufferAllocUnsafe)(0);
93
+ return (0, buffer_1.bufferFrom)(this.buf.subarray(0, this.size)); // Return a copy of used portion.
94
+ }
95
+ setBuffer(buf) {
96
+ const copy = (0, buffer_1.bufferFrom)(buf); // Creates a copy of data.
97
+ this._setBuf(copy);
98
+ }
99
+ _setBuf(buf) {
100
+ const size = buf.length;
101
+ this.buf = buf;
102
+ this.capacity = size;
103
+ this.size = size;
104
+ this.touch();
105
+ }
106
+ getSize() {
107
+ return this.size;
108
+ }
109
+ setModeProperty(property) {
110
+ this.mode = property;
111
+ }
112
+ isFile() {
113
+ return (this.mode & S_IFMT) === S_IFREG;
114
+ }
115
+ isDirectory() {
116
+ return (this.mode & S_IFMT) === S_IFDIR;
117
+ }
118
+ isSymlink() {
119
+ // return !!this.symlink;
120
+ return (this.mode & S_IFMT) === S_IFLNK;
121
+ }
122
+ isCharacterDevice() {
123
+ return (this.mode & S_IFMT) === S_IFCHR;
124
+ }
125
+ makeSymlink(symlink) {
126
+ this.mode = S_IFLNK | 0o666;
127
+ this.symlink = symlink;
128
+ }
129
+ write(buf, off = 0, len = buf.length, pos = 0) {
130
+ const bufLength = buf.length;
131
+ if (off + len > bufLength)
132
+ len = bufLength - off;
133
+ if (len <= 0)
134
+ return 0;
135
+ const requiredSize = pos + len;
136
+ if (requiredSize > this.capacity) {
137
+ let newCapacity = Math.max(this.capacity * 2, 64);
138
+ while (newCapacity < requiredSize)
139
+ newCapacity *= 2;
140
+ const newBuf = (0, buffer_1.bufferAllocUnsafe)(newCapacity);
141
+ if (this.size > 0)
142
+ this.buf.copy(newBuf, 0, 0, this.size);
143
+ this.buf = newBuf;
144
+ this.capacity = newCapacity;
145
+ }
146
+ if (pos > this.size)
147
+ this.buf.fill(0, this.size, pos);
148
+ buf.copy(this.buf, pos, off, off + len);
149
+ if (requiredSize > this.size)
150
+ this.size = requiredSize;
151
+ this.touch();
152
+ return len;
153
+ }
154
+ /**
155
+ * Read data from the file.
156
+ *
157
+ * @param buf Buffer to read data into.
158
+ * @param off Offset int the `buf` where to start writing data.
159
+ * @param len How many bytes to read. Equals to `buf.byteLength` by default.
160
+ * @param pos Position offset in file where to start reading. Defaults to `0`.
161
+ * @returns Returns the number of bytes read.
162
+ */
163
+ read(buf, off = 0, len = buf.byteLength, pos = 0) {
164
+ this.atime = new Date();
165
+ if (pos >= this.size)
166
+ return 0;
167
+ let actualLen = len;
168
+ if (actualLen > buf.byteLength)
169
+ actualLen = buf.byteLength;
170
+ if (actualLen + pos > this.size)
171
+ actualLen = this.size - pos;
172
+ if (actualLen <= 0)
173
+ return 0;
174
+ const buf2 = buf instanceof buffer_1.Buffer ? buf : buffer_1.Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);
175
+ this.buf.copy(buf2, off, pos, pos + actualLen);
176
+ return actualLen;
177
+ }
178
+ truncate(len = 0) {
179
+ if (!len) {
180
+ this.buf = EMPTY_BUFFER;
181
+ this.capacity = 0;
182
+ this.size = 0;
183
+ this.touch();
184
+ return;
185
+ }
186
+ if (len <= this.size)
187
+ this.size = len;
188
+ else {
189
+ if (len > this.capacity) {
190
+ let newCapacity = Math.max(this.capacity * 2, 64);
191
+ while (newCapacity < len)
192
+ newCapacity *= 2;
193
+ const buf = (0, buffer_1.bufferAllocUnsafe)(newCapacity);
194
+ if (this.size > 0)
195
+ this.buf.copy(buf, 0, 0, this.size);
196
+ buf.fill(0, this.size, len);
197
+ this.buf = buf;
198
+ this.capacity = newCapacity;
199
+ }
200
+ else
201
+ this.buf.fill(0, this.size, len);
202
+ this.size = len;
203
+ }
204
+ this.touch();
205
+ }
206
+ chmod(perm) {
207
+ this.mode = (this.mode & S_IFMT) | (perm & ~S_IFMT);
208
+ this.touch();
209
+ }
210
+ chown(uid, gid) {
211
+ this.uid = uid;
212
+ this.gid = gid;
213
+ this.touch();
214
+ }
215
+ touch() {
216
+ this.mtime = new Date();
217
+ this.changes.emit(['modify']);
218
+ }
219
+ canRead(uid = getuid(), gid = getgid()) {
220
+ if (this.perm & 4 /* S.IROTH */) {
221
+ return true;
222
+ }
223
+ if (gid === this.gid) {
224
+ if (this.perm & 32 /* S.IRGRP */) {
225
+ return true;
226
+ }
227
+ }
228
+ if (uid === this.uid) {
229
+ if (this.perm & 256 /* S.IRUSR */) {
230
+ return true;
231
+ }
232
+ }
233
+ return false;
234
+ }
235
+ canWrite(uid = getuid(), gid = getgid()) {
236
+ if (this.perm & 2 /* S.IWOTH */) {
237
+ return true;
238
+ }
239
+ if (gid === this.gid) {
240
+ if (this.perm & 16 /* S.IWGRP */) {
241
+ return true;
242
+ }
243
+ }
244
+ if (uid === this.uid) {
245
+ if (this.perm & 128 /* S.IWUSR */) {
246
+ return true;
247
+ }
248
+ }
249
+ return false;
250
+ }
251
+ canExecute(uid = getuid(), gid = getgid()) {
252
+ if (this.perm & 1 /* S.IXOTH */) {
253
+ return true;
254
+ }
255
+ if (gid === this.gid) {
256
+ if (this.perm & 8 /* S.IXGRP */) {
257
+ return true;
258
+ }
259
+ }
260
+ if (uid === this.uid) {
261
+ if (this.perm & 64 /* S.IXUSR */) {
262
+ return true;
263
+ }
264
+ }
265
+ return false;
266
+ }
267
+ del() {
268
+ this.changes.emit(['delete']);
269
+ }
270
+ toJSON() {
271
+ return {
272
+ ino: this.ino,
273
+ uid: this.uid,
274
+ gid: this.gid,
275
+ atime: this.atime.getTime(),
276
+ mtime: this.mtime.getTime(),
277
+ ctime: this.ctime.getTime(),
278
+ perm: this.perm,
279
+ mode: this.mode,
280
+ nlink: this.nlink,
281
+ symlink: this.symlink,
282
+ data: this.getString(),
283
+ };
284
+ }
285
+ }
286
+ exports.Node = Node;
287
+ //# sourceMappingURL=Node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Node.js","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { Node } from './Node';
2
+ import { Link } from './Link';
3
+ import { File } from './File';
4
+ import { Buffer } from '@jsonjoy.com/fs-node-builtins/lib/internal/buffer';
5
+ import { DirectoryJSON, NestedDirectoryJSON } from './json';
6
+ import type { PathLike } from '@jsonjoy.com/fs-node-utils/lib/types/misc';
7
+ import { TFileId, StatError } from './types';
8
+ import { Result } from './result';
9
+ /**
10
+ * Represents a filesystem superblock, which is the root of a virtual
11
+ * filesystem in Linux.
12
+ * @see https://lxr.linux.no/linux+v3.11.2/include/linux/fs.h#L1242
13
+ */
14
+ export declare class Superblock {
15
+ static fromJSON(json: DirectoryJSON, cwd?: string): Superblock;
16
+ static fromNestedJSON(json: NestedDirectoryJSON, cwd?: string): Superblock;
17
+ /**
18
+ * Global file descriptor counter. UNIX file descriptors start from 0 and go sequentially
19
+ * up, so here, in order not to conflict with them, we choose some big number and descrease
20
+ * the file descriptor of every new opened file.
21
+ * @type {number}
22
+ * @todo This should not be static, right?
23
+ */
24
+ static fd: number;
25
+ root: Link;
26
+ ino: number;
27
+ inodes: {
28
+ [ino: number]: Node;
29
+ };
30
+ releasedInos: number[];
31
+ fds: {
32
+ [fd: number]: File;
33
+ };
34
+ releasedFds: number[];
35
+ maxFiles: number;
36
+ openFiles: number;
37
+ constructor(props?: {});
38
+ createLink(): Link;
39
+ createLink(parent: Link, name: string, isDirectory?: boolean, mode?: number): Link;
40
+ deleteLink(link: Link): boolean;
41
+ private newInoNumber;
42
+ private newFdNumber;
43
+ createNode(mode: number): Node;
44
+ deleteNode(node: Node): void;
45
+ walk(steps: string[], resolveSymlinks: boolean, checkExistence: boolean, checkAccess: boolean, funcName?: string): Result<Link | null, StatError>;
46
+ walk(filename: string, resolveSymlinks: boolean, checkExistence: boolean, checkAccess: boolean, funcName?: string): Result<Link | null, StatError>;
47
+ walk(link: Link, resolveSymlinks: boolean, checkExistence: boolean, checkAccess: boolean, funcName?: string): Result<Link | null, StatError>;
48
+ walk(stepsOrFilenameOrLink: string[] | string | Link, resolveSymlinks: boolean, checkExistence: boolean, checkAccess: boolean, funcName?: string): Result<Link | null, StatError>;
49
+ getLink(steps: string[]): Link | null;
50
+ getLinkOrThrow(filename: string, funcName?: string): Link;
51
+ getResolvedLink(filenameOrSteps: string | string[]): Link | null;
52
+ /**
53
+ * Just like `getLinkOrThrow`, but also dereference/resolves symbolic links.
54
+ */
55
+ getResolvedLinkOrThrow(filename: string, funcName?: string): Link;
56
+ getResolvedLinkResult(filename: string, funcName?: string): Result<Link, StatError>;
57
+ resolveSymlinks(link: Link): Link | null;
58
+ /**
59
+ * Just like `getLinkOrThrow`, but also verifies that the link is a directory.
60
+ */
61
+ getLinkAsDirOrThrow(filename: string, funcName?: string): Link;
62
+ getLinkParent(steps: string[]): Link | null;
63
+ getLinkParentAsDirOrThrow(filenameOrSteps: string | string[], funcName?: string): Link;
64
+ getFileByFd(fd: number): File;
65
+ getFileByFdOrThrow(fd: number, funcName?: string): File;
66
+ _toJSON(link?: Link, json?: {}, path?: string, asBuffer?: boolean): DirectoryJSON<string | null>;
67
+ toJSON(paths?: PathLike | PathLike[], json?: {}, isRelative?: boolean, asBuffer?: boolean): DirectoryJSON<string | null>;
68
+ fromJSON(json: DirectoryJSON, cwd?: string): void;
69
+ fromNestedJSON(json: NestedDirectoryJSON, cwd?: string): void;
70
+ reset(): void;
71
+ mountSync(mountpoint: string, json: DirectoryJSON): void;
72
+ openLink(link: Link, flagsNum: number, resolveSymlinks?: boolean): File;
73
+ protected openFile(filename: string, flagsNum: number, modeNum: number | undefined, resolveSymlinks?: boolean): File;
74
+ readonly open: (filename: string, flagsNum: number, modeNum: number, resolveSymlinks?: boolean) => number;
75
+ readonly writeFile: (id: TFileId, buf: Buffer, flagsNum: number, modeNum: number) => void;
76
+ readonly read: (fd: number, buffer: Buffer | ArrayBufferView | DataView, offset: number, length: number, position: number | null) => number;
77
+ readonly readv: (fd: number, buffers: ArrayBufferView[], position: number | null) => number;
78
+ readonly link: (filename1: string, filename2: string) => void;
79
+ readonly unlink: (filename: string) => void;
80
+ readonly symlink: (targetFilename: string, pathFilename: string) => Link;
81
+ readonly rename: (oldPathFilename: string, newPathFilename: string) => void;
82
+ readonly mkdir: (filename: string, modeNum: number) => void;
83
+ /**
84
+ * Creates directory tree recursively.
85
+ */
86
+ readonly mkdirp: (filename: string, modeNum: number) => string | undefined;
87
+ readonly rmdir: (filename: string, recursive?: boolean) => void;
88
+ readonly rm: (filename: string, force?: boolean, recursive?: boolean) => void;
89
+ protected closeFile(file: File): void;
90
+ readonly close: (fd: number) => void;
91
+ write(fd: number, buf: Buffer, offset?: number, length?: number, position?: number | null): number;
92
+ }