import type { ArrayOf } from 'memium'; import type { UUID } from 'node:crypto'; import { BufferView } from 'utilium/buffer.js'; import type { UsageInfo } from '../internal/filesystem.js'; import { StoreFS } from './store/fs.js'; import { SyncMapTransaction, type SyncMapStore } from './store/map.js'; import type { Store } from './store/store.js'; type Lock = Disposable & (() => void); declare const MetadataEntry_base: import("memium").StructConstructor>; declare class MetadataEntry extends MetadataEntry_base { /** Inode or data ID */ accessor id: number; /** Reserved for 64-bit offset expansion */ protected accessor offset_: number; /** Offset into the buffer the data is stored at. */ accessor offset: number; /** The size of the data */ accessor size: number; toString(): string; } declare const MetadataBlock_base: import("memium/decorators").StructFromTypedArray>; /** * A block of metadata for a single-buffer file system. * This metadata maps IDs (for inodes and data) to actual offsets in the buffer. * This is done since IDs are not guaranteed to be sequential. */ export declare class MetadataBlock extends MetadataBlock_base { readonly ['constructor']: typeof MetadataBlock; private static readonly lockIndex; /** * The crc32c checksum for the metadata block. * @privateRemarks Keep this first! */ accessor checksum: number; /** The (last) time this metadata block was updated */ accessor timestamp: bigint; /** Offset to the previous metadata block */ accessor previous_offset: number; protected _previous?: MetadataBlock; get previous(): MetadataBlock | undefined; /** Metadata entries. */ accessor items: ArrayOf; toString(long?: boolean): string; /** * If non-zero, this block is locked for writing. * Note a int32 is used for `Atomics.wait` */ accessor locked: number; /** * Wait for the block to be unlocked. */ waitUnlocked(depth?: number): void; lock(): Lock; } declare const SuperBlock_base: import("memium/decorators").StructFromTypedArray>; /** * The super block structure for a single-buffer file system */ export declare class SuperBlock extends SuperBlock_base { readonly ['constructor']: typeof SuperBlock; constructor(...args: ConstructorParameters>); /** * The crc32c checksum for the super block. * @privateRemarks Keep this first! */ accessor checksum: number; /** Signature for the superblock. */ accessor magic: number; /** The version of the on-disk format */ accessor version: number; /** Which format of `Inode` is used */ accessor inode_format: number; /** Flags for the file system. Currently unused */ accessor flags: number; /** The number of used bytes, including the super block and metadata */ accessor used_bytes: bigint; /** The total size of the entire file system, including the super block and metadata */ accessor total_bytes: bigint; /** A UUID for this file system */ accessor uuid: Uint8Array; /** * The size in bytes of a metadata block. * Not currently configurable. */ accessor metadata_block_size: number; /** Reserved for 64-bit offset expansion */ protected accessor metadata_offset_: number; /** Offset of the current metadata block */ accessor metadata_offset: number; metadata: MetadataBlock; /** An optional label for the file system */ accessor label: Uint8Array; /** Padded to 256 bytes */ accessor _padding: Uint8Array; /** * Rotate out the current metadata block. * Allocates a new metadata block, moves the current one to backup, * and updates used_bytes accordingly. * @returns the new metadata block */ rotateMetadata(): MetadataBlock; /** * Checks to see if `length` bytes are unused, starting at `offset`. * @internal Not for external use! */ isUnused(offset: number, length: number): boolean; } /** * * @category Stores and Transactions */ export declare class SingleBufferStore extends BufferView implements SyncMapStore { readonly flags: readonly []; readonly name = "sbfs"; readonly type = 1935828595; get uuid(): UUID; protected superblock: SuperBlock; /** * @internal @hidden */ protected readonly _view: DataView; protected readonly _u8: Uint8Array; constructor(...args: ConstructorParameters); keys(): Iterable; get(id: number): Uint8Array | undefined; set(id: number, data: Uint8Array): void; delete(id: number): void; protected _fs?: StoreFS | undefined; get fs(): StoreFS | undefined; set fs(fs: StoreFS | undefined); sync(): Promise; usage(): UsageInfo; transaction(): SyncMapTransaction; } /** * Options for the `SingleBuffer` backend * @category Backends and Configuration */ export interface SingleBufferOptions { buffer: ArrayBufferLike | ArrayBufferView; } declare const _SingleBuffer: { readonly name: "SingleBuffer"; readonly options: { readonly buffer: { readonly type: "object"; readonly required: true; }; }; readonly create: (opt: SingleBufferOptions) => StoreFS; }; type _SingleBuffer = typeof _SingleBuffer; /** * A backend that uses a single buffer for storing data * @category Backends and Configuration */ export interface SingleBuffer extends _SingleBuffer { } /** * A backend that uses a single buffer for storing data * @category Backends and Configuration */ export declare const SingleBuffer: SingleBuffer; export {};