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