@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.
Files changed (135) hide show
  1. package/dist/backends/backend.d.ts +19 -15
  2. package/dist/backends/backend.js +36 -19
  3. package/dist/backends/cow.d.ts +20 -30
  4. package/dist/backends/cow.js +83 -192
  5. package/dist/backends/fetch.d.ts +1 -0
  6. package/dist/backends/fetch.js +30 -30
  7. package/dist/backends/index.d.ts +1 -1
  8. package/dist/backends/index.js +1 -1
  9. package/dist/backends/memory.d.ts +5 -7
  10. package/dist/backends/memory.js +2 -3
  11. package/dist/backends/passthrough.d.ts +19 -23
  12. package/dist/backends/passthrough.js +98 -288
  13. package/dist/backends/port.d.ts +220 -0
  14. package/dist/backends/port.js +328 -0
  15. package/dist/backends/single_buffer.d.ts +59 -47
  16. package/dist/backends/single_buffer.js +468 -219
  17. package/dist/backends/store/fs.d.ts +25 -35
  18. package/dist/backends/store/fs.js +276 -315
  19. package/dist/backends/store/store.d.ts +10 -15
  20. package/dist/backends/store/store.js +11 -10
  21. package/dist/config.d.ts +3 -12
  22. package/dist/config.js +17 -19
  23. package/dist/context.d.ts +8 -21
  24. package/dist/context.js +33 -10
  25. package/dist/index.d.ts +2 -1
  26. package/dist/index.js +2 -1
  27. package/dist/internal/contexts.d.ts +63 -0
  28. package/dist/internal/contexts.js +15 -0
  29. package/dist/internal/credentials.d.ts +2 -11
  30. package/dist/internal/credentials.js +0 -19
  31. package/dist/internal/devices.d.ts +18 -80
  32. package/dist/internal/devices.js +103 -316
  33. package/dist/internal/error.d.ts +9 -204
  34. package/dist/internal/error.js +19 -288
  35. package/dist/internal/file_index.d.ts +1 -1
  36. package/dist/internal/file_index.js +11 -11
  37. package/dist/internal/filesystem.d.ts +51 -94
  38. package/dist/internal/filesystem.js +21 -20
  39. package/dist/internal/index.d.ts +1 -2
  40. package/dist/internal/index.js +1 -2
  41. package/dist/internal/index_fs.d.ts +12 -30
  42. package/dist/internal/index_fs.js +37 -69
  43. package/dist/internal/inode.d.ts +140 -24
  44. package/dist/internal/inode.js +515 -66
  45. package/dist/mixins/async.js +52 -112
  46. package/dist/mixins/mutexed.d.ts +19 -18
  47. package/dist/mixins/mutexed.js +62 -64
  48. package/dist/mixins/readonly.d.ts +7 -6
  49. package/dist/mixins/readonly.js +24 -18
  50. package/dist/mixins/sync.js +8 -8
  51. package/dist/{vfs/path.d.ts → path.d.ts} +3 -4
  52. package/dist/{vfs/path.js → path.js} +6 -9
  53. package/dist/polyfills.js +1 -1
  54. package/dist/readline.d.ts +134 -0
  55. package/dist/readline.js +623 -0
  56. package/dist/utils.d.ts +9 -37
  57. package/dist/utils.js +17 -85
  58. package/dist/vfs/acl.d.ts +42 -0
  59. package/dist/vfs/acl.js +268 -0
  60. package/dist/vfs/async.d.ts +9 -23
  61. package/dist/vfs/async.js +25 -27
  62. package/dist/vfs/config.d.ts +6 -18
  63. package/dist/vfs/config.js +8 -18
  64. package/dist/vfs/dir.d.ts +3 -3
  65. package/dist/vfs/dir.js +12 -12
  66. package/dist/vfs/file.d.ts +106 -0
  67. package/dist/vfs/file.js +244 -0
  68. package/dist/vfs/flags.d.ts +19 -0
  69. package/dist/vfs/flags.js +62 -0
  70. package/dist/vfs/index.d.ts +4 -10
  71. package/dist/vfs/index.js +4 -13
  72. package/dist/vfs/ioctl.d.ts +88 -0
  73. package/dist/vfs/ioctl.js +409 -0
  74. package/dist/vfs/promises.d.ts +81 -19
  75. package/dist/vfs/promises.js +404 -288
  76. package/dist/vfs/shared.d.ts +7 -37
  77. package/dist/vfs/shared.js +29 -85
  78. package/dist/{stats.d.ts → vfs/stats.d.ts} +14 -28
  79. package/dist/{stats.js → vfs/stats.js} +11 -66
  80. package/dist/vfs/streams.d.ts +1 -0
  81. package/dist/vfs/streams.js +32 -27
  82. package/dist/vfs/sync.d.ts +3 -3
  83. package/dist/vfs/sync.js +263 -260
  84. package/dist/vfs/watchers.d.ts +2 -2
  85. package/dist/vfs/watchers.js +12 -12
  86. package/dist/vfs/xattr.d.ts +116 -0
  87. package/dist/vfs/xattr.js +201 -0
  88. package/package.json +5 -3
  89. package/readme.md +1 -1
  90. package/scripts/test.js +2 -2
  91. package/tests/assignment.ts +1 -1
  92. package/tests/backend/config.worker.js +4 -1
  93. package/tests/backend/fetch.test.ts +3 -0
  94. package/tests/backend/port.test.ts +19 -33
  95. package/tests/backend/remote.worker.js +4 -1
  96. package/tests/backend/single-buffer.test.ts +53 -0
  97. package/tests/backend/single-buffer.worker.js +30 -0
  98. package/tests/common/context.test.ts +3 -3
  99. package/tests/common/handle.test.ts +17 -12
  100. package/tests/common/mutex.test.ts +9 -9
  101. package/tests/common/path.test.ts +1 -1
  102. package/tests/common/readline.test.ts +104 -0
  103. package/tests/common.ts +4 -19
  104. package/tests/fetch/fetch.ts +2 -2
  105. package/tests/fs/append.test.ts +4 -4
  106. package/tests/fs/directory.test.ts +25 -25
  107. package/tests/fs/errors.test.ts +15 -19
  108. package/tests/fs/links.test.ts +4 -3
  109. package/tests/fs/open.test.ts +4 -21
  110. package/tests/fs/permissions.test.ts +14 -18
  111. package/tests/fs/read.test.ts +10 -9
  112. package/tests/fs/readFile.test.ts +10 -26
  113. package/tests/fs/rename.test.ts +4 -9
  114. package/tests/fs/stat.test.ts +8 -8
  115. package/tests/fs/streams.test.ts +2 -11
  116. package/tests/fs/times.test.ts +7 -7
  117. package/tests/fs/truncate.test.ts +8 -36
  118. package/tests/fs/watch.test.ts +10 -10
  119. package/tests/fs/write.test.ts +77 -13
  120. package/tests/fs/xattr.test.ts +85 -0
  121. package/tests/logs.js +22 -0
  122. package/tests/setup/context.ts +1 -1
  123. package/tests/setup/index.ts +3 -3
  124. package/tests/setup/port.ts +7 -1
  125. package/dist/backends/port/fs.d.ts +0 -84
  126. package/dist/backends/port/fs.js +0 -151
  127. package/dist/backends/port/rpc.d.ts +0 -77
  128. package/dist/backends/port/rpc.js +0 -100
  129. package/dist/backends/store/simple.d.ts +0 -20
  130. package/dist/backends/store/simple.js +0 -13
  131. package/dist/internal/file.d.ts +0 -359
  132. package/dist/internal/file.js +0 -751
  133. package/dist/internal/log.d.ts +0 -133
  134. package/dist/internal/log.js +0 -218
  135. package/tests/fs/writeFile.test.ts +0 -70
@@ -1,81 +1,94 @@
1
+ import { type StructArray } from 'memium';
2
+ import type { UUID } from 'node:crypto';
3
+ import { BufferView } from 'utilium/buffer.js';
1
4
  import type { UsageInfo } from '../internal/filesystem.js';
2
5
  import { StoreFS } from './store/fs.js';
3
6
  import { SyncMapTransaction, type SyncMapStore } from './store/map.js';
4
7
  import type { Store } from './store/store.js';
5
- declare class MetadataEntry {
8
+ type Lock = Disposable & (() => void);
9
+ declare class MetadataEntry extends BufferView {
6
10
  /** Inode or data ID */
7
- id: number;
11
+ accessor id: number;
8
12
  /** Reserved for 64-bit offset expansion */
9
- protected offset_: number;
13
+ protected accessor offset_: number;
10
14
  /** Offset into the buffer the data is stored at. */
11
- offset: number;
15
+ accessor offset: number;
12
16
  /** The size of the data */
13
- size: number;
17
+ accessor size: number;
18
+ toString(): string;
14
19
  }
15
20
  /**
16
21
  * A block of metadata for a single-buffer file system.
17
22
  * This metadata maps IDs (for inodes and data) to actual offsets in the buffer.
18
23
  * This is done since IDs are not guaranteed to be sequential.
19
24
  */
20
- declare class MetadataBlock {
21
- protected readonly superblock: SuperBlock;
22
- offset: number;
23
- constructor(superblock: SuperBlock, offset?: number);
25
+ export declare class MetadataBlock extends Int32Array<ArrayBufferLike> {
26
+ readonly ['constructor']: typeof MetadataBlock;
24
27
  /**
25
28
  * The crc32c checksum for the metadata block.
26
29
  * @privateRemarks Keep this first!
27
30
  */
28
- checksum: number;
31
+ accessor checksum: number;
29
32
  /** The (last) time this metadata block was updated */
30
- timestamp: number;
31
- /** Reserved for 64-bit offset expansion */
32
- protected previous_offset_: number;
33
+ accessor timestamp: bigint;
33
34
  /** Offset to the previous metadata block */
34
- previous_offset: number;
35
+ accessor previous_offset: number;
35
36
  protected _previous?: MetadataBlock;
36
37
  get previous(): MetadataBlock | undefined;
38
+ protected get offsetHex(): string;
37
39
  /** Metadata entries. */
38
- entries: MetadataEntry[];
40
+ accessor items: StructArray<MetadataEntry>;
41
+ toString(long?: boolean): string;
42
+ /**
43
+ * If non-zero, this block is locked for writing.
44
+ * Note a int32 is used for `Atomics.wait`
45
+ */
46
+ accessor locked: number;
47
+ /**
48
+ * Wait for the block to be unlocked.
49
+ */
50
+ waitUnlocked(depth?: number): void;
51
+ lock(): Lock;
39
52
  }
40
53
  /**
41
54
  * The super block structure for a single-buffer file system
42
55
  */
43
- declare class SuperBlock {
44
- readonly store: SingleBufferStore;
45
- constructor(store: SingleBufferStore);
56
+ export declare class SuperBlock extends BufferView {
57
+ readonly ['constructor']: typeof SuperBlock;
58
+ constructor(...args: ConstructorParameters<typeof BufferView>);
46
59
  /**
47
60
  * The crc32c checksum for the super block.
48
61
  * @privateRemarks Keep this first!
49
62
  */
50
- checksum: number;
63
+ accessor checksum: number;
51
64
  /** Signature for the superblock. */
52
- magic: number;
65
+ accessor magic: number;
53
66
  /** The version of the on-disk format */
54
- version: number;
67
+ accessor version: number;
55
68
  /** Which format of `Inode` is used */
56
- inode_format: number;
69
+ accessor inode_format: number;
57
70
  /** Flags for the file system. Currently unused */
58
- flags: number;
71
+ accessor flags: number;
59
72
  /** The number of used bytes, including the super block and metadata */
60
- used_bytes: bigint;
73
+ accessor used_bytes: bigint;
61
74
  /** The total size of the entire file system, including the super block and metadata */
62
- total_bytes: bigint;
63
- /** An ID for this file system */
64
- id: bigint;
75
+ accessor total_bytes: bigint;
76
+ /** A UUID for this file system */
77
+ accessor uuid: Uint8Array;
65
78
  /**
66
79
  * The size in bytes of a metadata block.
67
80
  * Not currently configurable.
68
81
  */
69
- metadata_block_size: number;
82
+ accessor metadata_block_size: number;
70
83
  /** Reserved for 64-bit offset expansion */
71
- protected metadata_offset_: number;
84
+ protected accessor metadata_offset_: number;
72
85
  /** Offset of the current metadata block */
73
- metadata_offset: number;
86
+ accessor metadata_offset: number;
74
87
  metadata: MetadataBlock;
75
88
  /** An optional label for the file system */
76
- label: string;
89
+ accessor label: Uint8Array;
77
90
  /** Padded to 256 bytes */
78
- _padding: number[];
91
+ accessor _padding: Uint8Array;
79
92
  /**
80
93
  * Rotate out the current metadata block.
81
94
  * Allocates a new metadata block, moves the current one to backup,
@@ -93,30 +106,25 @@ declare class SuperBlock {
93
106
  *
94
107
  * @category Stores and Transactions
95
108
  */
96
- export declare class SingleBufferStore implements SyncMapStore {
109
+ export declare class SingleBufferStore extends BufferView implements SyncMapStore {
97
110
  readonly flags: readonly [];
98
111
  readonly name = "sbfs";
99
- readonly id = 1935828595;
112
+ readonly type = 1935828595;
113
+ get uuid(): UUID;
100
114
  protected superblock: SuperBlock;
101
115
  /**
102
116
  * @internal @hidden
103
117
  */
104
- readonly _view: DataView;
105
- /**
106
- * @internal @hidden
107
- */
108
- readonly _buffer: Uint8Array;
109
- constructor(buffer: ArrayBufferLike | ArrayBufferView);
110
- /**
111
- * Update a block's checksum and write it to the store's buffer.
112
- * @internal @hidden
113
- */
114
- _write(value: SuperBlock | MetadataBlock): void;
118
+ protected readonly _view: DataView;
119
+ protected readonly _u8: Uint8Array;
120
+ constructor(...args: ConstructorParameters<typeof BufferView>);
115
121
  keys(): Iterable<number>;
116
122
  get(id: number): Uint8Array | undefined;
117
123
  set(id: number, data: Uint8Array): void;
118
124
  delete(id: number): void;
119
- _fs?: StoreFS<Store> | undefined;
125
+ protected _fs?: StoreFS<Store> | undefined;
126
+ get fs(): StoreFS<Store> | undefined;
127
+ set fs(fs: StoreFS<Store> | undefined);
120
128
  sync(): Promise<void>;
121
129
  usage(): UsageInfo;
122
130
  transaction(): SyncMapTransaction;
@@ -136,9 +144,13 @@ declare const _SingleBuffer: {
136
144
  readonly required: true;
137
145
  };
138
146
  };
139
- readonly create: ({ buffer }: SingleBufferOptions) => StoreFS<SingleBufferStore>;
147
+ readonly create: (opt: SingleBufferOptions) => StoreFS<SingleBufferStore>;
140
148
  };
141
149
  type _SingleBuffer = typeof _SingleBuffer;
150
+ /**
151
+ * A backend that uses a single buffer for storing data
152
+ * @category Backends and Configuration
153
+ */
142
154
  export interface SingleBuffer extends _SingleBuffer {
143
155
  }
144
156
  /**