@zenfs/core 1.11.4 → 2.1.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/dist/backends/backend.d.ts +19 -15
- package/dist/backends/backend.js +36 -19
- package/dist/backends/cow.d.ts +20 -30
- package/dist/backends/cow.js +83 -192
- package/dist/backends/fetch.d.ts +1 -0
- package/dist/backends/fetch.js +30 -30
- package/dist/backends/index.d.ts +1 -1
- package/dist/backends/index.js +1 -1
- package/dist/backends/memory.d.ts +5 -7
- package/dist/backends/memory.js +2 -3
- package/dist/backends/passthrough.d.ts +19 -23
- package/dist/backends/passthrough.js +98 -288
- package/dist/backends/port.d.ts +220 -0
- package/dist/backends/port.js +328 -0
- package/dist/backends/single_buffer.d.ts +59 -47
- package/dist/backends/single_buffer.js +468 -219
- package/dist/backends/store/fs.d.ts +25 -35
- package/dist/backends/store/fs.js +276 -315
- package/dist/backends/store/store.d.ts +10 -15
- package/dist/backends/store/store.js +11 -10
- package/dist/config.d.ts +3 -12
- package/dist/config.js +17 -19
- package/dist/context.d.ts +8 -21
- package/dist/context.js +33 -10
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/internal/contexts.d.ts +63 -0
- package/dist/internal/contexts.js +15 -0
- package/dist/internal/credentials.d.ts +2 -11
- package/dist/internal/credentials.js +0 -19
- package/dist/internal/devices.d.ts +18 -80
- package/dist/internal/devices.js +103 -316
- package/dist/internal/error.d.ts +9 -204
- package/dist/internal/error.js +19 -288
- package/dist/internal/file_index.d.ts +1 -1
- package/dist/internal/file_index.js +11 -11
- package/dist/internal/filesystem.d.ts +51 -94
- package/dist/internal/filesystem.js +21 -20
- package/dist/internal/index.d.ts +1 -2
- package/dist/internal/index.js +1 -2
- package/dist/internal/index_fs.d.ts +12 -30
- package/dist/internal/index_fs.js +37 -69
- package/dist/internal/inode.d.ts +140 -24
- package/dist/internal/inode.js +515 -66
- package/dist/mixins/async.js +52 -112
- package/dist/mixins/mutexed.d.ts +19 -18
- package/dist/mixins/mutexed.js +62 -64
- package/dist/mixins/readonly.d.ts +7 -6
- package/dist/mixins/readonly.js +24 -18
- package/dist/mixins/sync.js +8 -8
- package/dist/{vfs/path.d.ts → path.d.ts} +3 -4
- package/dist/{vfs/path.js → path.js} +6 -9
- package/dist/polyfills.js +1 -1
- package/dist/readline.d.ts +134 -0
- package/dist/readline.js +623 -0
- package/dist/utils.d.ts +9 -37
- package/dist/utils.js +17 -85
- package/dist/vfs/acl.d.ts +42 -0
- package/dist/vfs/acl.js +268 -0
- package/dist/vfs/async.d.ts +9 -23
- package/dist/vfs/async.js +25 -27
- package/dist/vfs/config.d.ts +6 -18
- package/dist/vfs/config.js +8 -18
- package/dist/vfs/dir.d.ts +3 -3
- package/dist/vfs/dir.js +12 -12
- package/dist/vfs/file.d.ts +106 -0
- package/dist/vfs/file.js +244 -0
- package/dist/vfs/flags.d.ts +19 -0
- package/dist/vfs/flags.js +62 -0
- package/dist/vfs/index.d.ts +4 -10
- package/dist/vfs/index.js +4 -13
- package/dist/vfs/ioctl.d.ts +88 -0
- package/dist/vfs/ioctl.js +409 -0
- package/dist/vfs/promises.d.ts +81 -19
- package/dist/vfs/promises.js +404 -288
- package/dist/vfs/shared.d.ts +7 -37
- package/dist/vfs/shared.js +29 -85
- package/dist/{stats.d.ts → vfs/stats.d.ts} +14 -28
- package/dist/{stats.js → vfs/stats.js} +11 -66
- package/dist/vfs/streams.d.ts +1 -0
- package/dist/vfs/streams.js +32 -27
- package/dist/vfs/sync.d.ts +3 -3
- package/dist/vfs/sync.js +263 -260
- package/dist/vfs/watchers.d.ts +2 -2
- package/dist/vfs/watchers.js +12 -12
- package/dist/vfs/xattr.d.ts +116 -0
- package/dist/vfs/xattr.js +201 -0
- package/package.json +5 -3
- package/readme.md +1 -1
- package/scripts/test.js +2 -2
- package/tests/assignment.ts +1 -1
- package/tests/backend/config.worker.js +4 -1
- package/tests/backend/fetch.test.ts +3 -0
- package/tests/backend/port.test.ts +19 -33
- package/tests/backend/remote.worker.js +4 -1
- package/tests/backend/single-buffer.test.ts +53 -0
- package/tests/backend/single-buffer.worker.js +30 -0
- package/tests/common/context.test.ts +3 -3
- package/tests/common/handle.test.ts +17 -12
- package/tests/common/mutex.test.ts +9 -9
- package/tests/common/path.test.ts +1 -1
- package/tests/common/readline.test.ts +104 -0
- package/tests/common.ts +4 -19
- package/tests/fetch/fetch.ts +2 -2
- package/tests/fs/append.test.ts +4 -4
- package/tests/fs/directory.test.ts +25 -25
- package/tests/fs/errors.test.ts +15 -19
- package/tests/fs/links.test.ts +4 -3
- package/tests/fs/open.test.ts +4 -21
- package/tests/fs/permissions.test.ts +14 -18
- package/tests/fs/read.test.ts +10 -9
- package/tests/fs/readFile.test.ts +10 -26
- package/tests/fs/rename.test.ts +4 -9
- package/tests/fs/stat.test.ts +8 -8
- package/tests/fs/streams.test.ts +2 -11
- package/tests/fs/times.test.ts +7 -7
- package/tests/fs/truncate.test.ts +8 -36
- package/tests/fs/watch.test.ts +10 -10
- package/tests/fs/write.test.ts +77 -13
- package/tests/fs/xattr.test.ts +85 -0
- package/tests/logs.js +22 -0
- package/tests/setup/context.ts +1 -1
- package/tests/setup/index.ts +3 -3
- package/tests/setup/port.ts +7 -1
- package/dist/backends/port/fs.d.ts +0 -84
- package/dist/backends/port/fs.js +0 -151
- package/dist/backends/port/rpc.d.ts +0 -77
- package/dist/backends/port/rpc.js +0 -100
- package/dist/backends/store/simple.d.ts +0 -20
- package/dist/backends/store/simple.js +0 -13
- package/dist/internal/file.d.ts +0 -359
- package/dist/internal/file.js +0 -751
- package/dist/internal/log.d.ts +0 -133
- package/dist/internal/log.js +0 -218
- package/tests/fs/writeFile.test.ts +0 -70
package/dist/internal/inode.d.ts
CHANGED
|
@@ -1,60 +1,153 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BufferView } from 'utilium/buffer.js';
|
|
2
|
+
import { Stats, type StatsLike } from '../vfs/stats.js';
|
|
3
|
+
import { type V_Context } from './contexts.js';
|
|
2
4
|
/**
|
|
3
5
|
* Root inode
|
|
4
6
|
* @hidden
|
|
5
7
|
*/
|
|
6
8
|
export declare const rootIno = 0;
|
|
9
|
+
/**
|
|
10
|
+
* Extended attributes
|
|
11
|
+
* @category Internals
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare class Attributes extends BufferView {
|
|
15
|
+
accessor size: number;
|
|
16
|
+
['constructor']: typeof Attributes;
|
|
17
|
+
get byteSize(): number;
|
|
18
|
+
has(name: string): boolean;
|
|
19
|
+
get(name: string): Uint8Array | undefined;
|
|
20
|
+
set(name: string, value: Uint8Array): void;
|
|
21
|
+
remove(name: string): boolean;
|
|
22
|
+
copyFrom(other: Attributes): void;
|
|
23
|
+
keys(): Generator<string, void, unknown>;
|
|
24
|
+
values(): Generator<Uint8Array<ArrayBufferLike>, void, unknown>;
|
|
25
|
+
entries(): Generator<(string | Uint8Array<ArrayBufferLike>)[], void, unknown>;
|
|
26
|
+
}
|
|
7
27
|
/**
|
|
8
28
|
* @internal @hidden
|
|
9
29
|
*/
|
|
10
30
|
export interface InodeFields {
|
|
11
31
|
data?: number;
|
|
12
32
|
flags?: number;
|
|
33
|
+
version?: number;
|
|
13
34
|
}
|
|
14
35
|
/**
|
|
15
36
|
* @category Internals
|
|
16
37
|
* @internal
|
|
17
38
|
*/
|
|
18
39
|
export interface InodeLike extends StatsLike<number>, InodeFields {
|
|
40
|
+
attributes?: Attributes;
|
|
19
41
|
}
|
|
20
42
|
/**
|
|
21
43
|
* @internal @hidden
|
|
22
44
|
*/
|
|
23
|
-
export declare const _inode_fields: readonly ["ino", "data", "size", "mode", "flags", "nlink", "uid", "gid", "atimeMs", "birthtimeMs", "mtimeMs", "ctimeMs"];
|
|
45
|
+
export declare const _inode_fields: readonly ["ino", "data", "size", "mode", "flags", "nlink", "uid", "gid", "atimeMs", "birthtimeMs", "mtimeMs", "ctimeMs", "version"];
|
|
24
46
|
/**
|
|
25
47
|
* Represents which version of the `Inode` format we are on.
|
|
26
48
|
* 1. 58 bytes. The first member was called `ino` but used as the ID for data.
|
|
27
49
|
* 2. 66 bytes. Renamed the first member from `ino` to `data` and added a separate `ino` field
|
|
28
|
-
* 3.
|
|
50
|
+
* 3. 72 bytes. Changed the ID fields from 64 to 32 bits and added `flags`.
|
|
51
|
+
* 4. >= 128 bytes. Added extended attributes.
|
|
52
|
+
* 5. (current) 4 KiB. Changed flags
|
|
29
53
|
* @internal @hidden
|
|
30
54
|
*/
|
|
31
|
-
export declare const _inode_version =
|
|
55
|
+
export declare const _inode_version = 5;
|
|
56
|
+
/**
|
|
57
|
+
* Inode flags
|
|
58
|
+
* @see `S_*` in `include/linux/fs.h` (around L2325)
|
|
59
|
+
* @experimental
|
|
60
|
+
*/
|
|
61
|
+
export declare enum InodeFlags {
|
|
62
|
+
/** Writes are synced at once */
|
|
63
|
+
Sync = 1,
|
|
64
|
+
/** Do not update access times */
|
|
65
|
+
NoAtime = 2,
|
|
66
|
+
/** Append-only file */
|
|
67
|
+
Append = 4,
|
|
68
|
+
/** Immutable file */
|
|
69
|
+
Immutable = 8,
|
|
70
|
+
/** removed, but still open directory */
|
|
71
|
+
Dead = 16,
|
|
72
|
+
/** Inode is not counted to quota */
|
|
73
|
+
NoQuota = 32,
|
|
74
|
+
/** Directory modifications are synchronous */
|
|
75
|
+
Dirsync = 64,
|
|
76
|
+
/** Do not update file c/mtime */
|
|
77
|
+
NoCMtime = 128,
|
|
78
|
+
/** Do not truncate: swapon got its bmaps */
|
|
79
|
+
SwapFile = 256,
|
|
80
|
+
/** Inode is fs-internal */
|
|
81
|
+
Private = 512,
|
|
82
|
+
/** Inode has an associated IMA struct */
|
|
83
|
+
IMA = 1024,
|
|
84
|
+
/** Automount/referral quasi-directory */
|
|
85
|
+
AutoMount = 2048,
|
|
86
|
+
/** no suid or xattr security attributes */
|
|
87
|
+
NoSec = 4096,
|
|
88
|
+
/** Direct Access, avoiding the page cache */
|
|
89
|
+
DAX = 8192,
|
|
90
|
+
/** Encrypted file (using fs/crypto/) */
|
|
91
|
+
Encrypted = 16384,
|
|
92
|
+
/** Casefolded file */
|
|
93
|
+
CaseFold = 32768,
|
|
94
|
+
/** Verity file (using fs/verity/) */
|
|
95
|
+
Verity = 65536,
|
|
96
|
+
/** File is in use by the kernel (eg. fs/cachefiles) */
|
|
97
|
+
KernelFile = 131072
|
|
98
|
+
}
|
|
99
|
+
/** User visible flags */
|
|
100
|
+
export declare const userVisibleFlags = 253951;
|
|
101
|
+
/** User modifiable flags */
|
|
102
|
+
export declare const userModifiableFlags = 229631;
|
|
32
103
|
/**
|
|
33
104
|
* Generic inode definition that can easily be serialized.
|
|
34
105
|
* @category Internals
|
|
35
106
|
* @internal
|
|
36
|
-
* @todo [BREAKING] Remove 58 byte Inode upgrade path
|
|
37
107
|
*/
|
|
38
|
-
export declare class Inode implements InodeLike {
|
|
39
|
-
constructor(
|
|
40
|
-
data: number;
|
|
108
|
+
export declare class Inode extends BufferView implements InodeLike {
|
|
109
|
+
constructor(...args: ConstructorParameters<typeof BufferView> | [Readonly<Partial<InodeLike>>]);
|
|
110
|
+
accessor data: number;
|
|
41
111
|
/** For future use */
|
|
42
|
-
__data_old: number;
|
|
43
|
-
size: number;
|
|
44
|
-
mode: number;
|
|
45
|
-
nlink: number;
|
|
46
|
-
uid: number;
|
|
47
|
-
gid: number;
|
|
48
|
-
atimeMs: number;
|
|
49
|
-
birthtimeMs: number;
|
|
50
|
-
mtimeMs: number;
|
|
51
|
-
|
|
52
|
-
|
|
112
|
+
accessor __data_old: number;
|
|
113
|
+
accessor size: number;
|
|
114
|
+
accessor mode: number;
|
|
115
|
+
accessor nlink: number;
|
|
116
|
+
accessor uid: number;
|
|
117
|
+
accessor gid: number;
|
|
118
|
+
accessor atimeMs: number;
|
|
119
|
+
accessor birthtimeMs: number;
|
|
120
|
+
accessor mtimeMs: number;
|
|
121
|
+
/**
|
|
122
|
+
* The time the inode was changed.
|
|
123
|
+
*
|
|
124
|
+
* This is automatically updated whenever changed are made using `update()`.
|
|
125
|
+
*/
|
|
126
|
+
accessor ctimeMs: number;
|
|
127
|
+
accessor ino: number;
|
|
53
128
|
/** For future use */
|
|
54
|
-
__ino_old: number;
|
|
55
|
-
flags: number;
|
|
129
|
+
accessor __ino_old: number;
|
|
130
|
+
accessor flags: number;
|
|
56
131
|
/** For future use */
|
|
57
|
-
|
|
132
|
+
protected accessor __after_flags: number;
|
|
133
|
+
/**
|
|
134
|
+
* The "version" of the inode/data.
|
|
135
|
+
* Unrelated to the inode format!
|
|
136
|
+
*/
|
|
137
|
+
accessor version: number;
|
|
138
|
+
/**
|
|
139
|
+
* Padding up to 128 bytes.
|
|
140
|
+
* This ensures there is enough room for expansion without breaking the ABI.
|
|
141
|
+
* @internal
|
|
142
|
+
*/
|
|
143
|
+
protected accessor __padding: Uint8Array;
|
|
144
|
+
accessor attributes: Attributes;
|
|
145
|
+
/**
|
|
146
|
+
* Since the attribute data uses dynamic arrays,
|
|
147
|
+
* it is necessary to add this so attributes can be added.
|
|
148
|
+
* @internal @hidden
|
|
149
|
+
*/
|
|
150
|
+
protected accessor __data: Uint8Array;
|
|
58
151
|
toString(): string;
|
|
59
152
|
toJSON(): InodeLike;
|
|
60
153
|
/**
|
|
@@ -73,7 +166,30 @@ export declare class Inode implements InodeLike {
|
|
|
73
166
|
*/
|
|
74
167
|
update(data?: Partial<Readonly<InodeLike>>): boolean;
|
|
75
168
|
}
|
|
169
|
+
export declare function isFile(metadata: {
|
|
170
|
+
mode: number;
|
|
171
|
+
}): boolean;
|
|
172
|
+
export declare function isDirectory(metadata: {
|
|
173
|
+
mode: number;
|
|
174
|
+
}): boolean;
|
|
175
|
+
export declare function isSymbolicLink(metadata: {
|
|
176
|
+
mode: number;
|
|
177
|
+
}): boolean;
|
|
178
|
+
export declare function isSocket(metadata: {
|
|
179
|
+
mode: number;
|
|
180
|
+
}): boolean;
|
|
181
|
+
export declare function isBlockDevice(metadata: {
|
|
182
|
+
mode: number;
|
|
183
|
+
}): boolean;
|
|
184
|
+
export declare function isCharacterDevice(metadata: {
|
|
185
|
+
mode: number;
|
|
186
|
+
}): boolean;
|
|
187
|
+
export declare function isFIFO(metadata: {
|
|
188
|
+
mode: number;
|
|
189
|
+
}): boolean;
|
|
76
190
|
/**
|
|
77
|
-
*
|
|
191
|
+
* Checks if a given user/group has access to this item
|
|
192
|
+
* @param access The requested access, combination of `W_OK`, `R_OK`, and `X_OK`
|
|
193
|
+
* @internal
|
|
78
194
|
*/
|
|
79
|
-
export declare
|
|
195
|
+
export declare function hasAccess($: V_Context, inode: Pick<InodeLike, 'mode' | 'uid' | 'gid'>, access: number): boolean;
|