@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/LICENSE +201 -0
- package/README.md +34 -0
- package/lib/File.d.ts +39 -0
- package/lib/File.js +72 -0
- package/lib/File.js.map +1 -0
- package/lib/Link.d.ts +38 -0
- package/lib/Link.js +105 -0
- package/lib/Link.js.map +1 -0
- package/lib/Node.d.ts +85 -0
- package/lib/Node.js +287 -0
- package/lib/Node.js.map +1 -0
- package/lib/Superblock.d.ts +92 -0
- package/lib/Superblock.js +688 -0
- package/lib/Superblock.js.map +1 -0
- package/lib/constants.d.ts +15 -0
- package/lib/constants.js +3 -0
- package/lib/constants.js.map +1 -0
- package/lib/encoding.d.ts +6 -0
- package/lib/encoding.js +20 -0
- package/lib/encoding.js.map +1 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.js +26 -0
- package/lib/index.js.map +1 -0
- package/lib/json.d.ts +9 -0
- package/lib/json.js +35 -0
- package/lib/json.js.map +1 -0
- package/lib/process.d.ts +11 -0
- package/lib/process.js +40 -0
- package/lib/process.js.map +1 -0
- package/lib/result.d.ts +11 -0
- package/lib/result.js +11 -0
- package/lib/result.js.map +1 -0
- package/lib/types.d.ts +8 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/util.d.ts +18 -0
- package/lib/util.js +199 -0
- package/lib/util.js.map +1 -0
- package/package.json +87 -0
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
|
package/lib/Node.js.map
ADDED
|
@@ -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
|
+
}
|