@componentor/fs 3.0.27 → 3.0.28
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/index.d.mts +25 -0
- package/dist/index.js +109 -52
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/src/node-streams.ts","../src/src/protocol/opcodes.ts","../src/src/errors.ts","../src/src/vfs/layout.ts","../src/src/stats.ts","../src/src/constants.ts","../src/src/methods/open.ts","../src/src/encoding.ts","../src/src/methods/readFile.ts","../src/src/methods/writeFile.ts","../src/src/methods/appendFile.ts","../src/src/methods/exists.ts","../src/src/methods/mkdir.ts","../src/src/methods/rmdir.ts","../src/src/methods/rm.ts","../src/src/methods/unlink.ts","../src/src/methods/readdir.ts","../src/src/methods/stat.ts","../src/src/methods/rename.ts","../src/src/methods/copyFile.ts","../src/src/methods/truncate.ts","../src/src/methods/access.ts","../src/src/methods/realpath.ts","../src/src/methods/chmod.ts","../src/src/methods/chown.ts","../src/src/methods/utimes.ts","../src/src/methods/symlink.ts","../src/src/methods/link.ts","../src/src/methods/mkdtemp.ts","../src/src/methods/opendir.ts","../src/src/path.ts","../src/src/methods/watch.ts","../src/src/methods/glob.ts","../src/src/filesystem.ts","../src/src/vfs/engine.ts","../src/src/helpers.ts","../src/src/index.ts"],"names":["decoder","encoder","resolve","status","isAbsolute","entries","inode","data","totalSize","buf","view","offset","basename","files","directories"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Minimal Node.js-compatible stream classes for use in browser/OPFS environments.\n *\n * These do NOT depend on Node.js built-ins — they provide just enough API surface\n * for libraries that expect `.on('data')`, `.pipe()`, `.write()`, `.end()`, etc.\n */\n\n// ---------------------------------------------------------------------------\n// SimpleEventEmitter — shared base for Node-style event emitters\n// ---------------------------------------------------------------------------\n\ntype Listener = (...args: unknown[]) => void;\n\nexport class SimpleEventEmitter {\n private _listeners = new Map<string, Listener[]>();\n private _onceSet = new WeakSet<Listener>();\n\n on(event: string, fn: Listener): this {\n let arr = this._listeners.get(event);\n if (!arr) {\n arr = [];\n this._listeners.set(event, arr);\n }\n arr.push(fn);\n return this;\n }\n\n addListener(event: string, fn: Listener): this {\n return this.on(event, fn);\n }\n\n once(event: string, fn: Listener): this {\n this._onceSet.add(fn);\n return this.on(event, fn);\n }\n\n off(event: string, fn: Listener): this {\n const arr = this._listeners.get(event);\n if (arr) {\n const idx = arr.indexOf(fn);\n if (idx !== -1) arr.splice(idx, 1);\n }\n return this;\n }\n\n removeListener(event: string, fn: Listener): this {\n return this.off(event, fn);\n }\n\n removeAllListeners(event?: string): this {\n if (event !== undefined) {\n this._listeners.delete(event);\n } else {\n this._listeners.clear();\n }\n return this;\n }\n\n emit(event: string, ...args: unknown[]): boolean {\n const arr = this._listeners.get(event);\n if (!arr || arr.length === 0) return false;\n // Copy so that once-removals don't affect iteration.\n const copy = arr.slice();\n for (const fn of copy) {\n if (this._onceSet.has(fn)) {\n this._onceSet.delete(fn);\n this.off(event, fn);\n }\n fn(...args);\n }\n return true;\n }\n\n listenerCount(event: string): number {\n return this._listeners.get(event)?.length ?? 0;\n }\n}\n\n// ---------------------------------------------------------------------------\n// NodeReadable — minimal Node.js Readable-compatible stream\n// ---------------------------------------------------------------------------\n\nexport interface NodeReadableOptions {\n highWaterMark?: number;\n /** Byte offset to start reading from */\n start?: number;\n /** Byte offset to stop reading at (inclusive, Node.js convention) */\n end?: number;\n}\n\nexport class NodeReadable extends SimpleEventEmitter {\n private _paused = true;\n private _destroyed = false;\n private _ended = false;\n private _reading = false;\n private _readBuffer: Uint8Array | null = null;\n\n /** Whether the stream is still readable (not ended or destroyed). */\n readable = true;\n\n /** The file path this stream reads from (set externally). */\n path: string = '';\n\n /** Total bytes read so far. */\n bytesRead = 0;\n\n /** Optional cleanup callback invoked on destroy (e.g. close file handle). */\n private _destroyFn: (() => Promise<void>) | null = null;\n\n constructor(\n private _readFn: () => Promise<{ done: boolean; value?: Uint8Array }>,\n destroyFn?: () => Promise<void>,\n ) {\n super();\n if (destroyFn) this._destroyFn = destroyFn;\n }\n\n // ---- Flow control (override on to auto-resume) ----\n\n on(event: string, fn: Listener): this {\n super.on(event, fn);\n // Attaching a 'data' listener switches to flowing mode (Node.js behaviour).\n if (event === 'data' && this._paused) {\n this.resume();\n }\n return this;\n }\n\n pause(): this {\n this._paused = true;\n return this;\n }\n\n resume(): this {\n if (this._destroyed || this._ended) return this;\n this._paused = false;\n this._drain();\n return this;\n }\n\n /**\n * Non-flowing read — returns the last buffered chunk or null.\n * Node.js has a complex buffer system; we keep it simple here.\n */\n read(_size?: number): Uint8Array | null {\n const buf = this._readBuffer;\n this._readBuffer = null;\n return buf;\n }\n\n /** Destroy the stream, optionally with an error. */\n destroy(err?: Error): this {\n if (this._destroyed) return this;\n this._destroyed = true;\n this.readable = false;\n if (err) {\n this.emit('error', err);\n }\n // Run destroy callback (e.g. close file handle) then emit 'close'.\n if (this._destroyFn) {\n this._destroyFn().then(\n () => this.emit('close'),\n () => this.emit('close'),\n );\n } else {\n this.emit('close');\n }\n return this;\n }\n\n // ---- pipe ----\n\n pipe<T extends NodeWritable | WritableStream<Uint8Array>>(dest: T): T {\n if (isNodeWritableInstance(dest)) {\n this.on('data', (chunk: unknown) => {\n (dest as NodeWritable).write(chunk as Uint8Array);\n });\n this.on('end', () => {\n if (typeof (dest as NodeWritable).end === 'function') {\n (dest as NodeWritable).end();\n }\n });\n this.on('error', (err: unknown) => {\n if (typeof (dest as NodeWritable).destroy === 'function') {\n (dest as NodeWritable).destroy(err as Error);\n }\n });\n } else {\n // Web WritableStream\n const writer = (dest as WritableStream<Uint8Array>).getWriter();\n this.on('data', (chunk: unknown) => {\n writer.write(chunk as Uint8Array);\n });\n this.on('end', () => {\n writer.close();\n });\n this.on('error', (err: unknown) => {\n writer.abort(err);\n });\n }\n\n // Pipe starts flowing mode.\n if (this._paused) {\n this.resume();\n }\n return dest;\n }\n\n // ---- Internal ----\n\n private async _drain(): Promise<void> {\n if (this._reading || this._destroyed || this._ended) return;\n this._reading = true;\n\n try {\n while (!this._paused && !this._destroyed && !this._ended) {\n const result = await this._readFn();\n\n if (this._destroyed) break;\n\n if (result.done || !result.value || result.value.byteLength === 0) {\n this._ended = true;\n this.readable = false;\n this.emit('end');\n this.emit('close');\n break;\n }\n\n this.bytesRead += result.value.byteLength;\n this._readBuffer = result.value;\n this.emit('data', result.value);\n }\n } catch (err) {\n if (!this._destroyed) {\n this.destroy(err as Error);\n }\n } finally {\n this._reading = false;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// NodeWritable — minimal Node.js Writable-compatible stream\n// ---------------------------------------------------------------------------\n\nexport class NodeWritable extends SimpleEventEmitter {\n /** Total bytes written so far. */\n bytesWritten = 0;\n\n /** The file path this stream was created for. */\n readonly path: string;\n\n /** Whether this stream is still writable. */\n writable = true;\n\n private _destroyed = false;\n private _finished = false;\n private _writing = false;\n\n constructor(\n path: string,\n private _writeFn: (chunk: Uint8Array) => Promise<void>,\n private _closeFn: () => Promise<void>,\n ) {\n super();\n this.path = path;\n }\n\n // -- public API -----------------------------------------------------------\n\n write(\n chunk: string | Uint8Array,\n encodingOrCb?: string | ((...args: unknown[]) => void),\n cb?: (...args: unknown[]) => void,\n ): boolean {\n const callback = typeof encodingOrCb === 'function' ? encodingOrCb : cb;\n\n if (this._destroyed || this._finished) {\n const err = new Error('write after end');\n if (callback) callback(err);\n return false;\n }\n\n const data =\n typeof chunk === 'string'\n ? new TextEncoder().encode(chunk)\n : chunk;\n\n this._writing = true;\n this._writeFn(data)\n .then(() => {\n this.bytesWritten += data.byteLength;\n this._writing = false;\n if (callback) callback();\n this.emit('drain');\n })\n .catch((err: unknown) => {\n this._writing = false;\n if (callback) callback(err);\n this.emit('error', err);\n });\n\n // Always return true — we don't implement back-pressure\n return true;\n }\n\n end(\n chunk?: string | Uint8Array | ((...args: unknown[]) => void),\n encodingOrCb?: string | ((...args: unknown[]) => void),\n cb?: (...args: unknown[]) => void,\n ): this {\n // Normalise arguments — Node allows several overloads\n let callback: ((...args: unknown[]) => void) | undefined;\n let finalChunk: string | Uint8Array | undefined;\n\n if (typeof chunk === 'function') {\n callback = chunk;\n finalChunk = undefined;\n } else {\n finalChunk = chunk;\n if (typeof encodingOrCb === 'function') {\n callback = encodingOrCb;\n } else {\n callback = cb;\n }\n }\n\n if (this._finished) {\n if (callback) callback();\n return this;\n }\n\n this.writable = false;\n\n const finish = () => {\n this._closeFn()\n .then(() => {\n this._finished = true;\n this.emit('finish');\n this.emit('close');\n if (callback) callback();\n })\n .catch((err: unknown) => {\n this.emit('error', err);\n if (callback) callback(err);\n });\n };\n\n if (finalChunk !== undefined && finalChunk !== null) {\n this.write(finalChunk, undefined, () => finish());\n } else {\n finish();\n }\n\n return this;\n }\n\n destroy(err?: Error): this {\n if (this._destroyed) return this;\n this._destroyed = true;\n this.writable = false;\n\n this._closeFn().catch(() => {}).finally(() => {\n if (err) this.emit('error', err);\n this.emit('close');\n });\n\n return this;\n }\n}\n\n/** Check if something is a Node-style writable (has .write() but no .getWriter()). */\nfunction isNodeWritableInstance(obj: unknown): obj is NodeWritable {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n typeof (obj as NodeWritable).write === 'function' &&\n !('getWriter' in (obj as object))\n );\n}\n","/**\n * Binary protocol operation codes and header encoding/decoding.\n * All inter-worker messages use this minimal binary protocol — no JSON, no strings.\n */\n\n// Operation codes\nexport const OP = {\n READ: 1,\n WRITE: 2,\n UNLINK: 3,\n STAT: 4,\n LSTAT: 5,\n MKDIR: 6,\n RMDIR: 7,\n READDIR: 8,\n RENAME: 9,\n EXISTS: 10,\n TRUNCATE: 11,\n APPEND: 12,\n COPY: 13,\n ACCESS: 14,\n REALPATH: 15,\n CHMOD: 16,\n CHOWN: 17,\n UTIMES: 18,\n SYMLINK: 19,\n READLINK: 20,\n LINK: 21,\n OPEN: 22,\n CLOSE: 23,\n FREAD: 24,\n FWRITE: 25,\n FSTAT: 26,\n FTRUNCATE: 27,\n FSYNC: 28,\n OPENDIR: 29,\n MKDTEMP: 30,\n} as const;\n\nexport type OpCode = (typeof OP)[keyof typeof OP];\n\n// Response status codes\nexport const STATUS = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n} as const;\n\n// SAB layout offsets\nexport const SAB_OFFSETS = {\n CONTROL: 0, // Int32 - signal (0=idle, 1=request, 2=response, 3=chunk, 4=ack)\n OPCODE: 4, // Int32 - operation code\n STATUS: 8, // Int32 - response status / error\n CHUNK_LEN: 12, // Int32 - bytes in this chunk\n TOTAL_LEN: 16, // BigUint64 - full data size across all chunks\n CHUNK_IDX: 24, // Int32 - 0-based chunk index\n RESERVED: 28, // Int32 - reserved\n HEADER_SIZE: 32, // Data payload starts here\n} as const;\n\n// SAB control signals\nexport const SIGNAL = {\n IDLE: 0,\n REQUEST: 1,\n RESPONSE: 2,\n CHUNK: 3,\n CHUNK_ACK: 4,\n} as const;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Encode a request into an ArrayBuffer for MessageChannel transfer.\n *\n * Request format (16-byte header + path + data):\n * bytes 0-3: operation (uint32)\n * bytes 4-7: flags (uint32)\n * bytes 8-11: pathLen (uint32)\n * bytes 12-15: dataLen (uint32)\n * bytes 16+: path (UTF-8)\n * bytes 16+pathLen: data payload\n */\nexport function encodeRequest(\n op: number,\n path: string,\n flags: number = 0,\n data?: Uint8Array\n): ArrayBuffer {\n const pathBytes = encoder.encode(path);\n const dataLen = data ? data.byteLength : 0;\n const totalLen = 16 + pathBytes.byteLength + dataLen;\n const buf = new ArrayBuffer(totalLen);\n const view = new DataView(buf);\n\n view.setUint32(0, op, true);\n view.setUint32(4, flags, true);\n view.setUint32(8, pathBytes.byteLength, true);\n view.setUint32(12, dataLen, true);\n\n const bytes = new Uint8Array(buf);\n bytes.set(pathBytes, 16);\n if (data) {\n bytes.set(data, 16 + pathBytes.byteLength);\n }\n\n return buf;\n}\n\n/**\n * Decode a request ArrayBuffer.\n */\nexport function decodeRequest(buf: ArrayBuffer): {\n op: number;\n flags: number;\n path: string;\n data: Uint8Array | null;\n} {\n // Minimum header: 16 bytes (op + flags + pathLen + dataLen)\n if (buf.byteLength < 16) {\n throw new Error(`Request buffer too small: ${buf.byteLength} < 16 bytes (possible SAB race)`);\n }\n\n const view = new DataView(buf);\n const op = view.getUint32(0, true);\n const flags = view.getUint32(4, true);\n const pathLen = view.getUint32(8, true);\n const dataLen = view.getUint32(12, true);\n\n // Validate payload fits in buffer\n const expectedMin = 16 + pathLen + dataLen;\n if (buf.byteLength < expectedMin) {\n throw new Error(`Request buffer truncated: ${buf.byteLength} < ${expectedMin} bytes (op=${op}, pathLen=${pathLen}, dataLen=${dataLen})`);\n }\n\n const bytes = new Uint8Array(buf);\n const path = decoder.decode(bytes.subarray(16, 16 + pathLen));\n const data = dataLen > 0\n ? bytes.subarray(16 + pathLen, 16 + pathLen + dataLen)\n : null;\n\n return { op, flags, path, data };\n}\n\n/**\n * Encode a response into an ArrayBuffer.\n *\n * Response format (8-byte header + data):\n * bytes 0-3: status (uint32)\n * bytes 4-7: dataLen (uint32)\n * bytes 8+: data payload\n */\nexport function encodeResponse(status: number, data?: Uint8Array): ArrayBuffer {\n const dataLen = data ? data.byteLength : 0;\n const buf = new ArrayBuffer(8 + dataLen);\n const view = new DataView(buf);\n\n view.setUint32(0, status, true);\n view.setUint32(4, dataLen, true);\n\n if (data) {\n new Uint8Array(buf).set(data, 8);\n }\n\n return buf;\n}\n\n/**\n * Decode a response ArrayBuffer.\n */\nexport function decodeResponse(buf: ArrayBuffer): {\n status: number;\n data: Uint8Array | null;\n} {\n const view = new DataView(buf);\n const status = view.getUint32(0, true);\n const dataLen = view.getUint32(4, true);\n\n const data = dataLen > 0\n ? new Uint8Array(buf, 8, dataLen)\n : null;\n\n return { status, data };\n}\n\n/**\n * Encode a two-path request (rename, copy, symlink, link).\n * Data payload contains: [pathLen2:u32] [path2 bytes]\n */\nexport function encodeTwoPathRequest(\n op: number,\n path1: string,\n path2: string,\n flags: number = 0\n): ArrayBuffer {\n const path2Bytes = encoder.encode(path2);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n const pv = new DataView(payload.buffer);\n pv.setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n\n return encodeRequest(op, path1, flags, payload);\n}\n\n/**\n * Decode the second path from a two-path request's data payload.\n */\nexport function decodeSecondPath(data: Uint8Array): string {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const pathLen = view.getUint32(0, true);\n return decoder.decode(data.subarray(4, 4 + pathLen));\n}\n","/**\n * Node.js compatible filesystem error classes\n */\n\nexport class FSError extends Error {\n code: string;\n errno: number;\n syscall?: string;\n path?: string;\n\n constructor(code: string, errno: number, message: string, syscall?: string, path?: string) {\n super(message);\n this.name = 'FSError';\n this.code = code;\n this.errno = errno;\n this.syscall = syscall;\n this.path = path;\n }\n}\n\nexport const ErrorCodes = {\n ENOENT: -2,\n EEXIST: -17,\n EISDIR: -21,\n ENOTDIR: -20,\n ENOTEMPTY: -39,\n EACCES: -13,\n EBADF: -9,\n EINVAL: -22,\n EMFILE: -24,\n ENOSPC: -28,\n EPERM: -1,\n ENOSYS: -38,\n ELOOP: -40,\n} as const;\n\n/** Binary protocol status codes → error code mapping */\nexport const STATUS_TO_CODE: Record<number, string> = {\n 0: 'OK',\n 1: 'ENOENT',\n 2: 'EEXIST',\n 3: 'EISDIR',\n 4: 'ENOTDIR',\n 5: 'ENOTEMPTY',\n 6: 'EACCES',\n 7: 'EINVAL',\n 8: 'EBADF',\n 9: 'ELOOP',\n 10: 'ENOSPC',\n};\n\n/** Error code → binary protocol status mapping */\nexport const CODE_TO_STATUS: Record<string, number> = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n};\n\nexport function createError(code: string, syscall: string, path: string): FSError {\n const errno = ErrorCodes[code as keyof typeof ErrorCodes] ?? -1;\n const messages: Record<string, string> = {\n ENOENT: 'no such file or directory',\n EEXIST: 'file already exists',\n EISDIR: 'illegal operation on a directory',\n ENOTDIR: 'not a directory',\n ENOTEMPTY: 'directory not empty',\n EACCES: 'permission denied',\n EINVAL: 'invalid argument',\n EBADF: 'bad file descriptor',\n ELOOP: 'too many symbolic links encountered',\n ENOSPC: 'no space left on device',\n };\n const msg = messages[code] ?? 'unknown error';\n return new FSError(code, errno, `${code}: ${msg}, ${syscall} '${path}'`, syscall, path);\n}\n\nexport function statusToError(status: number, syscall: string, path: string): FSError {\n const code = STATUS_TO_CODE[status] ?? 'EINVAL';\n return createError(code, syscall, path);\n}\n","/**\n * VFS Binary Layout Constants\n *\n * Defines the on-disk structure of the virtual filesystem binary file.\n * All reads/writes go through a FileSystemSyncAccessHandle.\n */\n\n// Magic number: \"VFS!\" in ASCII\nexport const VFS_MAGIC = 0x56465321;\nexport const VFS_VERSION = 1;\n\n// Default sizes\nexport const DEFAULT_BLOCK_SIZE = 4096;\nexport const DEFAULT_INODE_COUNT = 10000;\nexport const INODE_SIZE = 64; // bytes per inode entry\n\n// Superblock layout (64 bytes)\nexport const SUPERBLOCK = {\n SIZE: 64,\n MAGIC: 0, // uint32 - 0x56465321\n VERSION: 4, // uint32\n INODE_COUNT: 8, // uint32 - total inodes allocated\n BLOCK_SIZE: 12, // uint32 - data block size (default 4096)\n TOTAL_BLOCKS: 16, // uint32 - total data blocks\n FREE_BLOCKS: 20, // uint32 - available data blocks\n INODE_OFFSET: 24, // float64 - byte offset to inode table\n PATH_OFFSET: 32, // float64 - byte offset to path table\n DATA_OFFSET: 40, // float64 - byte offset to data region\n BITMAP_OFFSET: 48, // float64 - byte offset to free block bitmap\n PATH_USED: 56, // uint32 - bytes used in path table\n RESERVED: 60, // uint32\n} as const;\n\n// Inode entry layout (64 bytes each)\nexport const INODE = {\n TYPE: 0, // uint8 - 0=free, 1=file, 2=directory, 3=symlink\n FLAGS: 1, // uint8[3] - reserved\n PATH_OFFSET: 4, // uint32 - byte offset into path table\n PATH_LENGTH: 8, // uint16 - length of path string\n NLINK: 10, // uint16 - hard link count\n MODE: 12, // uint32 - permissions (e.g. 0o100644)\n SIZE: 16, // float64 - file content size in bytes (using f64 for >4GB)\n FIRST_BLOCK: 24, // uint32 - index of first data block\n BLOCK_COUNT: 28, // uint32 - number of contiguous data blocks\n MTIME: 32, // float64 - last modification time (ms since epoch)\n CTIME: 40, // float64 - creation/change time (ms since epoch)\n ATIME: 48, // float64 - last access time (ms since epoch)\n UID: 56, // uint32 - owner\n GID: 60, // uint32 - group\n} as const;\n\n// Inode type constants\nexport const INODE_TYPE = {\n FREE: 0,\n FILE: 1,\n DIRECTORY: 2,\n SYMLINK: 3,\n} as const;\n\n// Default file modes\nexport const DEFAULT_FILE_MODE = 0o100644;\nexport const DEFAULT_DIR_MODE = 0o040755;\nexport const DEFAULT_SYMLINK_MODE = 0o120777;\nexport const DEFAULT_UMASK = 0o022;\n\n// POSIX file type bits\nexport const S_IFMT = 0o170000;\nexport const S_IFREG = 0o100000;\nexport const S_IFDIR = 0o040000;\nexport const S_IFLNK = 0o120000;\n\n// Max symlink depth for cycle detection\nexport const MAX_SYMLINK_DEPTH = 40;\n\n// Path table compaction threshold (25% dead space)\nexport const PATH_COMPACTION_THRESHOLD = 0.25;\n\n// Initial path table size (256KB)\nexport const INITIAL_PATH_TABLE_SIZE = 256 * 1024;\n\n// Initial data blocks (1024 blocks = 4MB with 4KB blocks)\nexport const INITIAL_DATA_BLOCKS = 1024;\n\n/**\n * Calculate section offsets for a fresh VFS.\n */\nexport function calculateLayout(inodeCount: number = DEFAULT_INODE_COUNT, blockSize: number = DEFAULT_BLOCK_SIZE, totalBlocks: number = INITIAL_DATA_BLOCKS) {\n const inodeTableOffset = SUPERBLOCK.SIZE;\n const inodeTableSize = inodeCount * INODE_SIZE;\n const pathTableOffset = inodeTableOffset + inodeTableSize;\n const pathTableSize = INITIAL_PATH_TABLE_SIZE;\n const bitmapOffset = pathTableOffset + pathTableSize;\n const bitmapSize = Math.ceil(totalBlocks / 8);\n // Align data region to block boundary\n const dataOffset = Math.ceil((bitmapOffset + bitmapSize) / blockSize) * blockSize;\n const totalSize = dataOffset + totalBlocks * blockSize;\n\n return {\n inodeTableOffset,\n inodeTableSize,\n pathTableOffset,\n pathTableSize,\n bitmapOffset,\n bitmapSize,\n dataOffset,\n totalSize,\n totalBlocks,\n };\n}\n","/**\n * Stats and Dirent object construction.\n * Decodes binary stat responses from the server into Node.js-compatible objects.\n */\n\nimport type { Stats, BigIntStats, Dirent } from './types.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Decode a binary stat response (53 bytes) into a Stats object.\n *\n * Format:\n * byte 0: type (uint8)\n * bytes 1-4: mode (uint32)\n * bytes 5-12: size (float64)\n * bytes 13-20: mtime (float64)\n * bytes 21-28: ctime (float64)\n * bytes 29-36: atime (float64)\n * bytes 37-40: uid (uint32)\n * bytes 41-44: gid (uint32)\n * bytes 45-48: ino (uint32)\n * bytes 49-52: nlink (uint32)\n */\nexport function decodeStats(data: Uint8Array): Stats {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const type = view.getUint8(0);\n const mode = view.getUint32(1, true);\n const size = view.getFloat64(5, true);\n const mtimeMs = view.getFloat64(13, true);\n const ctimeMs = view.getFloat64(21, true);\n const atimeMs = view.getFloat64(29, true);\n const uid = view.getUint32(37, true);\n const gid = view.getUint32(41, true);\n const ino = view.getUint32(45, true);\n // Backwards compatible: older 49-byte buffers default nlink to 1\n const nlink = data.byteLength >= 53 ? view.getUint32(49, true) : 1;\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n return {\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 1,\n ino,\n mode,\n nlink,\n uid,\n gid,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs,\n mtimeMs,\n ctimeMs,\n birthtimeMs: ctimeMs,\n atime: new Date(atimeMs),\n mtime: new Date(mtimeMs),\n ctime: new Date(ctimeMs),\n birthtime: new Date(ctimeMs),\n atimeNs: atimeMs * 1_000_000,\n mtimeNs: mtimeMs * 1_000_000,\n ctimeNs: ctimeMs * 1_000_000,\n birthtimeNs: ctimeMs * 1_000_000,\n };\n}\n\n/**\n * Decode a binary stat response (49 bytes) into a BigIntStats object.\n * Same binary format as decodeStats but returns BigInt values.\n */\nexport function decodeStatsBigInt(data: Uint8Array): BigIntStats {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const type = view.getUint8(0);\n const mode = view.getUint32(1, true);\n const size = view.getFloat64(5, true);\n const mtimeMs = view.getFloat64(13, true);\n const ctimeMs = view.getFloat64(21, true);\n const atimeMs = view.getFloat64(29, true);\n const uid = view.getUint32(37, true);\n const gid = view.getUint32(41, true);\n const ino = view.getUint32(45, true);\n const nlink = data.byteLength >= 53 ? view.getUint32(49, true) : 1;\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n const atimeMsBigInt = BigInt(Math.trunc(atimeMs));\n const mtimeMsBigInt = BigInt(Math.trunc(mtimeMs));\n const ctimeMsBigInt = BigInt(Math.trunc(ctimeMs));\n\n return {\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 1n,\n ino: BigInt(ino),\n mode: BigInt(mode),\n nlink: BigInt(nlink),\n uid: BigInt(uid),\n gid: BigInt(gid),\n rdev: 0n,\n size: BigInt(Math.trunc(size)),\n blksize: 4096n,\n blocks: BigInt(Math.ceil(size / 512)),\n atimeMs: atimeMsBigInt,\n mtimeMs: mtimeMsBigInt,\n ctimeMs: ctimeMsBigInt,\n birthtimeMs: ctimeMsBigInt,\n atime: new Date(atimeMs),\n mtime: new Date(mtimeMs),\n ctime: new Date(ctimeMs),\n birthtime: new Date(ctimeMs),\n atimeNs: atimeMsBigInt * 1_000_000n,\n mtimeNs: mtimeMsBigInt * 1_000_000n,\n ctimeNs: ctimeMsBigInt * 1_000_000n,\n birthtimeNs: ctimeMsBigInt * 1_000_000n,\n };\n}\n\n/**\n * Decode a readdir response with file types.\n *\n * Format:\n * bytes 0-3: count (uint32)\n * Then for each entry:\n * bytes 0-1: nameLen (uint16)\n * bytes 2+: name (UTF-8)\n * byte after name: type (uint8)\n */\nexport function decodeDirents(data: Uint8Array, parentPath: string = ''): Dirent[] {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const count = view.getUint32(0, true);\n const decoder = new TextDecoder();\n const entries: Dirent[] = [];\n let offset = 4;\n\n for (let i = 0; i < count; i++) {\n const nameLen = view.getUint16(offset, true);\n offset += 2;\n const name = decoder.decode(data.subarray(offset, offset + nameLen));\n offset += nameLen;\n const type = data[offset++];\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n entries.push({\n name,\n parentPath,\n path: parentPath,\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n });\n }\n\n return entries;\n}\n\n/**\n * Decode a simple readdir response (names only).\n *\n * Format:\n * bytes 0-3: count (uint32)\n * Then for each entry:\n * bytes 0-1: nameLen (uint16)\n * bytes 2+: name (UTF-8)\n */\nexport function decodeNames(data: Uint8Array): string[] {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const count = view.getUint32(0, true);\n const decoder = new TextDecoder();\n const names: string[] = [];\n let offset = 4;\n\n for (let i = 0; i < count; i++) {\n const nameLen = view.getUint16(offset, true);\n offset += 2;\n names.push(decoder.decode(data.subarray(offset, offset + nameLen)));\n offset += nameLen;\n }\n\n return names;\n}\n","/**\n * File system constants matching Node.js fs.constants\n */\n\nexport const constants = {\n // File access constants\n F_OK: 0,\n R_OK: 4,\n W_OK: 2,\n X_OK: 1,\n\n // File copy constants\n COPYFILE_EXCL: 1,\n COPYFILE_FICLONE: 2,\n COPYFILE_FICLONE_FORCE: 4,\n\n // File open constants\n O_RDONLY: 0,\n O_WRONLY: 1,\n O_RDWR: 2,\n O_CREAT: 64,\n O_EXCL: 128,\n O_TRUNC: 512,\n O_APPEND: 1024,\n O_NOCTTY: 256,\n O_NONBLOCK: 2048,\n O_SYNC: 4096,\n O_DSYNC: 4096,\n O_DIRECTORY: 65536,\n O_NOFOLLOW: 131072,\n O_NOATIME: 262144,\n\n // File type constants\n S_IFMT: 0o170000,\n S_IFREG: 0o100000,\n S_IFDIR: 0o040000,\n S_IFCHR: 0o020000,\n S_IFBLK: 0o060000,\n S_IFIFO: 0o010000,\n S_IFLNK: 0o120000,\n S_IFSOCK: 0o140000,\n\n // File mode constants\n S_IRWXU: 0o700,\n S_IRUSR: 0o400,\n S_IWUSR: 0o200,\n S_IXUSR: 0o100,\n S_IRWXG: 0o070,\n S_IRGRP: 0o040,\n S_IWGRP: 0o020,\n S_IXGRP: 0o010,\n S_IRWXO: 0o007,\n S_IROTH: 0o004,\n S_IWOTH: 0o002,\n S_IXOTH: 0o001,\n} as const;\n\nexport type Constants = typeof constants;\n","import type { Stats, FileHandle, ReadOptions, WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\nimport { constants } from '../constants.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function parseFlags(flags: string): number {\n switch (flags) {\n case 'r': return constants.O_RDONLY;\n case 'r+': return constants.O_RDWR;\n case 'w': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC;\n case 'w+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC;\n case 'a': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND;\n case 'a+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND;\n case 'wx': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'wx+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'ax': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n case 'ax+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n default: return constants.O_RDONLY;\n }\n}\n\nexport function openSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n flags: string | number = 'r',\n _mode?: number\n): number {\n const numFlags = typeof flags === 'string' ? parseFlags(flags) : flags;\n const buf = encodeRequest(OP.OPEN, filePath, numFlags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n return new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n}\n\nexport function closeSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.CLOSE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n}\n\nexport function readSync(\n syncRequest: SyncRequestFn,\n fd: number,\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n): number {\n let buffer: Uint8Array;\n let off: number, len: number, pos: number | null;\n\n if (bufferOrOptions instanceof Uint8Array) {\n buffer = bufferOrOptions;\n if (offsetOrOptions != null && typeof offsetOrOptions === 'object') {\n // readSync(fd, buffer, { offset?, length?, position? })\n off = offsetOrOptions.offset ?? 0;\n len = offsetOrOptions.length ?? buffer.byteLength;\n pos = offsetOrOptions.position ?? null;\n } else {\n // readSync(fd, buffer, offset?, length?, position?)\n off = offsetOrOptions ?? 0;\n len = length ?? buffer.byteLength;\n pos = position ?? null;\n }\n } else {\n // readSync(fd, { buffer, offset?, length?, position? })\n buffer = bufferOrOptions.buffer;\n off = bufferOrOptions.offset ?? 0;\n len = bufferOrOptions.length ?? buffer.byteLength;\n pos = bufferOrOptions.position ?? null;\n }\n\n const fdBuf = new Uint8Array(16);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, len, true);\n dv.setFloat64(8, pos ?? -1, true);\n const buf = encodeRequest(OP.FREAD, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n if (data) {\n buffer.set(data.subarray(0, Math.min(data.byteLength, len)), off);\n return data.byteLength;\n }\n return 0;\n}\n\nexport function writeSyncFd(\n syncRequest: SyncRequestFn,\n fd: number,\n bufferOrString: Uint8Array | string,\n offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n lengthOrEncoding?: number | string,\n position?: number | null\n): number {\n let writeData: Uint8Array;\n let pos: number | null;\n\n if (typeof bufferOrString === 'string') {\n // writeSync(fd, string, position?, encoding?)\n writeData = encoder.encode(bufferOrString);\n pos = (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'number') ? offsetOrPositionOrOptions : null;\n // lengthOrEncoding is encoding (ignored — always utf-8)\n } else if (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'object') {\n // writeSync(fd, buffer, { offset?, length?, position? })\n const offset = offsetOrPositionOrOptions.offset ?? 0;\n const length = offsetOrPositionOrOptions.length ?? bufferOrString.byteLength;\n pos = offsetOrPositionOrOptions.position ?? null;\n writeData = bufferOrString.subarray(offset, offset + length);\n } else {\n // writeSync(fd, buffer, offset?, length?, position?)\n const offset = offsetOrPositionOrOptions ?? 0;\n const length = lengthOrEncoding != null ? lengthOrEncoding as number : bufferOrString.byteLength;\n pos = position ?? null;\n writeData = bufferOrString.subarray(offset, offset + length);\n }\n const fdBuf = new Uint8Array(12 + writeData.byteLength);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(4, pos ?? -1, true);\n fdBuf.set(writeData, 12);\n const buf = encodeRequest(OP.FWRITE, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n return data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n}\n\nexport function fstatSync(\n syncRequest: SyncRequestFn,\n fd: number\n): Stats {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.FSTAT, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n}\n\nexport function ftruncateSync(\n syncRequest: SyncRequestFn,\n fd: number,\n len: number = 0\n): void {\n const fdBuf = new Uint8Array(12);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(4, len, true);\n const buf = encodeRequest(OP.FTRUNCATE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n}\n\nexport function fdatasyncSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const buf = encodeRequest(OP.FSYNC, '');\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fdatasync', String(fd));\n}\n\n// ========== Async FileHandle ==========\n\nexport async function open(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n flags?: string | number,\n _mode?: number\n): Promise<FileHandle> {\n const numFlags = typeof flags === 'string' ? parseFlags(flags ?? 'r') : (flags ?? 0);\n const { status, data } = await asyncRequest(OP.OPEN, filePath, numFlags);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n return createFileHandle(fd, asyncRequest);\n}\n\nfunction createFileHandle(fd: number, asyncRequest: AsyncRequestFn): FileHandle {\n return {\n fd,\n\n async read(\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n ) {\n let buffer: Uint8Array;\n let off: number, len: number, pos: number | null;\n\n if (bufferOrOptions instanceof Uint8Array) {\n buffer = bufferOrOptions;\n if (offsetOrOptions != null && typeof offsetOrOptions === 'object') {\n off = offsetOrOptions.offset ?? 0;\n len = offsetOrOptions.length ?? buffer.byteLength;\n pos = offsetOrOptions.position ?? null;\n } else {\n off = offsetOrOptions ?? 0;\n len = length ?? buffer.byteLength;\n pos = position ?? null;\n }\n } else {\n buffer = bufferOrOptions.buffer;\n off = bufferOrOptions.offset ?? 0;\n len = bufferOrOptions.length ?? buffer.byteLength;\n pos = bufferOrOptions.position ?? null;\n }\n\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length: len, position: pos ?? -1 });\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n const bytesRead = data ? data.byteLength : 0;\n if (data) buffer.set(data.subarray(0, Math.min(bytesRead, len)), off);\n return { bytesRead, buffer };\n },\n\n async write(bufferOrString: Uint8Array | string, offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null }, lengthOrEncoding?: number | string, position?: number | null) {\n let writeData: Uint8Array;\n let pos: number;\n let resultBuffer: Uint8Array;\n\n if (typeof bufferOrString === 'string') {\n resultBuffer = encoder.encode(bufferOrString);\n writeData = resultBuffer;\n pos = (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'number') ? offsetOrPositionOrOptions : -1;\n } else if (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'object') {\n resultBuffer = bufferOrString;\n const offset = offsetOrPositionOrOptions.offset ?? 0;\n const length = offsetOrPositionOrOptions.length ?? bufferOrString.byteLength;\n pos = (offsetOrPositionOrOptions.position != null) ? offsetOrPositionOrOptions.position : -1;\n writeData = bufferOrString.subarray(offset, offset + length);\n } else {\n resultBuffer = bufferOrString;\n const offset = offsetOrPositionOrOptions ?? 0;\n const length = lengthOrEncoding != null ? lengthOrEncoding as number : bufferOrString.byteLength;\n pos = (position != null) ? position : -1;\n writeData = bufferOrString.subarray(offset, offset + length);\n }\n\n const { status, data } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: writeData, position: pos });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n const bytesWritten = data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n return { bytesWritten, buffer: resultBuffer };\n },\n\n async readv(buffers: Uint8Array[], position?: number | null) {\n let totalRead = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const { bytesRead } = await this.read(buf, 0, buf.byteLength, pos);\n totalRead += bytesRead;\n if (pos !== null) pos += bytesRead;\n if (bytesRead < buf.byteLength) break; // short read = EOF\n }\n return { bytesRead: totalRead, buffers };\n },\n\n async writev(buffers: Uint8Array[], position?: number | null) {\n let totalWritten = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const { bytesWritten } = await this.write(buf, 0, buf.byteLength, pos);\n totalWritten += bytesWritten;\n if (pos !== null) pos += bytesWritten;\n }\n return { bytesWritten: totalWritten, buffers };\n },\n\n async readFile(options?: ReadOptions | Encoding | null) {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length: Number.MAX_SAFE_INTEGER, position: 0 });\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n const result = data ?? new Uint8Array(0);\n if (encoding) return decoder.decode(result);\n return result;\n },\n\n async writeFile(data: string | Uint8Array, _options?: WriteOptions | Encoding) {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: encoded, position: 0 });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n },\n\n async truncate(len = 0) {\n const { status } = await asyncRequest(OP.FTRUNCATE, '', 0, null, undefined, { fd, length: len });\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n },\n\n async stat() {\n const { status, data } = await asyncRequest(OP.FSTAT, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n },\n\n async appendFile(data: string | Uint8Array, _options?: WriteOptions | Encoding) {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const st = await this.stat();\n const { status } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: encoded, position: st.size });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n },\n\n async chmod(_mode: number) {\n // Permissions are cosmetic in a browser VFS — silently succeed\n },\n\n async chown(_uid: number, _gid: number) {\n // Ownership is cosmetic in a browser VFS — silently succeed\n },\n\n async sync() {\n await asyncRequest(OP.FSYNC, '');\n },\n\n async datasync() {\n await asyncRequest(OP.FSYNC, '');\n },\n\n async close() {\n const { status } = await asyncRequest(OP.CLOSE, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n },\n\n [Symbol.asyncDispose]() {\n return this.close();\n },\n };\n}\n","/**\n * Encoding utilities for converting between Uint8Array and strings\n * using Node.js-compatible encodings.\n */\n\n/**\n * Decode a Uint8Array to a string using the specified encoding.\n */\nexport function decodeBuffer(data: Uint8Array, encoding: string): string {\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return new TextDecoder('utf-8').decode(data);\n\n case 'latin1':\n case 'binary': {\n // Each byte maps directly to a code point 0-255\n let result = '';\n for (let i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n }\n\n case 'ascii': {\n // Same as latin1 but mask to 7 bits\n let result = '';\n for (let i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i] & 0x7f);\n }\n return result;\n }\n\n case 'base64': {\n let binary = '';\n for (let i = 0; i < data.length; i++) {\n binary += String.fromCharCode(data[i]);\n }\n return btoa(binary);\n }\n\n case 'hex': {\n let hex = '';\n for (let i = 0; i < data.length; i++) {\n hex += data[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return new TextDecoder('utf-16le').decode(data);\n\n default:\n return new TextDecoder('utf-8').decode(data);\n }\n}\n\n/**\n * Encode a string to a Uint8Array using the specified encoding.\n */\nexport function encodeString(str: string, encoding: string): Uint8Array {\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return new TextEncoder().encode(str);\n\n case 'latin1':\n case 'binary': {\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i) & 0xff;\n }\n return buf;\n }\n\n case 'ascii': {\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i) & 0x7f;\n }\n return buf;\n }\n\n case 'base64': {\n const binary = atob(str);\n const buf = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n buf[i] = binary.charCodeAt(i);\n }\n return buf;\n }\n\n case 'hex': {\n const len = str.length >>> 1;\n const buf = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n buf[i] = parseInt(str.slice(i * 2, i * 2 + 2), 16);\n }\n return buf;\n }\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le': {\n const buf = new Uint8Array(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n buf[i * 2] = code & 0xff;\n buf[i * 2 + 1] = (code >>> 8) & 0xff;\n }\n return buf;\n }\n\n default:\n return new TextEncoder().encode(str);\n }\n}\n","import type { ReadOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { parseFlags, openSync, closeSync, readSync, open } from './open.js';\nimport { decodeBuffer } from '../encoding.js';\n\nconst decoder = new TextDecoder();\n\nexport function readFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReadOptions | Encoding | null\n): string | Uint8Array {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const flag = typeof options === 'string' ? undefined : options?.flag;\n const signal = typeof options === 'string' ? undefined : options?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'r') {\n const buf = encodeRequest(OP.READ, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n }\n\n // Non-default flag: use fd-based open → read → close\n const fd = openSync(syncRequest, filePath, flag);\n try {\n // Read in chunks until EOF\n const chunks: Uint8Array[] = [];\n let totalRead = 0;\n const chunkSize = 64 * 1024;\n while (true) {\n const chunk = new Uint8Array(chunkSize);\n const bytesRead = readSync(syncRequest, fd, chunk, 0, chunkSize, totalRead);\n if (bytesRead === 0) break;\n chunks.push(chunk.subarray(0, bytesRead));\n totalRead += bytesRead;\n if (bytesRead < chunkSize) break;\n }\n let result: Uint8Array;\n if (chunks.length === 0) {\n result = new Uint8Array(0);\n } else if (chunks.length === 1) {\n result = chunks[0];\n } else {\n result = new Uint8Array(totalRead);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n }\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n } finally {\n closeSync(syncRequest, fd);\n }\n}\n\nexport async function readFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReadOptions | Encoding | null\n): Promise<string | Uint8Array> {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const flag = typeof options === 'string' ? undefined : options?.flag;\n const signal = typeof options === 'string' ? undefined : options?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'r') {\n const { status, data } = await asyncRequest(OP.READ, filePath);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n }\n\n // Non-default flag: use FileHandle-based open → readFile → close\n const handle = await open(asyncRequest, filePath, flag);\n try {\n const result = await handle.readFile(encoding ? encoding : undefined);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n return result;\n } finally {\n await handle.close();\n }\n}\n","import type { WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { parseFlags, openSync, closeSync, writeSyncFd, open } from './open.js';\nimport { encodeString } from '../encoding.js';\n\nconst encoder = new TextEncoder();\n\nexport function writeFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): void {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = typeof data === 'string' ? (opts?.encoding ? encodeString(data, opts.encoding) : encoder.encode(data)) : data;\n const flag = opts?.flag;\n const signal = opts?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'w') {\n const flags = opts?.flush === true ? 1 : 0;\n const buf = encodeRequest(OP.WRITE, filePath, flags, encoded);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', filePath);\n return;\n }\n\n // Non-default flag: use fd-based open → write → close\n const fd = openSync(syncRequest, filePath, flag);\n try {\n writeSyncFd(syncRequest, fd, encoded, 0, encoded.byteLength, 0);\n } finally {\n closeSync(syncRequest, fd);\n }\n}\n\nexport async function writeFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): Promise<void> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = typeof data === 'string' ? (opts?.encoding ? encodeString(data, opts.encoding) : encoder.encode(data)) : data;\n const flag = opts?.flag;\n const signal = opts?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'w') {\n const flags = opts?.flush === true ? 1 : 0;\n const { status } = await asyncRequest(OP.WRITE, filePath, flags, encoded);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n if (status !== 0) throw statusToError(status, 'write', filePath);\n return;\n }\n\n // Non-default flag: use FileHandle-based open → writeFile → close\n const handle = await open(asyncRequest, filePath, flag);\n try {\n await handle.writeFile(encoded);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n } finally {\n await handle.close();\n }\n}\n","import type { WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function appendFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): void {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const buf = encodeRequest(OP.APPEND, filePath, 0, encoded);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'appendFile', filePath);\n}\n\nexport async function appendFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): Promise<void> {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.APPEND, filePath, 0, encoded);\n if (status !== 0) throw statusToError(status, 'appendFile', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\n\nexport function existsSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): boolean {\n const buf = encodeRequest(OP.EXISTS, filePath);\n const { data } = syncRequest(buf);\n return data ? data[0] === 1 : false;\n}\n\nexport async function exists(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<boolean> {\n const { data } = await asyncRequest(OP.EXISTS, filePath);\n return data ? data[0] === 1 : false;\n}\n","import type { MkdirOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function mkdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: MkdirOptions | number\n): string | undefined {\n const opts = typeof options === 'number' ? { mode: options } : options;\n const flags = opts?.recursive ? 1 : 0;\n const buf = encodeRequest(OP.MKDIR, filePath, flags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'mkdir', filePath);\n return data ? decoder.decode(data) : undefined;\n}\n\nexport async function mkdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: MkdirOptions | number\n): Promise<string | undefined> {\n const opts = typeof options === 'number' ? { mode: options } : options;\n const flags = opts?.recursive ? 1 : 0;\n const { status, data } = await asyncRequest(OP.MKDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'mkdir', filePath);\n return data ? decoder.decode(data) : undefined;\n}\n","import type { RmdirOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function rmdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmdirOptions\n): void {\n const flags = options?.recursive ? 1 : 0;\n const buf = encodeRequest(OP.RMDIR, filePath, flags);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'rmdir', filePath);\n}\n\nexport async function rmdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmdirOptions\n): Promise<void> {\n const flags = options?.recursive ? 1 : 0;\n const { status } = await asyncRequest(OP.RMDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'rmdir', filePath);\n}\n","import type { RmOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { FSError } from '../errors.js';\n\nconst RETRYABLE_CODES = new Set(['EBUSY', 'ENOTEMPTY', 'EPERM']);\n\nfunction isRetryable(e: unknown): boolean {\n return e instanceof FSError && RETRYABLE_CODES.has(e.code);\n}\n\nfunction rmSyncCore(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmOptions\n): void {\n const flags = (options?.recursive ? 1 : 0) | (options?.force ? 2 : 0);\n const buf = encodeRequest(OP.UNLINK, filePath, flags);\n const { status } = syncRequest(buf);\n if (status === 3) {\n // EISDIR — it's a directory, use rmdir\n const rmdirBuf = encodeRequest(OP.RMDIR, filePath, flags);\n const rmdirResult = syncRequest(rmdirBuf);\n if (rmdirResult.status !== 0) {\n if (options?.force && rmdirResult.status === 1) return;\n throw statusToError(rmdirResult.status, 'rm', filePath);\n }\n return;\n }\n if (status !== 0) {\n if (options?.force && status === 1) return;\n throw statusToError(status, 'rm', filePath);\n }\n}\n\nexport function rmSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmOptions\n): void {\n const maxRetries = options?.maxRetries ?? 0;\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n rmSyncCore(syncRequest, filePath, options);\n return;\n } catch (e) {\n lastError = e;\n if (attempt < maxRetries && isRetryable(e)) {\n // For sync, we cannot delay without blocking APIs, so retry immediately.\n continue;\n }\n throw e;\n }\n }\n /* istanbul ignore next -- safety net; loop always throws or returns */\n throw lastError;\n}\n\nasync function rmAsyncCore(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmOptions\n): Promise<void> {\n const flags = (options?.recursive ? 1 : 0) | (options?.force ? 2 : 0);\n const { status } = await asyncRequest(OP.UNLINK, filePath, flags);\n if (status === 3) {\n const { status: s2 } = await asyncRequest(OP.RMDIR, filePath, flags);\n if (s2 !== 0) {\n if (options?.force && s2 === 1) return;\n throw statusToError(s2, 'rm', filePath);\n }\n return;\n }\n if (status !== 0) {\n if (options?.force && status === 1) return;\n throw statusToError(status, 'rm', filePath);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport async function rm(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmOptions\n): Promise<void> {\n const maxRetries = options?.maxRetries ?? 0;\n const retryDelay = options?.retryDelay ?? 100;\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n await rmAsyncCore(asyncRequest, filePath, options);\n return;\n } catch (e) {\n lastError = e;\n if (attempt < maxRetries && isRetryable(e)) {\n await delay(retryDelay);\n continue;\n }\n throw e;\n }\n }\n /* istanbul ignore next -- safety net; loop always throws or returns */\n throw lastError;\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function unlinkSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): void {\n const buf = encodeRequest(OP.UNLINK, filePath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'unlink', filePath);\n}\n\nexport async function unlink(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<void> {\n const { status } = await asyncRequest(OP.UNLINK, filePath);\n if (status !== 0) throw statusToError(status, 'unlink', filePath);\n}\n","import type { ReaddirOptions, Encoding, Dirent } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeDirents, decodeNames } from '../stats.js';\n\nfunction readdirBaseSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n withFileTypes: boolean\n): string[] | Dirent[] {\n const flags = withFileTypes ? 1 : 0;\n const buf = encodeRequest(OP.READDIR, filePath, flags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readdir', filePath);\n if (!data) return [];\n return withFileTypes ? decodeDirents(data, filePath) : decodeNames(data);\n}\n\nasync function readdirBaseAsync(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n withFileTypes: boolean\n): Promise<string[] | Dirent[]> {\n const flags = withFileTypes ? 1 : 0;\n const { status, data } = await asyncRequest(OP.READDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'readdir', filePath);\n if (!data) return [];\n return withFileTypes ? decodeDirents(data, filePath) : decodeNames(data);\n}\n\nfunction readdirRecursiveSync(\n syncRequest: SyncRequestFn,\n basePath: string,\n prefix: string,\n withFileTypes: boolean,\n rootPath?: string\n): (string | Dirent)[] {\n // Always read dirents so we can detect directories\n const entries = readdirBaseSync(syncRequest, basePath, true) as Dirent[];\n const results: (string | Dirent)[] = [];\n const effectiveRoot = rootPath ?? basePath;\n\n for (const entry of entries) {\n const relativePath = prefix ? prefix + '/' + entry.name : entry.name;\n\n if (withFileTypes) {\n const parentPath = prefix || effectiveRoot;\n // Return a Dirent with the relative path as the name\n results.push({\n name: relativePath,\n parentPath,\n path: parentPath,\n isFile: entry.isFile,\n isDirectory: entry.isDirectory,\n isBlockDevice: entry.isBlockDevice,\n isCharacterDevice: entry.isCharacterDevice,\n isSymbolicLink: entry.isSymbolicLink,\n isFIFO: entry.isFIFO,\n isSocket: entry.isSocket,\n });\n } else {\n results.push(relativePath);\n }\n\n if (entry.isDirectory()) {\n const childPath = basePath + '/' + entry.name;\n results.push(\n ...readdirRecursiveSync(syncRequest, childPath, relativePath, withFileTypes, effectiveRoot)\n );\n }\n }\n\n return results;\n}\n\nasync function readdirRecursiveAsync(\n asyncRequest: AsyncRequestFn,\n basePath: string,\n prefix: string,\n withFileTypes: boolean,\n rootPath?: string\n): Promise<(string | Dirent)[]> {\n const entries = (await readdirBaseAsync(asyncRequest, basePath, true)) as Dirent[];\n const results: (string | Dirent)[] = [];\n const effectiveRoot = rootPath ?? basePath;\n\n for (const entry of entries) {\n const relativePath = prefix ? prefix + '/' + entry.name : entry.name;\n\n if (withFileTypes) {\n const parentPath = prefix || effectiveRoot;\n results.push({\n name: relativePath,\n parentPath,\n path: parentPath,\n isFile: entry.isFile,\n isDirectory: entry.isDirectory,\n isBlockDevice: entry.isBlockDevice,\n isCharacterDevice: entry.isCharacterDevice,\n isSymbolicLink: entry.isSymbolicLink,\n isFIFO: entry.isFIFO,\n isSocket: entry.isSocket,\n });\n } else {\n results.push(relativePath);\n }\n\n if (entry.isDirectory()) {\n const childPath = basePath + '/' + entry.name;\n const children = await readdirRecursiveAsync(\n asyncRequest, childPath, relativePath, withFileTypes, effectiveRoot\n );\n results.push(...children);\n }\n }\n\n return results;\n}\n\nexport function readdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): string[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n\n if (opts?.recursive) {\n return readdirRecursiveSync(\n syncRequest, filePath, '', !!opts?.withFileTypes\n ) as string[] | Dirent[];\n }\n\n return readdirBaseSync(syncRequest, filePath, !!opts?.withFileTypes);\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n\n if (opts?.recursive) {\n return readdirRecursiveAsync(\n asyncRequest, filePath, '', !!opts?.withFileTypes\n ) as Promise<string[] | Dirent[]>;\n }\n\n return readdirBaseAsync(asyncRequest, filePath, !!opts?.withFileTypes);\n}\n","import type { Stats, BigIntStats, StatOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats, decodeStatsBigInt } from '../stats.js';\n\nexport function statSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Stats | BigIntStats {\n const buf = encodeRequest(OP.STAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport function lstatSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Stats | BigIntStats {\n const buf = encodeRequest(OP.LSTAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport async function stat(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Promise<Stats | BigIntStats> {\n const { status, data } = await asyncRequest(OP.STAT, filePath);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport async function lstat(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Promise<Stats | BigIntStats> {\n const { status, data } = await asyncRequest(OP.LSTAT, filePath);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function renameSync(\n syncRequest: SyncRequestFn,\n oldPath: string,\n newPath: string\n): void {\n const buf = encodeTwoPathRequest(OP.RENAME, oldPath, newPath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'rename', oldPath);\n}\n\nexport async function rename(\n asyncRequest: AsyncRequestFn,\n oldPath: string,\n newPath: string\n): Promise<void> {\n const path2Bytes = encoder.encode(newPath);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.RENAME, oldPath, 0, payload);\n if (status !== 0) throw statusToError(status, 'rename', oldPath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function copyFileSync(\n syncRequest: SyncRequestFn,\n src: string,\n dest: string,\n mode?: number\n): void {\n const buf = encodeTwoPathRequest(OP.COPY, src, dest, mode ?? 0);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'copyFile', src);\n}\n\nexport async function copyFile(\n asyncRequest: AsyncRequestFn,\n src: string,\n dest: string,\n mode?: number\n): Promise<void> {\n const path2Bytes = encoder.encode(dest);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.COPY, src, mode ?? 0, payload);\n if (status !== 0) throw statusToError(status, 'copyFile', src);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function truncateSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n len: number = 0\n): void {\n const lenBuf = new Uint8Array(8);\n new DataView(lenBuf.buffer).setFloat64(0, len, true);\n const buf = encodeRequest(OP.TRUNCATE, filePath, 0, lenBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'truncate', filePath);\n}\n\nexport async function truncate(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n len?: number\n): Promise<void> {\n const lenBuf = new Uint8Array(8);\n new DataView(lenBuf.buffer).setFloat64(0, len ?? 0, true);\n const { status } = await asyncRequest(OP.TRUNCATE, filePath, 0, lenBuf);\n if (status !== 0) throw statusToError(status, 'truncate', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { constants } from '../constants.js';\n\nexport function accessSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number = constants.F_OK\n): void {\n const buf = encodeRequest(OP.ACCESS, filePath, mode);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n\nexport async function access(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number = constants.F_OK\n): Promise<void> {\n const { status } = await asyncRequest(OP.ACCESS, filePath, mode);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function realpathSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): string {\n const buf = encodeRequest(OP.REALPATH, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n\nexport async function realpath(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.REALPATH, filePath);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chmodSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number\n): void {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const buf = encodeRequest(OP.CHMOD, filePath, 0, modeBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n\nexport async function chmod(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number\n): Promise<void> {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const { status } = await asyncRequest(OP.CHMOD, filePath, 0, modeBuf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chownSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): void {\n const ownerBuf = new Uint8Array(8);\n const dv = new DataView(ownerBuf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const buf = encodeRequest(OP.CHOWN, filePath, 0, ownerBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n\nexport async function chown(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): Promise<void> {\n const buf = new Uint8Array(8);\n const dv = new DataView(buf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const { status } = await asyncRequest(OP.CHOWN, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function utimesSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): void {\n const timesBuf = new Uint8Array(16);\n const dv = new DataView(timesBuf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.UTIMES, filePath, 0, timesBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n\nexport async function utimes(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const buf = new Uint8Array(16);\n const dv = new DataView(buf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.UTIMES, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function symlinkSync(\n syncRequest: SyncRequestFn,\n target: string,\n linkPath: string,\n type?: string | null\n): void {\n const targetBytes = encoder.encode(target);\n const buf = encodeRequest(OP.SYMLINK, linkPath, 0, targetBytes);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'symlink', linkPath);\n}\n\nexport function readlinkSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: { encoding?: string | null } | string | null\n): string | Uint8Array {\n const buf = encodeRequest(OP.READLINK, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n const encoding = typeof options === 'string' ? options : options?.encoding;\n if (encoding === 'buffer') return new Uint8Array(data!);\n return decoder.decode(data!);\n}\n\nexport async function symlink(\n asyncRequest: AsyncRequestFn,\n target: string,\n linkPath: string,\n type?: string | null\n): Promise<void> {\n const targetBytes = encoder.encode(target);\n const { status } = await asyncRequest(OP.SYMLINK, linkPath, 0, targetBytes);\n if (status !== 0) throw statusToError(status, 'symlink', linkPath);\n}\n\nexport async function readlink(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: { encoding?: string | null } | string | null\n): Promise<string | Uint8Array> {\n const { status, data } = await asyncRequest(OP.READLINK, filePath);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n const encoding = typeof options === 'string' ? options : options?.encoding;\n if (encoding === 'buffer') return new Uint8Array(data!);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function linkSync(\n syncRequest: SyncRequestFn,\n existingPath: string,\n newPath: string\n): void {\n const buf = encodeTwoPathRequest(OP.LINK, existingPath, newPath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'link', existingPath);\n}\n\nexport async function link(\n asyncRequest: AsyncRequestFn,\n existingPath: string,\n newPath: string\n): Promise<void> {\n const path2Bytes = encoder.encode(newPath);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.LINK, existingPath, 0, payload);\n if (status !== 0) throw statusToError(status, 'link', existingPath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function mkdtempSync(\n syncRequest: SyncRequestFn,\n prefix: string\n): string {\n const buf = encodeRequest(OP.MKDTEMP, prefix);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'mkdtemp', prefix);\n return decoder.decode(data!);\n}\n\nexport async function mkdtemp(\n asyncRequest: AsyncRequestFn,\n prefix: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.MKDTEMP, prefix);\n if (status !== 0) throw statusToError(status, 'mkdtemp', prefix);\n return decoder.decode(data!);\n}\n","import type { Dir, Dirent } from '../types.js';\nimport type { AsyncRequestFn } from './context.js';\nimport { OP } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { readdir } from './readdir.js';\n\nexport async function opendir(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Dir> {\n const { status, data } = await asyncRequest(OP.OPENDIR, filePath);\n if (status !== 0) throw statusToError(status, 'opendir', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n\n let entries: Dirent[] | null = null;\n let index = 0;\n\n const loadEntries = async () => {\n if (entries === null) {\n entries = await readdir(asyncRequest, filePath, { withFileTypes: true }) as Dirent[];\n }\n };\n\n return {\n path: filePath,\n\n async read(): Promise<Dirent | null> {\n await loadEntries();\n if (index >= entries!.length) return null;\n return entries![index++];\n },\n\n async close(): Promise<void> {\n const { status } = await asyncRequest(OP.CLOSE, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n },\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Dirent> {\n await loadEntries();\n for (const entry of entries!) {\n yield entry;\n }\n },\n };\n}\n","/**\n * POSIX path utilities (browser-compatible).\n * No Node.js dependencies.\n */\n\nimport type { PathLike } from './types.js';\n\n/**\n * Normalize a PathLike value (string, Uint8Array, or URL) to a plain string.\n * Mirrors Node.js behaviour: Buffer/Uint8Array is decoded as UTF-8,\n * URL must use the file: protocol and the pathname is used.\n */\nexport function toPathString(p: PathLike): string {\n if (typeof p === 'string') return p;\n if (p instanceof Uint8Array) return new TextDecoder().decode(p);\n if (typeof URL !== 'undefined' && p instanceof URL) {\n if (p.protocol !== 'file:') {\n throw new TypeError('The URL must use the file: protocol');\n }\n return decodeURIComponent(p.pathname);\n }\n return String(p);\n}\n\nexport const sep = '/';\nexport const delimiter = ':';\n\nexport function normalize(p: string): string {\n if (p.length === 0) return '.';\n\n const isAbsolute = p.charCodeAt(0) === 47; // '/'\n const segments = p.split('/');\n const result: string[] = [];\n\n for (const seg of segments) {\n if (seg === '' || seg === '.') continue;\n if (seg === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n result.pop();\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(seg);\n }\n }\n\n let out = result.join('/');\n if (isAbsolute) out = '/' + out;\n return out || (isAbsolute ? '/' : '.');\n}\n\nexport function join(...paths: string[]): string {\n return normalize(paths.filter(Boolean).join('/'));\n}\n\nexport function resolve(...paths: string[]): string {\n let resolved = '';\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i];\n if (!p) continue;\n resolved = p + (resolved ? '/' + resolved : '');\n if (p.charCodeAt(0) === 47) break; // absolute\n }\n return normalize(resolved || '/');\n}\n\nexport function dirname(p: string): string {\n if (p.length === 0) return '.';\n const i = p.lastIndexOf('/');\n if (i < 0) return '.';\n if (i === 0) return '/';\n return p.substring(0, i);\n}\n\nexport function basename(p: string, ext?: string): string {\n let base = p;\n const i = p.lastIndexOf('/');\n if (i >= 0) base = p.substring(i + 1);\n if (ext && base.endsWith(ext)) {\n base = base.substring(0, base.length - ext.length);\n }\n return base;\n}\n\nexport function extname(p: string): string {\n const base = basename(p);\n const i = base.lastIndexOf('.');\n if (i <= 0) return '';\n return base.substring(i);\n}\n\nexport function isAbsolute(p: string): boolean {\n return p.length > 0 && p.charCodeAt(0) === 47;\n}\n\nexport function relative(from: string, to: string): string {\n const fromParts = resolve(from).split('/').filter(Boolean);\n const toParts = resolve(to).split('/').filter(Boolean);\n\n let common = 0;\n while (common < fromParts.length && common < toParts.length && fromParts[common] === toParts[common]) {\n common++;\n }\n\n const ups = fromParts.length - common;\n const result = [...Array(ups).fill('..'), ...toParts.slice(common)];\n return result.join('/') || '.';\n}\n\nexport function parse(p: string): { root: string; dir: string; base: string; ext: string; name: string } {\n const dir = dirname(p);\n const base = basename(p);\n const ext = extname(p);\n const name = ext ? base.substring(0, base.length - ext.length) : base;\n const root = isAbsolute(p) ? '/' : '';\n return { root, dir, base, ext, name };\n}\n\nexport function format(obj: { root?: string; dir?: string; base?: string; ext?: string; name?: string }): string {\n const dir = obj.dir || obj.root || '';\n const base = obj.base || ((obj.name || '') + (obj.ext || ''));\n return dir ? (dir === '/' ? '/' + base : dir + '/' + base) : base;\n}\n","import type { WatchOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener, WatchFileOptions, Stats } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { statSync } from './stat.js';\nimport * as path from '../path.js';\n\n// ========== Watcher Registry ==========\n\ninterface WatchEntry {\n ns: string;\n absPath: string;\n recursive: boolean;\n listener: WatchListener;\n signal?: AbortSignal;\n}\n\ninterface WatchFileEntry {\n ns: string;\n absPath: string;\n listener: WatchFileListener;\n interval: number;\n prevStats: Stats | null;\n syncRequest: SyncRequestFn;\n timerId: ReturnType<typeof setInterval> | null;\n}\n\n// fs.watch() entries\nconst watchers = new Set<WatchEntry>();\n\n// fs.watchFile() entries, keyed by absolute path\nconst fileWatchers = new Map<string, Set<WatchFileEntry>>();\n\n// Lazy BroadcastChannel with ref counting, per namespace\nconst bcMap = new Map<string, { bc: BroadcastChannel; refCount: number }>();\n\nfunction ensureBc(ns: string): void {\n const entry = bcMap.get(ns);\n if (entry) { entry.refCount++; return; }\n const bc = new BroadcastChannel(`${ns}-watch`);\n bcMap.set(ns, { bc, refCount: 1 });\n bc.onmessage = onBroadcast;\n}\n\nfunction releaseBc(ns: string): void {\n const entry = bcMap.get(ns);\n if (!entry) return;\n if (--entry.refCount <= 0) {\n entry.bc.close();\n bcMap.delete(ns);\n }\n}\n\n// ========== BroadcastChannel handler ==========\n\nfunction onBroadcast(event: MessageEvent<{ eventType: 'change' | 'rename'; path: string }>): void {\n const { eventType, path: mutatedPath } = event.data;\n\n // Notify fs.watch() watchers\n for (const entry of watchers) {\n const filename = matchWatcher(entry, mutatedPath);\n if (filename !== null) {\n try { entry.listener(eventType, filename); } catch { /* swallow */ }\n }\n }\n\n // Notify fs.watchFile() watchers\n const fileSet = fileWatchers.get(mutatedPath);\n if (fileSet) {\n for (const entry of fileSet) {\n triggerWatchFile(entry);\n }\n }\n}\n\n// ========== Path matching ==========\n\nfunction matchWatcher(entry: WatchEntry, mutatedPath: string): string | null {\n const { absPath, recursive } = entry;\n\n // Exact match (watching a specific file, or the directory itself was modified)\n if (mutatedPath === absPath) {\n return path.basename(mutatedPath);\n }\n\n // Build the prefix that child paths must start with.\n // For root '/', prefix stays '/' — every absolute path is inside root.\n // For '/foo', prefix becomes '/foo/' — prevents matching '/foobar/x'.\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n if (!mutatedPath.startsWith(prefix)) {\n return null;\n }\n\n const relativePath = mutatedPath.substring(prefix.length);\n\n if (recursive) return relativePath;\n\n // Non-recursive: only direct children (no '/' in relative path)\n return relativePath.indexOf('/') === -1 ? relativePath : null;\n}\n\n// ========== fs.watch() ==========\n\nexport function watch(\n ns: string,\n filePath: string,\n options?: WatchOptions | string,\n listener?: WatchListener\n): FSWatcher {\n const opts: WatchOptions = typeof options === 'string'\n ? { encoding: options as any }\n : (options ?? {});\n\n const cb: WatchListener = listener ?? (() => {});\n const absPath = path.resolve(filePath);\n const signal = opts.signal;\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive: opts.recursive ?? false,\n listener: cb,\n signal,\n };\n\n ensureBc(ns);\n watchers.add(entry);\n\n // AbortSignal support\n if (signal) {\n const onAbort = () => {\n watchers.delete(entry);\n releaseBc(ns);\n signal.removeEventListener('abort', onAbort);\n };\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener('abort', onAbort);\n }\n }\n\n const watcher: FSWatcher = {\n close() {\n watchers.delete(entry);\n releaseBc(ns);\n },\n ref() { return watcher; },\n unref() { return watcher; },\n };\n\n return watcher;\n}\n\n// ========== fs.watchFile() ==========\n\nexport function watchFile(\n ns: string,\n syncRequest: SyncRequestFn,\n filePath: string,\n optionsOrListener?: WatchFileOptions | WatchFileListener,\n listener?: WatchFileListener\n): void {\n let opts: WatchFileOptions;\n let cb: WatchFileListener;\n\n if (typeof optionsOrListener === 'function') {\n cb = optionsOrListener;\n opts = {};\n } else {\n opts = optionsOrListener ?? {};\n cb = listener!;\n }\n\n if (!cb) return;\n\n const absPath = path.resolve(filePath);\n const interval = opts.interval ?? 5007; // Node.js default\n\n let prevStats: Stats | null = null;\n try { prevStats = statSync(syncRequest, absPath) as Stats; } catch { /* file may not exist */ }\n\n const entry: WatchFileEntry = {\n ns,\n absPath,\n listener: cb,\n interval,\n prevStats,\n syncRequest,\n timerId: null,\n };\n\n ensureBc(ns);\n let set = fileWatchers.get(absPath);\n if (!set) {\n set = new Set();\n fileWatchers.set(absPath, set);\n }\n set.add(entry);\n\n // Fallback polling (Node.js watchFile uses stat polling)\n entry.timerId = setInterval(() => triggerWatchFile(entry), interval);\n}\n\n// ========== fs.unwatchFile() ==========\n\nexport function unwatchFile(\n ns: string,\n filePath: string,\n listener?: WatchFileListener\n): void {\n const absPath = path.resolve(filePath);\n const set = fileWatchers.get(absPath);\n if (!set) return;\n\n if (listener) {\n for (const entry of set) {\n if (entry.listener === listener) {\n if (entry.timerId !== null) clearInterval(entry.timerId);\n set.delete(entry);\n releaseBc(ns);\n break;\n }\n }\n if (set.size === 0) fileWatchers.delete(absPath);\n } else {\n for (const entry of set) {\n if (entry.timerId !== null) clearInterval(entry.timerId);\n releaseBc(ns);\n }\n fileWatchers.delete(absPath);\n }\n}\n\n// ========== watchFile trigger ==========\n\nfunction triggerWatchFile(entry: WatchFileEntry): void {\n let currStats: Stats | null = null;\n try { currStats = statSync(entry.syncRequest, entry.absPath) as Stats; } catch { /* file gone */ }\n\n const prev = entry.prevStats ?? emptyStats();\n const curr = currStats ?? emptyStats();\n\n if (prev.mtimeMs !== curr.mtimeMs || prev.size !== curr.size || prev.ino !== curr.ino) {\n entry.prevStats = currStats;\n try { entry.listener(curr, prev); } catch { /* swallow */ }\n }\n}\n\nfunction emptyStats(): Stats {\n const zero = new Date(0);\n return {\n isFile: () => false,\n isDirectory: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0, ino: 0, mode: 0, nlink: 0, uid: 0, gid: 0, rdev: 0,\n size: 0, blksize: 4096, blocks: 0,\n atimeMs: 0, mtimeMs: 0, ctimeMs: 0, birthtimeMs: 0,\n atime: zero, mtime: zero, ctime: zero, birthtime: zero,\n };\n}\n\n// ========== promises.watch() ==========\n\nexport async function* watchAsync(\n ns: string,\n _asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: WatchOptions\n): AsyncIterable<WatchEventType> {\n const absPath = path.resolve(filePath);\n const recursive = options?.recursive ?? false;\n const signal = options?.signal;\n\n const queue: WatchEventType[] = [];\n let resolve: (() => void) | null = null;\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive,\n listener: (eventType, filename) => {\n queue.push({ eventType, filename });\n if (resolve) { resolve(); resolve = null; }\n },\n signal,\n };\n\n ensureBc(ns);\n watchers.add(entry);\n\n try {\n while (!signal?.aborted) {\n if (queue.length === 0) {\n await new Promise<void>(r => { resolve = r; });\n }\n while (queue.length > 0) {\n yield queue.shift()!;\n }\n }\n } finally {\n watchers.delete(entry);\n releaseBc(ns);\n }\n}\n","import type { GlobOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { readdirSync, readdir } from './readdir.js';\nimport { statSync, stat } from './stat.js';\n\n/**\n * Convert a glob segment pattern to a RegExp.\n * Supports: * (any non-/ chars), ? (single char), literal chars.\n */\nfunction segmentToRegex(pattern: string): RegExp {\n let re = '^';\n for (let i = 0; i < pattern.length; i++) {\n const ch = pattern[i];\n if (ch === '*') {\n re += '[^/]*';\n } else if (ch === '?') {\n re += '[^/]';\n } else if ('.+^${}()|[]\\\\'.includes(ch)) {\n re += '\\\\' + ch;\n } else {\n re += ch;\n }\n }\n re += '$';\n return new RegExp(re);\n}\n\nfunction matchSegment(name: string, pattern: string): boolean {\n return segmentToRegex(pattern).test(name);\n}\n\nfunction joinPath(base: string, name: string): string {\n if (base === '/') return '/' + name;\n return base + '/' + name;\n}\n\nexport function globSync(\n syncRequest: SyncRequestFn,\n pattern: string,\n options?: GlobOptions,\n): string[] {\n const cwd = options?.cwd ?? '/';\n const exclude = options?.exclude;\n\n const segments = pattern.split('/').filter((s) => s !== '');\n const results: string[] = [];\n\n function walk(dir: string, segIdx: number): void {\n if (segIdx >= segments.length) return;\n\n const seg = segments[segIdx];\n const isLast = segIdx === segments.length - 1;\n\n if (seg === '**') {\n // Match zero or more path segments.\n // Try skipping ** (match zero segments) — continue with next segment in same dir\n if (segIdx + 1 < segments.length) {\n walk(dir, segIdx + 1);\n }\n\n // Recurse into all subdirectories with ** still active\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n let isDir: boolean;\n try {\n const s = statSync(syncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n\n if (isDir) {\n // Recurse with ** still at same segIdx\n walk(full, segIdx);\n }\n\n // If this is the last segment after **, match the entry against nothing (** matches it)\n if (isLast) {\n results.push(full);\n }\n }\n return;\n }\n\n // Normal segment (may contain * or ? wildcards)\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!matchSegment(entry, seg)) continue;\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n if (isLast) {\n results.push(full);\n } else {\n // Must be a directory to continue matching deeper segments\n let isDir: boolean;\n try {\n const s = statSync(syncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n if (isDir) {\n walk(full, segIdx + 1);\n }\n }\n }\n }\n\n walk(cwd, 0);\n return results;\n}\n\nexport async function glob(\n asyncRequest: AsyncRequestFn,\n pattern: string,\n options?: GlobOptions,\n): Promise<string[]> {\n const cwd = options?.cwd ?? '/';\n const exclude = options?.exclude;\n\n const segments = pattern.split('/').filter((s) => s !== '');\n const results: string[] = [];\n\n async function walk(dir: string, segIdx: number): Promise<void> {\n if (segIdx >= segments.length) return;\n\n const seg = segments[segIdx];\n const isLast = segIdx === segments.length - 1;\n\n if (seg === '**') {\n // Try skipping ** (match zero segments)\n if (segIdx + 1 < segments.length) {\n await walk(dir, segIdx + 1);\n }\n\n let entries: string[];\n try {\n entries = (await readdir(asyncRequest, dir)) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n let isDir: boolean;\n try {\n const s = await stat(asyncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n\n if (isDir) {\n await walk(full, segIdx);\n }\n\n if (isLast) {\n results.push(full);\n }\n }\n return;\n }\n\n let entries: string[];\n try {\n entries = (await readdir(asyncRequest, dir)) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!matchSegment(entry, seg)) continue;\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n if (isLast) {\n results.push(full);\n } else {\n let isDir: boolean;\n try {\n const s = await stat(asyncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n if (isDir) {\n await walk(full, segIdx + 1);\n }\n }\n }\n }\n\n await walk(cwd, 0);\n return results;\n}\n","/**\n * VFSFileSystem — main thread API.\n *\n * Provides Node.js-compatible sync and async filesystem methods.\n * Sync methods use SAB + Atomics to block until the server responds.\n * Async methods use postMessage to the async relay worker.\n *\n * On import, workers are spawned immediately. Every method blocks\n * (or waits) until the worker is ready. This is by design — the library\n * primarily runs inside workers where blocking is fine.\n */\n\nimport type {\n Encoding, ReadOptions, WriteOptions, MkdirOptions, RmdirOptions, RmOptions, CpOptions,\n ReaddirOptions, StatOptions, Stats, BigIntStats, StatFs, Dirent, VFSConfig, FSMode, FileHandle, GlobOptions,\n WatchOptions, WatchFileOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener,\n ReadStreamOptions, WriteStreamOptions, FSReadStream, FSWriteStream, OpenAsBlobOptions, PathLike,\n} from './types.js';\nimport { NodeReadable, NodeWritable } from './node-streams.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './methods/context.js';\nimport { SAB_OFFSETS, SIGNAL, OP, encodeRequest, decodeResponse } from './protocol/opcodes.js';\n\n// ---- Method imports ----\nimport { readFileSync as _readFileSync, readFile as _readFile } from './methods/readFile.js';\nimport { writeFileSync as _writeFileSync, writeFile as _writeFile } from './methods/writeFile.js';\nimport { appendFileSync as _appendFileSync, appendFile as _appendFile } from './methods/appendFile.js';\nimport { existsSync as _existsSync, exists as _exists } from './methods/exists.js';\nimport { mkdirSync as _mkdirSync, mkdir as _mkdir } from './methods/mkdir.js';\nimport { rmdirSync as _rmdirSync, rmdir as _rmdir } from './methods/rmdir.js';\nimport { rmSync as _rmSync, rm as _rm } from './methods/rm.js';\nimport { unlinkSync as _unlinkSync, unlink as _unlink } from './methods/unlink.js';\nimport { readdirSync as _readdirSync, readdir as _readdir } from './methods/readdir.js';\nimport { statSync as _statSync, lstatSync as _lstatSync, stat as _stat, lstat as _lstat } from './methods/stat.js';\nimport { renameSync as _renameSync, rename as _rename } from './methods/rename.js';\nimport { copyFileSync as _copyFileSync, copyFile as _copyFile } from './methods/copyFile.js';\nimport { truncateSync as _truncateSync, truncate as _truncate } from './methods/truncate.js';\nimport { accessSync as _accessSync, access as _access } from './methods/access.js';\nimport { realpathSync as _realpathSync, realpath as _realpath } from './methods/realpath.js';\nimport { chmodSync as _chmodSync, chmod as _chmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes } from './methods/utimes.js';\nimport { symlinkSync as _symlinkSync, readlinkSync as _readlinkSync, symlink as _symlink, readlink as _readlink } from './methods/symlink.js';\nimport { linkSync as _linkSync, link as _link } from './methods/link.js';\nimport { mkdtempSync as _mkdtempSync, mkdtemp as _mkdtemp } from './methods/mkdtemp.js';\nimport {\n openSync as _openSync, closeSync as _closeSync,\n readSync as _readSync, writeSyncFd as _writeSyncFd,\n fstatSync as _fstatSync, ftruncateSync as _ftruncateSync, fdatasyncSync as _fdatasyncSync,\n open as _open,\n} from './methods/open.js';\nimport { opendir as _opendir } from './methods/opendir.js';\nimport { watch as _watch, watchFile as _watchFile, unwatchFile as _unwatchFile, watchAsync as _watchAsync } from './methods/watch.js';\nimport { globSync as _globSync, glob as _glob } from './methods/glob.js';\nimport { join as pathJoin, toPathString } from './path.js';\nimport { createError } from './errors.js';\nimport { constants } from './constants.js';\n\nconst encoder = new TextEncoder();\n\n// Default SAB size: 2MB\nconst DEFAULT_SAB_SIZE = 2 * 1024 * 1024;\n\n// Singleton registry: one VFSFileSystem per root per thread.\n// Prevents duplicate workers, leader lock contention, and SW registration conflicts.\nconst instanceRegistry = new Map<string, VFSFileSystem>();\nconst HEADER_SIZE = SAB_OFFSETS.HEADER_SIZE;\n\n// Atomics.wait() is disallowed on the browser main thread.\n// Use spin-wait (Atomics.load loop) as fallback.\nconst _canAtomicsWait = typeof globalThis.WorkerGlobalScope !== 'undefined';\n\n// Main-thread spin-wait timeout: 10 seconds.\n// If SharedWorker is dead/broken, abort instead of blocking the main thread forever.\nconst SPIN_TIMEOUT_MS = 10_000;\n\nfunction spinWait(arr: Int32Array, index: number, value: number): void {\n if (_canAtomicsWait) {\n Atomics.wait(arr, index, value);\n } else {\n const start = performance.now();\n while (Atomics.load(arr, index) === value) {\n if (performance.now() - start > SPIN_TIMEOUT_MS) {\n throw new Error(\n `VFS sync operation timed out after ${SPIN_TIMEOUT_MS / 1000}s — SharedWorker may be unresponsive`\n );\n }\n }\n }\n}\n\nexport class VFSFileSystem {\n // SAB for sync communication with sync relay worker (null when SAB unavailable)\n private sab!: SharedArrayBuffer;\n private ctrl!: Int32Array;\n private readySab!: SharedArrayBuffer;\n private readySignal!: Int32Array;\n // SAB for async-relay ↔ sync-relay communication\n private asyncSab!: SharedArrayBuffer;\n // Whether SharedArrayBuffer is available (crossOriginIsolated)\n private hasSAB = typeof SharedArrayBuffer !== 'undefined';\n\n // Workers\n private syncWorker!: Worker;\n private asyncWorker!: Worker;\n\n // Async request tracking\n private asyncCallId = 0;\n private asyncPending = new Map<number, {\n resolve: (result: { status: number; data: Uint8Array | null }) => void;\n reject: (err: Error) => void;\n }>();\n\n // Ready promise for async callers\n private readyPromise!: Promise<void>;\n private resolveReady!: () => void;\n private rejectReady!: (err: Error) => void;\n private initError: Error | null = null;\n private isReady = false;\n\n\n // Config (definite assignment — always set when constructor doesn't return singleton)\n private config!: Omit<Required<VFSConfig>, 'opfsSyncRoot' | 'swUrl' | 'swScope' | 'mode' | 'limits'> & { opfsSyncRoot?: string; swUrl?: string; swScope?: string; limits?: VFSConfig['limits'] };\n private tabId!: string;\n private _mode!: FSMode;\n private corruptionError: Error | null = null;\n /** Namespace string derived from root — used for lock names, BroadcastChannel, and SW scope\n * so multiple VFS instances with different roots don't collide. */\n private ns!: string;\n\n // Service worker registration for multi-tab port transfer\n private swReg: ServiceWorkerRegistration | null = null;\n private isFollower = false;\n private holdingLeaderLock = false;\n private brokerInitialized = false;\n private leaderChangeBc: BroadcastChannel | null = null;\n\n // Bound request functions for method delegation\n private _sync: SyncRequestFn = (buf) => this.syncRequest(buf);\n private _async: AsyncRequestFn = (op, p, flags, data, path2, fdArgs) =>\n this.asyncRequest(op, p, flags, data, path2, fdArgs);\n\n // Promises API namespace\n readonly promises!: VFSPromises;\n\n constructor(config: VFSConfig = {}) {\n const root = config.root ?? '/';\n const ns = `vfs-${root.replace(/[^a-zA-Z0-9]/g, '_')}`;\n\n // Singleton: return existing instance for the same root on this thread\n const existing = instanceRegistry.get(ns);\n if (existing) return existing;\n\n // Resolve mode: explicit mode takes priority, else derive from opfsSync\n const mode: FSMode = config.mode ?? 'hybrid';\n this._mode = mode;\n\n // Derive opfsSync from mode unless explicitly set\n const opfsSync = config.opfsSync ?? (mode === 'hybrid');\n\n this.config = {\n root,\n opfsSync,\n opfsSyncRoot: config.opfsSyncRoot,\n uid: config.uid ?? 0,\n gid: config.gid ?? 0,\n umask: config.umask ?? 0o022,\n strictPermissions: config.strictPermissions ?? false,\n sabSize: config.sabSize ?? DEFAULT_SAB_SIZE,\n debug: config.debug ?? false,\n swUrl: config.swUrl,\n swScope: config.swScope,\n limits: config.limits,\n };\n\n this.tabId = crypto.randomUUID();\n this.ns = ns;\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n this.promises = new VFSPromises(this._async, ns);\n\n instanceRegistry.set(ns, this);\n this.bootstrap();\n }\n\n /** Spawn workers and establish communication */\n private bootstrap(): void {\n const sabSize = this.config.sabSize;\n\n if (this.hasSAB) {\n // Full mode: allocate SABs for sync + async communication\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n // Spawn workers\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle messages from sync-relay\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n // Initialize async-relay AFTER sync-relay is ready to avoid\n // requests arriving before the leader loop is running.\n this.initAsyncRelay();\n this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else if (this.holdingLeaderLock) {\n // We hold the lock but OPFS handle not released yet — retry\n setTimeout(() => this.sendLeaderInit(), 500);\n } else if (!('locks' in navigator)) {\n // No Web Locks fallback — become follower via OPFS handle detection\n this.startAsFollower();\n }\n }\n };\n\n // Handle async responses from async-relay\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n // Async-relay is initialized later in the 'ready' handler to avoid\n // requests arriving before the sync-relay's leader loop is running.\n\n // Leader election via Web Locks\n this.acquireLeaderLock();\n }\n\n /** Use Web Locks API for leader election. The tab that acquires the lock is\n * the leader; all others become followers. When the leader dies, the browser\n * releases the lock and the next waiting tab is promoted. */\n private acquireLeaderLock(): void {\n if (!('locks' in navigator)) {\n this.startAsLeader();\n return;\n }\n\n // Chrome can invoke the ifAvailable callback twice (once with lock, once\n // with null). The `decided` flag ensures only the first invocation acts.\n let decided = false;\n navigator.locks.request(`${this.ns}-leader`, { ifAvailable: true }, async (lock) => {\n if (decided) return;\n decided = true;\n if (lock) {\n this.holdingLeaderLock = true;\n this.startAsLeader();\n await new Promise(() => {}); // Hold lock forever (released when tab closes)\n } else {\n this.startAsFollower();\n this.waitForLeaderLock();\n }\n });\n }\n\n /** Queue for leader takeover when the current leader's lock is released */\n private waitForLeaderLock(): void {\n if (!('locks' in navigator)) return;\n navigator.locks.request(`${this.ns}-leader`, async () => {\n console.log('[VFS] Leader lock acquired — promoting to leader');\n this.holdingLeaderLock = true;\n this.promoteToLeader();\n await new Promise(() => {}); // Hold lock as new leader\n });\n }\n\n /** Send init-leader message to sync-relay worker */\n private sendLeaderInit(): void {\n this.syncWorker.postMessage({\n type: 'init-leader',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n config: {\n root: this.config.root,\n ns: this.ns,\n opfsSync: this.config.opfsSync,\n opfsSyncRoot: this.config.opfsSyncRoot,\n uid: this.config.uid,\n gid: this.config.gid,\n umask: this.config.umask,\n strictPermissions: this.config.strictPermissions,\n debug: this.config.debug,\n limits: this.config.limits,\n },\n });\n }\n\n /** Send init-opfs message to sync-relay for OPFS-direct mode */\n private sendOPFSInit(): void {\n this.syncWorker.postMessage({\n type: 'init-opfs',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n config: {\n root: this.config.root,\n ns: this.ns,\n uid: this.config.uid,\n gid: this.config.gid,\n debug: this.config.debug,\n },\n });\n }\n\n /** Handle VFS corruption: log error, fall back to OPFS-direct mode.\n * The readyPromise will resolve once OPFS mode is ready, but init()\n * will reject with the corruption error to inform the caller. */\n private handleCorruptVFS(errorMessage: string): void {\n const err = new Error(`${errorMessage} — Falling back to OPFS mode`);\n this.corruptionError = err;\n console.error(`[VFS] ${err.message}`);\n\n if (this._mode === 'vfs') {\n // VFS-only mode: no OPFS files to fall back to — reject permanently\n this.initError = err;\n this.rejectReady(err);\n if (this.hasSAB) {\n Atomics.store(this.readySignal, 0, -1);\n Atomics.notify(this.readySignal, 0);\n }\n return;\n }\n\n // Hybrid/default: fall back to OPFS-direct mode\n this._mode = 'opfs';\n this.sendOPFSInit();\n }\n\n /** Initialize the async-relay worker. Called after sync-relay signals ready. */\n private initAsyncRelay(): void {\n if (this.hasSAB) {\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n }\n\n /** Start as leader — tell sync-relay to init VFS engine + OPFS handle */\n private startAsLeader(): void {\n this.isFollower = false;\n if (this._mode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n }\n\n /** Start as follower — connect to leader via service worker port brokering */\n private startAsFollower(): void {\n this.isFollower = true;\n\n // Tell sync-relay to prepare for follower mode (sets SABs, awaits leader-port)\n this.syncWorker.postMessage({\n type: 'init-follower',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n });\n\n // Connect to leader via service worker\n this.connectToLeader();\n\n // Listen for leader changes (BroadcastChannel is scope-independent, unlike SW clients API)\n this.leaderChangeBc = new BroadcastChannel(`${this.ns}-leader-change`);\n this.leaderChangeBc.onmessage = () => {\n if (this.isFollower) {\n console.log('[VFS] Leader changed — reconnecting');\n this.connectToLeader();\n }\n };\n }\n\n /** Send a new port to sync-relay for connecting to the current leader */\n private connectToLeader(): void {\n const mc = new MessageChannel();\n\n // Send leader-port to sync-relay immediately so it can signal 'ready'.\n // Messages posted to port1 queue until port2 is connected to the leader.\n this.syncWorker.postMessage(\n { type: 'leader-port', port: mc.port1 },\n [mc.port1],\n );\n\n // Asynchronously connect port2 to the leader via service worker broker\n this.getServiceWorker().then(sw => {\n sw.postMessage({ type: 'transfer-port', tabId: this.tabId }, [mc.port2]);\n }).catch(err => {\n console.error('[VFS] Failed to connect to leader:', (err as Error).message);\n mc.port2.close();\n });\n }\n\n /** Register the VFS service worker and return the active SW */\n private async getServiceWorker(): Promise<ServiceWorker> {\n if (!this.swReg) {\n const swUrl = this.config.swUrl\n ? new URL(this.config.swUrl, location.origin)\n : new URL('./workers/service.worker.js', import.meta.url);\n const scope = this.config.swScope ?? new URL(`./${this.ns}/`, swUrl).href;\n this.swReg = await navigator.serviceWorker.register(swUrl.href, { scope });\n }\n const reg = this.swReg;\n\n if (reg.active) return reg.active;\n const sw = reg.installing || reg.waiting;\n if (!sw) throw new Error('No service worker found');\n\n return new Promise<ServiceWorker>((resolve, reject) => {\n const timer = setTimeout(() => {\n sw.removeEventListener('statechange', onState);\n reject(new Error('Service worker activation timeout'));\n }, 5000);\n const onState = () => {\n if (sw.state === 'activated') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n resolve(sw);\n } else if (sw.state === 'redundant') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n reject(new Error('SW redundant'));\n }\n };\n sw.addEventListener('statechange', onState);\n onState(); // Check immediately — state may have changed before listener was added\n });\n }\n\n /** Register as leader with SW broker (receives follower ports via control channel) */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n this.getServiceWorker().then(sw => {\n const mc = new MessageChannel();\n sw.postMessage({ type: 'register-server' }, [mc.port2]);\n\n mc.port1.onmessage = (event: MessageEvent) => {\n if (event.data.type === 'client-port') {\n const clientPort = event.ports[0];\n if (clientPort) {\n this.syncWorker.postMessage(\n { type: 'client-port', tabId: event.data.tabId, port: clientPort },\n [clientPort],\n );\n }\n }\n };\n mc.port1.start();\n\n // Notify followers that a (new) leader is available — they should reconnect\n const bc = new BroadcastChannel(`${this.ns}-leader-change`);\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n }\n\n /** Promote from follower to leader (after leader tab dies and lock is acquired) */\n private promoteToLeader(): void {\n this.isFollower = false;\n this.isReady = false;\n this.brokerInitialized = false; // Allow re-registration with SW as new leader\n\n // Stop listening for leader changes (we ARE the leader now)\n if (this.leaderChangeBc) {\n this.leaderChangeBc.close();\n this.leaderChangeBc = null;\n }\n\n // Reset readyPromise for async callers during transition\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n\n // Terminate old workers\n this.syncWorker.terminate();\n this.asyncWorker.terminate();\n\n // Allocate fresh SABs (only if available)\n const sabSize = this.config.sabSize;\n if (this.hasSAB) {\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n // Spawn new workers\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle sync-relay messages\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n this.resolveReady();\n this.initLeaderBroker();\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else {\n // OPFS handle not yet released by dead leader — retry\n console.warn('[VFS] Promotion: OPFS handle still busy, retrying...');\n setTimeout(() => this.sendLeaderInit(), 500);\n }\n }\n };\n\n // Handle async responses\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n if (this.hasSAB) {\n // Initialize async-relay with SAB\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n // No SAB: connect async-relay ↔ sync-relay via MessagePort\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n if (this._mode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n }\n\n /** Spawn an inline worker from bundled code */\n private spawnWorker(name: string): Worker {\n // In production, worker code is inlined as blob URLs at build time.\n // For development, we use module workers.\n const workerUrl = new URL(`./workers/${name}.worker.js`, import.meta.url);\n return new Worker(workerUrl, { type: 'module' });\n }\n\n // ========== Sync operation primitives ==========\n\n /** Block until workers are ready */\n private ensureReady(): void {\n if (this.isReady) return;\n if (this.initError) throw this.initError;\n if (!this.hasSAB) {\n throw new Error('Sync API requires crossOriginIsolated (COOP/COEP headers). Use the promises API instead.');\n }\n // Check if ready signal is set\n const signal = Atomics.load(this.readySignal, 0);\n if (signal === 1) {\n this.isReady = true;\n return;\n }\n if (signal === -1) {\n // Permanent failure (e.g. VFS corruption in vfs-only mode)\n throw this.initError ?? new Error('VFS initialization failed');\n }\n // Block until ready\n spinWait(this.readySignal, 0, 0);\n // Check again after wake — could be ready (1) or failed (-1)\n const finalSignal = Atomics.load(this.readySignal, 0);\n if (finalSignal === -1) {\n throw this.initError ?? new Error('VFS initialization failed');\n }\n this.isReady = true;\n }\n\n /** Send a sync request via SAB and wait for response */\n private syncRequest(requestBuf: ArrayBuffer): { status: number; data: Uint8Array | null } {\n this.ensureReady();\n\n const t0 = this.config.debug ? performance.now() : 0;\n const maxChunk = this.sab.byteLength - HEADER_SIZE;\n const requestBytes = new Uint8Array(requestBuf);\n const totalLenView = new BigUint64Array(this.sab, SAB_OFFSETS.TOTAL_LEN, 1);\n\n if (requestBytes.byteLength <= maxChunk) {\n // Fast path: single chunk\n new Uint8Array(this.sab, HEADER_SIZE, requestBytes.byteLength).set(requestBytes);\n Atomics.store(this.ctrl, 3, requestBytes.byteLength); // chunk length\n Atomics.store(totalLenView, 0, BigInt(requestBytes.byteLength));\n Atomics.store(this.ctrl, 0, SIGNAL.REQUEST);\n Atomics.notify(this.ctrl, 0);\n } else {\n // Multi-chunk: send in chunks\n let sent = 0;\n while (sent < requestBytes.byteLength) {\n const chunkSize = Math.min(maxChunk, requestBytes.byteLength - sent);\n new Uint8Array(this.sab, HEADER_SIZE, chunkSize).set(\n requestBytes.subarray(sent, sent + chunkSize)\n );\n Atomics.store(this.ctrl, 3, chunkSize);\n Atomics.store(totalLenView, 0, BigInt(requestBytes.byteLength));\n Atomics.store(this.ctrl, 6, Math.floor(sent / maxChunk)); // chunk index\n\n if (sent === 0) {\n Atomics.store(this.ctrl, 0, SIGNAL.REQUEST);\n } else {\n Atomics.store(this.ctrl, 0, SIGNAL.CHUNK);\n }\n Atomics.notify(this.ctrl, 0);\n\n sent += chunkSize;\n if (sent < requestBytes.byteLength) {\n // Wait for worker to ack\n spinWait(this.ctrl, 0, sent === chunkSize ? SIGNAL.REQUEST : SIGNAL.CHUNK);\n }\n }\n }\n\n // Wait for response\n spinWait(this.ctrl, 0, SIGNAL.REQUEST);\n\n // Read response — may be chunked\n const signal = Atomics.load(this.ctrl, 0);\n const respChunkLen = Atomics.load(this.ctrl, 3);\n const respTotalLen = Number(Atomics.load(totalLenView, 0));\n\n let responseBytes: Uint8Array;\n\n if (signal === SIGNAL.RESPONSE && respTotalLen <= maxChunk) {\n // Single chunk response\n responseBytes = new Uint8Array(this.sab, HEADER_SIZE, respChunkLen).slice();\n } else {\n // Multi-chunk response\n responseBytes = new Uint8Array(respTotalLen);\n let received = 0;\n\n // Read first chunk\n const firstLen = respChunkLen;\n responseBytes.set(new Uint8Array(this.sab, HEADER_SIZE, firstLen), 0);\n received += firstLen;\n\n while (received < respTotalLen) {\n // Ack and wait for next chunk\n Atomics.store(this.ctrl, 0, SIGNAL.CHUNK_ACK);\n Atomics.notify(this.ctrl, 0);\n spinWait(this.ctrl, 0, SIGNAL.CHUNK_ACK);\n\n const nextLen = Atomics.load(this.ctrl, 3);\n responseBytes.set(new Uint8Array(this.sab, HEADER_SIZE, nextLen), received);\n received += nextLen;\n }\n }\n\n // Reset to idle — NO notify: the worker stays asleep until the next request's\n // notify wakes it, giving us ONE cross-thread wake per operation instead of two.\n Atomics.store(this.ctrl, 0, SIGNAL.IDLE);\n\n const result = decodeResponse(responseBytes.buffer as ArrayBuffer);\n if (this.config.debug) {\n const t1 = performance.now();\n console.log(`[syncRequest] size=${requestBuf.byteLength} roundTrip=${(t1 - t0).toFixed(3)}ms`);\n }\n return result;\n }\n\n // ========== Async operation primitive ==========\n\n private asyncRequest(\n op: number,\n filePath: string,\n flags?: number,\n data?: Uint8Array | string | null,\n path2?: string,\n fdArgs?: Record<string, unknown>\n ): Promise<{ status: number; data: Uint8Array | null }> {\n return this.readyPromise.then(() => {\n return new Promise((resolve, reject) => {\n const callId = this.asyncCallId++;\n this.asyncPending.set(callId, { resolve, reject });\n\n this.asyncWorker.postMessage({\n type: 'request',\n callId,\n op,\n path: filePath,\n flags: flags ?? 0,\n data: data instanceof Uint8Array ? data : (typeof data === 'string' ? data : null),\n path2,\n fdArgs,\n });\n });\n });\n }\n\n // ========== Sync API ==========\n\n readFileSync(filePath: PathLike, options?: ReadOptions | Encoding | null): string | Uint8Array {\n return _readFileSync(this._sync, toPathString(filePath), options);\n }\n\n writeFileSync(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _writeFileSync(this._sync, toPathString(filePath), data, options);\n }\n\n appendFileSync(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _appendFileSync(this._sync, toPathString(filePath), data, options);\n }\n\n existsSync(filePath: PathLike): boolean {\n return _existsSync(this._sync, toPathString(filePath));\n }\n\n mkdirSync(filePath: PathLike, options?: MkdirOptions | number): string | undefined {\n return _mkdirSync(this._sync, toPathString(filePath), options);\n }\n\n rmdirSync(filePath: PathLike, options?: RmdirOptions): void {\n _rmdirSync(this._sync, toPathString(filePath), options);\n }\n\n rmSync(filePath: PathLike, options?: RmOptions): void {\n _rmSync(this._sync, toPathString(filePath), options);\n }\n\n unlinkSync(filePath: PathLike): void {\n _unlinkSync(this._sync, toPathString(filePath));\n }\n\n readdirSync(filePath: PathLike, options?: ReaddirOptions | Encoding | null): string[] | Dirent[] {\n return _readdirSync(this._sync, toPathString(filePath), options);\n }\n\n globSync(pattern: string, options?: GlobOptions): string[] {\n return _globSync(this._sync, pattern, options);\n }\n\n statSync(filePath: PathLike, options?: StatOptions): Stats | BigIntStats {\n return _statSync(this._sync, toPathString(filePath), options);\n }\n\n lstatSync(filePath: PathLike, options?: StatOptions): Stats | BigIntStats {\n return _lstatSync(this._sync, toPathString(filePath), options);\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n _renameSync(this._sync, toPathString(oldPath), toPathString(newPath));\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n _copyFileSync(this._sync, toPathString(src), toPathString(dest), mode);\n }\n\n cpSync(src: PathLike, dest: PathLike, options?: CpOptions): void {\n const srcPath = toPathString(src);\n const destPath = toPathString(dest);\n const force = options?.force !== false; // default true\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference ? this.statSync(srcPath) : this.lstatSync(srcPath);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', srcPath);\n }\n try {\n this.mkdirSync(destPath, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = this.readdirSync(srcPath, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(srcPath, entry.name);\n const destChild = pathJoin(destPath, entry.name);\n this.cpSync(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = this.readlinkSync(srcPath) as string;\n let destExists = false;\n try { this.lstatSync(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n this.unlinkSync(destPath);\n }\n this.symlinkSync(target, destPath);\n } else {\n let destExists = false;\n try { this.lstatSync(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n }\n this.copyFileSync(srcPath, destPath, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = this.statSync(srcPath);\n this.utimesSync(destPath, st.atime, st.mtime);\n }\n }\n\n private async _cpAsync(src: string, dest: string, options?: CpOptions): Promise<void> {\n const force = options?.force !== false;\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference\n ? await this.promises.stat(src)\n : await this.promises.lstat(src);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', src);\n }\n try {\n await this.promises.mkdir(dest, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = await this.promises.readdir(src, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(src, entry.name);\n const destChild = pathJoin(dest, entry.name);\n await this._cpAsync(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = await this.promises.readlink(src) as string;\n let destExists = false;\n try { await this.promises.lstat(dest); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', dest);\n if (!force) return;\n await this.promises.unlink(dest);\n }\n await this.promises.symlink(target, dest);\n } else {\n let destExists = false;\n try { await this.promises.lstat(dest); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', dest);\n if (!force) return;\n }\n await this.promises.copyFile(src, dest, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = await this.promises.stat(src);\n await this.promises.utimes(dest, st.atime, st.mtime);\n }\n }\n\n truncateSync(filePath: PathLike, len?: number): void {\n _truncateSync(this._sync, toPathString(filePath), len);\n }\n\n accessSync(filePath: PathLike, mode?: number): void {\n _accessSync(this._sync, toPathString(filePath), mode);\n }\n\n realpathSync(filePath: PathLike): string {\n return _realpathSync(this._sync, toPathString(filePath));\n }\n\n chmodSync(filePath: PathLike, mode: number): void {\n _chmodSync(this._sync, toPathString(filePath), mode);\n }\n\n /** Like chmodSync but operates on the symlink itself. In this VFS, delegates to chmodSync. */\n lchmodSync(filePath: string, mode: number): void {\n _chmodSync(this._sync, filePath, mode);\n }\n\n /** chmod on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n fchmodSync(_fd: number, _mode: number): void {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n chownSync(filePath: PathLike, uid: number, gid: number): void {\n _chownSync(this._sync, toPathString(filePath), uid, gid);\n }\n\n /** Like chownSync but operates on the symlink itself. In this VFS, delegates to chownSync. */\n lchownSync(filePath: string, uid: number, gid: number): void {\n _chownSync(this._sync, filePath, uid, gid);\n }\n\n /** chown on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n fchownSync(_fd: number, _uid: number, _gid: number): void {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n utimesSync(filePath: PathLike, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, toPathString(filePath), atime, mtime);\n }\n\n /** Like utimesSync but operates on the symlink itself. In this VFS, delegates to utimesSync. */\n lutimesSync(filePath: string, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, filePath, atime, mtime);\n }\n\n symlinkSync(target: PathLike, linkPath: PathLike, type?: string | null): void {\n _symlinkSync(this._sync, toPathString(target), toPathString(linkPath), type);\n }\n\n readlinkSync(filePath: PathLike, options?: { encoding?: string | null } | string | null): string | Uint8Array {\n return _readlinkSync(this._sync, toPathString(filePath), options);\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n _linkSync(this._sync, toPathString(existingPath), toPathString(newPath));\n }\n\n mkdtempSync(prefix: string): string {\n return _mkdtempSync(this._sync, prefix);\n }\n\n // ---- File descriptor sync methods ----\n\n openSync(filePath: PathLike, flags: string | number = 'r', mode?: number): number {\n return _openSync(this._sync, toPathString(filePath), flags, mode);\n }\n\n closeSync(fd: number): void {\n _closeSync(this._sync, fd);\n }\n\n readSync(\n fd: number,\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n ): number {\n return _readSync(this._sync, fd, bufferOrOptions, offsetOrOptions, length, position);\n }\n\n writeSync(\n fd: number,\n bufferOrString: Uint8Array | string,\n offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n lengthOrEncoding?: number | string,\n position?: number | null\n ): number {\n return _writeSyncFd(this._sync, fd, bufferOrString, offsetOrPositionOrOptions, lengthOrEncoding, position);\n }\n\n fstatSync(fd: number): Stats {\n return _fstatSync(this._sync, fd);\n }\n\n ftruncateSync(fd: number, len?: number): void {\n _ftruncateSync(this._sync, fd, len);\n }\n\n fdatasyncSync(fd: number): void {\n _fdatasyncSync(this._sync, fd);\n }\n\n // ---- Vector I/O methods ----\n\n readvSync(fd: number, buffers: Uint8Array[], position?: number | null): number {\n let totalRead = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const bytesRead = this.readSync(fd, buf, 0, buf.byteLength, pos);\n totalRead += bytesRead;\n if (pos !== null) pos += bytesRead;\n if (bytesRead < buf.byteLength) break; // short read = EOF\n }\n return totalRead;\n }\n\n writevSync(fd: number, buffers: Uint8Array[], position?: number | null): number {\n let totalWritten = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const bytesWritten = this.writeSync(fd, buf, 0, buf.byteLength, pos);\n totalWritten += bytesWritten;\n if (pos !== null) pos += bytesWritten;\n }\n return totalWritten;\n }\n\n readv(fd: number, buffers: Uint8Array[], position: number | null | undefined, callback: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void;\n readv(fd: number, buffers: Uint8Array[], callback: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void;\n readv(fd: number, buffers: Uint8Array[], positionOrCallback: number | null | undefined | ((err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void), callback?: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void {\n let pos: number | null | undefined;\n let cb: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void;\n if (typeof positionOrCallback === 'function') {\n pos = undefined;\n cb = positionOrCallback;\n } else {\n pos = positionOrCallback;\n cb = callback!;\n }\n try {\n const bytesRead = this.readvSync(fd, buffers, pos);\n cb(null, bytesRead, buffers);\n } catch (err: any) {\n cb(err);\n }\n }\n\n writev(fd: number, buffers: Uint8Array[], position: number | null | undefined, callback: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void;\n writev(fd: number, buffers: Uint8Array[], callback: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void;\n writev(fd: number, buffers: Uint8Array[], positionOrCallback: number | null | undefined | ((err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void), callback?: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void {\n let pos: number | null | undefined;\n let cb: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void;\n if (typeof positionOrCallback === 'function') {\n pos = undefined;\n cb = positionOrCallback;\n } else {\n pos = positionOrCallback;\n cb = callback!;\n }\n try {\n const bytesWritten = this.writevSync(fd, buffers, pos);\n cb(null, bytesWritten, buffers);\n } catch (err: any) {\n cb(err);\n }\n }\n\n // ---- statfs methods ----\n\n statfsSync(_path?: string): StatFs {\n return {\n type: 0x56465321, // \"VFS!\"\n bsize: 4096,\n blocks: 1024 * 1024, // ~4GB virtual capacity\n bfree: 512 * 1024, // ~2GB free (estimate)\n bavail: 512 * 1024,\n files: 10000, // default max inodes\n ffree: 5000, // estimate half free\n };\n }\n\n statfs(path: string, callback: (err: Error | null, stats?: StatFs) => void): void;\n statfs(path: string): Promise<StatFs>;\n statfs(path: string, callback?: (err: Error | null, stats?: StatFs) => void): Promise<StatFs> | void {\n const result = this.statfsSync(path);\n if (callback) {\n callback(null, result);\n return;\n }\n return Promise.resolve(result);\n }\n\n // ---- Watch methods ----\n\n watch(filePath: PathLike, options?: WatchOptions | Encoding, listener?: WatchListener): FSWatcher {\n return _watch(this.ns, toPathString(filePath), options, listener);\n }\n\n watchFile(filePath: PathLike, optionsOrListener?: WatchFileOptions | WatchFileListener, listener?: WatchFileListener): void {\n _watchFile(this.ns, this._sync, toPathString(filePath), optionsOrListener, listener);\n }\n\n unwatchFile(filePath: PathLike, listener?: WatchFileListener): void {\n _unwatchFile(this.ns, toPathString(filePath), listener);\n }\n\n // ---- openAsBlob (Node.js 19+) ----\n\n async openAsBlob(filePath: string, options?: OpenAsBlobOptions): Promise<Blob> {\n const data = await this.promises.readFile(filePath);\n const bytes = data instanceof Uint8Array ? data : new TextEncoder().encode(data as string);\n return new Blob([bytes as BlobPart], { type: options?.type ?? '' });\n }\n\n // ---- Stream methods ----\n\n createReadStream(filePath: PathLike, options?: ReadStreamOptions | string): FSReadStream {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n const start = opts?.start ?? 0;\n const end = opts?.end;\n const highWaterMark = opts?.highWaterMark ?? 64 * 1024;\n\n let position = start;\n let handle: import('./types.js').FileHandle | null = null;\n let finished = false;\n\n const cleanup = async () => {\n if (handle) {\n try { await handle.close(); } catch { /* ignore close errors */ }\n handle = null;\n }\n };\n\n const readFn = async (): Promise<{ done: boolean; value?: Uint8Array }> => {\n if (finished) return { done: true };\n\n // Lazily open the file on first read\n if (!handle) {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'r');\n }\n\n const readLen = end !== undefined\n ? Math.min(highWaterMark, end - position + 1)\n : highWaterMark;\n\n if (readLen <= 0) {\n finished = true;\n await cleanup();\n return { done: true };\n }\n\n const buffer = new Uint8Array(readLen);\n const { bytesRead } = await handle.read(buffer, 0, readLen, position);\n\n if (bytesRead === 0) {\n finished = true;\n await cleanup();\n return { done: true };\n }\n\n position += bytesRead;\n\n if (end !== undefined && position > end) {\n finished = true;\n await cleanup();\n return { done: false, value: buffer.subarray(0, bytesRead) };\n }\n\n return { done: false, value: buffer.subarray(0, bytesRead) };\n };\n\n const stream = new NodeReadable(readFn, cleanup) as unknown as FSReadStream;\n (stream as unknown as NodeReadable).path = toPathString(filePath);\n\n return stream;\n }\n\n createWriteStream(filePath: PathLike, options?: WriteStreamOptions | string): FSWriteStream {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n let position = opts?.start ?? 0;\n let handle: FileHandle | null = null;\n\n const writeFn = async (chunk: Uint8Array): Promise<void> => {\n if (!handle) {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'w');\n }\n const { bytesWritten } = await handle.write(chunk, 0, chunk.byteLength, position);\n position += bytesWritten;\n };\n\n const closeFn = async (): Promise<void> => {\n if (handle) {\n if (opts?.flush) {\n await handle.sync();\n }\n await handle.close();\n handle = null;\n }\n };\n\n return new NodeWritable(toPathString(filePath), writeFn, closeFn) as unknown as FSWriteStream;\n }\n\n // ---- Utility methods ----\n\n flushSync(): void {\n const buf = encodeRequest(OP.FSYNC, '');\n this.syncRequest(buf);\n }\n\n purgeSync(): void {\n // No-op — VFS doesn't have external caches to purge\n }\n\n /** The current filesystem mode. Changes to 'opfs' on corruption fallback. */\n get mode(): FSMode {\n return this._mode;\n }\n\n /** Async init helper — avoid blocking main thread.\n * Rejects with corruption error if VFS was corrupt (but system falls back to OPFS mode).\n * Callers can catch and continue — the fs API works in OPFS mode after rejection. */\n init(): Promise<void> {\n return this.readyPromise.then(() => {\n if (this.corruptionError) {\n throw this.corruptionError;\n }\n });\n }\n\n /** Switch the filesystem mode at runtime.\n *\n * Typical flow for IDE corruption recovery:\n * 1. `await fs.init()` throws with corruption error (auto-falls back to opfs)\n * 2. IDE shows warning, user clicks \"Repair\" → call `repairVFS(root, fs)`\n * 3. After repair: `await fs.setMode('hybrid')` to resume normal VFS+OPFS mode\n *\n * Returns a Promise that resolves when the new mode is ready. */\n async setMode(newMode: FSMode): Promise<void> {\n if (newMode === this._mode && this.isReady && !this.corruptionError) {\n return; // Already in this mode and healthy\n }\n\n this._mode = newMode;\n this.corruptionError = null;\n this.initError = null;\n this.isReady = false;\n this.config.opfsSync = newMode === 'hybrid';\n\n // Reset readyPromise\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n\n // Terminate old workers and spawn fresh ones\n this.syncWorker.terminate();\n this.asyncWorker.terminate();\n\n const sabSize = this.config.sabSize;\n if (this.hasSAB) {\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle sync-relay messages\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else if (this.holdingLeaderLock) {\n setTimeout(() => this.sendLeaderInit(), 500);\n }\n }\n };\n\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n if (this.hasSAB) {\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n\n if (newMode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n\n return this.readyPromise;\n }\n\n // ========== Callback API ==========\n // Node.js-style callback overloads for all async operations.\n // These delegate to this.promises.* and adapt the result to (err, result) callbacks.\n\n readFile(filePath: string, callback: (err: Error | null, data?: Uint8Array | string) => void): void;\n readFile(filePath: string, options: ReadOptions | Encoding | null, callback: (err: Error | null, data?: Uint8Array | string) => void): void;\n readFile(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readFile(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n writeFile(filePath: string, data: string | Uint8Array, callback: (err: Error | null) => void): void;\n writeFile(filePath: string, data: string | Uint8Array, options: WriteOptions | Encoding, callback: (err: Error | null) => void): void;\n writeFile(filePath: string, data: string | Uint8Array, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.writeFile(filePath, data, opts).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n appendFile(filePath: string, data: string | Uint8Array, callback: (err: Error | null) => void): void;\n appendFile(filePath: string, data: string | Uint8Array, options: WriteOptions | Encoding, callback: (err: Error | null) => void): void;\n appendFile(filePath: string, data: string | Uint8Array, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.appendFile(filePath, data, opts).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n mkdir(filePath: string, callback: (err: Error | null, path?: string) => void): void;\n mkdir(filePath: string, options: MkdirOptions | number, callback: (err: Error | null, path?: string) => void): void;\n mkdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.mkdir(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n rmdir(filePath: string, callback: (err: Error | null) => void): void;\n rmdir(filePath: string, options: RmdirOptions, callback: (err: Error | null) => void): void;\n rmdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.rmdir(filePath, opts).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n rm(filePath: string, callback: (err: Error | null) => void): void;\n rm(filePath: string, options: RmOptions, callback: (err: Error | null) => void): void;\n rm(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.rm(filePath, opts).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n unlink(filePath: string, callback: (err: Error | null) => void): void {\n this.promises.unlink(filePath).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n readdir(filePath: string, callback: (err: Error | null, files?: string[] | Dirent[]) => void): void;\n readdir(filePath: string, options: ReaddirOptions | Encoding | null, callback: (err: Error | null, files?: string[] | Dirent[]) => void): void;\n readdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readdir(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n stat(filePath: string, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n stat(filePath: string, options: StatOptions, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n stat(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.stat(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n lstat(filePath: string, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n lstat(filePath: string, options: StatOptions, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n lstat(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.lstat(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n access(filePath: string, callback: (err: Error | null) => void): void;\n access(filePath: string, mode: number, callback: (err: Error | null) => void): void;\n access(filePath: string, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.access(filePath, mode).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n rename(oldPath: string, newPath: string, callback: (err: Error | null) => void): void {\n this.promises.rename(oldPath, newPath).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n copyFile(src: string, dest: string, callback: (err: Error | null) => void): void;\n copyFile(src: string, dest: string, mode: number, callback: (err: Error | null) => void): void;\n copyFile(src: string, dest: string, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.copyFile(src, dest, mode).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n truncate(filePath: string, callback: (err: Error | null) => void): void;\n truncate(filePath: string, len: number, callback: (err: Error | null) => void): void;\n truncate(filePath: string, lenOrCallback?: any, callback?: any): void {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n const len = typeof lenOrCallback === 'function' ? undefined : lenOrCallback;\n this.promises.truncate(filePath, len).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n realpath(filePath: string, callback: (err: Error | null, resolvedPath?: string) => void): void {\n this.promises.realpath(filePath).then(\n (result) => callback(null, result),\n (err) => callback(err),\n );\n }\n\n chmod(filePath: string, mode: number, callback: (err: Error | null) => void): void {\n this.promises.chmod(filePath, mode).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n chown(filePath: string, uid: number, gid: number, callback: (err: Error | null) => void): void {\n this.promises.chown(filePath, uid, gid).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number, callback: (err: Error | null) => void): void {\n this.promises.utimes(filePath, atime, mtime).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n symlink(target: string, linkPath: string, callback: (err: Error | null) => void): void;\n symlink(target: string, linkPath: string, type: string | null, callback: (err: Error | null) => void): void;\n symlink(target: string, linkPath: string, typeOrCallback?: any, callback?: any): void {\n const cb = typeof typeOrCallback === 'function' ? typeOrCallback : callback;\n const type = typeof typeOrCallback === 'function' ? undefined : typeOrCallback;\n this.promises.symlink(target, linkPath, type).then(\n () => cb(null),\n (err) => cb(err),\n );\n }\n\n readlink(filePath: string, callback: (err: Error | null, linkString?: string | Uint8Array) => void): void;\n readlink(filePath: string, options: { encoding?: string | null } | string | null, callback: (err: Error | null, linkString?: string | Uint8Array) => void): void;\n readlink(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readlink(filePath, opts).then(\n (result) => cb(null, result),\n (err) => cb(err),\n );\n }\n\n link(existingPath: string, newPath: string, callback: (err: Error | null) => void): void {\n this.promises.link(existingPath, newPath).then(\n () => callback(null),\n (err) => callback(err),\n );\n }\n\n open(filePath: string, flags: string | number, callback: (err: Error | null, fd?: number) => void): void;\n open(filePath: string, flags: string | number, mode: number, callback: (err: Error | null, fd?: number) => void): void;\n open(filePath: string, flags: string | number, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.open(filePath, flags, mode).then(\n (handle) => cb(null, handle.fd),\n (err) => cb(err),\n );\n }\n\n mkdtemp(prefix: string, callback: (err: Error | null, folder?: string) => void): void {\n this.promises.mkdtemp(prefix).then(\n (result) => callback(null, result),\n (err) => callback(err),\n );\n }\n\n cp(src: string, dest: string, callback: (err: Error | null) => void): void;\n cp(src: string, dest: string, options: CpOptions, callback: (err: Error | null) => void): void;\n cp(src: string, dest: string, optionsOrCallback?: any, callback?: any): void | Promise<void> {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n if (cb) {\n this._cpAsync(src, dest, opts).then(\n () => cb(null),\n (err) => cb(err),\n );\n return;\n }\n // No callback — return promise for backward compat\n return this._cpAsync(src, dest, opts);\n }\n\n exists(filePath: string, callback: (exists: boolean) => void): void {\n this.promises.exists(filePath).then(\n (result) => callback(result),\n () => callback(false),\n );\n }\n}\n\n// ========== Promises API ==========\n\nclass VFSPromises {\n private _async: AsyncRequestFn;\n private _ns: string;\n\n constructor(asyncRequest: AsyncRequestFn, ns: string) {\n this._async = asyncRequest;\n this._ns = ns;\n }\n\n readFile(filePath: PathLike, options?: ReadOptions | Encoding | null) {\n return _readFile(this._async, toPathString(filePath), options);\n }\n\n writeFile(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _writeFile(this._async, toPathString(filePath), data, options);\n }\n\n appendFile(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _appendFile(this._async, toPathString(filePath), data, options);\n }\n\n mkdir(filePath: PathLike, options?: MkdirOptions | number) {\n return _mkdir(this._async, toPathString(filePath), options);\n }\n\n rmdir(filePath: PathLike, options?: RmdirOptions) {\n return _rmdir(this._async, toPathString(filePath), options);\n }\n\n rm(filePath: PathLike, options?: RmOptions) {\n return _rm(this._async, toPathString(filePath), options);\n }\n\n unlink(filePath: PathLike) {\n return _unlink(this._async, toPathString(filePath));\n }\n\n readdir(filePath: PathLike, options?: ReaddirOptions | Encoding | null) {\n return _readdir(this._async, toPathString(filePath), options);\n }\n\n glob(pattern: string, options?: GlobOptions): Promise<string[]> {\n return _glob(this._async, pattern, options);\n }\n\n stat(filePath: PathLike, options?: StatOptions) {\n return _stat(this._async, toPathString(filePath), options);\n }\n\n lstat(filePath: PathLike, options?: StatOptions) {\n return _lstat(this._async, toPathString(filePath), options);\n }\n\n access(filePath: PathLike, mode?: number) {\n return _access(this._async, toPathString(filePath), mode);\n }\n\n rename(oldPath: PathLike, newPath: PathLike) {\n return _rename(this._async, toPathString(oldPath), toPathString(newPath));\n }\n\n copyFile(src: PathLike, dest: PathLike, mode?: number) {\n return _copyFile(this._async, toPathString(src), toPathString(dest), mode);\n }\n\n async cp(src: PathLike, dest: PathLike, options?: CpOptions): Promise<void> {\n const srcPath = toPathString(src);\n const destPath = toPathString(dest);\n const force = options?.force !== false;\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference\n ? await this.stat(srcPath)\n : await this.lstat(srcPath);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', srcPath);\n }\n try {\n await this.mkdir(destPath, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = await this.readdir(srcPath, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(srcPath, entry.name);\n const destChild = pathJoin(destPath, entry.name);\n await this.cp(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = await this.readlink(srcPath) as string;\n let destExists = false;\n try { await this.lstat(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n await this.unlink(destPath);\n }\n await this.symlink(target, destPath);\n } else {\n let destExists = false;\n try { await this.lstat(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n }\n await this.copyFile(srcPath, destPath, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = await this.stat(srcPath);\n await this.utimes(destPath, st.atime, st.mtime);\n }\n }\n\n truncate(filePath: PathLike, len?: number) {\n return _truncate(this._async, toPathString(filePath), len);\n }\n\n realpath(filePath: PathLike) {\n return _realpath(this._async, toPathString(filePath));\n }\n\n exists(filePath: PathLike) {\n return _exists(this._async, toPathString(filePath));\n }\n\n chmod(filePath: PathLike, mode: number) {\n return _chmod(this._async, toPathString(filePath), mode);\n }\n\n /** Like chmod but operates on the symlink itself. In this VFS, delegates to chmod. */\n lchmod(filePath: string, mode: number) {\n return _chmod(this._async, filePath, mode);\n }\n\n /** chmod on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n async fchmod(_fd: number, _mode: number): Promise<void> {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n chown(filePath: PathLike, uid: number, gid: number) {\n return _chown(this._async, toPathString(filePath), uid, gid);\n }\n\n /** Like chown but operates on the symlink itself. In this VFS, delegates to chown. */\n lchown(filePath: string, uid: number, gid: number) {\n return _chown(this._async, filePath, uid, gid);\n }\n\n /** chown on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n async fchown(_fd: number, _uid: number, _gid: number): Promise<void> {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n utimes(filePath: PathLike, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, toPathString(filePath), atime, mtime);\n }\n\n /** Like utimes but operates on the symlink itself. In this VFS, delegates to utimes. */\n lutimes(filePath: string, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, filePath, atime, mtime);\n }\n\n symlink(target: PathLike, linkPath: PathLike, type?: string | null) {\n return _symlink(this._async, toPathString(target), toPathString(linkPath), type);\n }\n\n readlink(filePath: PathLike, options?: { encoding?: string | null } | string | null) {\n return _readlink(this._async, toPathString(filePath), options);\n }\n\n link(existingPath: PathLike, newPath: PathLike) {\n return _link(this._async, toPathString(existingPath), toPathString(newPath));\n }\n\n open(filePath: PathLike, flags?: string | number, mode?: number) {\n return _open(this._async, toPathString(filePath), flags, mode);\n }\n\n opendir(filePath: PathLike) {\n return _opendir(this._async, toPathString(filePath));\n }\n\n mkdtemp(prefix: string) {\n return _mkdtemp(this._async, prefix);\n }\n\n async openAsBlob(filePath: string, options?: OpenAsBlobOptions): Promise<Blob> {\n const data = await this.readFile(filePath);\n const bytes = data instanceof Uint8Array ? data : new TextEncoder().encode(data as string);\n return new Blob([bytes as BlobPart], { type: options?.type ?? '' });\n }\n\n async statfs(path: string): Promise<StatFs> {\n return {\n type: 0x56465321, // \"VFS!\"\n bsize: 4096,\n blocks: 1024 * 1024, // ~4GB virtual capacity\n bfree: 512 * 1024, // ~2GB free (estimate)\n bavail: 512 * 1024,\n files: 10000, // default max inodes\n ffree: 5000, // estimate half free\n };\n }\n\n async *watch(filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n yield* _watchAsync(this._ns, this._async, filePath, options);\n }\n\n async flush(): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async purge(): Promise<void> {\n // No-op\n }\n}\n","/**\n * VFS Engine — operates on a FileSystemSyncAccessHandle\n *\n * Manages the binary VFS layout: superblock, inode table, path table,\n * free block bitmap, and data region. All operations are synchronous\n * and run inside the server worker.\n */\n\nimport {\n VFS_MAGIC, VFS_VERSION, SUPERBLOCK, INODE, INODE_SIZE, INODE_TYPE,\n DEFAULT_BLOCK_SIZE, DEFAULT_INODE_COUNT, DEFAULT_FILE_MODE, DEFAULT_DIR_MODE,\n DEFAULT_SYMLINK_MODE, DEFAULT_UMASK, S_IFMT, S_IFREG, S_IFDIR, S_IFLNK,\n MAX_SYMLINK_DEPTH, INITIAL_DATA_BLOCKS, INITIAL_PATH_TABLE_SIZE,\n calculateLayout,\n} from './layout.js';\nimport { CODE_TO_STATUS } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\ninterface Inode {\n type: number;\n pathOffset: number;\n pathLength: number;\n mode: number;\n size: number;\n firstBlock: number;\n blockCount: number;\n mtime: number;\n ctime: number;\n atime: number;\n uid: number;\n gid: number;\n nlink: number;\n}\n\ninterface FdEntry {\n tabId: string;\n inodeIdx: number;\n position: number;\n flags: number;\n}\n\nexport class VFSEngine {\n private handle!: FileSystemSyncAccessHandle;\n private pathIndex = new Map<string, number>(); // path → inode index\n private inodeCount = 0;\n private blockSize = DEFAULT_BLOCK_SIZE;\n private totalBlocks = 0;\n private freeBlocks = 0;\n private inodeTableOffset = 0;\n private pathTableOffset = 0;\n private pathTableUsed = 0;\n private pathTableSize = 0;\n private bitmapOffset = 0;\n private dataOffset = 0;\n private umask = DEFAULT_UMASK;\n private processUid = 0;\n private processGid = 0;\n private strictPermissions = false;\n private debug = false;\n\n // File descriptor table\n private fdTable = new Map<number, FdEntry>();\n private nextFd = 3; // 0=stdin, 1=stdout, 2=stderr reserved\n\n // Reusable buffers to avoid allocations\n private inodeBuf = new Uint8Array(INODE_SIZE);\n private inodeView = new DataView(this.inodeBuf.buffer);\n\n // In-memory inode cache — eliminates disk reads for hot inodes\n private inodeCache = new Map<number, Inode>();\n private superblockBuf = new Uint8Array(SUPERBLOCK.SIZE);\n private superblockView = new DataView(this.superblockBuf.buffer);\n\n // In-memory bitmap cache — eliminates bitmap reads from OPFS\n private bitmap: Uint8Array | null = null;\n private bitmapDirtyLo = Infinity; // lowest dirty byte index\n private bitmapDirtyHi = -1; // highest dirty byte index (inclusive)\n private superblockDirty = false;\n\n // Free inode hint — skip O(n) scan\n private freeInodeHint = 0;\n\n // Configurable upper bounds\n private maxInodes = 4_000_000;\n private maxBlocks = 4_000_000;\n private maxPathTable = 256 * 1024 * 1024; // 256MB\n private maxVFSSize = 100 * 1024 * 1024 * 1024; // 100GB\n\n init(\n handle: FileSystemSyncAccessHandle,\n opts?: {\n uid?: number; gid?: number; umask?: number; strictPermissions?: boolean; debug?: boolean;\n limits?: { maxInodes?: number; maxBlocks?: number; maxPathTable?: number; maxVFSSize?: number };\n }\n ): void {\n this.handle = handle;\n this.processUid = opts?.uid ?? 0;\n this.processGid = opts?.gid ?? 0;\n this.umask = opts?.umask ?? DEFAULT_UMASK;\n this.strictPermissions = opts?.strictPermissions ?? false;\n this.debug = opts?.debug ?? false;\n if (opts?.limits) {\n if (opts.limits.maxInodes != null) this.maxInodes = opts.limits.maxInodes;\n if (opts.limits.maxBlocks != null) this.maxBlocks = opts.limits.maxBlocks;\n if (opts.limits.maxPathTable != null) this.maxPathTable = opts.limits.maxPathTable;\n if (opts.limits.maxVFSSize != null) this.maxVFSSize = opts.limits.maxVFSSize;\n }\n\n const size = handle.getSize();\n\n if (size === 0) {\n this.format();\n } else {\n try {\n this.mount();\n } catch (err) {\n // Ensure all mount errors are prefixed with \"Corrupt VFS:\" so the\n // sync-relay handler recognizes them as corruption (not OPFS contention)\n // and triggers fallback instead of infinite retry.\n const msg = (err as Error).message ?? String(err);\n if (msg.startsWith('Corrupt VFS:')) throw err;\n throw new Error(`Corrupt VFS: ${msg}`);\n }\n }\n }\n\n /** Release the sync access handle (call on fatal error or shutdown) */\n closeHandle(): void {\n try {\n this.handle?.close();\n } catch (_) {\n // Ignore — handle may already be closed\n }\n }\n\n /** Format a fresh VFS */\n private format(): void {\n const layout = calculateLayout(DEFAULT_INODE_COUNT, DEFAULT_BLOCK_SIZE, INITIAL_DATA_BLOCKS);\n\n this.inodeCount = DEFAULT_INODE_COUNT;\n this.blockSize = DEFAULT_BLOCK_SIZE;\n this.totalBlocks = layout.totalBlocks;\n this.freeBlocks = layout.totalBlocks;\n this.inodeTableOffset = layout.inodeTableOffset;\n this.pathTableOffset = layout.pathTableOffset;\n this.pathTableSize = layout.pathTableSize;\n this.pathTableUsed = 0;\n this.bitmapOffset = layout.bitmapOffset;\n this.dataOffset = layout.dataOffset;\n\n // Grow file to total size\n this.handle.truncate(layout.totalSize);\n\n // Write superblock\n this.writeSuperblock();\n\n // Zero out inode table (type=0 means free)\n const zeroBuf = new Uint8Array(layout.inodeTableSize);\n this.handle.write(zeroBuf, { at: this.inodeTableOffset });\n\n // Zero out bitmap and cache in memory\n this.bitmap = new Uint8Array(layout.bitmapSize);\n this.handle.write(this.bitmap, { at: this.bitmapOffset });\n\n // Create root directory inode\n this.createInode('/', INODE_TYPE.DIRECTORY, DEFAULT_DIR_MODE, 0);\n\n // Re-write superblock with updated pathTableUsed (createInode appended \"/\" to path table)\n this.writeSuperblock();\n this.handle.flush();\n }\n\n /** Mount an existing VFS from disk — validates superblock integrity */\n private mount(): void {\n const fileSize = this.handle.getSize();\n if (fileSize < SUPERBLOCK.SIZE) {\n throw new Error(`Corrupt VFS: file too small (${fileSize} bytes, need at least ${SUPERBLOCK.SIZE})`);\n }\n\n this.handle.read(this.superblockBuf, { at: 0 });\n const v = this.superblockView;\n\n // Validate magic\n const magic = v.getUint32(SUPERBLOCK.MAGIC, true);\n if (magic !== VFS_MAGIC) {\n throw new Error(`Corrupt VFS: bad magic 0x${magic.toString(16)} (expected 0x${VFS_MAGIC.toString(16)})`);\n }\n\n // Validate version\n const version = v.getUint32(SUPERBLOCK.VERSION, true);\n if (version !== VFS_VERSION) {\n throw new Error(`Corrupt VFS: unsupported version ${version} (expected ${VFS_VERSION})`);\n }\n\n // Read superblock fields\n const inodeCount = v.getUint32(SUPERBLOCK.INODE_COUNT, true);\n const blockSize = v.getUint32(SUPERBLOCK.BLOCK_SIZE, true);\n const totalBlocks = v.getUint32(SUPERBLOCK.TOTAL_BLOCKS, true);\n const freeBlocks = v.getUint32(SUPERBLOCK.FREE_BLOCKS, true);\n const inodeTableOffset = v.getFloat64(SUPERBLOCK.INODE_OFFSET, true);\n const pathTableOffset = v.getFloat64(SUPERBLOCK.PATH_OFFSET, true);\n const dataOffset = v.getFloat64(SUPERBLOCK.DATA_OFFSET, true);\n const bitmapOffset = v.getFloat64(SUPERBLOCK.BITMAP_OFFSET, true);\n const pathUsed = v.getUint32(SUPERBLOCK.PATH_USED, true);\n\n // Validate field sanity\n if (blockSize === 0 || (blockSize & (blockSize - 1)) !== 0) {\n throw new Error(`Corrupt VFS: invalid block size ${blockSize} (must be power of 2)`);\n }\n if (inodeCount === 0) {\n throw new Error('Corrupt VFS: inode count is 0');\n }\n if (freeBlocks > totalBlocks) {\n throw new Error(`Corrupt VFS: free blocks (${freeBlocks}) exceeds total blocks (${totalBlocks})`);\n }\n\n // Sane upper bounds — prevent huge allocations from corrupt values.\n // Configurable via opts.limits in init().\n if (inodeCount > this.maxInodes) {\n throw new Error(`Corrupt VFS: inode count ${inodeCount} exceeds maximum ${this.maxInodes}`);\n }\n if (totalBlocks > this.maxBlocks) {\n throw new Error(`Corrupt VFS: total blocks ${totalBlocks} exceeds maximum ${this.maxBlocks}`);\n }\n if (fileSize > this.maxVFSSize) {\n throw new Error(`Corrupt VFS: file size ${fileSize} exceeds maximum ${this.maxVFSSize}`);\n }\n\n // Validate all offsets are finite positive integers\n if (!Number.isFinite(inodeTableOffset) || inodeTableOffset < 0 ||\n !Number.isFinite(pathTableOffset) || pathTableOffset < 0 ||\n !Number.isFinite(bitmapOffset) || bitmapOffset < 0 ||\n !Number.isFinite(dataOffset) || dataOffset < 0) {\n throw new Error(`Corrupt VFS: non-finite or negative section offset`);\n }\n\n // Validate section ordering: superblock < inodes < paths < bitmap < data\n if (inodeTableOffset !== SUPERBLOCK.SIZE) {\n throw new Error(`Corrupt VFS: inode table offset ${inodeTableOffset} (expected ${SUPERBLOCK.SIZE})`);\n }\n const expectedPathOffset = inodeTableOffset + inodeCount * INODE_SIZE;\n if (pathTableOffset !== expectedPathOffset) {\n throw new Error(`Corrupt VFS: path table offset ${pathTableOffset} (expected ${expectedPathOffset})`);\n }\n if (bitmapOffset <= pathTableOffset) {\n throw new Error(`Corrupt VFS: bitmap offset ${bitmapOffset} must be after path table ${pathTableOffset}`);\n }\n if (dataOffset <= bitmapOffset) {\n throw new Error(`Corrupt VFS: data offset ${dataOffset} must be after bitmap ${bitmapOffset}`);\n }\n const pathTableSize = bitmapOffset - pathTableOffset;\n if (pathUsed > pathTableSize) {\n throw new Error(`Corrupt VFS: path used (${pathUsed}) exceeds path table size (${pathTableSize})`);\n }\n if (pathTableSize > this.maxPathTable) {\n throw new Error(`Corrupt VFS: path table size ${pathTableSize} exceeds maximum ${this.maxPathTable}`);\n }\n\n // Validate file is large enough for the declared layout\n const expectedMinSize = dataOffset + totalBlocks * blockSize;\n if (expectedMinSize > this.maxVFSSize) {\n throw new Error(`Corrupt VFS: computed layout size ${expectedMinSize} exceeds maximum ${this.maxVFSSize}`);\n }\n if (fileSize < expectedMinSize) {\n throw new Error(`Corrupt VFS: file size ${fileSize} too small for layout (need ${expectedMinSize})`);\n }\n\n // All checks passed — commit to engine state\n this.inodeCount = inodeCount;\n this.blockSize = blockSize;\n this.totalBlocks = totalBlocks;\n this.freeBlocks = freeBlocks;\n this.inodeTableOffset = inodeTableOffset;\n this.pathTableOffset = pathTableOffset;\n this.dataOffset = dataOffset;\n this.bitmapOffset = bitmapOffset;\n this.pathTableUsed = pathUsed;\n this.pathTableSize = pathTableSize;\n\n // Load bitmap into memory\n const bitmapSize = Math.ceil(this.totalBlocks / 8);\n this.bitmap = new Uint8Array(bitmapSize);\n this.handle.read(this.bitmap, { at: this.bitmapOffset });\n\n this.rebuildIndex();\n\n // Verify root directory exists\n if (!this.pathIndex.has('/')) {\n throw new Error('Corrupt VFS: root directory \"/\" not found in inode table');\n }\n }\n\n private writeSuperblock(): void {\n const v = this.superblockView;\n v.setUint32(SUPERBLOCK.MAGIC, VFS_MAGIC, true);\n v.setUint32(SUPERBLOCK.VERSION, VFS_VERSION, true);\n v.setUint32(SUPERBLOCK.INODE_COUNT, this.inodeCount, true);\n v.setUint32(SUPERBLOCK.BLOCK_SIZE, this.blockSize, true);\n v.setUint32(SUPERBLOCK.TOTAL_BLOCKS, this.totalBlocks, true);\n v.setUint32(SUPERBLOCK.FREE_BLOCKS, this.freeBlocks, true);\n v.setFloat64(SUPERBLOCK.INODE_OFFSET, this.inodeTableOffset, true);\n v.setFloat64(SUPERBLOCK.PATH_OFFSET, this.pathTableOffset, true);\n v.setFloat64(SUPERBLOCK.DATA_OFFSET, this.dataOffset, true);\n v.setFloat64(SUPERBLOCK.BITMAP_OFFSET, this.bitmapOffset, true);\n v.setUint32(SUPERBLOCK.PATH_USED, this.pathTableUsed, true);\n this.handle.write(this.superblockBuf, { at: 0 });\n }\n\n /** Flush pending bitmap and superblock writes to disk (one write each) */\n private markBitmapDirty(lo: number, hi: number): void {\n if (lo < this.bitmapDirtyLo) this.bitmapDirtyLo = lo;\n if (hi > this.bitmapDirtyHi) this.bitmapDirtyHi = hi;\n }\n\n private commitPending(): void {\n // Trim trailing free blocks before flushing bitmap/superblock\n if (this.blocksFreedsinceTrim) {\n this.trimTrailingBlocks();\n this.blocksFreedsinceTrim = false;\n }\n\n if (this.bitmapDirtyHi >= 0) {\n const lo = this.bitmapDirtyLo;\n const hi = this.bitmapDirtyHi;\n this.handle.write(this.bitmap!.subarray(lo, hi + 1), { at: this.bitmapOffset + lo });\n this.bitmapDirtyLo = Infinity;\n this.bitmapDirtyHi = -1;\n }\n if (this.superblockDirty) {\n this.writeSuperblock();\n this.superblockDirty = false;\n }\n }\n\n /** Shrink the OPFS file by removing trailing free blocks from the data region.\n * Scans bitmap from end to find the last used block, then truncates. */\n private trimTrailingBlocks(): void {\n const bitmap = this.bitmap!;\n\n // Find the last used block by scanning bitmap from the end\n let lastUsed = -1;\n for (let byteIdx = Math.ceil(this.totalBlocks / 8) - 1; byteIdx >= 0; byteIdx--) {\n if (bitmap[byteIdx] !== 0) {\n // Find highest set bit in this byte\n for (let bit = 7; bit >= 0; bit--) {\n const blockIdx = byteIdx * 8 + bit;\n if (blockIdx < this.totalBlocks && (bitmap[byteIdx] & (1 << bit))) {\n lastUsed = blockIdx;\n break;\n }\n }\n break;\n }\n }\n\n const newTotal = Math.max(lastUsed + 1, INITIAL_DATA_BLOCKS);\n if (newTotal >= this.totalBlocks) return; // nothing to trim\n\n // Truncate the OPFS file\n this.handle.truncate(this.dataOffset + newTotal * this.blockSize);\n\n // Shrink in-memory bitmap\n const newBitmapSize = Math.ceil(newTotal / 8);\n this.bitmap = bitmap.slice(0, newBitmapSize);\n\n // Update counters\n const trimmed = this.totalBlocks - newTotal;\n this.freeBlocks -= trimmed; // these free blocks no longer exist\n this.totalBlocks = newTotal;\n this.superblockDirty = true;\n\n // Re-mark entire bitmap dirty so the smaller bitmap is flushed\n this.bitmapDirtyLo = 0;\n this.bitmapDirtyHi = newBitmapSize - 1;\n }\n\n /** Rebuild in-memory path→inode index from disk.\n * Bulk-reads the entire inode table + path table in 2 I/O calls,\n * then parses in memory (avoids 10k+ individual reads). */\n private rebuildIndex(): void {\n this.pathIndex.clear();\n this.inodeCache.clear();\n\n // Bulk read entire inode table (e.g. 640KB for 10k inodes)\n const inodeTableSize = this.inodeCount * INODE_SIZE;\n const inodeBuf = new Uint8Array(inodeTableSize);\n this.handle.read(inodeBuf, { at: this.inodeTableOffset });\n const inodeView = new DataView(inodeBuf.buffer);\n\n // Bulk read used portion of path table\n const pathBuf = this.pathTableUsed > 0 ? new Uint8Array(this.pathTableUsed) : null;\n if (pathBuf) {\n this.handle.read(pathBuf, { at: this.pathTableOffset });\n }\n\n for (let i = 0; i < this.inodeCount; i++) {\n const off = i * INODE_SIZE;\n const type = inodeView.getUint8(off + INODE.TYPE);\n if (type === INODE_TYPE.FREE) continue;\n\n // Validate inode type\n if (type < INODE_TYPE.FILE || type > INODE_TYPE.SYMLINK) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid type ${type}`);\n }\n\n const pathOffset = inodeView.getUint32(off + INODE.PATH_OFFSET, true);\n const pathLength = inodeView.getUint16(off + INODE.PATH_LENGTH, true);\n const size = inodeView.getFloat64(off + INODE.SIZE, true);\n const firstBlock = inodeView.getUint32(off + INODE.FIRST_BLOCK, true);\n const blockCount = inodeView.getUint32(off + INODE.BLOCK_COUNT, true);\n\n // Validate path bounds\n if (pathLength === 0 || pathOffset + pathLength > this.pathTableUsed) {\n throw new Error(`Corrupt VFS: inode ${i} path out of bounds (offset=${pathOffset}, len=${pathLength}, tableUsed=${this.pathTableUsed})`);\n }\n\n // Validate data bounds for files/symlinks\n if (type !== INODE_TYPE.DIRECTORY) {\n if (size < 0 || !isFinite(size)) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid size ${size}`);\n }\n if (blockCount > 0 && firstBlock + blockCount > this.totalBlocks) {\n throw new Error(`Corrupt VFS: inode ${i} data blocks out of range (first=${firstBlock}, count=${blockCount}, total=${this.totalBlocks})`);\n }\n }\n\n const inode: Inode = {\n type,\n pathOffset,\n pathLength,\n nlink: inodeView.getUint16(off + INODE.NLINK, true) || 1,\n mode: inodeView.getUint32(off + INODE.MODE, true),\n size,\n firstBlock,\n blockCount,\n mtime: inodeView.getFloat64(off + INODE.MTIME, true),\n ctime: inodeView.getFloat64(off + INODE.CTIME, true),\n atime: inodeView.getFloat64(off + INODE.ATIME, true),\n uid: inodeView.getUint32(off + INODE.UID, true),\n gid: inodeView.getUint32(off + INODE.GID, true),\n };\n this.inodeCache.set(i, inode);\n\n // Decode path from in-memory path table buffer (no disk read)\n let path: string;\n if (pathBuf) {\n path = decoder.decode(pathBuf.subarray(inode.pathOffset, inode.pathOffset + inode.pathLength));\n } else {\n path = this.readPath(inode.pathOffset, inode.pathLength);\n }\n\n // Validate path format\n if (!path.startsWith('/') || path.includes('\\0')) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid path \"${path.substring(0, 50)}\"`);\n }\n\n this.pathIndex.set(path, i);\n }\n }\n\n // ========== Low-level inode I/O ==========\n\n private readInode(idx: number): Inode {\n const cached = this.inodeCache.get(idx);\n if (cached) return cached;\n\n const offset = this.inodeTableOffset + idx * INODE_SIZE;\n this.handle.read(this.inodeBuf, { at: offset });\n const v = this.inodeView;\n const inode: Inode = {\n type: v.getUint8(INODE.TYPE),\n pathOffset: v.getUint32(INODE.PATH_OFFSET, true),\n pathLength: v.getUint16(INODE.PATH_LENGTH, true),\n nlink: v.getUint16(INODE.NLINK, true) || 1,\n mode: v.getUint32(INODE.MODE, true),\n size: v.getFloat64(INODE.SIZE, true),\n firstBlock: v.getUint32(INODE.FIRST_BLOCK, true),\n blockCount: v.getUint32(INODE.BLOCK_COUNT, true),\n mtime: v.getFloat64(INODE.MTIME, true),\n ctime: v.getFloat64(INODE.CTIME, true),\n atime: v.getFloat64(INODE.ATIME, true),\n uid: v.getUint32(INODE.UID, true),\n gid: v.getUint32(INODE.GID, true),\n };\n this.inodeCache.set(idx, inode);\n return inode;\n }\n\n private writeInode(idx: number, inode: Inode): void {\n // Maintain inode cache\n if (inode.type === INODE_TYPE.FREE) {\n this.inodeCache.delete(idx);\n } else {\n this.inodeCache.set(idx, inode);\n }\n\n const v = this.inodeView;\n v.setUint8(INODE.TYPE, inode.type);\n v.setUint8(INODE.FLAGS, 0);\n v.setUint8(INODE.FLAGS + 1, 0);\n v.setUint8(INODE.FLAGS + 2, 0);\n v.setUint32(INODE.PATH_OFFSET, inode.pathOffset, true);\n v.setUint16(INODE.PATH_LENGTH, inode.pathLength, true);\n v.setUint16(INODE.NLINK, inode.nlink, true);\n v.setUint32(INODE.MODE, inode.mode, true);\n v.setFloat64(INODE.SIZE, inode.size, true);\n v.setUint32(INODE.FIRST_BLOCK, inode.firstBlock, true);\n v.setUint32(INODE.BLOCK_COUNT, inode.blockCount, true);\n v.setFloat64(INODE.MTIME, inode.mtime, true);\n v.setFloat64(INODE.CTIME, inode.ctime, true);\n v.setFloat64(INODE.ATIME, inode.atime, true);\n v.setUint32(INODE.UID, inode.uid, true);\n v.setUint32(INODE.GID, inode.gid, true);\n\n const offset = this.inodeTableOffset + idx * INODE_SIZE;\n this.handle.write(this.inodeBuf, { at: offset });\n }\n\n // ========== Path table I/O ==========\n\n private readPath(offset: number, length: number): string {\n const buf = new Uint8Array(length);\n this.handle.read(buf, { at: this.pathTableOffset + offset });\n return decoder.decode(buf);\n }\n\n private appendPath(path: string): { offset: number; length: number } {\n const bytes = encoder.encode(path);\n const offset = this.pathTableUsed;\n\n // Check if path table needs to grow\n if (offset + bytes.byteLength > this.pathTableSize) {\n this.growPathTable(offset + bytes.byteLength);\n }\n\n this.handle.write(bytes, { at: this.pathTableOffset + offset });\n this.pathTableUsed += bytes.byteLength;\n\n // Defer superblock write — committed in commitPending()\n this.superblockDirty = true;\n\n return { offset, length: bytes.byteLength };\n }\n\n private growPathTable(needed: number): void {\n // Double the path table or grow to fit needed, whichever is larger\n const newSize = Math.max(this.pathTableSize * 2, needed + INITIAL_PATH_TABLE_SIZE);\n const growth = newSize - this.pathTableSize;\n\n // Need to shift bitmap and data region forward\n // Use in-memory bitmap (no read needed)\n\n // Read existing data region\n const dataSize = this.totalBlocks * this.blockSize;\n const dataBuf = new Uint8Array(dataSize);\n this.handle.read(dataBuf, { at: this.dataOffset });\n\n // Grow file\n const newTotalSize = this.handle.getSize() + growth;\n this.handle.truncate(newTotalSize);\n\n // Write data back at new offset\n const newBitmapOffset = this.bitmapOffset + growth;\n const newDataOffset = this.dataOffset + growth;\n this.handle.write(dataBuf, { at: newDataOffset });\n this.handle.write(this.bitmap!, { at: newBitmapOffset });\n\n // Update offsets\n this.pathTableSize = newSize;\n this.bitmapOffset = newBitmapOffset;\n this.dataOffset = newDataOffset;\n\n // Mark superblock dirty (will be written in commitPending)\n this.superblockDirty = true;\n }\n\n // ========== Bitmap I/O ==========\n\n private allocateBlocks(count: number): number {\n if (count === 0) return 0;\n\n const bitmap = this.bitmap!;\n let run = 0;\n let start = 0;\n\n for (let i = 0; i < this.totalBlocks; i++) {\n const byteIdx = i >>> 3;\n const bitIdx = i & 7;\n const used = (bitmap[byteIdx] >>> bitIdx) & 1;\n\n if (used) {\n run = 0;\n start = i + 1;\n } else {\n run++;\n if (run === count) {\n // Mark blocks as used in memory\n for (let j = start; j <= i; j++) {\n const bj = j >>> 3;\n const bi = j & 7;\n bitmap[bj] |= (1 << bi);\n }\n this.markBitmapDirty(start >>> 3, i >>> 3);\n this.freeBlocks -= count;\n this.superblockDirty = true;\n return start;\n }\n }\n }\n\n // No contiguous space — grow data region\n return this.growAndAllocate(count);\n }\n\n private growAndAllocate(count: number): number {\n const oldTotal = this.totalBlocks;\n // Grow by at least doubling or enough for the request\n const newTotal = Math.max(oldTotal * 2, oldTotal + count);\n const addedBlocks = newTotal - oldTotal;\n\n // Grow the file\n const newFileSize = this.dataOffset + newTotal * this.blockSize;\n this.handle.truncate(newFileSize);\n\n // Grow in-memory bitmap\n const newBitmapSize = Math.ceil(newTotal / 8);\n const newBitmap = new Uint8Array(newBitmapSize);\n newBitmap.set(this.bitmap!);\n this.bitmap = newBitmap;\n\n this.totalBlocks = newTotal;\n this.freeBlocks += addedBlocks;\n\n // Allocate from the newly freed area\n const start = oldTotal;\n for (let j = start; j < start + count; j++) {\n const bj = j >>> 3;\n const bi = j & 7;\n this.bitmap[bj] |= (1 << bi);\n }\n\n this.markBitmapDirty(start >>> 3, (start + count - 1) >>> 3);\n this.freeBlocks -= count;\n this.superblockDirty = true;\n\n return start;\n }\n\n private blocksFreedsinceTrim = false;\n\n private freeBlockRange(start: number, count: number): void {\n if (count === 0) return;\n const bitmap = this.bitmap!;\n\n for (let i = start; i < start + count; i++) {\n const byteIdx = i >>> 3;\n const bitIdx = i & 7;\n bitmap[byteIdx] &= ~(1 << bitIdx);\n }\n\n this.markBitmapDirty(start >>> 3, (start + count - 1) >>> 3);\n this.freeBlocks += count;\n this.superblockDirty = true;\n this.blocksFreedsinceTrim = true;\n }\n\n // updateSuperblockFreeBlocks is no longer needed — superblock writes are coalesced via commitPending()\n\n // ========== Inode allocation ==========\n\n private findFreeInode(): number {\n // Start from hint to skip already-used entries\n for (let i = this.freeInodeHint; i < this.inodeCount; i++) {\n // Check cache first — cached entries are never FREE\n if (this.inodeCache.has(i)) continue;\n\n const offset = this.inodeTableOffset + i * INODE_SIZE;\n const typeBuf = new Uint8Array(1);\n this.handle.read(typeBuf, { at: offset });\n if (typeBuf[0] === INODE_TYPE.FREE) {\n this.freeInodeHint = i + 1;\n return i;\n }\n }\n // All inodes used — grow inode table\n const idx = this.growInodeTable();\n this.freeInodeHint = idx + 1;\n return idx;\n }\n\n private growInodeTable(): number {\n const oldCount = this.inodeCount;\n const newCount = oldCount * 2;\n const growth = (newCount - oldCount) * INODE_SIZE;\n\n // Read everything after inode table\n const afterInodeOffset = this.inodeTableOffset + oldCount * INODE_SIZE;\n const afterSize = this.handle.getSize() - afterInodeOffset;\n const afterBuf = new Uint8Array(afterSize);\n this.handle.read(afterBuf, { at: afterInodeOffset });\n\n // Grow file\n this.handle.truncate(this.handle.getSize() + growth);\n\n // Write back shifted content\n this.handle.write(afterBuf, { at: afterInodeOffset + growth });\n\n // Zero out new inode entries\n const zeroes = new Uint8Array(growth);\n this.handle.write(zeroes, { at: afterInodeOffset });\n\n // Update offsets\n this.pathTableOffset += growth;\n this.bitmapOffset += growth;\n this.dataOffset += growth;\n this.inodeCount = newCount;\n\n this.superblockDirty = true;\n\n return oldCount; // First new free inode\n }\n\n // ========== Data I/O ==========\n\n private readData(firstBlock: number, blockCount: number, size: number): Uint8Array {\n const buf = new Uint8Array(size);\n const offset = this.dataOffset + firstBlock * this.blockSize;\n this.handle.read(buf, { at: offset });\n return buf;\n }\n\n private writeData(firstBlock: number, data: Uint8Array): void {\n const offset = this.dataOffset + firstBlock * this.blockSize;\n this.handle.write(data, { at: offset });\n }\n\n // ========== Path resolution ==========\n\n private resolvePath(path: string, depth: number = 0): number | undefined {\n if (depth > MAX_SYMLINK_DEPTH) return undefined; // ELOOP\n\n const idx = this.pathIndex.get(path);\n if (idx === undefined) {\n // Path not found directly — try component resolution (handles intermediate symlinks)\n return this.resolvePathComponents(path, true, depth);\n }\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.SYMLINK) {\n // Follow symlink\n const target = decoder.decode(this.readData(inode.firstBlock, inode.blockCount, inode.size));\n const resolved = target.startsWith('/') ? target : this.resolveRelative(path, target);\n return this.resolvePath(resolved, depth + 1);\n }\n\n return idx;\n }\n\n /** Resolve symlinks in intermediate path components */\n private resolvePathComponents(path: string, followLast: boolean = true, depth: number = 0): number | undefined {\n const result = this.resolvePathFull(path, followLast, depth);\n return result?.idx;\n }\n\n /**\n * Resolve a path following symlinks, returning both the inode index AND the\n * fully resolved path. This is needed by readdir: when listing a symlinked\n * directory, we must search for children under the resolved target path\n * (where files actually exist in pathIndex), not under the symlink path.\n */\n private resolvePathFull(path: string, followLast: boolean = true, depth: number = 0): { idx: number; resolvedPath: string } | undefined {\n if (depth > MAX_SYMLINK_DEPTH) return undefined; // ELOOP\n\n const parts = path.split('/').filter(Boolean);\n let current = '/';\n\n for (let i = 0; i < parts.length; i++) {\n const isLast = i === parts.length - 1;\n current = current === '/' ? '/' + parts[i] : current + '/' + parts[i];\n\n const idx = this.pathIndex.get(current);\n if (idx === undefined) return undefined;\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.SYMLINK && (!isLast || followLast)) {\n const target = decoder.decode(this.readData(inode.firstBlock, inode.blockCount, inode.size));\n const resolved = target.startsWith('/') ? target : this.resolveRelative(current, target);\n\n if (isLast) {\n // Use resolvePathFull (not resolvePath) so intermediate symlinks\n // in the resolved target path are also followed\n return this.resolvePathFull(resolved, true, depth + 1);\n }\n\n // Reconstruct remaining path with resolved symlink\n const remaining = parts.slice(i + 1).join('/');\n const newPath = resolved + (remaining ? '/' + remaining : '');\n return this.resolvePathFull(newPath, followLast, depth + 1);\n }\n }\n\n const finalIdx = this.pathIndex.get(current);\n if (finalIdx === undefined) return undefined;\n return { idx: finalIdx, resolvedPath: current };\n }\n\n private resolveRelative(from: string, target: string): string {\n const dir = from.substring(0, from.lastIndexOf('/')) || '/';\n const parts = (dir + '/' + target).split('/').filter(Boolean);\n const resolved: string[] = [];\n for (const p of parts) {\n if (p === '.') continue;\n if (p === '..') { resolved.pop(); continue; }\n resolved.push(p);\n }\n return '/' + resolved.join('/');\n }\n\n // ========== Core inode creation helper ==========\n\n private createInode(path: string, type: number, mode: number, size: number, data?: Uint8Array): number {\n const idx = this.findFreeInode();\n const { offset: pathOff, length: pathLen } = this.appendPath(path);\n const now = Date.now();\n\n let firstBlock = 0;\n let blockCount = 0;\n\n if (data && data.byteLength > 0) {\n blockCount = Math.ceil(data.byteLength / this.blockSize);\n firstBlock = this.allocateBlocks(blockCount);\n this.writeData(firstBlock, data);\n }\n\n const inode: Inode = {\n type,\n pathOffset: pathOff,\n pathLength: pathLen,\n nlink: type === INODE_TYPE.DIRECTORY ? 2 : 1,\n mode,\n size,\n firstBlock,\n blockCount,\n mtime: now,\n ctime: now,\n atime: now,\n uid: this.processUid,\n gid: this.processGid,\n };\n\n this.writeInode(idx, inode);\n this.pathIndex.set(path, idx);\n\n return idx;\n }\n\n // ========== Public API — called by server worker dispatch ==========\n\n /** Normalize a path: ensure leading /, resolve . and .. */\n normalizePath(p: string): string {\n if (p.charCodeAt(0) !== 47) p = '/' + p; // 47 = '/'\n // Fast path: already normalized (no '.', '..', '//', trailing '/')\n if (p.length === 1) return p; // \"/\"\n if (p.indexOf('/.') === -1 && p.indexOf('//') === -1 && p.charCodeAt(p.length - 1) !== 47) {\n return p;\n }\n // Slow path: full normalize\n const parts = p.split('/').filter(Boolean);\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '.') continue;\n if (part === '..') { resolved.pop(); continue; }\n resolved.push(part);\n }\n return '/' + resolved.join('/');\n }\n\n // ---- READ ----\n read(path: string): { status: number; data: Uint8Array | null } {\n const t0 = this.debug ? performance.now() : 0;\n path = this.normalizePath(path);\n\n // Fast path: direct index lookup (skips component-by-component walk)\n let idx = this.pathIndex.get(path);\n if (idx !== undefined) {\n const inode = this.inodeCache.get(idx);\n if (inode) {\n // Symlink? Fall through to full resolve\n if (inode.type === INODE_TYPE.SYMLINK) {\n idx = this.resolvePathComponents(path, true);\n } else if (inode.type === INODE_TYPE.DIRECTORY) {\n return { status: CODE_TO_STATUS.EISDIR, data: null };\n } else {\n // Hot path: cached inode, no symlinks\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n if (this.debug) {\n const t1 = performance.now();\n console.log(`[VFS read] path=${path} size=${inode.size} TOTAL=${(t1-t0).toFixed(3)}ms (fast)`);\n }\n return { status: 0, data };\n }\n }\n }\n\n // Slow path: full component resolution (handles symlinks, uncached inodes)\n if (idx === undefined) idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR, data: null };\n\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n\n if (this.debug) {\n const t1 = performance.now();\n console.log(`[VFS read] path=${path} size=${inode.size} TOTAL=${(t1-t0).toFixed(3)}ms (slow path)`);\n }\n\n return { status: 0, data };\n }\n\n // ---- WRITE ----\n write(path: string, data: Uint8Array, flags: number = 0): { status: number } {\n const t0 = this.debug ? performance.now() : 0;\n path = this.normalizePath(path);\n const t1 = this.debug ? performance.now() : 0;\n\n // Ensure parent directory exists\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) return { status: parentStatus };\n const t2 = this.debug ? performance.now() : 0;\n\n const existingIdx = this.resolvePathComponents(path, true);\n const t3 = this.debug ? performance.now() : 0;\n\n let tAlloc = t3, tData = t3, tInode = t3;\n\n if (existingIdx !== undefined) {\n // Update existing file\n const inode = this.readInode(existingIdx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n const neededBlocks = Math.ceil(data.byteLength / this.blockSize);\n\n if (neededBlocks <= inode.blockCount) {\n // Fits in current blocks\n tAlloc = this.debug ? performance.now() : 0;\n this.writeData(inode.firstBlock, data);\n tData = this.debug ? performance.now() : 0;\n if (neededBlocks < inode.blockCount) {\n this.freeBlockRange(inode.firstBlock + neededBlocks, inode.blockCount - neededBlocks);\n }\n } else {\n // Need more blocks — free old, allocate new\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n tAlloc = this.debug ? performance.now() : 0;\n this.writeData(newFirst, data);\n tData = this.debug ? performance.now() : 0;\n inode.firstBlock = newFirst;\n }\n\n inode.size = data.byteLength;\n inode.blockCount = neededBlocks;\n inode.mtime = Date.now();\n this.writeInode(existingIdx, inode);\n tInode = this.debug ? performance.now() : 0;\n } else {\n // Create new file\n const mode = DEFAULT_FILE_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.FILE, mode, data.byteLength, data);\n tAlloc = this.debug ? performance.now() : 0;\n tData = tAlloc;\n tInode = tAlloc;\n }\n\n // Always commit pending superblock/bitmap changes (matches unlink, mkdir, etc.)\n // Without this, PATH_USED won't be persisted for newly created files,\n // causing \"path out of bounds\" corruption on reload.\n this.commitPending();\n if (flags & 1) {\n this.handle.flush();\n }\n const tFlush = this.debug ? performance.now() : 0;\n\n if (this.debug) {\n const existing = existingIdx !== undefined;\n console.log(`[VFS write] path=${path} size=${data.byteLength} ${existing ? 'UPDATE' : 'CREATE'} normalize=${(t1-t0).toFixed(3)}ms parent=${(t2-t1).toFixed(3)}ms resolve=${(t3-t2).toFixed(3)}ms alloc=${(tAlloc-t3).toFixed(3)}ms data=${(tData-tAlloc).toFixed(3)}ms inode=${(tInode-tData).toFixed(3)}ms flush=${(tFlush-tInode).toFixed(3)}ms TOTAL=${(tFlush-t0).toFixed(3)}ms`);\n }\n\n return { status: 0 };\n }\n\n // ---- APPEND ----\n append(path: string, data: Uint8Array): { status: number } {\n path = this.normalizePath(path);\n const existingIdx = this.resolvePathComponents(path, true);\n\n if (existingIdx === undefined) {\n // Create new file with the data\n return this.write(path, data);\n }\n\n const inode = this.readInode(existingIdx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // Read existing data\n const existing = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n\n // Concat\n const combined = new Uint8Array(existing.byteLength + data.byteLength);\n combined.set(existing);\n combined.set(data, existing.byteLength);\n\n // Rewrite\n const neededBlocks = Math.ceil(combined.byteLength / this.blockSize);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n this.writeData(newFirst, combined);\n\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n inode.size = combined.byteLength;\n inode.mtime = Date.now();\n this.writeInode(existingIdx, inode);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- UNLINK ----\n unlink(path: string): { status: number } {\n path = this.normalizePath(path);\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // Decrement nlink; only free data when it reaches 0\n inode.nlink = Math.max(0, inode.nlink - 1);\n\n // Free data blocks\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n\n // Mark inode as free\n inode.type = INODE_TYPE.FREE;\n this.writeInode(idx, inode);\n\n // Remove from index\n this.pathIndex.delete(path);\n // Reset free inode hint\n if (idx < this.freeInodeHint) this.freeInodeHint = idx;\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- STAT ----\n stat(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n return this.encodeStatResponse(idx);\n }\n\n // ---- LSTAT (no symlink follow for the FINAL component) ----\n lstat(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n // Use resolvePathComponents with followLast=false — follows intermediate\n // symlinks but returns the symlink inode itself for the last component.\n // Direct pathIndex.get(path) fails for paths through symlinked directories\n // because children are stored under the symlink target path in pathIndex.\n const idx = this.resolvePathComponents(path, false);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n return this.encodeStatResponse(idx);\n }\n\n private encodeStatResponse(idx: number): { status: number; data: Uint8Array } {\n const inode = this.readInode(idx);\n\n // Compute nlink for directories: 2 + number of child subdirectories\n let nlink = inode.nlink;\n if (inode.type === INODE_TYPE.DIRECTORY) {\n const path = this.readPath(inode.pathOffset, inode.pathLength);\n const children = this.getDirectChildren(path);\n let subdirCount = 0;\n for (const child of children) {\n const childIdx = this.pathIndex.get(child);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\n }\n nlink = 2 + subdirCount;\n }\n\n // Encode stat into binary: type(1) + mode(4) + size(8) + mtime(8) + ctime(8) + atime(8) + uid(4) + gid(4) + ino(4) + nlink(4) = 53 bytes\n const buf = new Uint8Array(53);\n const view = new DataView(buf.buffer);\n view.setUint8(0, inode.type);\n view.setUint32(1, inode.mode, true);\n view.setFloat64(5, inode.size, true);\n view.setFloat64(13, inode.mtime, true);\n view.setFloat64(21, inode.ctime, true);\n view.setFloat64(29, inode.atime, true);\n view.setUint32(37, inode.uid, true);\n view.setUint32(41, inode.gid, true);\n view.setUint32(45, idx, true); // ino = inode index\n view.setUint32(49, nlink, true);\n\n return { status: 0, data: buf };\n }\n\n // ---- MKDIR ----\n mkdir(path: string, flags: number = 0): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const recursive = (flags & 1) !== 0;\n\n if (recursive) {\n return this.mkdirRecursive(path);\n }\n\n // Check if already exists\n if (this.pathIndex.has(path)) return { status: CODE_TO_STATUS.EEXIST, data: null };\n\n // Ensure parent exists\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) return { status: parentStatus, data: null };\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.DIRECTORY, mode, 0);\n\n this.commitPending();\n // Non-recursive mkdir returns undefined (null data) per Node.js spec\n return { status: 0, data: null };\n }\n\n private mkdirRecursive(path: string): { status: number; data: Uint8Array | null } {\n const parts = path.split('/').filter(Boolean);\n let current = '';\n let firstCreated: string | null = null;\n\n for (const part of parts) {\n current += '/' + part;\n\n if (this.pathIndex.has(current)) {\n const idx = this.pathIndex.get(current)!;\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) {\n return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n }\n continue;\n }\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(current, INODE_TYPE.DIRECTORY, mode, 0);\n if (!firstCreated) firstCreated = current;\n }\n\n this.commitPending();\n const result = firstCreated ? encoder.encode(firstCreated) : undefined;\n return { status: 0, data: result ?? null };\n }\n\n // ---- RMDIR ----\n rmdir(path: string, flags: number = 0): { status: number } {\n path = this.normalizePath(path);\n const recursive = (flags & 1) !== 0;\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR };\n\n // Check for children\n const children = this.getDirectChildren(path);\n\n if (children.length > 0) {\n if (!recursive) return { status: CODE_TO_STATUS.ENOTEMPTY };\n\n // Recursive delete\n for (const child of this.getAllDescendants(path)) {\n const childIdx = this.pathIndex.get(child)!;\n const childInode = this.readInode(childIdx);\n this.freeBlockRange(childInode.firstBlock, childInode.blockCount);\n childInode.type = INODE_TYPE.FREE;\n this.writeInode(childIdx, childInode);\n this.pathIndex.delete(child);\n }\n }\n\n // Remove the directory itself\n inode.type = INODE_TYPE.FREE;\n this.writeInode(idx, inode);\n this.pathIndex.delete(path);\n if (idx < this.freeInodeHint) this.freeInodeHint = idx;\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- READDIR ----\n readdir(path: string, flags: number = 0): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const resolved = this.resolvePathFull(path, true);\n if (!resolved) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(resolved.idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n\n const withFileTypes = (flags & 1) !== 0;\n // Use the resolved path for child lookup — when path is a symlink,\n // the actual children are stored under the target path in pathIndex.\n const children = this.getDirectChildren(resolved.resolvedPath);\n\n if (withFileTypes) {\n // Encode as: count(u32) + entries[name_len(u16) + name(bytes) + type(u8)]\n let totalSize = 4;\n const entries: { name: Uint8Array; type: number }[] = [];\n\n for (const childPath of children) {\n const name = childPath.substring(childPath.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n const childIdx = this.pathIndex.get(childPath)!;\n const childInode = this.readInode(childIdx);\n entries.push({ name: nameBytes, type: childInode.type });\n totalSize += 2 + nameBytes.byteLength + 1; // nameLen + name + type\n }\n\n const buf = new Uint8Array(totalSize);\n const view = new DataView(buf.buffer);\n view.setUint32(0, entries.length, true);\n let offset = 4;\n\n for (const entry of entries) {\n view.setUint16(offset, entry.name.byteLength, true);\n offset += 2;\n buf.set(entry.name, offset);\n offset += entry.name.byteLength;\n buf[offset++] = entry.type;\n }\n\n return { status: 0, data: buf };\n }\n\n // Simple name list: count(u32) + entries[name_len(u16) + name(bytes)]\n let totalSize = 4;\n const nameEntries: Uint8Array[] = [];\n\n for (const childPath of children) {\n const name = childPath.substring(childPath.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n nameEntries.push(nameBytes);\n totalSize += 2 + nameBytes.byteLength;\n }\n\n const buf = new Uint8Array(totalSize);\n const view = new DataView(buf.buffer);\n view.setUint32(0, nameEntries.length, true);\n let offset = 4;\n\n for (const nameBytes of nameEntries) {\n view.setUint16(offset, nameBytes.byteLength, true);\n offset += 2;\n buf.set(nameBytes, offset);\n offset += nameBytes.byteLength;\n }\n\n return { status: 0, data: buf };\n }\n\n // ---- RENAME ----\n rename(oldPath: string, newPath: string): { status: number } {\n oldPath = this.normalizePath(oldPath);\n newPath = this.normalizePath(newPath);\n\n const idx = this.pathIndex.get(oldPath);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n // Ensure parent of new path exists\n const parentStatus = this.ensureParent(newPath);\n if (parentStatus !== 0) return { status: parentStatus };\n\n // If target exists, remove it\n const existingIdx = this.pathIndex.get(newPath);\n if (existingIdx !== undefined) {\n const existingInode = this.readInode(existingIdx);\n this.freeBlockRange(existingInode.firstBlock, existingInode.blockCount);\n existingInode.type = INODE_TYPE.FREE;\n this.writeInode(existingIdx, existingInode);\n this.pathIndex.delete(newPath);\n }\n\n // Update inode with new path\n const inode = this.readInode(idx);\n const { offset: pathOff, length: pathLen } = this.appendPath(newPath);\n inode.pathOffset = pathOff;\n inode.pathLength = pathLen;\n inode.mtime = Date.now();\n this.writeInode(idx, inode);\n\n // Update index\n this.pathIndex.delete(oldPath);\n this.pathIndex.set(newPath, idx);\n\n // If it's a directory, rename all descendants\n if (inode.type === INODE_TYPE.DIRECTORY) {\n const prefix = oldPath === '/' ? '/' : oldPath + '/';\n const toRename: [string, number][] = [];\n\n for (const [p, i] of this.pathIndex) {\n if (p.startsWith(prefix)) {\n toRename.push([p, i]);\n }\n }\n\n for (const [p, i] of toRename) {\n const suffix = p.substring(oldPath.length);\n const childNewPath = newPath + suffix;\n const childInode = this.readInode(i);\n const { offset: cpo, length: cpl } = this.appendPath(childNewPath);\n childInode.pathOffset = cpo;\n childInode.pathLength = cpl;\n this.writeInode(i, childInode);\n this.pathIndex.delete(p);\n this.pathIndex.set(childNewPath, i);\n }\n }\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- EXISTS ----\n exists(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n const buf = new Uint8Array(1);\n buf[0] = idx !== undefined ? 1 : 0;\n return { status: 0, data: buf };\n }\n\n // ---- TRUNCATE ----\n truncate(path: string, len: number = 0): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n if (len === 0) {\n // Free all blocks\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n inode.firstBlock = 0;\n inode.blockCount = 0;\n inode.size = 0;\n } else if (len < inode.size) {\n // Shrink\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks < inode.blockCount) {\n this.freeBlockRange(inode.firstBlock + neededBlocks, inode.blockCount - neededBlocks);\n }\n inode.blockCount = neededBlocks;\n inode.size = len;\n } else if (len > inode.size) {\n // Grow (zero-fill)\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Need more blocks\n const oldData = this.readData(inode.firstBlock, inode.blockCount, inode.size);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newData = new Uint8Array(len);\n newData.set(oldData);\n // Rest is already zero-filled\n this.writeData(newFirst, newData);\n inode.firstBlock = newFirst;\n }\n inode.blockCount = neededBlocks;\n inode.size = len;\n }\n\n inode.mtime = Date.now();\n this.writeInode(idx, inode);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- COPY ----\n copy(srcPath: string, destPath: string, flags: number = 0): { status: number } {\n srcPath = this.normalizePath(srcPath);\n destPath = this.normalizePath(destPath);\n\n const srcIdx = this.resolvePathComponents(srcPath, true);\n if (srcIdx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const srcInode = this.readInode(srcIdx);\n if (srcInode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // COPYFILE_EXCL check\n if ((flags & 1) && this.pathIndex.has(destPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\n\n // Read source data\n const data = srcInode.size > 0\n ? this.readData(srcInode.firstBlock, srcInode.blockCount, srcInode.size)\n : new Uint8Array(0);\n\n return this.write(destPath, data);\n }\n\n // ---- ACCESS ----\n access(path: string, mode: number = 0): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n if (mode === 0) return { status: 0 }; // F_OK — just check existence\n\n if (!this.strictPermissions) return { status: 0 }; // Relaxed mode\n\n const inode = this.readInode(idx);\n // Check permission bits against process identity\n const filePerm = this.getEffectivePermission(inode);\n\n if ((mode & 4) && !(filePerm & 4)) return { status: CODE_TO_STATUS.EACCES }; // R_OK\n if ((mode & 2) && !(filePerm & 2)) return { status: CODE_TO_STATUS.EACCES }; // W_OK\n if ((mode & 1) && !(filePerm & 1)) return { status: CODE_TO_STATUS.EACCES }; // X_OK\n\n return { status: 0 };\n }\n\n private getEffectivePermission(inode: Inode): number {\n const modeBits = inode.mode & 0o777;\n if (this.processUid === inode.uid) return (modeBits >>> 6) & 7;\n if (this.processGid === inode.gid) return (modeBits >>> 3) & 7;\n return modeBits & 7;\n }\n\n // ---- REALPATH ----\n realpath(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n // Find the resolved path for this inode\n const inode = this.readInode(idx);\n const resolvedPath = this.readPath(inode.pathOffset, inode.pathLength);\n return { status: 0, data: encoder.encode(resolvedPath) };\n }\n\n // ---- CHMOD ----\n chmod(path: string, mode: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n // Preserve file type bits, update permission bits\n inode.mode = (inode.mode & S_IFMT) | (mode & 0o7777);\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- CHOWN ----\n chown(path: string, uid: number, gid: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n inode.uid = uid;\n inode.gid = gid;\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- UTIMES ----\n utimes(path: string, atime: number, mtime: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n inode.atime = atime;\n inode.mtime = mtime;\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- SYMLINK ----\n symlink(target: string, linkPath: string): { status: number } {\n linkPath = this.normalizePath(linkPath);\n if (this.pathIndex.has(linkPath)) return { status: CODE_TO_STATUS.EEXIST };\n\n const parentStatus = this.ensureParent(linkPath);\n if (parentStatus !== 0) return { status: parentStatus };\n\n const targetBytes = encoder.encode(target);\n this.createInode(linkPath, INODE_TYPE.SYMLINK, DEFAULT_SYMLINK_MODE, targetBytes.byteLength, targetBytes);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- READLINK ----\n readlink(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.SYMLINK) return { status: CODE_TO_STATUS.EINVAL, data: null };\n\n const target = this.readData(inode.firstBlock, inode.blockCount, inode.size);\n return { status: 0, data: target };\n }\n\n // ---- LINK (hard link — copies the file data, tracks nlink) ----\n link(existingPath: string, newPath: string): { status: number } {\n existingPath = this.normalizePath(existingPath);\n newPath = this.normalizePath(newPath);\n\n const srcIdx = this.resolvePathComponents(existingPath, true);\n if (srcIdx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const srcInode = this.readInode(srcIdx);\n if (srcInode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EPERM };\n\n if (this.pathIndex.has(newPath)) return { status: CODE_TO_STATUS.EEXIST };\n\n // Copy file data to new inode\n const result = this.copy(existingPath, newPath);\n if (result.status !== 0) return result;\n\n // Increment nlink on source\n srcInode.nlink++;\n this.writeInode(srcIdx, srcInode);\n\n // Set nlink on destination to match source\n const destIdx = this.pathIndex.get(newPath);\n if (destIdx !== undefined) {\n const destInode = this.readInode(destIdx);\n destInode.nlink = srcInode.nlink;\n this.writeInode(destIdx, destInode);\n }\n\n return { status: 0 };\n }\n\n // ---- OPEN (file descriptor) ----\n open(path: string, flags: number, tabId: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n\n const hasCreate = (flags & 64) !== 0; // O_CREAT\n const hasTrunc = (flags & 512) !== 0; // O_TRUNC\n const hasExcl = (flags & 128) !== 0; // O_EXCL\n\n let idx = this.resolvePathComponents(path, true);\n\n if (idx === undefined) {\n if (!hasCreate) return { status: CODE_TO_STATUS.ENOENT, data: null };\n // Create file\n const mode = DEFAULT_FILE_MODE & ~(this.umask & 0o777);\n idx = this.createInode(path, INODE_TYPE.FILE, mode, 0);\n } else if (hasExcl && hasCreate) {\n return { status: CODE_TO_STATUS.EEXIST, data: null };\n }\n\n if (hasTrunc) {\n this.truncate(path, 0);\n }\n\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: idx, position: 0, flags });\n\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n\n // ---- CLOSE ----\n close(fd: number): { status: number } {\n if (!this.fdTable.has(fd)) return { status: CODE_TO_STATUS.EBADF };\n this.fdTable.delete(fd);\n return { status: 0 };\n }\n\n // ---- FREAD ----\n fread(fd: number, length: number, position: number | null): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n\n const inode = this.readInode(entry.inodeIdx);\n const pos = position ?? entry.position;\n const readLen = Math.min(length, inode.size - pos);\n\n if (readLen <= 0) return { status: 0, data: new Uint8Array(0) };\n\n // Read from specific offset within the file's data blocks\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n const buf = new Uint8Array(readLen);\n this.handle.read(buf, { at: dataOffset });\n\n // Update position\n if (position === null) {\n entry.position += readLen;\n }\n\n return { status: 0, data: buf };\n }\n\n // ---- FWRITE ----\n fwrite(fd: number, data: Uint8Array, position: number | null): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n\n const inode = this.readInode(entry.inodeIdx);\n const isAppend = (entry.flags & 1024) !== 0; // O_APPEND\n const pos = isAppend ? inode.size : (position ?? entry.position);\n const endPos = pos + data.byteLength;\n\n // Check if we need to grow\n if (endPos > inode.size) {\n const neededBlocks = Math.ceil(endPos / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Grow — read old data, reallocate, write back\n const oldData = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBuf = new Uint8Array(endPos);\n newBuf.set(oldData);\n newBuf.set(data, pos);\n this.writeData(newFirst, newBuf);\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n } else {\n // Fits, write at position\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n this.handle.write(data, { at: dataOffset });\n }\n inode.size = endPos;\n } else {\n // Write within existing bounds\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n this.handle.write(data, { at: dataOffset });\n }\n\n inode.mtime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n\n // Update position\n if (position === null) {\n entry.position = endPos;\n }\n\n this.commitPending();\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, data.byteLength, true);\n return { status: 0, data: buf };\n }\n\n // ---- FSTAT ----\n fstat(fd: number): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n return this.encodeStatResponse(entry.inodeIdx);\n }\n\n // ---- FTRUNCATE ----\n ftruncate(fd: number, len: number = 0): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n\n const inode = this.readInode(entry.inodeIdx);\n const path = this.readPath(inode.pathOffset, inode.pathLength);\n return this.truncate(path, len);\n }\n\n // ---- FSYNC ----\n fsync(): { status: number } {\n this.commitPending();\n this.handle.flush();\n return { status: 0 };\n }\n\n // ---- OPENDIR ----\n opendir(path: string, tabId: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n\n // Use fd table for dir handles too\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: idx, position: 0, flags: 0 });\n\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n\n // ---- MKDTEMP ----\n mkdtemp(prefix: string): { status: number; data: Uint8Array | null } {\n const suffix = Math.random().toString(36).substring(2, 8);\n const path = this.normalizePath(prefix + suffix);\n\n // Ensure parent directories exist\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) {\n // Auto-create parent directories for mkdtemp\n const parentPath = path.substring(0, path.lastIndexOf('/'));\n if (parentPath) {\n this.mkdirRecursive(parentPath);\n }\n }\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.DIRECTORY, mode, 0);\n\n this.commitPending();\n return { status: 0, data: encoder.encode(path) };\n }\n\n // ========== Helpers ==========\n\n private getDirectChildren(dirPath: string): string[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const children: string[] = [];\n\n for (const path of this.pathIndex.keys()) {\n if (path === dirPath) continue;\n if (!path.startsWith(prefix)) continue;\n // Direct child: no more slashes after prefix\n const rest = path.substring(prefix.length);\n if (!rest.includes('/')) {\n children.push(path);\n }\n }\n\n return children.sort();\n }\n\n private getAllDescendants(dirPath: string): string[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const descendants: string[] = [];\n\n for (const path of this.pathIndex.keys()) {\n if (path.startsWith(prefix)) descendants.push(path);\n }\n\n // Sort by depth (deepest first) for safe deletion\n return descendants.sort((a, b) => {\n const da = a.split('/').length;\n const db = b.split('/').length;\n return db - da;\n });\n }\n\n private ensureParent(path: string): number {\n const lastSlash = path.lastIndexOf('/');\n if (lastSlash <= 0) return 0; // Parent is root, always exists\n\n const parentPath = path.substring(0, lastSlash);\n const parentIdx = this.pathIndex.get(parentPath);\n if (parentIdx === undefined) return CODE_TO_STATUS.ENOENT;\n\n const parentInode = this.readInode(parentIdx);\n if (parentInode.type !== INODE_TYPE.DIRECTORY) return CODE_TO_STATUS.ENOTDIR;\n\n return 0;\n }\n\n /** Clean up all fds owned by a tab */\n cleanupTab(tabId: string): void {\n for (const [fd, entry] of this.fdTable) {\n if (entry.tabId === tabId) {\n this.fdTable.delete(fd);\n }\n }\n }\n\n /** Get all file paths and their data for OPFS sync */\n getAllFiles(): { path: string; idx: number }[] {\n const files: { path: string; idx: number }[] = [];\n for (const [path, idx] of this.pathIndex) {\n files.push({ path, idx });\n }\n return files;\n }\n\n /** Get file path for a file descriptor (used by OPFS sync for FD-based ops) */\n getPathForFd(fd: number): string | null {\n const entry = this.fdTable.get(fd);\n if (!entry) return null;\n const inode = this.readInode(entry.inodeIdx);\n return this.readPath(inode.pathOffset, inode.pathLength);\n }\n\n /** Get file data by inode index */\n getInodeData(idx: number): { type: number; data: Uint8Array; mtime: number } {\n const inode = this.readInode(idx);\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n return { type: inode.type, data, mtime: inode.mtime };\n }\n\n /** Export all files/dirs/symlinks from the VFS */\n exportAll(): Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }> {\n const result: Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }> = [];\n for (const [path, idx] of this.pathIndex) {\n const inode = this.readInode(idx);\n let data: Uint8Array | null = null;\n if (inode.type === INODE_TYPE.FILE || inode.type === INODE_TYPE.SYMLINK) {\n data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n }\n result.push({ path, type: inode.type, data, mode: inode.mode, mtime: inode.mtime });\n }\n // Sort directories first so parents are created before children\n result.sort((a, b) => {\n if (a.type === INODE_TYPE.DIRECTORY && b.type !== INODE_TYPE.DIRECTORY) return -1;\n if (a.type !== INODE_TYPE.DIRECTORY && b.type === INODE_TYPE.DIRECTORY) return 1;\n return a.path.localeCompare(b.path);\n });\n return result;\n }\n\n flush(): void {\n this.handle.flush();\n }\n}\n","/**\n * VFS Helper Functions\n *\n * Standalone utilities for VFS maintenance:\n * - unpackToOPFS: Export VFS contents to real OPFS files\n * - loadFromOPFS: Rebuild VFS from real OPFS files\n * - repairVFS: Attempt to recover files from a corrupt VFS binary\n *\n * Each function accepts an optional `fs` parameter (a running VFSFileSystem\n * instance). When provided, operations go through the VFS worker which holds\n * the exclusive sync handle on .vfs.bin. This allows these functions to work\n * from the main thread while the VFS is running.\n *\n * When `fs` is NOT provided, spawns a repair worker that uses\n * createSyncAccessHandle for direct disk I/O (no RAM bloat).\n */\n\nimport { VFSEngine } from './vfs/engine.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Minimal FS interface accepted by the helper functions.\n * Compatible with VFSFileSystem — avoids circular import.\n */\ninterface FsLike {\n readFileSync(path: string, options?: any): any;\n writeFileSync(path: string, data: any, options?: any): void;\n mkdirSync(path: string, options?: any): any;\n readdirSync(path: string, options?: any): any;\n rmSync(path: string, options?: any): void;\n statSync(path: string): any;\n symlinkSync?(target: string, path: string): void;\n}\n\n// ========== In-Memory Handle (main thread fallback) ==========\n\n/**\n * In-memory implementation of FileSystemSyncAccessHandle.\n * Used on the main thread where createSyncAccessHandle is unavailable.\n * After operations complete, call saveToOPFS() to persist.\n */\nclass MemoryHandle {\n private buf: Uint8Array;\n private len: number;\n\n constructor(initialData?: ArrayBuffer) {\n if (initialData && initialData.byteLength > 0) {\n this.buf = new Uint8Array(initialData);\n this.len = initialData.byteLength;\n } else {\n this.buf = new Uint8Array(1024 * 1024); // 1MB initial\n this.len = 0;\n }\n }\n\n getSize(): number {\n return this.len;\n }\n\n read(target: ArrayBufferView, opts?: { at?: number }): number {\n const offset = opts?.at ?? 0;\n const dst = new Uint8Array(target.buffer, target.byteOffset, target.byteLength);\n const bytesToRead = Math.min(dst.length, this.len - offset);\n if (bytesToRead <= 0) return 0;\n dst.set(this.buf.subarray(offset, offset + bytesToRead));\n return bytesToRead;\n }\n\n write(data: ArrayBufferView, opts?: { at?: number }): number {\n const offset = opts?.at ?? 0;\n const src = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const needed = offset + src.length;\n if (needed > this.buf.length) {\n this.grow(needed);\n }\n this.buf.set(src, offset);\n if (needed > this.len) this.len = needed;\n return src.length;\n }\n\n truncate(size: number): void {\n if (size > this.buf.length) {\n this.grow(size);\n }\n if (size > this.len) {\n this.buf.fill(0, this.len, size);\n }\n this.len = size;\n }\n\n flush(): void {}\n close(): void {}\n\n getBuffer(): ArrayBuffer {\n return this.buf.buffer.slice(0, this.len) as ArrayBuffer;\n }\n\n private grow(minSize: number): void {\n const MAX_SIZE = 4 * 1024 * 1024 * 1024; // 4GB\n if (minSize > MAX_SIZE) {\n throw new Error(`MemoryHandle: cannot grow to ${minSize} bytes (max ${MAX_SIZE})`);\n }\n const newSize = Math.max(minSize, this.buf.length * 2);\n const newBuf = new Uint8Array(newSize);\n newBuf.set(this.buf.subarray(0, this.len));\n this.buf = newBuf;\n }\n}\n\nasync function openVFSHandle(\n fileHandle: FileSystemFileHandle\n): Promise<{ handle: any; isMemory: boolean }> {\n try {\n const handle = await (fileHandle as any).createSyncAccessHandle();\n return { handle, isMemory: false };\n } catch {\n const file = await fileHandle.getFile();\n const data = await file.arrayBuffer();\n return { handle: new MemoryHandle(data), isMemory: true };\n }\n}\n\n// ========== OPFS Navigation Helpers ==========\n\nasync function navigateToRoot(root: string): Promise<FileSystemDirectoryHandle> {\n let dir = await navigator.storage.getDirectory();\n if (root && root !== '/') {\n for (const seg of root.split('/').filter(Boolean)) {\n dir = await dir.getDirectoryHandle(seg, { create: true });\n }\n }\n return dir;\n}\n\nasync function ensureParentDirs(rootDir: FileSystemDirectoryHandle, path: string): Promise<FileSystemDirectoryHandle> {\n const parts = path.split('/').filter(Boolean);\n parts.pop();\n let dir = rootDir;\n for (const part of parts) {\n dir = await dir.getDirectoryHandle(part, { create: true });\n }\n return dir;\n}\n\nfunction basename(path: string): string {\n const parts = path.split('/').filter(Boolean);\n return parts[parts.length - 1] || '';\n}\n\nasync function writeOPFSFile(rootDir: FileSystemDirectoryHandle, path: string, data: Uint8Array): Promise<void> {\n const parentDir = await ensureParentDirs(rootDir, path);\n const name = basename(path);\n const fileHandle = await parentDir.getFileHandle(name, { create: true });\n try {\n const syncHandle = await (fileHandle as any).createSyncAccessHandle();\n try {\n syncHandle.truncate(0);\n if (data.byteLength > 0) {\n syncHandle.write(data, { at: 0 });\n }\n syncHandle.flush();\n } finally {\n syncHandle.close();\n }\n } catch {\n const writable = await (fileHandle as any).createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\nasync function clearDirectory(dir: FileSystemDirectoryHandle, skip: Set<string>): Promise<void> {\n const entries: string[] = [];\n for await (const name of (dir as any).keys()) {\n if (!skip.has(name)) entries.push(name);\n }\n for (const name of entries) {\n await dir.removeEntry(name, { recursive: true });\n }\n}\n\ninterface RecursiveEntry {\n path: string;\n type: 'file' | 'directory';\n data?: ArrayBuffer;\n}\n\nasync function readOPFSRecursive(\n dir: FileSystemDirectoryHandle,\n prefix: string,\n skip: Set<string>,\n): Promise<RecursiveEntry[]> {\n const result: RecursiveEntry[] = [];\n for await (const [name, handle] of (dir as any).entries()) {\n if (prefix === '' && skip.has(name)) continue;\n const fullPath = prefix ? `${prefix}/${name}` : `/${name}`;\n if (handle.kind === 'directory') {\n result.push({ path: fullPath, type: 'directory' });\n const children = await readOPFSRecursive(handle as FileSystemDirectoryHandle, fullPath, skip);\n result.push(...children);\n } else {\n const file = await (handle as FileSystemFileHandle).getFile();\n const data = await file.arrayBuffer();\n result.push({ path: fullPath, type: 'file', data });\n }\n }\n return result;\n}\n\n/**\n * Recursively read all VFS entries via the fs API.\n */\nfunction readVFSRecursive(fs: FsLike, vfsPath: string): Array<{ path: string; type: 'file' | 'directory'; data?: Uint8Array }> {\n const result: Array<{ path: string; type: 'file' | 'directory'; data?: Uint8Array }> = [];\n let entries: any[];\n try {\n entries = fs.readdirSync(vfsPath, { withFileTypes: true });\n } catch {\n return result;\n }\n for (const entry of entries) {\n const fullPath = vfsPath === '/' ? `/${entry.name}` : `${vfsPath}/${entry.name}`;\n if (entry.isDirectory()) {\n result.push({ path: fullPath, type: 'directory' });\n result.push(...readVFSRecursive(fs, fullPath));\n } else {\n try {\n const data = fs.readFileSync(fullPath) as Uint8Array;\n result.push({ path: fullPath, type: 'file', data });\n } catch {\n // Skip unreadable files\n }\n }\n }\n return result;\n}\n\n// ========== Public Helper Functions ==========\n\nexport interface UnpackResult {\n files: number;\n directories: number;\n}\n\n/**\n * Unpack VFS contents to real OPFS files.\n *\n * When `fs` is provided: reads VFS via the running instance (communicates\n * with VFS worker), writes to OPFS additively (no deletions).\n *\n * When `fs` is NOT provided: opens .vfs.bin directly via VFSEngine,\n * clears OPFS (except .vfs.bin), then writes all entries.\n * Requires VFS to be stopped or a Worker context.\n */\nexport async function unpackToOPFS(root: string = '/', fs?: FsLike): Promise<UnpackResult> {\n const rootDir = await navigateToRoot(root);\n\n if (fs) {\n // Read all entries from VFS via the running instance\n const vfsEntries = readVFSRecursive(fs, '/');\n\n let files = 0;\n let directories = 0;\n\n for (const entry of vfsEntries) {\n if (entry.type === 'directory') {\n const name = basename(entry.path);\n const parent = await ensureParentDirs(rootDir, entry.path);\n await parent.getDirectoryHandle(name, { create: true });\n directories++;\n } else {\n try {\n await writeOPFSFile(rootDir, entry.path, entry.data ?? new Uint8Array(0));\n files++;\n } catch (err: any) {\n console.warn(`[VFS] Failed to write OPFS file ${entry.path}: ${err.message}`);\n }\n }\n }\n\n return { files, directories };\n }\n\n // Direct VFSEngine path (VFS not running)\n const vfsFileHandle = await rootDir.getFileHandle('.vfs.bin');\n const { handle } = await openVFSHandle(vfsFileHandle);\n\n let entries: Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }>;\n try {\n const engine = new VFSEngine();\n engine.init(handle);\n entries = engine.exportAll();\n } finally {\n handle.close();\n }\n\n await clearDirectory(rootDir, new Set(['.vfs.bin']));\n\n let files = 0;\n let directories = 0;\n for (const entry of entries) {\n if (entry.path === '/') continue;\n if (entry.type === INODE_TYPE.DIRECTORY) {\n const name = basename(entry.path);\n const parent = await ensureParentDirs(rootDir, entry.path);\n await parent.getDirectoryHandle(name, { create: true });\n directories++;\n } else if (entry.type === INODE_TYPE.FILE || entry.type === INODE_TYPE.SYMLINK) {\n await writeOPFSFile(rootDir, entry.path, entry.data ?? new Uint8Array(0));\n files++;\n }\n }\n\n return { files, directories };\n}\n\nexport interface LoadResult {\n files: number;\n directories: number;\n}\n\n/**\n * Load all real OPFS files into VFS.\n *\n * When `fs` is provided: reads OPFS files, clears VFS, writes to VFS via\n * the running instance. Never touches .vfs.bin directly.\n *\n * When `fs` is NOT provided: reads OPFS files, deletes .vfs.bin, creates\n * fresh VFS via VFSEngine. Requires VFS to be stopped or a Worker context.\n */\nexport async function loadFromOPFS(root: string = '/', fs?: FsLike): Promise<LoadResult> {\n const rootDir = await navigateToRoot(root);\n const opfsEntries = await readOPFSRecursive(rootDir, '', new Set(['.vfs.bin']));\n\n if (fs) {\n // Clear VFS root entries\n try {\n const rootEntries = fs.readdirSync('/') as string[];\n for (const entry of rootEntries) {\n try {\n fs.rmSync(`/${entry}`, { recursive: true, force: true });\n } catch { /* skip entries that can't be removed */ }\n }\n } catch { /* root might be empty */ }\n\n // Write directories first (sorted by depth)\n const dirs = opfsEntries\n .filter(e => e.type === 'directory')\n .sort((a, b) => a.path.localeCompare(b.path));\n\n let files = 0;\n let directories = 0;\n\n for (const dir of dirs) {\n try {\n fs.mkdirSync(dir.path, { recursive: true, mode: 0o755 });\n directories++;\n } catch { /* may already exist */ }\n }\n\n // Write files\n const fileEntries = opfsEntries.filter(e => e.type === 'file');\n for (const file of fileEntries) {\n try {\n const parentPath = file.path.substring(0, file.path.lastIndexOf('/')) || '/';\n if (parentPath !== '/') {\n try { fs.mkdirSync(parentPath, { recursive: true, mode: 0o755 }); } catch {}\n }\n fs.writeFileSync(file.path, new Uint8Array(file.data!));\n files++;\n } catch (err: any) {\n console.warn(`[VFS] Failed to write ${file.path}: ${err.message}`);\n }\n }\n\n return { files, directories };\n }\n\n // Delegate to repair worker (uses createSyncAccessHandle for disk I/O)\n return spawnRepairWorker<LoadResult>({ type: 'load', root });\n}\n\nexport interface RepairResult {\n recovered: number;\n lost: number;\n entries: Array<{\n path: string;\n type: 'file' | 'directory' | 'symlink';\n size: number;\n /** true when the inode was found but data blocks were out of bounds (content lost) */\n contentLost?: boolean;\n }>;\n}\n\n/**\n * Attempt to repair a VFS.\n *\n * When `fs` is provided: rebuilds VFS from OPFS files (non-destructive read\n * of OPFS), then syncs repaired VFS back to OPFS (additive, no deletions).\n * This is the safe path — OPFS is the source of truth.\n *\n * When `fs` is NOT provided: scans raw .vfs.bin for recoverable inodes,\n * creates fresh VFS with recovered data. For corrupt VFS where init failed.\n */\nexport async function repairVFS(root: string = '/', fs?: FsLike): Promise<RepairResult> {\n if (fs) {\n // Step 1: Rebuild VFS from OPFS (reads OPFS, writes to VFS — OPFS untouched)\n const loadResult = await loadFromOPFS(root, fs);\n\n // Step 2: Only now that VFS is healthy, sync back to OPFS (additive)\n await unpackToOPFS(root, fs);\n\n const total = loadResult.files + loadResult.directories;\n return {\n recovered: total,\n lost: 0,\n entries: [], // Detailed entries not available in fs-based path\n };\n }\n\n // Raw .vfs.bin repair via worker (uses createSyncAccessHandle for disk I/O)\n return spawnRepairWorker<RepairResult>({ type: 'repair', root });\n}\n\n// ========== Repair Worker Delegation ==========\n\n/**\n * Spawn the repair worker and await its result.\n * The worker uses createSyncAccessHandle for direct disk I/O —\n * no MemoryHandle, works from main thread, follower tabs, and workers.\n */\nfunction spawnRepairWorker<T>(msg: Record<string, unknown>): Promise<T> {\n return new Promise((resolve, reject) => {\n const worker = new Worker(\n new URL('./workers/repair.worker.js', import.meta.url),\n { type: 'module' },\n );\n worker.onmessage = (event: MessageEvent) => {\n worker.terminate();\n if (event.data.error) {\n reject(new Error(event.data.error));\n } else {\n resolve(event.data as T);\n }\n };\n worker.onerror = (event) => {\n worker.terminate();\n reject(new Error(event.message || 'Repair worker failed'));\n };\n worker.postMessage(msg);\n });\n}\n","/**\n * VFS-FS: High-performance OPFS-based Node.js fs polyfill\n *\n * Uses SharedArrayBuffer + Atomics for sync operations with a VFS binary format.\n *\n * @example\n * ```typescript\n * import fs from '@componentor/fs';\n *\n * // Sync API (blocks until ready)\n * fs.writeFileSync('/hello.txt', 'Hello World!');\n * const data = fs.readFileSync('/hello.txt', 'utf8');\n *\n * // Async API\n * await fs.promises.writeFile('/async.txt', 'Async data');\n * const content = await fs.promises.readFile('/async.txt', 'utf8');\n * ```\n */\n\nexport { VFSFileSystem } from './filesystem.js';\nexport { NodeReadable, NodeWritable, SimpleEventEmitter } from './node-streams.js';\nexport { constants } from './constants.js';\nexport { FSError, createError, statusToError } from './errors.js';\nexport { unpackToOPFS, loadFromOPFS, repairVFS } from './helpers.js';\nexport type { UnpackResult, LoadResult, RepairResult } from './helpers.js';\nexport * as path from './path.js';\nexport type {\n Stats,\n StatFs,\n BigIntStats,\n StatOptions,\n Dirent,\n ReadOptions,\n WriteOptions,\n MkdirOptions,\n RmdirOptions,\n RmOptions,\n CpOptions,\n ReaddirOptions,\n Encoding,\n PathLike,\n FileHandle,\n Dir,\n VFSConfig,\n VFSLimits,\n FSMode,\n WatchOptions,\n WatchEventType,\n FSWatcher,\n WatchListener,\n WatchFileListener,\n ReadStreamOptions,\n WriteStreamOptions,\n FSReadStream,\n FSWriteStream,\n OpenAsBlobOptions,\n} from './types.js';\n\nimport { VFSFileSystem } from './filesystem.js';\n\n/** Create a configured VFS instance */\nexport function createFS(config?: import('./types.js').VFSConfig): VFSFileSystem {\n return new VFSFileSystem(config);\n}\n\n// Lazy default singleton — only created on first access\nlet _defaultFS: VFSFileSystem | undefined;\n\n/** Get (or create) the default VFS singleton */\nexport function getDefaultFS(): VFSFileSystem {\n if (!_defaultFS) _defaultFS = new VFSFileSystem();\n return _defaultFS;\n}\n\n/** Async init helper — avoids blocking main thread */\nexport function init(): Promise<void> {\n return getDefaultFS().init();\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/src/node-streams.ts","../src/src/protocol/opcodes.ts","../src/src/errors.ts","../src/src/vfs/layout.ts","../src/src/stats.ts","../src/src/constants.ts","../src/src/methods/open.ts","../src/src/encoding.ts","../src/src/methods/readFile.ts","../src/src/methods/writeFile.ts","../src/src/methods/appendFile.ts","../src/src/methods/exists.ts","../src/src/methods/mkdir.ts","../src/src/methods/rmdir.ts","../src/src/methods/rm.ts","../src/src/methods/unlink.ts","../src/src/methods/readdir.ts","../src/src/methods/stat.ts","../src/src/methods/rename.ts","../src/src/methods/copyFile.ts","../src/src/methods/truncate.ts","../src/src/methods/access.ts","../src/src/methods/realpath.ts","../src/src/methods/chmod.ts","../src/src/methods/chown.ts","../src/src/methods/utimes.ts","../src/src/methods/symlink.ts","../src/src/methods/link.ts","../src/src/methods/mkdtemp.ts","../src/src/methods/opendir.ts","../src/src/path.ts","../src/src/methods/watch.ts","../src/src/methods/glob.ts","../src/src/filesystem.ts","../src/src/vfs/engine.ts","../src/src/helpers.ts","../src/src/index.ts"],"names":["decoder","encoder","resolve","status","isAbsolute","entries","inode","data","totalSize","buf","view","offset","basename","files","directories"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Minimal Node.js-compatible stream classes for use in browser/OPFS environments.\n *\n * These do NOT depend on Node.js built-ins — they provide just enough API surface\n * for libraries that expect `.on('data')`, `.pipe()`, `.write()`, `.end()`, etc.\n */\n\n// ---------------------------------------------------------------------------\n// SimpleEventEmitter — shared base for Node-style event emitters\n// ---------------------------------------------------------------------------\n\ntype Listener = (...args: unknown[]) => void;\n\nexport class SimpleEventEmitter {\n private _listeners = new Map<string, Listener[]>();\n private _onceSet = new WeakSet<Listener>();\n\n on(event: string, fn: Listener): this {\n let arr = this._listeners.get(event);\n if (!arr) {\n arr = [];\n this._listeners.set(event, arr);\n }\n arr.push(fn);\n return this;\n }\n\n addListener(event: string, fn: Listener): this {\n return this.on(event, fn);\n }\n\n once(event: string, fn: Listener): this {\n this._onceSet.add(fn);\n return this.on(event, fn);\n }\n\n off(event: string, fn: Listener): this {\n const arr = this._listeners.get(event);\n if (arr) {\n const idx = arr.indexOf(fn);\n if (idx !== -1) arr.splice(idx, 1);\n }\n return this;\n }\n\n removeListener(event: string, fn: Listener): this {\n return this.off(event, fn);\n }\n\n removeAllListeners(event?: string): this {\n if (event !== undefined) {\n this._listeners.delete(event);\n } else {\n this._listeners.clear();\n }\n return this;\n }\n\n emit(event: string, ...args: unknown[]): boolean {\n const arr = this._listeners.get(event);\n if (!arr || arr.length === 0) return false;\n // Copy so that once-removals don't affect iteration.\n const copy = arr.slice();\n for (const fn of copy) {\n if (this._onceSet.has(fn)) {\n this._onceSet.delete(fn);\n this.off(event, fn);\n }\n fn(...args);\n }\n return true;\n }\n\n listenerCount(event: string): number {\n return this._listeners.get(event)?.length ?? 0;\n }\n}\n\n// ---------------------------------------------------------------------------\n// NodeReadable — minimal Node.js Readable-compatible stream\n// ---------------------------------------------------------------------------\n\nexport interface NodeReadableOptions {\n highWaterMark?: number;\n /** Byte offset to start reading from */\n start?: number;\n /** Byte offset to stop reading at (inclusive, Node.js convention) */\n end?: number;\n}\n\nexport class NodeReadable extends SimpleEventEmitter {\n private _paused = true;\n private _destroyed = false;\n private _ended = false;\n private _reading = false;\n private _readBuffer: Uint8Array | null = null;\n private _encoding: string | null = null;\n\n /** Whether the stream is still readable (not ended or destroyed). */\n readable = true;\n\n /** The file path this stream reads from (set externally). */\n path: string = '';\n\n /** Total bytes read so far. */\n bytesRead = 0;\n\n /** Optional cleanup callback invoked on destroy (e.g. close file handle). */\n private _destroyFn: (() => Promise<void>) | null = null;\n\n constructor(\n private _readFn: () => Promise<{ done: boolean; value?: Uint8Array }>,\n destroyFn?: () => Promise<void>,\n ) {\n super();\n if (destroyFn) this._destroyFn = destroyFn;\n }\n\n // ---- Flow control (override on to auto-resume) ----\n\n on(event: string, fn: Listener): this {\n super.on(event, fn);\n // Attaching a 'data' listener switches to flowing mode (Node.js behaviour).\n if (event === 'data' && this._paused) {\n this.resume();\n }\n return this;\n }\n\n pause(): this {\n this._paused = true;\n return this;\n }\n\n resume(): this {\n if (this._destroyed || this._ended) return this;\n this._paused = false;\n this._drain();\n return this;\n }\n\n /**\n * Set the character encoding for data read from this stream.\n * When set, 'data' events emit strings instead of Uint8Array.\n */\n setEncoding(encoding: string): this {\n this._encoding = encoding;\n return this;\n }\n\n /**\n * Non-flowing read — returns the last buffered chunk or null.\n * Node.js has a complex buffer system; we keep it simple here.\n */\n read(_size?: number): Uint8Array | null {\n const buf = this._readBuffer;\n this._readBuffer = null;\n return buf;\n }\n\n /** Destroy the stream, optionally with an error. */\n destroy(err?: Error): this {\n if (this._destroyed) return this;\n this._destroyed = true;\n this.readable = false;\n if (err) {\n this.emit('error', err);\n }\n // Run destroy callback (e.g. close file handle) then emit 'close'.\n if (this._destroyFn) {\n this._destroyFn().then(\n () => this.emit('close'),\n () => this.emit('close'),\n );\n } else {\n this.emit('close');\n }\n return this;\n }\n\n // ---- pipe ----\n\n pipe<T extends NodeWritable | WritableStream<Uint8Array>>(dest: T): T {\n if (isNodeWritableInstance(dest)) {\n this.on('data', (chunk: unknown) => {\n (dest as NodeWritable).write(chunk as Uint8Array);\n });\n this.on('end', () => {\n if (typeof (dest as NodeWritable).end === 'function') {\n (dest as NodeWritable).end();\n }\n });\n this.on('error', (err: unknown) => {\n if (typeof (dest as NodeWritable).destroy === 'function') {\n (dest as NodeWritable).destroy(err as Error);\n }\n });\n } else {\n // Web WritableStream\n const writer = (dest as WritableStream<Uint8Array>).getWriter();\n this.on('data', (chunk: unknown) => {\n writer.write(chunk as Uint8Array);\n });\n this.on('end', () => {\n writer.close();\n });\n this.on('error', (err: unknown) => {\n writer.abort(err);\n });\n }\n\n // Pipe starts flowing mode.\n if (this._paused) {\n this.resume();\n }\n return dest;\n }\n\n // ---- Internal ----\n\n private async _drain(): Promise<void> {\n if (this._reading || this._destroyed || this._ended) return;\n this._reading = true;\n\n try {\n while (!this._paused && !this._destroyed && !this._ended) {\n const result = await this._readFn();\n\n if (this._destroyed) break;\n\n if (result.done || !result.value || result.value.byteLength === 0) {\n this._ended = true;\n this.readable = false;\n this.emit('end');\n this.emit('close');\n break;\n }\n\n this.bytesRead += result.value.byteLength;\n this._readBuffer = result.value;\n if (this._encoding) {\n this.emit('data', new TextDecoder(this._encoding).decode(result.value));\n } else {\n this.emit('data', result.value);\n }\n }\n } catch (err) {\n if (!this._destroyed) {\n this.destroy(err as Error);\n }\n } finally {\n this._reading = false;\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// NodeWritable — minimal Node.js Writable-compatible stream\n// ---------------------------------------------------------------------------\n\nexport class NodeWritable extends SimpleEventEmitter {\n /** Total bytes written so far. */\n bytesWritten = 0;\n\n /** The file path this stream was created for. */\n readonly path: string;\n\n /** Whether this stream is still writable. */\n writable = true;\n\n private _destroyed = false;\n private _finished = false;\n private _writing = false;\n private _corked = false;\n\n constructor(\n path: string,\n private _writeFn: (chunk: Uint8Array) => Promise<void>,\n private _closeFn: () => Promise<void>,\n ) {\n super();\n this.path = path;\n }\n\n // -- public API -----------------------------------------------------------\n\n /**\n * Buffer all writes until `uncork()` is called.\n * In this minimal implementation we only track the flag for compatibility.\n */\n cork(): void {\n this._corked = true;\n }\n\n /**\n * Flush buffered writes (clears the cork flag).\n * In this minimal implementation we only track the flag for compatibility.\n */\n uncork(): void {\n this._corked = false;\n }\n\n write(\n chunk: string | Uint8Array,\n encodingOrCb?: string | ((...args: unknown[]) => void),\n cb?: (...args: unknown[]) => void,\n ): boolean {\n const callback = typeof encodingOrCb === 'function' ? encodingOrCb : cb;\n\n if (this._destroyed || this._finished) {\n const err = new Error('write after end');\n if (callback) callback(err);\n return false;\n }\n\n const data =\n typeof chunk === 'string'\n ? new TextEncoder().encode(chunk)\n : chunk;\n\n this._writing = true;\n this._writeFn(data)\n .then(() => {\n this.bytesWritten += data.byteLength;\n this._writing = false;\n if (callback) callback();\n this.emit('drain');\n })\n .catch((err: unknown) => {\n this._writing = false;\n if (callback) callback(err);\n this.emit('error', err);\n });\n\n // Always return true — we don't implement back-pressure\n return true;\n }\n\n end(\n chunk?: string | Uint8Array | ((...args: unknown[]) => void),\n encodingOrCb?: string | ((...args: unknown[]) => void),\n cb?: (...args: unknown[]) => void,\n ): this {\n // Normalise arguments — Node allows several overloads\n let callback: ((...args: unknown[]) => void) | undefined;\n let finalChunk: string | Uint8Array | undefined;\n\n if (typeof chunk === 'function') {\n callback = chunk;\n finalChunk = undefined;\n } else {\n finalChunk = chunk;\n if (typeof encodingOrCb === 'function') {\n callback = encodingOrCb;\n } else {\n callback = cb;\n }\n }\n\n if (this._finished) {\n if (callback) callback();\n return this;\n }\n\n this.writable = false;\n\n const finish = () => {\n this._closeFn()\n .then(() => {\n this._finished = true;\n this.emit('finish');\n this.emit('close');\n if (callback) callback();\n })\n .catch((err: unknown) => {\n this.emit('error', err);\n if (callback) callback(err);\n });\n };\n\n if (finalChunk !== undefined && finalChunk !== null) {\n this.write(finalChunk, undefined, () => finish());\n } else {\n finish();\n }\n\n return this;\n }\n\n destroy(err?: Error): this {\n if (this._destroyed) return this;\n this._destroyed = true;\n this.writable = false;\n\n this._closeFn().catch(() => {}).finally(() => {\n if (err) this.emit('error', err);\n this.emit('close');\n });\n\n return this;\n }\n}\n\n/** Check if something is a Node-style writable (has .write() but no .getWriter()). */\nfunction isNodeWritableInstance(obj: unknown): obj is NodeWritable {\n return (\n obj !== null &&\n typeof obj === 'object' &&\n typeof (obj as NodeWritable).write === 'function' &&\n !('getWriter' in (obj as object))\n );\n}\n","/**\n * Binary protocol operation codes and header encoding/decoding.\n * All inter-worker messages use this minimal binary protocol — no JSON, no strings.\n */\n\n// Operation codes\nexport const OP = {\n READ: 1,\n WRITE: 2,\n UNLINK: 3,\n STAT: 4,\n LSTAT: 5,\n MKDIR: 6,\n RMDIR: 7,\n READDIR: 8,\n RENAME: 9,\n EXISTS: 10,\n TRUNCATE: 11,\n APPEND: 12,\n COPY: 13,\n ACCESS: 14,\n REALPATH: 15,\n CHMOD: 16,\n CHOWN: 17,\n UTIMES: 18,\n SYMLINK: 19,\n READLINK: 20,\n LINK: 21,\n OPEN: 22,\n CLOSE: 23,\n FREAD: 24,\n FWRITE: 25,\n FSTAT: 26,\n FTRUNCATE: 27,\n FSYNC: 28,\n OPENDIR: 29,\n MKDTEMP: 30,\n} as const;\n\nexport type OpCode = (typeof OP)[keyof typeof OP];\n\n// Response status codes\nexport const STATUS = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n} as const;\n\n// SAB layout offsets\nexport const SAB_OFFSETS = {\n CONTROL: 0, // Int32 - signal (0=idle, 1=request, 2=response, 3=chunk, 4=ack)\n OPCODE: 4, // Int32 - operation code\n STATUS: 8, // Int32 - response status / error\n CHUNK_LEN: 12, // Int32 - bytes in this chunk\n TOTAL_LEN: 16, // BigUint64 - full data size across all chunks\n CHUNK_IDX: 24, // Int32 - 0-based chunk index\n RESERVED: 28, // Int32 - reserved\n HEADER_SIZE: 32, // Data payload starts here\n} as const;\n\n// SAB control signals\nexport const SIGNAL = {\n IDLE: 0,\n REQUEST: 1,\n RESPONSE: 2,\n CHUNK: 3,\n CHUNK_ACK: 4,\n} as const;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Encode a request into an ArrayBuffer for MessageChannel transfer.\n *\n * Request format (16-byte header + path + data):\n * bytes 0-3: operation (uint32)\n * bytes 4-7: flags (uint32)\n * bytes 8-11: pathLen (uint32)\n * bytes 12-15: dataLen (uint32)\n * bytes 16+: path (UTF-8)\n * bytes 16+pathLen: data payload\n */\nexport function encodeRequest(\n op: number,\n path: string,\n flags: number = 0,\n data?: Uint8Array\n): ArrayBuffer {\n const pathBytes = encoder.encode(path);\n const dataLen = data ? data.byteLength : 0;\n const totalLen = 16 + pathBytes.byteLength + dataLen;\n const buf = new ArrayBuffer(totalLen);\n const view = new DataView(buf);\n\n view.setUint32(0, op, true);\n view.setUint32(4, flags, true);\n view.setUint32(8, pathBytes.byteLength, true);\n view.setUint32(12, dataLen, true);\n\n const bytes = new Uint8Array(buf);\n bytes.set(pathBytes, 16);\n if (data) {\n bytes.set(data, 16 + pathBytes.byteLength);\n }\n\n return buf;\n}\n\n/**\n * Decode a request ArrayBuffer.\n */\nexport function decodeRequest(buf: ArrayBuffer): {\n op: number;\n flags: number;\n path: string;\n data: Uint8Array | null;\n} {\n // Minimum header: 16 bytes (op + flags + pathLen + dataLen)\n if (buf.byteLength < 16) {\n throw new Error(`Request buffer too small: ${buf.byteLength} < 16 bytes (possible SAB race)`);\n }\n\n const view = new DataView(buf);\n const op = view.getUint32(0, true);\n const flags = view.getUint32(4, true);\n const pathLen = view.getUint32(8, true);\n const dataLen = view.getUint32(12, true);\n\n // Validate payload fits in buffer\n const expectedMin = 16 + pathLen + dataLen;\n if (buf.byteLength < expectedMin) {\n throw new Error(`Request buffer truncated: ${buf.byteLength} < ${expectedMin} bytes (op=${op}, pathLen=${pathLen}, dataLen=${dataLen})`);\n }\n\n const bytes = new Uint8Array(buf);\n const path = decoder.decode(bytes.subarray(16, 16 + pathLen));\n const data = dataLen > 0\n ? bytes.subarray(16 + pathLen, 16 + pathLen + dataLen)\n : null;\n\n return { op, flags, path, data };\n}\n\n/**\n * Encode a response into an ArrayBuffer.\n *\n * Response format (8-byte header + data):\n * bytes 0-3: status (uint32)\n * bytes 4-7: dataLen (uint32)\n * bytes 8+: data payload\n */\nexport function encodeResponse(status: number, data?: Uint8Array): ArrayBuffer {\n const dataLen = data ? data.byteLength : 0;\n const buf = new ArrayBuffer(8 + dataLen);\n const view = new DataView(buf);\n\n view.setUint32(0, status, true);\n view.setUint32(4, dataLen, true);\n\n if (data) {\n new Uint8Array(buf).set(data, 8);\n }\n\n return buf;\n}\n\n/**\n * Decode a response ArrayBuffer.\n */\nexport function decodeResponse(buf: ArrayBuffer): {\n status: number;\n data: Uint8Array | null;\n} {\n const view = new DataView(buf);\n const status = view.getUint32(0, true);\n const dataLen = view.getUint32(4, true);\n\n const data = dataLen > 0\n ? new Uint8Array(buf, 8, dataLen)\n : null;\n\n return { status, data };\n}\n\n/**\n * Encode a two-path request (rename, copy, symlink, link).\n * Data payload contains: [pathLen2:u32] [path2 bytes]\n */\nexport function encodeTwoPathRequest(\n op: number,\n path1: string,\n path2: string,\n flags: number = 0\n): ArrayBuffer {\n const path2Bytes = encoder.encode(path2);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n const pv = new DataView(payload.buffer);\n pv.setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n\n return encodeRequest(op, path1, flags, payload);\n}\n\n/**\n * Decode the second path from a two-path request's data payload.\n */\nexport function decodeSecondPath(data: Uint8Array): string {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const pathLen = view.getUint32(0, true);\n return decoder.decode(data.subarray(4, 4 + pathLen));\n}\n","/**\n * Node.js compatible filesystem error classes\n */\n\nexport class FSError extends Error {\n code: string;\n errno: number;\n syscall?: string;\n path?: string;\n\n constructor(code: string, errno: number, message: string, syscall?: string, path?: string) {\n super(message);\n this.name = 'FSError';\n this.code = code;\n this.errno = errno;\n this.syscall = syscall;\n this.path = path;\n }\n}\n\nexport const ErrorCodes = {\n ENOENT: -2,\n EEXIST: -17,\n EISDIR: -21,\n ENOTDIR: -20,\n ENOTEMPTY: -39,\n EACCES: -13,\n EBADF: -9,\n EINVAL: -22,\n EMFILE: -24,\n ENOSPC: -28,\n EPERM: -1,\n ENOSYS: -38,\n ELOOP: -40,\n} as const;\n\n/** Binary protocol status codes → error code mapping */\nexport const STATUS_TO_CODE: Record<number, string> = {\n 0: 'OK',\n 1: 'ENOENT',\n 2: 'EEXIST',\n 3: 'EISDIR',\n 4: 'ENOTDIR',\n 5: 'ENOTEMPTY',\n 6: 'EACCES',\n 7: 'EINVAL',\n 8: 'EBADF',\n 9: 'ELOOP',\n 10: 'ENOSPC',\n};\n\n/** Error code → binary protocol status mapping */\nexport const CODE_TO_STATUS: Record<string, number> = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n};\n\nexport function createError(code: string, syscall: string, path: string): FSError {\n const errno = ErrorCodes[code as keyof typeof ErrorCodes] ?? -1;\n const messages: Record<string, string> = {\n ENOENT: 'no such file or directory',\n EEXIST: 'file already exists',\n EISDIR: 'illegal operation on a directory',\n ENOTDIR: 'not a directory',\n ENOTEMPTY: 'directory not empty',\n EACCES: 'permission denied',\n EINVAL: 'invalid argument',\n EBADF: 'bad file descriptor',\n ELOOP: 'too many symbolic links encountered',\n ENOSPC: 'no space left on device',\n };\n const msg = messages[code] ?? 'unknown error';\n return new FSError(code, errno, `${code}: ${msg}, ${syscall} '${path}'`, syscall, path);\n}\n\nexport function statusToError(status: number, syscall: string, path: string): FSError {\n const code = STATUS_TO_CODE[status] ?? 'EINVAL';\n return createError(code, syscall, path);\n}\n","/**\n * VFS Binary Layout Constants\n *\n * Defines the on-disk structure of the virtual filesystem binary file.\n * All reads/writes go through a FileSystemSyncAccessHandle.\n */\n\n// Magic number: \"VFS!\" in ASCII\nexport const VFS_MAGIC = 0x56465321;\nexport const VFS_VERSION = 1;\n\n// Default sizes\nexport const DEFAULT_BLOCK_SIZE = 4096;\nexport const DEFAULT_INODE_COUNT = 10000;\nexport const INODE_SIZE = 64; // bytes per inode entry\n\n// Superblock layout (64 bytes)\nexport const SUPERBLOCK = {\n SIZE: 64,\n MAGIC: 0, // uint32 - 0x56465321\n VERSION: 4, // uint32\n INODE_COUNT: 8, // uint32 - total inodes allocated\n BLOCK_SIZE: 12, // uint32 - data block size (default 4096)\n TOTAL_BLOCKS: 16, // uint32 - total data blocks\n FREE_BLOCKS: 20, // uint32 - available data blocks\n INODE_OFFSET: 24, // float64 - byte offset to inode table\n PATH_OFFSET: 32, // float64 - byte offset to path table\n DATA_OFFSET: 40, // float64 - byte offset to data region\n BITMAP_OFFSET: 48, // float64 - byte offset to free block bitmap\n PATH_USED: 56, // uint32 - bytes used in path table\n RESERVED: 60, // uint32\n} as const;\n\n// Inode entry layout (64 bytes each)\nexport const INODE = {\n TYPE: 0, // uint8 - 0=free, 1=file, 2=directory, 3=symlink\n FLAGS: 1, // uint8[3] - reserved\n PATH_OFFSET: 4, // uint32 - byte offset into path table\n PATH_LENGTH: 8, // uint16 - length of path string\n NLINK: 10, // uint16 - hard link count\n MODE: 12, // uint32 - permissions (e.g. 0o100644)\n SIZE: 16, // float64 - file content size in bytes (using f64 for >4GB)\n FIRST_BLOCK: 24, // uint32 - index of first data block\n BLOCK_COUNT: 28, // uint32 - number of contiguous data blocks\n MTIME: 32, // float64 - last modification time (ms since epoch)\n CTIME: 40, // float64 - creation/change time (ms since epoch)\n ATIME: 48, // float64 - last access time (ms since epoch)\n UID: 56, // uint32 - owner\n GID: 60, // uint32 - group\n} as const;\n\n// Inode type constants\nexport const INODE_TYPE = {\n FREE: 0,\n FILE: 1,\n DIRECTORY: 2,\n SYMLINK: 3,\n} as const;\n\n// Default file modes\nexport const DEFAULT_FILE_MODE = 0o100644;\nexport const DEFAULT_DIR_MODE = 0o040755;\nexport const DEFAULT_SYMLINK_MODE = 0o120777;\nexport const DEFAULT_UMASK = 0o022;\n\n// POSIX file type bits\nexport const S_IFMT = 0o170000;\nexport const S_IFREG = 0o100000;\nexport const S_IFDIR = 0o040000;\nexport const S_IFLNK = 0o120000;\n\n// Max symlink depth for cycle detection\nexport const MAX_SYMLINK_DEPTH = 40;\n\n// Path table compaction threshold (25% dead space)\nexport const PATH_COMPACTION_THRESHOLD = 0.25;\n\n// Initial path table size (256KB)\nexport const INITIAL_PATH_TABLE_SIZE = 256 * 1024;\n\n// Initial data blocks (1024 blocks = 4MB with 4KB blocks)\nexport const INITIAL_DATA_BLOCKS = 1024;\n\n/**\n * Calculate section offsets for a fresh VFS.\n */\nexport function calculateLayout(inodeCount: number = DEFAULT_INODE_COUNT, blockSize: number = DEFAULT_BLOCK_SIZE, totalBlocks: number = INITIAL_DATA_BLOCKS) {\n const inodeTableOffset = SUPERBLOCK.SIZE;\n const inodeTableSize = inodeCount * INODE_SIZE;\n const pathTableOffset = inodeTableOffset + inodeTableSize;\n const pathTableSize = INITIAL_PATH_TABLE_SIZE;\n const bitmapOffset = pathTableOffset + pathTableSize;\n const bitmapSize = Math.ceil(totalBlocks / 8);\n // Align data region to block boundary\n const dataOffset = Math.ceil((bitmapOffset + bitmapSize) / blockSize) * blockSize;\n const totalSize = dataOffset + totalBlocks * blockSize;\n\n return {\n inodeTableOffset,\n inodeTableSize,\n pathTableOffset,\n pathTableSize,\n bitmapOffset,\n bitmapSize,\n dataOffset,\n totalSize,\n totalBlocks,\n };\n}\n","/**\n * Stats and Dirent object construction.\n * Decodes binary stat responses from the server into Node.js-compatible objects.\n */\n\nimport type { Stats, BigIntStats, Dirent } from './types.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Decode a binary stat response (53 bytes) into a Stats object.\n *\n * Format:\n * byte 0: type (uint8)\n * bytes 1-4: mode (uint32)\n * bytes 5-12: size (float64)\n * bytes 13-20: mtime (float64)\n * bytes 21-28: ctime (float64)\n * bytes 29-36: atime (float64)\n * bytes 37-40: uid (uint32)\n * bytes 41-44: gid (uint32)\n * bytes 45-48: ino (uint32)\n * bytes 49-52: nlink (uint32)\n */\nexport function decodeStats(data: Uint8Array): Stats {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const type = view.getUint8(0);\n const mode = view.getUint32(1, true);\n const size = view.getFloat64(5, true);\n const mtimeMs = view.getFloat64(13, true);\n const ctimeMs = view.getFloat64(21, true);\n const atimeMs = view.getFloat64(29, true);\n const uid = view.getUint32(37, true);\n const gid = view.getUint32(41, true);\n const ino = view.getUint32(45, true);\n // Backwards compatible: older 49-byte buffers default nlink to 1\n const nlink = data.byteLength >= 53 ? view.getUint32(49, true) : 1;\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n return {\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 1,\n ino,\n mode,\n nlink,\n uid,\n gid,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs,\n mtimeMs,\n ctimeMs,\n birthtimeMs: ctimeMs,\n atime: new Date(atimeMs),\n mtime: new Date(mtimeMs),\n ctime: new Date(ctimeMs),\n birthtime: new Date(ctimeMs),\n atimeNs: atimeMs * 1_000_000,\n mtimeNs: mtimeMs * 1_000_000,\n ctimeNs: ctimeMs * 1_000_000,\n birthtimeNs: ctimeMs * 1_000_000,\n };\n}\n\n/**\n * Decode a binary stat response (49 bytes) into a BigIntStats object.\n * Same binary format as decodeStats but returns BigInt values.\n */\nexport function decodeStatsBigInt(data: Uint8Array): BigIntStats {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const type = view.getUint8(0);\n const mode = view.getUint32(1, true);\n const size = view.getFloat64(5, true);\n const mtimeMs = view.getFloat64(13, true);\n const ctimeMs = view.getFloat64(21, true);\n const atimeMs = view.getFloat64(29, true);\n const uid = view.getUint32(37, true);\n const gid = view.getUint32(41, true);\n const ino = view.getUint32(45, true);\n const nlink = data.byteLength >= 53 ? view.getUint32(49, true) : 1;\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n const atimeMsBigInt = BigInt(Math.trunc(atimeMs));\n const mtimeMsBigInt = BigInt(Math.trunc(mtimeMs));\n const ctimeMsBigInt = BigInt(Math.trunc(ctimeMs));\n\n return {\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 1n,\n ino: BigInt(ino),\n mode: BigInt(mode),\n nlink: BigInt(nlink),\n uid: BigInt(uid),\n gid: BigInt(gid),\n rdev: 0n,\n size: BigInt(Math.trunc(size)),\n blksize: 4096n,\n blocks: BigInt(Math.ceil(size / 512)),\n atimeMs: atimeMsBigInt,\n mtimeMs: mtimeMsBigInt,\n ctimeMs: ctimeMsBigInt,\n birthtimeMs: ctimeMsBigInt,\n atime: new Date(atimeMs),\n mtime: new Date(mtimeMs),\n ctime: new Date(ctimeMs),\n birthtime: new Date(ctimeMs),\n atimeNs: atimeMsBigInt * 1_000_000n,\n mtimeNs: mtimeMsBigInt * 1_000_000n,\n ctimeNs: ctimeMsBigInt * 1_000_000n,\n birthtimeNs: ctimeMsBigInt * 1_000_000n,\n };\n}\n\n/**\n * Decode a readdir response with file types.\n *\n * Format:\n * bytes 0-3: count (uint32)\n * Then for each entry:\n * bytes 0-1: nameLen (uint16)\n * bytes 2+: name (UTF-8)\n * byte after name: type (uint8)\n */\nexport function decodeDirents(data: Uint8Array, parentPath: string = ''): Dirent[] {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const count = view.getUint32(0, true);\n const decoder = new TextDecoder();\n const entries: Dirent[] = [];\n let offset = 4;\n\n for (let i = 0; i < count; i++) {\n const nameLen = view.getUint16(offset, true);\n offset += 2;\n const name = decoder.decode(data.subarray(offset, offset + nameLen));\n offset += nameLen;\n const type = data[offset++];\n\n const isFile = type === INODE_TYPE.FILE;\n const isDirectory = type === INODE_TYPE.DIRECTORY;\n const isSymlink = type === INODE_TYPE.SYMLINK;\n\n entries.push({\n name,\n parentPath,\n path: parentPath,\n isFile: () => isFile,\n isDirectory: () => isDirectory,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n });\n }\n\n return entries;\n}\n\n/**\n * Decode a simple readdir response (names only).\n *\n * Format:\n * bytes 0-3: count (uint32)\n * Then for each entry:\n * bytes 0-1: nameLen (uint16)\n * bytes 2+: name (UTF-8)\n */\nexport function decodeNames(data: Uint8Array): string[] {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const count = view.getUint32(0, true);\n const decoder = new TextDecoder();\n const names: string[] = [];\n let offset = 4;\n\n for (let i = 0; i < count; i++) {\n const nameLen = view.getUint16(offset, true);\n offset += 2;\n names.push(decoder.decode(data.subarray(offset, offset + nameLen)));\n offset += nameLen;\n }\n\n return names;\n}\n","/**\n * File system constants matching Node.js fs.constants\n */\n\nexport const constants = {\n // File access constants\n F_OK: 0,\n R_OK: 4,\n W_OK: 2,\n X_OK: 1,\n\n // File copy constants\n COPYFILE_EXCL: 1,\n COPYFILE_FICLONE: 2,\n COPYFILE_FICLONE_FORCE: 4,\n\n // File open constants\n O_RDONLY: 0,\n O_WRONLY: 1,\n O_RDWR: 2,\n O_CREAT: 64,\n O_EXCL: 128,\n O_TRUNC: 512,\n O_APPEND: 1024,\n O_NOCTTY: 256,\n O_NONBLOCK: 2048,\n O_SYNC: 4096,\n O_DSYNC: 4096,\n O_DIRECTORY: 65536,\n O_NOFOLLOW: 131072,\n O_NOATIME: 262144,\n\n // File type constants\n S_IFMT: 0o170000,\n S_IFREG: 0o100000,\n S_IFDIR: 0o040000,\n S_IFCHR: 0o020000,\n S_IFBLK: 0o060000,\n S_IFIFO: 0o010000,\n S_IFLNK: 0o120000,\n S_IFSOCK: 0o140000,\n\n // File mode constants\n S_IRWXU: 0o700,\n S_IRUSR: 0o400,\n S_IWUSR: 0o200,\n S_IXUSR: 0o100,\n S_IRWXG: 0o070,\n S_IRGRP: 0o040,\n S_IWGRP: 0o020,\n S_IXGRP: 0o010,\n S_IRWXO: 0o007,\n S_IROTH: 0o004,\n S_IWOTH: 0o002,\n S_IXOTH: 0o001,\n} as const;\n\nexport type Constants = typeof constants;\n","import type { Stats, FileHandle, ReadOptions, WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\nimport { constants } from '../constants.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function parseFlags(flags: string): number {\n switch (flags) {\n case 'r': return constants.O_RDONLY;\n case 'r+': return constants.O_RDWR;\n case 'w': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC;\n case 'w+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC;\n case 'a': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND;\n case 'a+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND;\n case 'wx': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'wx+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'ax': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n case 'ax+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n default: return constants.O_RDONLY;\n }\n}\n\nexport function openSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n flags: string | number = 'r',\n _mode?: number\n): number {\n const numFlags = typeof flags === 'string' ? parseFlags(flags) : flags;\n const buf = encodeRequest(OP.OPEN, filePath, numFlags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n return new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n}\n\nexport function closeSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.CLOSE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n}\n\nexport function readSync(\n syncRequest: SyncRequestFn,\n fd: number,\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n): number {\n let buffer: Uint8Array;\n let off: number, len: number, pos: number | null;\n\n if (bufferOrOptions instanceof Uint8Array) {\n buffer = bufferOrOptions;\n if (offsetOrOptions != null && typeof offsetOrOptions === 'object') {\n // readSync(fd, buffer, { offset?, length?, position? })\n off = offsetOrOptions.offset ?? 0;\n len = offsetOrOptions.length ?? buffer.byteLength;\n pos = offsetOrOptions.position ?? null;\n } else {\n // readSync(fd, buffer, offset?, length?, position?)\n off = offsetOrOptions ?? 0;\n len = length ?? buffer.byteLength;\n pos = position ?? null;\n }\n } else {\n // readSync(fd, { buffer, offset?, length?, position? })\n buffer = bufferOrOptions.buffer;\n off = bufferOrOptions.offset ?? 0;\n len = bufferOrOptions.length ?? buffer.byteLength;\n pos = bufferOrOptions.position ?? null;\n }\n\n const fdBuf = new Uint8Array(16);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, len, true);\n dv.setFloat64(8, pos ?? -1, true);\n const buf = encodeRequest(OP.FREAD, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n if (data) {\n buffer.set(data.subarray(0, Math.min(data.byteLength, len)), off);\n return data.byteLength;\n }\n return 0;\n}\n\nexport function writeSyncFd(\n syncRequest: SyncRequestFn,\n fd: number,\n bufferOrString: Uint8Array | string,\n offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n lengthOrEncoding?: number | string,\n position?: number | null\n): number {\n let writeData: Uint8Array;\n let pos: number | null;\n\n if (typeof bufferOrString === 'string') {\n // writeSync(fd, string, position?, encoding?)\n writeData = encoder.encode(bufferOrString);\n pos = (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'number') ? offsetOrPositionOrOptions : null;\n // lengthOrEncoding is encoding (ignored — always utf-8)\n } else if (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'object') {\n // writeSync(fd, buffer, { offset?, length?, position? })\n const offset = offsetOrPositionOrOptions.offset ?? 0;\n const length = offsetOrPositionOrOptions.length ?? bufferOrString.byteLength;\n pos = offsetOrPositionOrOptions.position ?? null;\n writeData = bufferOrString.subarray(offset, offset + length);\n } else {\n // writeSync(fd, buffer, offset?, length?, position?)\n const offset = offsetOrPositionOrOptions ?? 0;\n const length = lengthOrEncoding != null ? lengthOrEncoding as number : bufferOrString.byteLength;\n pos = position ?? null;\n writeData = bufferOrString.subarray(offset, offset + length);\n }\n const fdBuf = new Uint8Array(12 + writeData.byteLength);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(4, pos ?? -1, true);\n fdBuf.set(writeData, 12);\n const buf = encodeRequest(OP.FWRITE, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n return data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n}\n\nexport function fstatSync(\n syncRequest: SyncRequestFn,\n fd: number\n): Stats {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.FSTAT, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n}\n\nexport function ftruncateSync(\n syncRequest: SyncRequestFn,\n fd: number,\n len: number = 0\n): void {\n const fdBuf = new Uint8Array(12);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(4, len, true);\n const buf = encodeRequest(OP.FTRUNCATE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n}\n\nexport function fdatasyncSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const buf = encodeRequest(OP.FSYNC, '');\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fdatasync', String(fd));\n}\n\n// ========== Async FileHandle ==========\n\nexport async function open(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n flags?: string | number,\n _mode?: number\n): Promise<FileHandle> {\n const numFlags = typeof flags === 'string' ? parseFlags(flags ?? 'r') : (flags ?? 0);\n const { status, data } = await asyncRequest(OP.OPEN, filePath, numFlags);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n return createFileHandle(fd, asyncRequest);\n}\n\nfunction createFileHandle(fd: number, asyncRequest: AsyncRequestFn): FileHandle {\n return {\n fd,\n\n async read(\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n ) {\n let buffer: Uint8Array;\n let off: number, len: number, pos: number | null;\n\n if (bufferOrOptions instanceof Uint8Array) {\n buffer = bufferOrOptions;\n if (offsetOrOptions != null && typeof offsetOrOptions === 'object') {\n off = offsetOrOptions.offset ?? 0;\n len = offsetOrOptions.length ?? buffer.byteLength;\n pos = offsetOrOptions.position ?? null;\n } else {\n off = offsetOrOptions ?? 0;\n len = length ?? buffer.byteLength;\n pos = position ?? null;\n }\n } else {\n buffer = bufferOrOptions.buffer;\n off = bufferOrOptions.offset ?? 0;\n len = bufferOrOptions.length ?? buffer.byteLength;\n pos = bufferOrOptions.position ?? null;\n }\n\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length: len, position: pos ?? -1 });\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n const bytesRead = data ? data.byteLength : 0;\n if (data) buffer.set(data.subarray(0, Math.min(bytesRead, len)), off);\n return { bytesRead, buffer };\n },\n\n async write(bufferOrString: Uint8Array | string, offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null }, lengthOrEncoding?: number | string, position?: number | null) {\n let writeData: Uint8Array;\n let pos: number;\n let resultBuffer: Uint8Array;\n\n if (typeof bufferOrString === 'string') {\n resultBuffer = encoder.encode(bufferOrString);\n writeData = resultBuffer;\n pos = (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'number') ? offsetOrPositionOrOptions : -1;\n } else if (offsetOrPositionOrOptions != null && typeof offsetOrPositionOrOptions === 'object') {\n resultBuffer = bufferOrString;\n const offset = offsetOrPositionOrOptions.offset ?? 0;\n const length = offsetOrPositionOrOptions.length ?? bufferOrString.byteLength;\n pos = (offsetOrPositionOrOptions.position != null) ? offsetOrPositionOrOptions.position : -1;\n writeData = bufferOrString.subarray(offset, offset + length);\n } else {\n resultBuffer = bufferOrString;\n const offset = offsetOrPositionOrOptions ?? 0;\n const length = lengthOrEncoding != null ? lengthOrEncoding as number : bufferOrString.byteLength;\n pos = (position != null) ? position : -1;\n writeData = bufferOrString.subarray(offset, offset + length);\n }\n\n const { status, data } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: writeData, position: pos });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n const bytesWritten = data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n return { bytesWritten, buffer: resultBuffer };\n },\n\n async readv(buffers: Uint8Array[], position?: number | null) {\n let totalRead = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const { bytesRead } = await this.read(buf, 0, buf.byteLength, pos);\n totalRead += bytesRead;\n if (pos !== null) pos += bytesRead;\n if (bytesRead < buf.byteLength) break; // short read = EOF\n }\n return { bytesRead: totalRead, buffers };\n },\n\n async writev(buffers: Uint8Array[], position?: number | null) {\n let totalWritten = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const { bytesWritten } = await this.write(buf, 0, buf.byteLength, pos);\n totalWritten += bytesWritten;\n if (pos !== null) pos += bytesWritten;\n }\n return { bytesWritten: totalWritten, buffers };\n },\n\n async readFile(options?: ReadOptions | Encoding | null) {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length: Number.MAX_SAFE_INTEGER, position: 0 });\n if (status !== 0) throw statusToError(status, 'read', String(fd));\n const result = data ?? new Uint8Array(0);\n if (encoding) return decoder.decode(result);\n return result;\n },\n\n async writeFile(data: string | Uint8Array, _options?: WriteOptions | Encoding) {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: encoded, position: 0 });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n },\n\n async truncate(len = 0) {\n const { status } = await asyncRequest(OP.FTRUNCATE, '', 0, null, undefined, { fd, length: len });\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n },\n\n async stat() {\n const { status, data } = await asyncRequest(OP.FSTAT, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n },\n\n async appendFile(data: string | Uint8Array, _options?: WriteOptions | Encoding) {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const st = await this.stat();\n const { status } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: encoded, position: st.size });\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n },\n\n async chmod(_mode: number) {\n // Permissions are cosmetic in a browser VFS — silently succeed\n },\n\n async chown(_uid: number, _gid: number) {\n // Ownership is cosmetic in a browser VFS — silently succeed\n },\n\n async sync() {\n await asyncRequest(OP.FSYNC, '');\n },\n\n async datasync() {\n await asyncRequest(OP.FSYNC, '');\n },\n\n async close() {\n const { status } = await asyncRequest(OP.CLOSE, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n },\n\n [Symbol.asyncDispose]() {\n return this.close();\n },\n };\n}\n","/**\n * Encoding utilities for converting between Uint8Array and strings\n * using Node.js-compatible encodings.\n */\n\n/**\n * Decode a Uint8Array to a string using the specified encoding.\n */\nexport function decodeBuffer(data: Uint8Array, encoding: string): string {\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return new TextDecoder('utf-8').decode(data);\n\n case 'latin1':\n case 'binary': {\n // Each byte maps directly to a code point 0-255\n let result = '';\n for (let i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n }\n\n case 'ascii': {\n // Same as latin1 but mask to 7 bits\n let result = '';\n for (let i = 0; i < data.length; i++) {\n result += String.fromCharCode(data[i] & 0x7f);\n }\n return result;\n }\n\n case 'base64': {\n let binary = '';\n for (let i = 0; i < data.length; i++) {\n binary += String.fromCharCode(data[i]);\n }\n return btoa(binary);\n }\n\n case 'hex': {\n let hex = '';\n for (let i = 0; i < data.length; i++) {\n hex += data[i].toString(16).padStart(2, '0');\n }\n return hex;\n }\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return new TextDecoder('utf-16le').decode(data);\n\n default:\n return new TextDecoder('utf-8').decode(data);\n }\n}\n\n/**\n * Encode a string to a Uint8Array using the specified encoding.\n */\nexport function encodeString(str: string, encoding: string): Uint8Array {\n switch (encoding) {\n case 'utf8':\n case 'utf-8':\n return new TextEncoder().encode(str);\n\n case 'latin1':\n case 'binary': {\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i) & 0xff;\n }\n return buf;\n }\n\n case 'ascii': {\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i) & 0x7f;\n }\n return buf;\n }\n\n case 'base64': {\n const binary = atob(str);\n const buf = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n buf[i] = binary.charCodeAt(i);\n }\n return buf;\n }\n\n case 'hex': {\n const len = str.length >>> 1;\n const buf = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n buf[i] = parseInt(str.slice(i * 2, i * 2 + 2), 16);\n }\n return buf;\n }\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le': {\n const buf = new Uint8Array(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n buf[i * 2] = code & 0xff;\n buf[i * 2 + 1] = (code >>> 8) & 0xff;\n }\n return buf;\n }\n\n default:\n return new TextEncoder().encode(str);\n }\n}\n","import type { ReadOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { parseFlags, openSync, closeSync, readSync, open } from './open.js';\nimport { decodeBuffer } from '../encoding.js';\n\nconst decoder = new TextDecoder();\n\nexport function readFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReadOptions | Encoding | null\n): string | Uint8Array {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const flag = typeof options === 'string' ? undefined : options?.flag;\n const signal = typeof options === 'string' ? undefined : options?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'r') {\n const buf = encodeRequest(OP.READ, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n }\n\n // Non-default flag: use fd-based open → read → close\n const fd = openSync(syncRequest, filePath, flag);\n try {\n // Read in chunks until EOF\n const chunks: Uint8Array[] = [];\n let totalRead = 0;\n const chunkSize = 64 * 1024;\n while (true) {\n const chunk = new Uint8Array(chunkSize);\n const bytesRead = readSync(syncRequest, fd, chunk, 0, chunkSize, totalRead);\n if (bytesRead === 0) break;\n chunks.push(chunk.subarray(0, bytesRead));\n totalRead += bytesRead;\n if (bytesRead < chunkSize) break;\n }\n let result: Uint8Array;\n if (chunks.length === 0) {\n result = new Uint8Array(0);\n } else if (chunks.length === 1) {\n result = chunks[0];\n } else {\n result = new Uint8Array(totalRead);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n }\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n } finally {\n closeSync(syncRequest, fd);\n }\n}\n\nexport async function readFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReadOptions | Encoding | null\n): Promise<string | Uint8Array> {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const flag = typeof options === 'string' ? undefined : options?.flag;\n const signal = typeof options === 'string' ? undefined : options?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'r') {\n const { status, data } = await asyncRequest(OP.READ, filePath);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decodeBuffer(result, encoding);\n return result;\n }\n\n // Non-default flag: use FileHandle-based open → readFile → close\n const handle = await open(asyncRequest, filePath, flag);\n try {\n const result = await handle.readFile(encoding ? encoding : undefined);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n return result;\n } finally {\n await handle.close();\n }\n}\n","import type { WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { parseFlags, openSync, closeSync, writeSyncFd, open } from './open.js';\nimport { encodeString } from '../encoding.js';\n\nconst encoder = new TextEncoder();\n\nexport function writeFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): void {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = typeof data === 'string' ? (opts?.encoding ? encodeString(data, opts.encoding) : encoder.encode(data)) : data;\n const flag = opts?.flag;\n const signal = opts?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'w') {\n const flags = opts?.flush === true ? 1 : 0;\n const buf = encodeRequest(OP.WRITE, filePath, flags, encoded);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', filePath);\n return;\n }\n\n // Non-default flag: use fd-based open → write → close\n const fd = openSync(syncRequest, filePath, flag);\n try {\n writeSyncFd(syncRequest, fd, encoded, 0, encoded.byteLength, 0);\n } finally {\n closeSync(syncRequest, fd);\n }\n}\n\nexport async function writeFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): Promise<void> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = typeof data === 'string' ? (opts?.encoding ? encodeString(data, opts.encoding) : encoder.encode(data)) : data;\n const flag = opts?.flag;\n const signal = opts?.signal;\n if (signal?.aborted) {\n throw new DOMException('The operation was aborted', 'AbortError');\n }\n\n // Fast path: default flag or no flag specified\n if (!flag || flag === 'w') {\n const flags = opts?.flush === true ? 1 : 0;\n const { status } = await asyncRequest(OP.WRITE, filePath, flags, encoded);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n if (status !== 0) throw statusToError(status, 'write', filePath);\n return;\n }\n\n // Non-default flag: use FileHandle-based open → writeFile → close\n const handle = await open(asyncRequest, filePath, flag);\n try {\n await handle.writeFile(encoded);\n if (signal?.aborted) throw new DOMException('The operation was aborted', 'AbortError');\n } finally {\n await handle.close();\n }\n}\n","import type { WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function appendFileSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): void {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const buf = encodeRequest(OP.APPEND, filePath, 0, encoded);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'appendFile', filePath);\n}\n\nexport async function appendFile(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n data: string | Uint8Array,\n options?: WriteOptions | Encoding\n): Promise<void> {\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.APPEND, filePath, 0, encoded);\n if (status !== 0) throw statusToError(status, 'appendFile', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\n\nexport function existsSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): boolean {\n const buf = encodeRequest(OP.EXISTS, filePath);\n const { data } = syncRequest(buf);\n return data ? data[0] === 1 : false;\n}\n\nexport async function exists(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<boolean> {\n const { data } = await asyncRequest(OP.EXISTS, filePath);\n return data ? data[0] === 1 : false;\n}\n","import type { MkdirOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function mkdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: MkdirOptions | number\n): string | undefined {\n const opts = typeof options === 'number' ? { mode: options } : options;\n const flags = opts?.recursive ? 1 : 0;\n const buf = encodeRequest(OP.MKDIR, filePath, flags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'mkdir', filePath);\n return data ? decoder.decode(data) : undefined;\n}\n\nexport async function mkdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: MkdirOptions | number\n): Promise<string | undefined> {\n const opts = typeof options === 'number' ? { mode: options } : options;\n const flags = opts?.recursive ? 1 : 0;\n const { status, data } = await asyncRequest(OP.MKDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'mkdir', filePath);\n return data ? decoder.decode(data) : undefined;\n}\n","import type { RmdirOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function rmdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmdirOptions\n): void {\n const flags = options?.recursive ? 1 : 0;\n const buf = encodeRequest(OP.RMDIR, filePath, flags);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'rmdir', filePath);\n}\n\nexport async function rmdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmdirOptions\n): Promise<void> {\n const flags = options?.recursive ? 1 : 0;\n const { status } = await asyncRequest(OP.RMDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'rmdir', filePath);\n}\n","import type { RmOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { FSError } from '../errors.js';\n\nconst RETRYABLE_CODES = new Set(['EBUSY', 'ENOTEMPTY', 'EPERM']);\n\nfunction isRetryable(e: unknown): boolean {\n return e instanceof FSError && RETRYABLE_CODES.has(e.code);\n}\n\nfunction rmSyncCore(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmOptions\n): void {\n const flags = (options?.recursive ? 1 : 0) | (options?.force ? 2 : 0);\n const buf = encodeRequest(OP.UNLINK, filePath, flags);\n const { status } = syncRequest(buf);\n if (status === 3) {\n // EISDIR — it's a directory, use rmdir\n const rmdirBuf = encodeRequest(OP.RMDIR, filePath, flags);\n const rmdirResult = syncRequest(rmdirBuf);\n if (rmdirResult.status !== 0) {\n if (options?.force && rmdirResult.status === 1) return;\n throw statusToError(rmdirResult.status, 'rm', filePath);\n }\n return;\n }\n if (status !== 0) {\n if (options?.force && status === 1) return;\n throw statusToError(status, 'rm', filePath);\n }\n}\n\nexport function rmSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: RmOptions\n): void {\n const maxRetries = options?.maxRetries ?? 0;\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n rmSyncCore(syncRequest, filePath, options);\n return;\n } catch (e) {\n lastError = e;\n if (attempt < maxRetries && isRetryable(e)) {\n // For sync, we cannot delay without blocking APIs, so retry immediately.\n continue;\n }\n throw e;\n }\n }\n /* istanbul ignore next -- safety net; loop always throws or returns */\n throw lastError;\n}\n\nasync function rmAsyncCore(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmOptions\n): Promise<void> {\n const flags = (options?.recursive ? 1 : 0) | (options?.force ? 2 : 0);\n const { status } = await asyncRequest(OP.UNLINK, filePath, flags);\n if (status === 3) {\n const { status: s2 } = await asyncRequest(OP.RMDIR, filePath, flags);\n if (s2 !== 0) {\n if (options?.force && s2 === 1) return;\n throw statusToError(s2, 'rm', filePath);\n }\n return;\n }\n if (status !== 0) {\n if (options?.force && status === 1) return;\n throw statusToError(status, 'rm', filePath);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport async function rm(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: RmOptions\n): Promise<void> {\n const maxRetries = options?.maxRetries ?? 0;\n const retryDelay = options?.retryDelay ?? 100;\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n await rmAsyncCore(asyncRequest, filePath, options);\n return;\n } catch (e) {\n lastError = e;\n if (attempt < maxRetries && isRetryable(e)) {\n await delay(retryDelay);\n continue;\n }\n throw e;\n }\n }\n /* istanbul ignore next -- safety net; loop always throws or returns */\n throw lastError;\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function unlinkSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): void {\n const buf = encodeRequest(OP.UNLINK, filePath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'unlink', filePath);\n}\n\nexport async function unlink(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<void> {\n const { status } = await asyncRequest(OP.UNLINK, filePath);\n if (status !== 0) throw statusToError(status, 'unlink', filePath);\n}\n","import type { ReaddirOptions, Encoding, Dirent } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeDirents, decodeNames } from '../stats.js';\n\nfunction readdirBaseSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n withFileTypes: boolean\n): string[] | Dirent[] {\n const flags = withFileTypes ? 1 : 0;\n const buf = encodeRequest(OP.READDIR, filePath, flags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readdir', filePath);\n if (!data) return [];\n return withFileTypes ? decodeDirents(data, filePath) : decodeNames(data);\n}\n\nasync function readdirBaseAsync(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n withFileTypes: boolean\n): Promise<string[] | Dirent[]> {\n const flags = withFileTypes ? 1 : 0;\n const { status, data } = await asyncRequest(OP.READDIR, filePath, flags);\n if (status !== 0) throw statusToError(status, 'readdir', filePath);\n if (!data) return [];\n return withFileTypes ? decodeDirents(data, filePath) : decodeNames(data);\n}\n\nfunction readdirRecursiveSync(\n syncRequest: SyncRequestFn,\n basePath: string,\n prefix: string,\n withFileTypes: boolean,\n rootPath?: string\n): (string | Dirent)[] {\n // Always read dirents so we can detect directories\n const entries = readdirBaseSync(syncRequest, basePath, true) as Dirent[];\n const results: (string | Dirent)[] = [];\n const effectiveRoot = rootPath ?? basePath;\n\n for (const entry of entries) {\n const relativePath = prefix ? prefix + '/' + entry.name : entry.name;\n\n if (withFileTypes) {\n const parentPath = prefix || effectiveRoot;\n // Return a Dirent with the relative path as the name\n results.push({\n name: relativePath,\n parentPath,\n path: parentPath,\n isFile: entry.isFile,\n isDirectory: entry.isDirectory,\n isBlockDevice: entry.isBlockDevice,\n isCharacterDevice: entry.isCharacterDevice,\n isSymbolicLink: entry.isSymbolicLink,\n isFIFO: entry.isFIFO,\n isSocket: entry.isSocket,\n });\n } else {\n results.push(relativePath);\n }\n\n if (entry.isDirectory()) {\n const childPath = basePath + '/' + entry.name;\n results.push(\n ...readdirRecursiveSync(syncRequest, childPath, relativePath, withFileTypes, effectiveRoot)\n );\n }\n }\n\n return results;\n}\n\nasync function readdirRecursiveAsync(\n asyncRequest: AsyncRequestFn,\n basePath: string,\n prefix: string,\n withFileTypes: boolean,\n rootPath?: string\n): Promise<(string | Dirent)[]> {\n const entries = (await readdirBaseAsync(asyncRequest, basePath, true)) as Dirent[];\n const results: (string | Dirent)[] = [];\n const effectiveRoot = rootPath ?? basePath;\n\n for (const entry of entries) {\n const relativePath = prefix ? prefix + '/' + entry.name : entry.name;\n\n if (withFileTypes) {\n const parentPath = prefix || effectiveRoot;\n results.push({\n name: relativePath,\n parentPath,\n path: parentPath,\n isFile: entry.isFile,\n isDirectory: entry.isDirectory,\n isBlockDevice: entry.isBlockDevice,\n isCharacterDevice: entry.isCharacterDevice,\n isSymbolicLink: entry.isSymbolicLink,\n isFIFO: entry.isFIFO,\n isSocket: entry.isSocket,\n });\n } else {\n results.push(relativePath);\n }\n\n if (entry.isDirectory()) {\n const childPath = basePath + '/' + entry.name;\n const children = await readdirRecursiveAsync(\n asyncRequest, childPath, relativePath, withFileTypes, effectiveRoot\n );\n results.push(...children);\n }\n }\n\n return results;\n}\n\nexport function readdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): string[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n\n if (opts?.recursive) {\n return readdirRecursiveSync(\n syncRequest, filePath, '', !!opts?.withFileTypes\n ) as string[] | Dirent[];\n }\n\n return readdirBaseSync(syncRequest, filePath, !!opts?.withFileTypes);\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n\n if (opts?.recursive) {\n return readdirRecursiveAsync(\n asyncRequest, filePath, '', !!opts?.withFileTypes\n ) as Promise<string[] | Dirent[]>;\n }\n\n return readdirBaseAsync(asyncRequest, filePath, !!opts?.withFileTypes);\n}\n","import type { Stats, BigIntStats, StatOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats, decodeStatsBigInt } from '../stats.js';\n\nexport function statSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Stats | BigIntStats {\n const buf = encodeRequest(OP.STAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport function lstatSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Stats | BigIntStats {\n const buf = encodeRequest(OP.LSTAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport async function stat(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Promise<Stats | BigIntStats> {\n const { status, data } = await asyncRequest(OP.STAT, filePath);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n\nexport async function lstat(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: StatOptions\n): Promise<Stats | BigIntStats> {\n const { status, data } = await asyncRequest(OP.LSTAT, filePath);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return options?.bigint ? decodeStatsBigInt(data!) : decodeStats(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function renameSync(\n syncRequest: SyncRequestFn,\n oldPath: string,\n newPath: string\n): void {\n const buf = encodeTwoPathRequest(OP.RENAME, oldPath, newPath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'rename', oldPath);\n}\n\nexport async function rename(\n asyncRequest: AsyncRequestFn,\n oldPath: string,\n newPath: string\n): Promise<void> {\n const path2Bytes = encoder.encode(newPath);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.RENAME, oldPath, 0, payload);\n if (status !== 0) throw statusToError(status, 'rename', oldPath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function copyFileSync(\n syncRequest: SyncRequestFn,\n src: string,\n dest: string,\n mode?: number\n): void {\n const buf = encodeTwoPathRequest(OP.COPY, src, dest, mode ?? 0);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'copyFile', src);\n}\n\nexport async function copyFile(\n asyncRequest: AsyncRequestFn,\n src: string,\n dest: string,\n mode?: number\n): Promise<void> {\n const path2Bytes = encoder.encode(dest);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.COPY, src, mode ?? 0, payload);\n if (status !== 0) throw statusToError(status, 'copyFile', src);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function truncateSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n len: number = 0\n): void {\n const lenBuf = new Uint8Array(8);\n new DataView(lenBuf.buffer).setFloat64(0, len, true);\n const buf = encodeRequest(OP.TRUNCATE, filePath, 0, lenBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'truncate', filePath);\n}\n\nexport async function truncate(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n len?: number\n): Promise<void> {\n const lenBuf = new Uint8Array(8);\n new DataView(lenBuf.buffer).setFloat64(0, len ?? 0, true);\n const { status } = await asyncRequest(OP.TRUNCATE, filePath, 0, lenBuf);\n if (status !== 0) throw statusToError(status, 'truncate', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { constants } from '../constants.js';\n\nexport function accessSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number = constants.F_OK\n): void {\n const buf = encodeRequest(OP.ACCESS, filePath, mode);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n\nexport async function access(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number = constants.F_OK\n): Promise<void> {\n const { status } = await asyncRequest(OP.ACCESS, filePath, mode);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function realpathSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): string {\n const buf = encodeRequest(OP.REALPATH, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n\nexport async function realpath(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.REALPATH, filePath);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chmodSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number\n): void {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const buf = encodeRequest(OP.CHMOD, filePath, 0, modeBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n\nexport async function chmod(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number\n): Promise<void> {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const { status } = await asyncRequest(OP.CHMOD, filePath, 0, modeBuf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chownSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): void {\n const ownerBuf = new Uint8Array(8);\n const dv = new DataView(ownerBuf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const buf = encodeRequest(OP.CHOWN, filePath, 0, ownerBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n\nexport async function chown(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): Promise<void> {\n const buf = new Uint8Array(8);\n const dv = new DataView(buf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const { status } = await asyncRequest(OP.CHOWN, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function utimesSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): void {\n const timesBuf = new Uint8Array(16);\n const dv = new DataView(timesBuf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.UTIMES, filePath, 0, timesBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n\nexport async function utimes(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const buf = new Uint8Array(16);\n const dv = new DataView(buf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.UTIMES, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function symlinkSync(\n syncRequest: SyncRequestFn,\n target: string,\n linkPath: string,\n type?: string | null\n): void {\n const targetBytes = encoder.encode(target);\n const buf = encodeRequest(OP.SYMLINK, linkPath, 0, targetBytes);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'symlink', linkPath);\n}\n\nexport function readlinkSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: { encoding?: string | null } | string | null\n): string | Uint8Array {\n const buf = encodeRequest(OP.READLINK, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n const encoding = typeof options === 'string' ? options : options?.encoding;\n if (encoding === 'buffer') return new Uint8Array(data!);\n return decoder.decode(data!);\n}\n\nexport async function symlink(\n asyncRequest: AsyncRequestFn,\n target: string,\n linkPath: string,\n type?: string | null\n): Promise<void> {\n const targetBytes = encoder.encode(target);\n const { status } = await asyncRequest(OP.SYMLINK, linkPath, 0, targetBytes);\n if (status !== 0) throw statusToError(status, 'symlink', linkPath);\n}\n\nexport async function readlink(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: { encoding?: string | null } | string | null\n): Promise<string | Uint8Array> {\n const { status, data } = await asyncRequest(OP.READLINK, filePath);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n const encoding = typeof options === 'string' ? options : options?.encoding;\n if (encoding === 'buffer') return new Uint8Array(data!);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeTwoPathRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\n\nexport function linkSync(\n syncRequest: SyncRequestFn,\n existingPath: string,\n newPath: string\n): void {\n const buf = encodeTwoPathRequest(OP.LINK, existingPath, newPath);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'link', existingPath);\n}\n\nexport async function link(\n asyncRequest: AsyncRequestFn,\n existingPath: string,\n newPath: string\n): Promise<void> {\n const path2Bytes = encoder.encode(newPath);\n const payload = new Uint8Array(4 + path2Bytes.byteLength);\n new DataView(payload.buffer).setUint32(0, path2Bytes.byteLength, true);\n payload.set(path2Bytes, 4);\n const { status } = await asyncRequest(OP.LINK, existingPath, 0, payload);\n if (status !== 0) throw statusToError(status, 'link', existingPath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function mkdtempSync(\n syncRequest: SyncRequestFn,\n prefix: string\n): string {\n const buf = encodeRequest(OP.MKDTEMP, prefix);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'mkdtemp', prefix);\n return decoder.decode(data!);\n}\n\nexport async function mkdtemp(\n asyncRequest: AsyncRequestFn,\n prefix: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.MKDTEMP, prefix);\n if (status !== 0) throw statusToError(status, 'mkdtemp', prefix);\n return decoder.decode(data!);\n}\n","import type { Dir, Dirent } from '../types.js';\nimport type { AsyncRequestFn } from './context.js';\nimport { OP } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { readdir } from './readdir.js';\n\nexport async function opendir(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Dir> {\n const { status, data } = await asyncRequest(OP.OPENDIR, filePath);\n if (status !== 0) throw statusToError(status, 'opendir', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n\n let entries: Dirent[] | null = null;\n let index = 0;\n\n const loadEntries = async () => {\n if (entries === null) {\n entries = await readdir(asyncRequest, filePath, { withFileTypes: true }) as Dirent[];\n }\n };\n\n return {\n path: filePath,\n\n async read(): Promise<Dirent | null> {\n await loadEntries();\n if (index >= entries!.length) return null;\n return entries![index++];\n },\n\n async close(): Promise<void> {\n const { status } = await asyncRequest(OP.CLOSE, '', 0, null, undefined, { fd });\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n },\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Dirent> {\n await loadEntries();\n for (const entry of entries!) {\n yield entry;\n }\n },\n };\n}\n","/**\n * POSIX path utilities (browser-compatible).\n * No Node.js dependencies.\n */\n\nimport type { PathLike } from './types.js';\n\n/**\n * Normalize a PathLike value (string, Uint8Array, or URL) to a plain string.\n * Mirrors Node.js behaviour: Buffer/Uint8Array is decoded as UTF-8,\n * URL must use the file: protocol and the pathname is used.\n */\nexport function toPathString(p: PathLike): string {\n if (typeof p === 'string') return p;\n if (p instanceof Uint8Array) return new TextDecoder().decode(p);\n if (typeof URL !== 'undefined' && p instanceof URL) {\n if (p.protocol !== 'file:') {\n throw new TypeError('The URL must use the file: protocol');\n }\n return decodeURIComponent(p.pathname);\n }\n return String(p);\n}\n\nexport const sep = '/';\nexport const delimiter = ':';\n\nexport function normalize(p: string): string {\n if (p.length === 0) return '.';\n\n const isAbsolute = p.charCodeAt(0) === 47; // '/'\n const segments = p.split('/');\n const result: string[] = [];\n\n for (const seg of segments) {\n if (seg === '' || seg === '.') continue;\n if (seg === '..') {\n if (result.length > 0 && result[result.length - 1] !== '..') {\n result.pop();\n } else if (!isAbsolute) {\n result.push('..');\n }\n } else {\n result.push(seg);\n }\n }\n\n let out = result.join('/');\n if (isAbsolute) out = '/' + out;\n return out || (isAbsolute ? '/' : '.');\n}\n\nexport function join(...paths: string[]): string {\n return normalize(paths.filter(Boolean).join('/'));\n}\n\nexport function resolve(...paths: string[]): string {\n let resolved = '';\n for (let i = paths.length - 1; i >= 0; i--) {\n const p = paths[i];\n if (!p) continue;\n resolved = p + (resolved ? '/' + resolved : '');\n if (p.charCodeAt(0) === 47) break; // absolute\n }\n return normalize(resolved || '/');\n}\n\nexport function dirname(p: string): string {\n if (p.length === 0) return '.';\n const i = p.lastIndexOf('/');\n if (i < 0) return '.';\n if (i === 0) return '/';\n return p.substring(0, i);\n}\n\nexport function basename(p: string, ext?: string): string {\n let base = p;\n const i = p.lastIndexOf('/');\n if (i >= 0) base = p.substring(i + 1);\n if (ext && base.endsWith(ext)) {\n base = base.substring(0, base.length - ext.length);\n }\n return base;\n}\n\nexport function extname(p: string): string {\n const base = basename(p);\n const i = base.lastIndexOf('.');\n if (i <= 0) return '';\n return base.substring(i);\n}\n\nexport function isAbsolute(p: string): boolean {\n return p.length > 0 && p.charCodeAt(0) === 47;\n}\n\nexport function relative(from: string, to: string): string {\n const fromParts = resolve(from).split('/').filter(Boolean);\n const toParts = resolve(to).split('/').filter(Boolean);\n\n let common = 0;\n while (common < fromParts.length && common < toParts.length && fromParts[common] === toParts[common]) {\n common++;\n }\n\n const ups = fromParts.length - common;\n const result = [...Array(ups).fill('..'), ...toParts.slice(common)];\n return result.join('/') || '.';\n}\n\nexport function parse(p: string): { root: string; dir: string; base: string; ext: string; name: string } {\n const dir = dirname(p);\n const base = basename(p);\n const ext = extname(p);\n const name = ext ? base.substring(0, base.length - ext.length) : base;\n const root = isAbsolute(p) ? '/' : '';\n return { root, dir, base, ext, name };\n}\n\nexport function format(obj: { root?: string; dir?: string; base?: string; ext?: string; name?: string }): string {\n const dir = obj.dir || obj.root || '';\n const base = obj.base || ((obj.name || '') + (obj.ext || ''));\n return dir ? (dir === '/' ? '/' + base : dir + '/' + base) : base;\n}\n","import type { WatchOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener, WatchFileOptions, Stats } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { statSync } from './stat.js';\nimport * as path from '../path.js';\n\n// ========== Watcher Registry ==========\n\ninterface WatchEntry {\n ns: string;\n absPath: string;\n recursive: boolean;\n listener: WatchListener;\n signal?: AbortSignal;\n}\n\ninterface WatchFileEntry {\n ns: string;\n absPath: string;\n listener: WatchFileListener;\n interval: number;\n prevStats: Stats | null;\n syncRequest: SyncRequestFn;\n timerId: ReturnType<typeof setInterval> | null;\n}\n\n// fs.watch() entries\nconst watchers = new Set<WatchEntry>();\n\n// fs.watchFile() entries, keyed by absolute path\nconst fileWatchers = new Map<string, Set<WatchFileEntry>>();\n\n// Lazy BroadcastChannel with ref counting, per namespace\nconst bcMap = new Map<string, { bc: BroadcastChannel; refCount: number }>();\n\nfunction ensureBc(ns: string): void {\n const entry = bcMap.get(ns);\n if (entry) { entry.refCount++; return; }\n const bc = new BroadcastChannel(`${ns}-watch`);\n bcMap.set(ns, { bc, refCount: 1 });\n bc.onmessage = onBroadcast;\n}\n\nfunction releaseBc(ns: string): void {\n const entry = bcMap.get(ns);\n if (!entry) return;\n if (--entry.refCount <= 0) {\n entry.bc.close();\n bcMap.delete(ns);\n }\n}\n\n// ========== BroadcastChannel handler ==========\n\nfunction onBroadcast(event: MessageEvent<{ eventType: 'change' | 'rename'; path: string }>): void {\n const { eventType, path: mutatedPath } = event.data;\n\n // Notify fs.watch() watchers\n for (const entry of watchers) {\n const filename = matchWatcher(entry, mutatedPath);\n if (filename !== null) {\n try { entry.listener(eventType, filename); } catch { /* swallow */ }\n }\n }\n\n // Notify fs.watchFile() watchers\n const fileSet = fileWatchers.get(mutatedPath);\n if (fileSet) {\n for (const entry of fileSet) {\n triggerWatchFile(entry);\n }\n }\n}\n\n// ========== Path matching ==========\n\nfunction matchWatcher(entry: WatchEntry, mutatedPath: string): string | null {\n const { absPath, recursive } = entry;\n\n // Exact match (watching a specific file, or the directory itself was modified)\n if (mutatedPath === absPath) {\n return path.basename(mutatedPath);\n }\n\n // Build the prefix that child paths must start with.\n // For root '/', prefix stays '/' — every absolute path is inside root.\n // For '/foo', prefix becomes '/foo/' — prevents matching '/foobar/x'.\n const prefix = absPath.endsWith('/') ? absPath : absPath + '/';\n if (!mutatedPath.startsWith(prefix)) {\n return null;\n }\n\n const relativePath = mutatedPath.substring(prefix.length);\n\n if (recursive) return relativePath;\n\n // Non-recursive: only direct children (no '/' in relative path)\n return relativePath.indexOf('/') === -1 ? relativePath : null;\n}\n\n// ========== fs.watch() ==========\n\nexport function watch(\n ns: string,\n filePath: string,\n options?: WatchOptions | string,\n listener?: WatchListener\n): FSWatcher {\n const opts: WatchOptions = typeof options === 'string'\n ? { encoding: options as any }\n : (options ?? {});\n\n const cb: WatchListener = listener ?? (() => {});\n const absPath = path.resolve(filePath);\n const signal = opts.signal;\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive: opts.recursive ?? false,\n listener: cb,\n signal,\n };\n\n ensureBc(ns);\n watchers.add(entry);\n\n // AbortSignal support\n if (signal) {\n const onAbort = () => {\n watchers.delete(entry);\n releaseBc(ns);\n signal.removeEventListener('abort', onAbort);\n };\n if (signal.aborted) {\n onAbort();\n } else {\n signal.addEventListener('abort', onAbort);\n }\n }\n\n const watcher: FSWatcher = {\n close() {\n watchers.delete(entry);\n releaseBc(ns);\n },\n ref() { return watcher; },\n unref() { return watcher; },\n };\n\n return watcher;\n}\n\n// ========== fs.watchFile() ==========\n\nexport function watchFile(\n ns: string,\n syncRequest: SyncRequestFn,\n filePath: string,\n optionsOrListener?: WatchFileOptions | WatchFileListener,\n listener?: WatchFileListener\n): void {\n let opts: WatchFileOptions;\n let cb: WatchFileListener;\n\n if (typeof optionsOrListener === 'function') {\n cb = optionsOrListener;\n opts = {};\n } else {\n opts = optionsOrListener ?? {};\n cb = listener!;\n }\n\n if (!cb) return;\n\n const absPath = path.resolve(filePath);\n const interval = opts.interval ?? 5007; // Node.js default\n\n let prevStats: Stats | null = null;\n try { prevStats = statSync(syncRequest, absPath) as Stats; } catch { /* file may not exist */ }\n\n const entry: WatchFileEntry = {\n ns,\n absPath,\n listener: cb,\n interval,\n prevStats,\n syncRequest,\n timerId: null,\n };\n\n ensureBc(ns);\n let set = fileWatchers.get(absPath);\n if (!set) {\n set = new Set();\n fileWatchers.set(absPath, set);\n }\n set.add(entry);\n\n // Fallback polling (Node.js watchFile uses stat polling)\n entry.timerId = setInterval(() => triggerWatchFile(entry), interval);\n}\n\n// ========== fs.unwatchFile() ==========\n\nexport function unwatchFile(\n ns: string,\n filePath: string,\n listener?: WatchFileListener\n): void {\n const absPath = path.resolve(filePath);\n const set = fileWatchers.get(absPath);\n if (!set) return;\n\n if (listener) {\n for (const entry of set) {\n if (entry.listener === listener) {\n if (entry.timerId !== null) clearInterval(entry.timerId);\n set.delete(entry);\n releaseBc(ns);\n break;\n }\n }\n if (set.size === 0) fileWatchers.delete(absPath);\n } else {\n for (const entry of set) {\n if (entry.timerId !== null) clearInterval(entry.timerId);\n releaseBc(ns);\n }\n fileWatchers.delete(absPath);\n }\n}\n\n// ========== watchFile trigger ==========\n\nfunction triggerWatchFile(entry: WatchFileEntry): void {\n let currStats: Stats | null = null;\n try { currStats = statSync(entry.syncRequest, entry.absPath) as Stats; } catch { /* file gone */ }\n\n const prev = entry.prevStats ?? emptyStats();\n const curr = currStats ?? emptyStats();\n\n if (prev.mtimeMs !== curr.mtimeMs || prev.size !== curr.size || prev.ino !== curr.ino) {\n entry.prevStats = currStats;\n try { entry.listener(curr, prev); } catch { /* swallow */ }\n }\n}\n\nexport function emptyStats(): Stats {\n const zero = new Date(0);\n return {\n isFile: () => false,\n isDirectory: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0, ino: 0, mode: 0, nlink: 0, uid: 0, gid: 0, rdev: 0,\n size: 0, blksize: 4096, blocks: 0,\n atimeMs: 0, mtimeMs: 0, ctimeMs: 0, birthtimeMs: 0,\n atime: zero, mtime: zero, ctime: zero, birthtime: zero,\n atimeNs: 0, mtimeNs: 0, ctimeNs: 0, birthtimeNs: 0,\n };\n}\n\n// ========== promises.watch() ==========\n\nexport async function* watchAsync(\n ns: string,\n _asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: WatchOptions\n): AsyncIterable<WatchEventType> {\n const absPath = path.resolve(filePath);\n const recursive = options?.recursive ?? false;\n const signal = options?.signal;\n\n const queue: WatchEventType[] = [];\n let resolve: (() => void) | null = null;\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive,\n listener: (eventType, filename) => {\n queue.push({ eventType, filename });\n if (resolve) { resolve(); resolve = null; }\n },\n signal,\n };\n\n ensureBc(ns);\n watchers.add(entry);\n\n try {\n while (!signal?.aborted) {\n if (queue.length === 0) {\n await new Promise<void>(r => { resolve = r; });\n }\n while (queue.length > 0) {\n yield queue.shift()!;\n }\n }\n } finally {\n watchers.delete(entry);\n releaseBc(ns);\n }\n}\n","import type { GlobOptions } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { readdirSync, readdir } from './readdir.js';\nimport { statSync, stat } from './stat.js';\n\n/**\n * Convert a glob segment pattern to a RegExp.\n * Supports: * (any non-/ chars), ? (single char), literal chars.\n */\nfunction segmentToRegex(pattern: string): RegExp {\n let re = '^';\n for (let i = 0; i < pattern.length; i++) {\n const ch = pattern[i];\n if (ch === '*') {\n re += '[^/]*';\n } else if (ch === '?') {\n re += '[^/]';\n } else if ('.+^${}()|[]\\\\'.includes(ch)) {\n re += '\\\\' + ch;\n } else {\n re += ch;\n }\n }\n re += '$';\n return new RegExp(re);\n}\n\nfunction matchSegment(name: string, pattern: string): boolean {\n return segmentToRegex(pattern).test(name);\n}\n\nfunction joinPath(base: string, name: string): string {\n if (base === '/') return '/' + name;\n return base + '/' + name;\n}\n\nexport function globSync(\n syncRequest: SyncRequestFn,\n pattern: string,\n options?: GlobOptions,\n): string[] {\n const cwd = options?.cwd ?? '/';\n const exclude = options?.exclude;\n\n const segments = pattern.split('/').filter((s) => s !== '');\n const results: string[] = [];\n\n function walk(dir: string, segIdx: number): void {\n if (segIdx >= segments.length) return;\n\n const seg = segments[segIdx];\n const isLast = segIdx === segments.length - 1;\n\n if (seg === '**') {\n // Match zero or more path segments.\n // Try skipping ** (match zero segments) — continue with next segment in same dir\n if (segIdx + 1 < segments.length) {\n walk(dir, segIdx + 1);\n }\n\n // Recurse into all subdirectories with ** still active\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n let isDir: boolean;\n try {\n const s = statSync(syncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n\n if (isDir) {\n // Recurse with ** still at same segIdx\n walk(full, segIdx);\n }\n\n // If this is the last segment after **, match the entry against nothing (** matches it)\n if (isLast) {\n results.push(full);\n }\n }\n return;\n }\n\n // Normal segment (may contain * or ? wildcards)\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!matchSegment(entry, seg)) continue;\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n if (isLast) {\n results.push(full);\n } else {\n // Must be a directory to continue matching deeper segments\n let isDir: boolean;\n try {\n const s = statSync(syncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n if (isDir) {\n walk(full, segIdx + 1);\n }\n }\n }\n }\n\n walk(cwd, 0);\n return results;\n}\n\nexport async function glob(\n asyncRequest: AsyncRequestFn,\n pattern: string,\n options?: GlobOptions,\n): Promise<string[]> {\n const cwd = options?.cwd ?? '/';\n const exclude = options?.exclude;\n\n const segments = pattern.split('/').filter((s) => s !== '');\n const results: string[] = [];\n\n async function walk(dir: string, segIdx: number): Promise<void> {\n if (segIdx >= segments.length) return;\n\n const seg = segments[segIdx];\n const isLast = segIdx === segments.length - 1;\n\n if (seg === '**') {\n // Try skipping ** (match zero segments)\n if (segIdx + 1 < segments.length) {\n await walk(dir, segIdx + 1);\n }\n\n let entries: string[];\n try {\n entries = (await readdir(asyncRequest, dir)) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n let isDir: boolean;\n try {\n const s = await stat(asyncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n\n if (isDir) {\n await walk(full, segIdx);\n }\n\n if (isLast) {\n results.push(full);\n }\n }\n return;\n }\n\n let entries: string[];\n try {\n entries = (await readdir(asyncRequest, dir)) as string[];\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (!matchSegment(entry, seg)) continue;\n const full = joinPath(dir, entry);\n if (exclude && exclude(full)) continue;\n\n if (isLast) {\n results.push(full);\n } else {\n let isDir: boolean;\n try {\n const s = await stat(asyncRequest, full);\n isDir = s.isDirectory();\n } catch {\n continue;\n }\n if (isDir) {\n await walk(full, segIdx + 1);\n }\n }\n }\n }\n\n await walk(cwd, 0);\n return results;\n}\n","/**\n * VFSFileSystem — main thread API.\n *\n * Provides Node.js-compatible sync and async filesystem methods.\n * Sync methods use SAB + Atomics to block until the server responds.\n * Async methods use postMessage to the async relay worker.\n *\n * On import, workers are spawned immediately. Every method blocks\n * (or waits) until the worker is ready. This is by design — the library\n * primarily runs inside workers where blocking is fine.\n */\n\nimport type {\n Encoding, ReadOptions, WriteOptions, MkdirOptions, RmdirOptions, RmOptions, CpOptions,\n ReaddirOptions, StatOptions, Stats, BigIntStats, StatFs, Dirent, VFSConfig, FSMode, FileHandle, GlobOptions,\n WatchOptions, WatchFileOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener,\n ReadStreamOptions, WriteStreamOptions, FSReadStream, FSWriteStream, OpenAsBlobOptions, PathLike,\n} from './types.js';\nimport { NodeReadable, NodeWritable } from './node-streams.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './methods/context.js';\nimport { SAB_OFFSETS, SIGNAL, OP, encodeRequest, decodeResponse } from './protocol/opcodes.js';\n\n// ---- Method imports ----\nimport { readFileSync as _readFileSync, readFile as _readFile } from './methods/readFile.js';\nimport { writeFileSync as _writeFileSync, writeFile as _writeFile } from './methods/writeFile.js';\nimport { appendFileSync as _appendFileSync, appendFile as _appendFile } from './methods/appendFile.js';\nimport { existsSync as _existsSync, exists as _exists } from './methods/exists.js';\nimport { mkdirSync as _mkdirSync, mkdir as _mkdir } from './methods/mkdir.js';\nimport { rmdirSync as _rmdirSync, rmdir as _rmdir } from './methods/rmdir.js';\nimport { rmSync as _rmSync, rm as _rm } from './methods/rm.js';\nimport { unlinkSync as _unlinkSync, unlink as _unlink } from './methods/unlink.js';\nimport { readdirSync as _readdirSync, readdir as _readdir } from './methods/readdir.js';\nimport { statSync as _statSync, lstatSync as _lstatSync, stat as _stat, lstat as _lstat } from './methods/stat.js';\nimport { renameSync as _renameSync, rename as _rename } from './methods/rename.js';\nimport { copyFileSync as _copyFileSync, copyFile as _copyFile } from './methods/copyFile.js';\nimport { truncateSync as _truncateSync, truncate as _truncate } from './methods/truncate.js';\nimport { accessSync as _accessSync, access as _access } from './methods/access.js';\nimport { realpathSync as _realpathSync, realpath as _realpath } from './methods/realpath.js';\nimport { chmodSync as _chmodSync, chmod as _chmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes } from './methods/utimes.js';\nimport { symlinkSync as _symlinkSync, readlinkSync as _readlinkSync, symlink as _symlink, readlink as _readlink } from './methods/symlink.js';\nimport { linkSync as _linkSync, link as _link } from './methods/link.js';\nimport { mkdtempSync as _mkdtempSync, mkdtemp as _mkdtemp } from './methods/mkdtemp.js';\nimport {\n openSync as _openSync, closeSync as _closeSync,\n readSync as _readSync, writeSyncFd as _writeSyncFd,\n fstatSync as _fstatSync, ftruncateSync as _ftruncateSync, fdatasyncSync as _fdatasyncSync,\n open as _open,\n} from './methods/open.js';\nimport { opendir as _opendir } from './methods/opendir.js';\nimport { watch as _watch, watchFile as _watchFile, unwatchFile as _unwatchFile, watchAsync as _watchAsync } from './methods/watch.js';\nimport { globSync as _globSync, glob as _glob } from './methods/glob.js';\nimport { join as pathJoin, toPathString } from './path.js';\nimport { createError } from './errors.js';\nimport { constants } from './constants.js';\n\nconst encoder = new TextEncoder();\n\n// Default SAB size: 2MB\nconst DEFAULT_SAB_SIZE = 2 * 1024 * 1024;\n\n// Singleton registry: one VFSFileSystem per root per thread.\n// Prevents duplicate workers, leader lock contention, and SW registration conflicts.\nconst instanceRegistry = new Map<string, VFSFileSystem>();\nconst HEADER_SIZE = SAB_OFFSETS.HEADER_SIZE;\n\n// Atomics.wait() is disallowed on the browser main thread.\n// Use spin-wait (Atomics.load loop) as fallback.\nconst _canAtomicsWait = typeof globalThis.WorkerGlobalScope !== 'undefined';\n\n// Main-thread spin-wait timeout: 10 seconds.\n// If SharedWorker is dead/broken, abort instead of blocking the main thread forever.\nconst SPIN_TIMEOUT_MS = 10_000;\n\nfunction spinWait(arr: Int32Array, index: number, value: number): void {\n if (_canAtomicsWait) {\n Atomics.wait(arr, index, value);\n } else {\n const start = performance.now();\n while (Atomics.load(arr, index) === value) {\n if (performance.now() - start > SPIN_TIMEOUT_MS) {\n throw new Error(\n `VFS sync operation timed out after ${SPIN_TIMEOUT_MS / 1000}s — SharedWorker may be unresponsive`\n );\n }\n }\n }\n}\n\nexport class VFSFileSystem {\n // SAB for sync communication with sync relay worker (null when SAB unavailable)\n private sab!: SharedArrayBuffer;\n private ctrl!: Int32Array;\n private readySab!: SharedArrayBuffer;\n private readySignal!: Int32Array;\n // SAB for async-relay ↔ sync-relay communication\n private asyncSab!: SharedArrayBuffer;\n // Whether SharedArrayBuffer is available (crossOriginIsolated)\n private hasSAB = typeof SharedArrayBuffer !== 'undefined';\n\n // Workers\n private syncWorker!: Worker;\n private asyncWorker!: Worker;\n\n // Async request tracking\n private asyncCallId = 0;\n private asyncPending = new Map<number, {\n resolve: (result: { status: number; data: Uint8Array | null }) => void;\n reject: (err: Error) => void;\n }>();\n\n // Ready promise for async callers\n private readyPromise!: Promise<void>;\n private resolveReady!: () => void;\n private rejectReady!: (err: Error) => void;\n private initError: Error | null = null;\n private isReady = false;\n\n\n // Config (definite assignment — always set when constructor doesn't return singleton)\n private config!: Omit<Required<VFSConfig>, 'opfsSyncRoot' | 'swUrl' | 'swScope' | 'mode' | 'limits'> & { opfsSyncRoot?: string; swUrl?: string; swScope?: string; limits?: VFSConfig['limits'] };\n private tabId!: string;\n private _mode!: FSMode;\n private corruptionError: Error | null = null;\n /** Namespace string derived from root — used for lock names, BroadcastChannel, and SW scope\n * so multiple VFS instances with different roots don't collide. */\n private ns!: string;\n\n // Service worker registration for multi-tab port transfer\n private swReg: ServiceWorkerRegistration | null = null;\n private isFollower = false;\n private holdingLeaderLock = false;\n private brokerInitialized = false;\n private leaderChangeBc: BroadcastChannel | null = null;\n\n // Bound request functions for method delegation\n private _sync: SyncRequestFn = (buf) => this.syncRequest(buf);\n private _async: AsyncRequestFn = (op, p, flags, data, path2, fdArgs) =>\n this.asyncRequest(op, p, flags, data, path2, fdArgs);\n\n // Promises API namespace\n readonly promises!: VFSPromises;\n\n constructor(config: VFSConfig = {}) {\n const root = config.root ?? '/';\n const ns = `vfs-${root.replace(/[^a-zA-Z0-9]/g, '_')}`;\n\n // Singleton: return existing instance for the same root on this thread\n const existing = instanceRegistry.get(ns);\n if (existing) return existing;\n\n // Resolve mode: explicit mode takes priority, else derive from opfsSync\n const mode: FSMode = config.mode ?? 'hybrid';\n this._mode = mode;\n\n // Derive opfsSync from mode unless explicitly set\n const opfsSync = config.opfsSync ?? (mode === 'hybrid');\n\n this.config = {\n root,\n opfsSync,\n opfsSyncRoot: config.opfsSyncRoot,\n uid: config.uid ?? 0,\n gid: config.gid ?? 0,\n umask: config.umask ?? 0o022,\n strictPermissions: config.strictPermissions ?? false,\n sabSize: config.sabSize ?? DEFAULT_SAB_SIZE,\n debug: config.debug ?? false,\n swUrl: config.swUrl,\n swScope: config.swScope,\n limits: config.limits,\n };\n\n this.tabId = crypto.randomUUID();\n this.ns = ns;\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n this.promises = new VFSPromises(this._async, ns);\n\n instanceRegistry.set(ns, this);\n this.bootstrap();\n }\n\n /** Spawn workers and establish communication */\n private bootstrap(): void {\n const sabSize = this.config.sabSize;\n\n if (this.hasSAB) {\n // Full mode: allocate SABs for sync + async communication\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n // Spawn workers\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle messages from sync-relay\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n // Initialize async-relay AFTER sync-relay is ready to avoid\n // requests arriving before the leader loop is running.\n this.initAsyncRelay();\n this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else if (this.holdingLeaderLock) {\n // We hold the lock but OPFS handle not released yet — retry\n setTimeout(() => this.sendLeaderInit(), 500);\n } else if (!('locks' in navigator)) {\n // No Web Locks fallback — become follower via OPFS handle detection\n this.startAsFollower();\n }\n }\n };\n\n // Handle async responses from async-relay\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n // Async-relay is initialized later in the 'ready' handler to avoid\n // requests arriving before the sync-relay's leader loop is running.\n\n // Leader election via Web Locks\n this.acquireLeaderLock();\n }\n\n /** Use Web Locks API for leader election. The tab that acquires the lock is\n * the leader; all others become followers. When the leader dies, the browser\n * releases the lock and the next waiting tab is promoted. */\n private acquireLeaderLock(): void {\n if (!('locks' in navigator)) {\n this.startAsLeader();\n return;\n }\n\n // Chrome can invoke the ifAvailable callback twice (once with lock, once\n // with null). The `decided` flag ensures only the first invocation acts.\n let decided = false;\n navigator.locks.request(`${this.ns}-leader`, { ifAvailable: true }, async (lock) => {\n if (decided) return;\n decided = true;\n if (lock) {\n this.holdingLeaderLock = true;\n this.startAsLeader();\n await new Promise(() => {}); // Hold lock forever (released when tab closes)\n } else {\n this.startAsFollower();\n this.waitForLeaderLock();\n }\n });\n }\n\n /** Queue for leader takeover when the current leader's lock is released */\n private waitForLeaderLock(): void {\n if (!('locks' in navigator)) return;\n navigator.locks.request(`${this.ns}-leader`, async () => {\n console.log('[VFS] Leader lock acquired — promoting to leader');\n this.holdingLeaderLock = true;\n this.promoteToLeader();\n await new Promise(() => {}); // Hold lock as new leader\n });\n }\n\n /** Send init-leader message to sync-relay worker */\n private sendLeaderInit(): void {\n this.syncWorker.postMessage({\n type: 'init-leader',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n config: {\n root: this.config.root,\n ns: this.ns,\n opfsSync: this.config.opfsSync,\n opfsSyncRoot: this.config.opfsSyncRoot,\n uid: this.config.uid,\n gid: this.config.gid,\n umask: this.config.umask,\n strictPermissions: this.config.strictPermissions,\n debug: this.config.debug,\n limits: this.config.limits,\n },\n });\n }\n\n /** Send init-opfs message to sync-relay for OPFS-direct mode */\n private sendOPFSInit(): void {\n this.syncWorker.postMessage({\n type: 'init-opfs',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n config: {\n root: this.config.root,\n ns: this.ns,\n uid: this.config.uid,\n gid: this.config.gid,\n debug: this.config.debug,\n },\n });\n }\n\n /** Handle VFS corruption: log error, fall back to OPFS-direct mode.\n * The readyPromise will resolve once OPFS mode is ready, but init()\n * will reject with the corruption error to inform the caller. */\n private handleCorruptVFS(errorMessage: string): void {\n const err = new Error(`${errorMessage} — Falling back to OPFS mode`);\n this.corruptionError = err;\n console.error(`[VFS] ${err.message}`);\n\n if (this._mode === 'vfs') {\n // VFS-only mode: no OPFS files to fall back to — reject permanently\n this.initError = err;\n this.rejectReady(err);\n if (this.hasSAB) {\n Atomics.store(this.readySignal, 0, -1);\n Atomics.notify(this.readySignal, 0);\n }\n return;\n }\n\n // Hybrid/default: fall back to OPFS-direct mode\n this._mode = 'opfs';\n this.sendOPFSInit();\n }\n\n /** Initialize the async-relay worker. Called after sync-relay signals ready. */\n private initAsyncRelay(): void {\n if (this.hasSAB) {\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n }\n\n /** Start as leader — tell sync-relay to init VFS engine + OPFS handle */\n private startAsLeader(): void {\n this.isFollower = false;\n if (this._mode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n }\n\n /** Start as follower — connect to leader via service worker port brokering */\n private startAsFollower(): void {\n this.isFollower = true;\n\n // Tell sync-relay to prepare for follower mode (sets SABs, awaits leader-port)\n this.syncWorker.postMessage({\n type: 'init-follower',\n sab: this.hasSAB ? this.sab : null,\n readySab: this.hasSAB ? this.readySab : null,\n asyncSab: this.hasSAB ? this.asyncSab : null,\n tabId: this.tabId,\n });\n\n // Connect to leader via service worker\n this.connectToLeader();\n\n // Listen for leader changes (BroadcastChannel is scope-independent, unlike SW clients API)\n this.leaderChangeBc = new BroadcastChannel(`${this.ns}-leader-change`);\n this.leaderChangeBc.onmessage = () => {\n if (this.isFollower) {\n console.log('[VFS] Leader changed — reconnecting');\n this.connectToLeader();\n }\n };\n }\n\n /** Send a new port to sync-relay for connecting to the current leader */\n private connectToLeader(): void {\n const mc = new MessageChannel();\n\n // Send leader-port to sync-relay immediately so it can signal 'ready'.\n // Messages posted to port1 queue until port2 is connected to the leader.\n this.syncWorker.postMessage(\n { type: 'leader-port', port: mc.port1 },\n [mc.port1],\n );\n\n // Asynchronously connect port2 to the leader via service worker broker\n this.getServiceWorker().then(sw => {\n sw.postMessage({ type: 'transfer-port', tabId: this.tabId }, [mc.port2]);\n }).catch(err => {\n console.error('[VFS] Failed to connect to leader:', (err as Error).message);\n mc.port2.close();\n });\n }\n\n /** Register the VFS service worker and return the active SW */\n private async getServiceWorker(): Promise<ServiceWorker> {\n if (!this.swReg) {\n const swUrl = this.config.swUrl\n ? new URL(this.config.swUrl, location.origin)\n : new URL('./workers/service.worker.js', import.meta.url);\n const scope = this.config.swScope ?? new URL(`./${this.ns}/`, swUrl).href;\n this.swReg = await navigator.serviceWorker.register(swUrl.href, { scope });\n }\n const reg = this.swReg;\n\n if (reg.active) return reg.active;\n const sw = reg.installing || reg.waiting;\n if (!sw) throw new Error('No service worker found');\n\n return new Promise<ServiceWorker>((resolve, reject) => {\n const timer = setTimeout(() => {\n sw.removeEventListener('statechange', onState);\n reject(new Error('Service worker activation timeout'));\n }, 5000);\n const onState = () => {\n if (sw.state === 'activated') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n resolve(sw);\n } else if (sw.state === 'redundant') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n reject(new Error('SW redundant'));\n }\n };\n sw.addEventListener('statechange', onState);\n onState(); // Check immediately — state may have changed before listener was added\n });\n }\n\n /** Register as leader with SW broker (receives follower ports via control channel) */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n this.getServiceWorker().then(sw => {\n const mc = new MessageChannel();\n sw.postMessage({ type: 'register-server' }, [mc.port2]);\n\n mc.port1.onmessage = (event: MessageEvent) => {\n if (event.data.type === 'client-port') {\n const clientPort = event.ports[0];\n if (clientPort) {\n this.syncWorker.postMessage(\n { type: 'client-port', tabId: event.data.tabId, port: clientPort },\n [clientPort],\n );\n }\n }\n };\n mc.port1.start();\n\n // Notify followers that a (new) leader is available — they should reconnect\n const bc = new BroadcastChannel(`${this.ns}-leader-change`);\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n }\n\n /** Promote from follower to leader (after leader tab dies and lock is acquired) */\n private promoteToLeader(): void {\n this.isFollower = false;\n this.isReady = false;\n this.brokerInitialized = false; // Allow re-registration with SW as new leader\n\n // Stop listening for leader changes (we ARE the leader now)\n if (this.leaderChangeBc) {\n this.leaderChangeBc.close();\n this.leaderChangeBc = null;\n }\n\n // Reset readyPromise for async callers during transition\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n\n // Terminate old workers\n this.syncWorker.terminate();\n this.asyncWorker.terminate();\n\n // Allocate fresh SABs (only if available)\n const sabSize = this.config.sabSize;\n if (this.hasSAB) {\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n // Spawn new workers\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle sync-relay messages\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n this.resolveReady();\n this.initLeaderBroker();\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else {\n // OPFS handle not yet released by dead leader — retry\n console.warn('[VFS] Promotion: OPFS handle still busy, retrying...');\n setTimeout(() => this.sendLeaderInit(), 500);\n }\n }\n };\n\n // Handle async responses\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n if (this.hasSAB) {\n // Initialize async-relay with SAB\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n // No SAB: connect async-relay ↔ sync-relay via MessagePort\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n if (this._mode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n }\n\n /** Spawn an inline worker from bundled code */\n private spawnWorker(name: string): Worker {\n // In production, worker code is inlined as blob URLs at build time.\n // For development, we use module workers.\n const workerUrl = new URL(`./workers/${name}.worker.js`, import.meta.url);\n return new Worker(workerUrl, { type: 'module' });\n }\n\n // ========== Sync operation primitives ==========\n\n /** Block until workers are ready */\n private ensureReady(): void {\n if (this.isReady) return;\n if (this.initError) throw this.initError;\n if (!this.hasSAB) {\n throw new Error('Sync API requires crossOriginIsolated (COOP/COEP headers). Use the promises API instead.');\n }\n // Check if ready signal is set\n const signal = Atomics.load(this.readySignal, 0);\n if (signal === 1) {\n this.isReady = true;\n return;\n }\n if (signal === -1) {\n // Permanent failure (e.g. VFS corruption in vfs-only mode)\n throw this.initError ?? new Error('VFS initialization failed');\n }\n // Block until ready\n spinWait(this.readySignal, 0, 0);\n // Check again after wake — could be ready (1) or failed (-1)\n const finalSignal = Atomics.load(this.readySignal, 0);\n if (finalSignal === -1) {\n throw this.initError ?? new Error('VFS initialization failed');\n }\n this.isReady = true;\n }\n\n /** Send a sync request via SAB and wait for response */\n private syncRequest(requestBuf: ArrayBuffer): { status: number; data: Uint8Array | null } {\n this.ensureReady();\n\n const t0 = this.config.debug ? performance.now() : 0;\n const maxChunk = this.sab.byteLength - HEADER_SIZE;\n const requestBytes = new Uint8Array(requestBuf);\n const totalLenView = new BigUint64Array(this.sab, SAB_OFFSETS.TOTAL_LEN, 1);\n\n if (requestBytes.byteLength <= maxChunk) {\n // Fast path: single chunk\n new Uint8Array(this.sab, HEADER_SIZE, requestBytes.byteLength).set(requestBytes);\n Atomics.store(this.ctrl, 3, requestBytes.byteLength); // chunk length\n Atomics.store(totalLenView, 0, BigInt(requestBytes.byteLength));\n Atomics.store(this.ctrl, 0, SIGNAL.REQUEST);\n Atomics.notify(this.ctrl, 0);\n } else {\n // Multi-chunk: send in chunks\n let sent = 0;\n while (sent < requestBytes.byteLength) {\n const chunkSize = Math.min(maxChunk, requestBytes.byteLength - sent);\n new Uint8Array(this.sab, HEADER_SIZE, chunkSize).set(\n requestBytes.subarray(sent, sent + chunkSize)\n );\n Atomics.store(this.ctrl, 3, chunkSize);\n Atomics.store(totalLenView, 0, BigInt(requestBytes.byteLength));\n Atomics.store(this.ctrl, 6, Math.floor(sent / maxChunk)); // chunk index\n\n if (sent === 0) {\n Atomics.store(this.ctrl, 0, SIGNAL.REQUEST);\n } else {\n Atomics.store(this.ctrl, 0, SIGNAL.CHUNK);\n }\n Atomics.notify(this.ctrl, 0);\n\n sent += chunkSize;\n if (sent < requestBytes.byteLength) {\n // Wait for worker to ack\n spinWait(this.ctrl, 0, sent === chunkSize ? SIGNAL.REQUEST : SIGNAL.CHUNK);\n }\n }\n }\n\n // Wait for response\n spinWait(this.ctrl, 0, SIGNAL.REQUEST);\n\n // Read response — may be chunked\n const signal = Atomics.load(this.ctrl, 0);\n const respChunkLen = Atomics.load(this.ctrl, 3);\n const respTotalLen = Number(Atomics.load(totalLenView, 0));\n\n let responseBytes: Uint8Array;\n\n if (signal === SIGNAL.RESPONSE && respTotalLen <= maxChunk) {\n // Single chunk response\n responseBytes = new Uint8Array(this.sab, HEADER_SIZE, respChunkLen).slice();\n } else {\n // Multi-chunk response\n responseBytes = new Uint8Array(respTotalLen);\n let received = 0;\n\n // Read first chunk\n const firstLen = respChunkLen;\n responseBytes.set(new Uint8Array(this.sab, HEADER_SIZE, firstLen), 0);\n received += firstLen;\n\n while (received < respTotalLen) {\n // Ack and wait for next chunk\n Atomics.store(this.ctrl, 0, SIGNAL.CHUNK_ACK);\n Atomics.notify(this.ctrl, 0);\n spinWait(this.ctrl, 0, SIGNAL.CHUNK_ACK);\n\n const nextLen = Atomics.load(this.ctrl, 3);\n responseBytes.set(new Uint8Array(this.sab, HEADER_SIZE, nextLen), received);\n received += nextLen;\n }\n }\n\n // Reset to idle — NO notify: the worker stays asleep until the next request's\n // notify wakes it, giving us ONE cross-thread wake per operation instead of two.\n Atomics.store(this.ctrl, 0, SIGNAL.IDLE);\n\n const result = decodeResponse(responseBytes.buffer as ArrayBuffer);\n if (this.config.debug) {\n const t1 = performance.now();\n console.log(`[syncRequest] size=${requestBuf.byteLength} roundTrip=${(t1 - t0).toFixed(3)}ms`);\n }\n return result;\n }\n\n // ========== Async operation primitive ==========\n\n private asyncRequest(\n op: number,\n filePath: string,\n flags?: number,\n data?: Uint8Array | string | null,\n path2?: string,\n fdArgs?: Record<string, unknown>\n ): Promise<{ status: number; data: Uint8Array | null }> {\n return this.readyPromise.then(() => {\n return new Promise((resolve, reject) => {\n const callId = this.asyncCallId++;\n this.asyncPending.set(callId, { resolve, reject });\n\n this.asyncWorker.postMessage({\n type: 'request',\n callId,\n op,\n path: filePath,\n flags: flags ?? 0,\n data: data instanceof Uint8Array ? data : (typeof data === 'string' ? data : null),\n path2,\n fdArgs,\n });\n });\n });\n }\n\n // ========== Sync API ==========\n\n readFileSync(filePath: PathLike, options?: ReadOptions | Encoding | null): string | Uint8Array {\n return _readFileSync(this._sync, toPathString(filePath), options);\n }\n\n writeFileSync(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _writeFileSync(this._sync, toPathString(filePath), data, options);\n }\n\n appendFileSync(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _appendFileSync(this._sync, toPathString(filePath), data, options);\n }\n\n existsSync(filePath: PathLike): boolean {\n return _existsSync(this._sync, toPathString(filePath));\n }\n\n mkdirSync(filePath: PathLike, options?: MkdirOptions | number): string | undefined {\n return _mkdirSync(this._sync, toPathString(filePath), options);\n }\n\n rmdirSync(filePath: PathLike, options?: RmdirOptions): void {\n _rmdirSync(this._sync, toPathString(filePath), options);\n }\n\n rmSync(filePath: PathLike, options?: RmOptions): void {\n _rmSync(this._sync, toPathString(filePath), options);\n }\n\n unlinkSync(filePath: PathLike): void {\n _unlinkSync(this._sync, toPathString(filePath));\n }\n\n readdirSync(filePath: PathLike, options?: ReaddirOptions | Encoding | null): string[] | Dirent[] {\n return _readdirSync(this._sync, toPathString(filePath), options);\n }\n\n globSync(pattern: string, options?: GlobOptions): string[] {\n return _globSync(this._sync, pattern, options);\n }\n\n statSync(filePath: PathLike, options?: StatOptions): Stats | BigIntStats {\n return _statSync(this._sync, toPathString(filePath), options);\n }\n\n lstatSync(filePath: PathLike, options?: StatOptions): Stats | BigIntStats {\n return _lstatSync(this._sync, toPathString(filePath), options);\n }\n\n renameSync(oldPath: PathLike, newPath: PathLike): void {\n _renameSync(this._sync, toPathString(oldPath), toPathString(newPath));\n }\n\n copyFileSync(src: PathLike, dest: PathLike, mode?: number): void {\n _copyFileSync(this._sync, toPathString(src), toPathString(dest), mode);\n }\n\n cpSync(src: PathLike, dest: PathLike, options?: CpOptions): void {\n const srcPath = toPathString(src);\n const destPath = toPathString(dest);\n const force = options?.force !== false; // default true\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference ? this.statSync(srcPath) : this.lstatSync(srcPath);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', srcPath);\n }\n try {\n this.mkdirSync(destPath, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = this.readdirSync(srcPath, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(srcPath, entry.name);\n const destChild = pathJoin(destPath, entry.name);\n this.cpSync(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = this.readlinkSync(srcPath) as string;\n let destExists = false;\n try { this.lstatSync(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n this.unlinkSync(destPath);\n }\n this.symlinkSync(target, destPath);\n } else {\n let destExists = false;\n try { this.lstatSync(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n }\n this.copyFileSync(srcPath, destPath, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = this.statSync(srcPath);\n this.utimesSync(destPath, st.atime, st.mtime);\n }\n }\n\n private async _cpAsync(src: string, dest: string, options?: CpOptions): Promise<void> {\n const force = options?.force !== false;\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference\n ? await this.promises.stat(src)\n : await this.promises.lstat(src);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', src);\n }\n try {\n await this.promises.mkdir(dest, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = await this.promises.readdir(src, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(src, entry.name);\n const destChild = pathJoin(dest, entry.name);\n await this._cpAsync(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = await this.promises.readlink(src) as string;\n let destExists = false;\n try { await this.promises.lstat(dest); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', dest);\n if (!force) return;\n await this.promises.unlink(dest);\n }\n await this.promises.symlink(target, dest);\n } else {\n let destExists = false;\n try { await this.promises.lstat(dest); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', dest);\n if (!force) return;\n }\n await this.promises.copyFile(src, dest, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = await this.promises.stat(src);\n await this.promises.utimes(dest, st.atime, st.mtime);\n }\n }\n\n truncateSync(filePath: PathLike, len?: number): void {\n _truncateSync(this._sync, toPathString(filePath), len);\n }\n\n accessSync(filePath: PathLike, mode?: number): void {\n _accessSync(this._sync, toPathString(filePath), mode);\n }\n\n realpathSync(filePath: PathLike): string {\n return _realpathSync(this._sync, toPathString(filePath));\n }\n\n chmodSync(filePath: PathLike, mode: number): void {\n _chmodSync(this._sync, toPathString(filePath), mode);\n }\n\n /** Like chmodSync but operates on the symlink itself. In this VFS, delegates to chmodSync. */\n lchmodSync(filePath: string, mode: number): void {\n _chmodSync(this._sync, filePath, mode);\n }\n\n /** chmod on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n fchmodSync(_fd: number, _mode: number): void {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n chownSync(filePath: PathLike, uid: number, gid: number): void {\n _chownSync(this._sync, toPathString(filePath), uid, gid);\n }\n\n /** Like chownSync but operates on the symlink itself. In this VFS, delegates to chownSync. */\n lchownSync(filePath: string, uid: number, gid: number): void {\n _chownSync(this._sync, filePath, uid, gid);\n }\n\n /** chown on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n fchownSync(_fd: number, _uid: number, _gid: number): void {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n utimesSync(filePath: PathLike, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, toPathString(filePath), atime, mtime);\n }\n\n /** Like utimesSync but operates on the symlink itself. In this VFS, delegates to utimesSync. */\n lutimesSync(filePath: string, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, filePath, atime, mtime);\n }\n\n symlinkSync(target: PathLike, linkPath: PathLike, type?: string | null): void {\n _symlinkSync(this._sync, toPathString(target), toPathString(linkPath), type);\n }\n\n readlinkSync(filePath: PathLike, options?: { encoding?: string | null } | string | null): string | Uint8Array {\n return _readlinkSync(this._sync, toPathString(filePath), options);\n }\n\n linkSync(existingPath: PathLike, newPath: PathLike): void {\n _linkSync(this._sync, toPathString(existingPath), toPathString(newPath));\n }\n\n mkdtempSync(prefix: string): string {\n return _mkdtempSync(this._sync, prefix);\n }\n\n // ---- File descriptor sync methods ----\n\n openSync(filePath: PathLike, flags: string | number = 'r', mode?: number): number {\n return _openSync(this._sync, toPathString(filePath), flags, mode);\n }\n\n closeSync(fd: number): void {\n _closeSync(this._sync, fd);\n }\n\n readSync(\n fd: number,\n bufferOrOptions: Uint8Array | { buffer: Uint8Array; offset?: number; length?: number; position?: number | null },\n offsetOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n length?: number,\n position?: number | null\n ): number {\n return _readSync(this._sync, fd, bufferOrOptions, offsetOrOptions, length, position);\n }\n\n writeSync(\n fd: number,\n bufferOrString: Uint8Array | string,\n offsetOrPositionOrOptions?: number | { offset?: number; length?: number; position?: number | null },\n lengthOrEncoding?: number | string,\n position?: number | null\n ): number {\n return _writeSyncFd(this._sync, fd, bufferOrString, offsetOrPositionOrOptions, lengthOrEncoding, position);\n }\n\n fstatSync(fd: number): Stats {\n return _fstatSync(this._sync, fd);\n }\n\n ftruncateSync(fd: number, len?: number): void {\n _ftruncateSync(this._sync, fd, len);\n }\n\n fdatasyncSync(fd: number): void {\n _fdatasyncSync(this._sync, fd);\n }\n\n fsyncSync(fd: number): void {\n _fdatasyncSync(this._sync, fd);\n }\n\n // ---- Vector I/O methods ----\n\n readvSync(fd: number, buffers: Uint8Array[], position?: number | null): number {\n let totalRead = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const bytesRead = this.readSync(fd, buf, 0, buf.byteLength, pos);\n totalRead += bytesRead;\n if (pos !== null) pos += bytesRead;\n if (bytesRead < buf.byteLength) break; // short read = EOF\n }\n return totalRead;\n }\n\n writevSync(fd: number, buffers: Uint8Array[], position?: number | null): number {\n let totalWritten = 0;\n let pos = position ?? null;\n for (const buf of buffers) {\n const bytesWritten = this.writeSync(fd, buf, 0, buf.byteLength, pos);\n totalWritten += bytesWritten;\n if (pos !== null) pos += bytesWritten;\n }\n return totalWritten;\n }\n\n readv(fd: number, buffers: Uint8Array[], position: number | null | undefined, callback: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void;\n readv(fd: number, buffers: Uint8Array[], callback: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void;\n readv(fd: number, buffers: Uint8Array[], positionOrCallback: number | null | undefined | ((err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void), callback?: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void): void {\n let pos: number | null | undefined;\n let cb: (err: Error | null, bytesRead?: number, buffers?: Uint8Array[]) => void;\n if (typeof positionOrCallback === 'function') {\n pos = undefined;\n cb = positionOrCallback;\n } else {\n pos = positionOrCallback;\n cb = callback!;\n }\n try {\n const bytesRead = this.readvSync(fd, buffers, pos);\n cb(null, bytesRead, buffers);\n } catch (err: any) {\n cb(err);\n }\n }\n\n writev(fd: number, buffers: Uint8Array[], position: number | null | undefined, callback: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void;\n writev(fd: number, buffers: Uint8Array[], callback: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void;\n writev(fd: number, buffers: Uint8Array[], positionOrCallback: number | null | undefined | ((err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void), callback?: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void): void {\n let pos: number | null | undefined;\n let cb: (err: Error | null, bytesWritten?: number, buffers?: Uint8Array[]) => void;\n if (typeof positionOrCallback === 'function') {\n pos = undefined;\n cb = positionOrCallback;\n } else {\n pos = positionOrCallback;\n cb = callback!;\n }\n try {\n const bytesWritten = this.writevSync(fd, buffers, pos);\n cb(null, bytesWritten, buffers);\n } catch (err: any) {\n cb(err);\n }\n }\n\n // ---- statfs methods ----\n\n statfsSync(_path?: string): StatFs {\n return {\n type: 0x56465321, // \"VFS!\"\n bsize: 4096,\n blocks: 1024 * 1024, // ~4GB virtual capacity\n bfree: 512 * 1024, // ~2GB free (estimate)\n bavail: 512 * 1024,\n files: 10000, // default max inodes\n ffree: 5000, // estimate half free\n };\n }\n\n statfs(path: string, callback: (err: Error | null, stats?: StatFs) => void): void;\n statfs(path: string): Promise<StatFs>;\n statfs(path: string, callback?: (err: Error | null, stats?: StatFs) => void): Promise<StatFs> | void {\n const result = this.statfsSync(path);\n if (callback) {\n callback(null, result);\n return;\n }\n return Promise.resolve(result);\n }\n\n // ---- Watch methods ----\n\n watch(filePath: PathLike, options?: WatchOptions | Encoding, listener?: WatchListener): FSWatcher {\n return _watch(this.ns, toPathString(filePath), options, listener);\n }\n\n watchFile(filePath: PathLike, optionsOrListener?: WatchFileOptions | WatchFileListener, listener?: WatchFileListener): void {\n _watchFile(this.ns, this._sync, toPathString(filePath), optionsOrListener, listener);\n }\n\n unwatchFile(filePath: PathLike, listener?: WatchFileListener): void {\n _unwatchFile(this.ns, toPathString(filePath), listener);\n }\n\n // ---- openAsBlob (Node.js 19+) ----\n\n async openAsBlob(filePath: string, options?: OpenAsBlobOptions): Promise<Blob> {\n const data = await this.promises.readFile(filePath);\n const bytes = data instanceof Uint8Array ? data : new TextEncoder().encode(data as string);\n return new Blob([bytes as BlobPart], { type: options?.type ?? '' });\n }\n\n // ---- Stream methods ----\n\n createReadStream(filePath: PathLike, options?: ReadStreamOptions | string): FSReadStream {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n const start = opts?.start ?? 0;\n const end = opts?.end;\n const highWaterMark = opts?.highWaterMark ?? 64 * 1024;\n\n let position = start;\n let handle: import('./types.js').FileHandle | null = null;\n let finished = false;\n\n const cleanup = async () => {\n if (handle) {\n try { await handle.close(); } catch { /* ignore close errors */ }\n handle = null;\n }\n };\n\n const readFn = async (): Promise<{ done: boolean; value?: Uint8Array }> => {\n if (finished) return { done: true };\n\n // Lazily open the file on first read\n if (!handle) {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'r');\n }\n\n const readLen = end !== undefined\n ? Math.min(highWaterMark, end - position + 1)\n : highWaterMark;\n\n if (readLen <= 0) {\n finished = true;\n await cleanup();\n return { done: true };\n }\n\n const buffer = new Uint8Array(readLen);\n const { bytesRead } = await handle.read(buffer, 0, readLen, position);\n\n if (bytesRead === 0) {\n finished = true;\n await cleanup();\n return { done: true };\n }\n\n position += bytesRead;\n\n if (end !== undefined && position > end) {\n finished = true;\n await cleanup();\n return { done: false, value: buffer.subarray(0, bytesRead) };\n }\n\n return { done: false, value: buffer.subarray(0, bytesRead) };\n };\n\n const stream = new NodeReadable(readFn, cleanup) as unknown as FSReadStream;\n (stream as unknown as NodeReadable).path = toPathString(filePath);\n\n return stream;\n }\n\n createWriteStream(filePath: PathLike, options?: WriteStreamOptions | string): FSWriteStream {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n let position = opts?.start ?? 0;\n let handle: FileHandle | null = null;\n\n const writeFn = async (chunk: Uint8Array): Promise<void> => {\n if (!handle) {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'w');\n }\n const { bytesWritten } = await handle.write(chunk, 0, chunk.byteLength, position);\n position += bytesWritten;\n };\n\n const closeFn = async (): Promise<void> => {\n if (handle) {\n if (opts?.flush) {\n await handle.sync();\n }\n await handle.close();\n handle = null;\n }\n };\n\n return new NodeWritable(toPathString(filePath), writeFn, closeFn) as unknown as FSWriteStream;\n }\n\n // ---- Utility methods ----\n\n flushSync(): void {\n const buf = encodeRequest(OP.FSYNC, '');\n this.syncRequest(buf);\n }\n\n purgeSync(): void {\n // No-op — VFS doesn't have external caches to purge\n }\n\n /** The current filesystem mode. Changes to 'opfs' on corruption fallback. */\n get mode(): FSMode {\n return this._mode;\n }\n\n /** Async init helper — avoid blocking main thread.\n * Rejects with corruption error if VFS was corrupt (but system falls back to OPFS mode).\n * Callers can catch and continue — the fs API works in OPFS mode after rejection. */\n init(): Promise<void> {\n return this.readyPromise.then(() => {\n if (this.corruptionError) {\n throw this.corruptionError;\n }\n });\n }\n\n /** Switch the filesystem mode at runtime.\n *\n * Typical flow for IDE corruption recovery:\n * 1. `await fs.init()` throws with corruption error (auto-falls back to opfs)\n * 2. IDE shows warning, user clicks \"Repair\" → call `repairVFS(root, fs)`\n * 3. After repair: `await fs.setMode('hybrid')` to resume normal VFS+OPFS mode\n *\n * Returns a Promise that resolves when the new mode is ready. */\n async setMode(newMode: FSMode): Promise<void> {\n if (newMode === this._mode && this.isReady && !this.corruptionError) {\n return; // Already in this mode and healthy\n }\n\n this._mode = newMode;\n this.corruptionError = null;\n this.initError = null;\n this.isReady = false;\n this.config.opfsSync = newMode === 'hybrid';\n\n // Reset readyPromise\n this.readyPromise = new Promise<void>((resolve, reject) => {\n this.resolveReady = resolve;\n this.rejectReady = reject;\n });\n\n // Terminate old workers and spawn fresh ones\n this.syncWorker.terminate();\n this.asyncWorker.terminate();\n\n const sabSize = this.config.sabSize;\n if (this.hasSAB) {\n this.sab = new SharedArrayBuffer(sabSize);\n this.readySab = new SharedArrayBuffer(4);\n this.asyncSab = new SharedArrayBuffer(sabSize);\n this.ctrl = new Int32Array(this.sab, 0, 8);\n this.readySignal = new Int32Array(this.readySab, 0, 1);\n }\n\n this.syncWorker = this.spawnWorker('sync-relay');\n this.asyncWorker = this.spawnWorker('async-relay');\n\n // Handle sync-relay messages\n this.syncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'ready') {\n this.isReady = true;\n this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n if (msg.error?.startsWith('Corrupt VFS:')) {\n this.handleCorruptVFS(msg.error);\n } else if (this.holdingLeaderLock) {\n setTimeout(() => this.sendLeaderInit(), 500);\n }\n }\n };\n\n this.asyncWorker.onmessage = (e: MessageEvent) => {\n const msg = e.data;\n if (msg.type === 'response') {\n const pending = this.asyncPending.get(msg.callId);\n if (pending) {\n this.asyncPending.delete(msg.callId);\n pending.resolve({ status: msg.status, data: msg.data });\n }\n }\n };\n\n if (this.hasSAB) {\n this.asyncWorker.postMessage({\n type: 'init-leader',\n asyncSab: this.asyncSab,\n wakeSab: this.sab,\n });\n } else {\n const mc = new MessageChannel();\n this.asyncWorker.postMessage(\n { type: 'init-port', port: mc.port1 },\n [mc.port1],\n );\n this.syncWorker.postMessage(\n { type: 'async-port', port: mc.port2 },\n [mc.port2],\n );\n }\n\n if (newMode === 'opfs') {\n this.sendOPFSInit();\n } else {\n this.sendLeaderInit();\n }\n\n return this.readyPromise;\n }\n\n // ========== Callback API ==========\n // Node.js-style callback overloads for all async operations.\n // These delegate to this.promises.* and adapt the result to (err, result) callbacks.\n\n readFile(filePath: string, callback: (err: Error | null, data?: Uint8Array | string) => void): void;\n readFile(filePath: string, options: ReadOptions | Encoding | null, callback: (err: Error | null, data?: Uint8Array | string) => void): void;\n readFile(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readFile(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n writeFile(filePath: string, data: string | Uint8Array, callback: (err: Error | null) => void): void;\n writeFile(filePath: string, data: string | Uint8Array, options: WriteOptions | Encoding, callback: (err: Error | null) => void): void;\n writeFile(filePath: string, data: string | Uint8Array, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.writeFile(filePath, data, opts).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n appendFile(filePath: string, data: string | Uint8Array, callback: (err: Error | null) => void): void;\n appendFile(filePath: string, data: string | Uint8Array, options: WriteOptions | Encoding, callback: (err: Error | null) => void): void;\n appendFile(filePath: string, data: string | Uint8Array, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.appendFile(filePath, data, opts).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n mkdir(filePath: string, callback: (err: Error | null, path?: string) => void): void;\n mkdir(filePath: string, options: MkdirOptions | number, callback: (err: Error | null, path?: string) => void): void;\n mkdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.mkdir(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n rmdir(filePath: string, callback: (err: Error | null) => void): void;\n rmdir(filePath: string, options: RmdirOptions, callback: (err: Error | null) => void): void;\n rmdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.rmdir(filePath, opts).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n rm(filePath: string, callback: (err: Error | null) => void): void;\n rm(filePath: string, options: RmOptions, callback: (err: Error | null) => void): void;\n rm(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.rm(filePath, opts).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n unlink(filePath: string, callback: (err: Error | null) => void): void {\n this.promises.unlink(filePath).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n readdir(filePath: string, callback: (err: Error | null, files?: string[] | Dirent[]) => void): void;\n readdir(filePath: string, options: ReaddirOptions | Encoding | null, callback: (err: Error | null, files?: string[] | Dirent[]) => void): void;\n readdir(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readdir(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n stat(filePath: string, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n stat(filePath: string, options: StatOptions, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n stat(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.stat(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n lstat(filePath: string, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n lstat(filePath: string, options: StatOptions, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n lstat(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.lstat(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n access(filePath: string, callback: (err: Error | null) => void): void;\n access(filePath: string, mode: number, callback: (err: Error | null) => void): void;\n access(filePath: string, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.access(filePath, mode).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n rename(oldPath: string, newPath: string, callback: (err: Error | null) => void): void {\n this.promises.rename(oldPath, newPath).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n copyFile(src: string, dest: string, callback: (err: Error | null) => void): void;\n copyFile(src: string, dest: string, mode: number, callback: (err: Error | null) => void): void;\n copyFile(src: string, dest: string, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.copyFile(src, dest, mode).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n truncate(filePath: string, callback: (err: Error | null) => void): void;\n truncate(filePath: string, len: number, callback: (err: Error | null) => void): void;\n truncate(filePath: string, lenOrCallback?: any, callback?: any): void {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n const len = typeof lenOrCallback === 'function' ? undefined : lenOrCallback;\n this.promises.truncate(filePath, len).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n realpath(filePath: string, callback: (err: Error | null, resolvedPath?: string) => void): void {\n this.promises.realpath(filePath).then(\n (result) => setTimeout(() => callback(null, result), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n chmod(filePath: string, mode: number, callback: (err: Error | null) => void): void {\n this.promises.chmod(filePath, mode).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n chown(filePath: string, uid: number, gid: number, callback: (err: Error | null) => void): void {\n this.promises.chown(filePath, uid, gid).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number, callback: (err: Error | null) => void): void {\n this.promises.utimes(filePath, atime, mtime).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n symlink(target: string, linkPath: string, callback: (err: Error | null) => void): void;\n symlink(target: string, linkPath: string, type: string | null, callback: (err: Error | null) => void): void;\n symlink(target: string, linkPath: string, typeOrCallback?: any, callback?: any): void {\n const cb = typeof typeOrCallback === 'function' ? typeOrCallback : callback;\n const type = typeof typeOrCallback === 'function' ? undefined : typeOrCallback;\n this.promises.symlink(target, linkPath, type).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n readlink(filePath: string, callback: (err: Error | null, linkString?: string | Uint8Array) => void): void;\n readlink(filePath: string, options: { encoding?: string | null } | string | null, callback: (err: Error | null, linkString?: string | Uint8Array) => void): void;\n readlink(filePath: string, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n this.promises.readlink(filePath, opts).then(\n (result) => setTimeout(() => cb(null, result), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n link(existingPath: string, newPath: string, callback: (err: Error | null) => void): void {\n this.promises.link(existingPath, newPath).then(\n () => setTimeout(() => callback(null), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n open(filePath: string, flags: string | number, callback: (err: Error | null, fd?: number) => void): void;\n open(filePath: string, flags: string | number, mode: number, callback: (err: Error | null, fd?: number) => void): void;\n open(filePath: string, flags: string | number, modeOrCallback?: any, callback?: any): void {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n this.promises.open(filePath, flags, mode).then(\n (handle) => setTimeout(() => cb(null, handle.fd), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n }\n\n mkdtemp(prefix: string, callback: (err: Error | null, folder?: string) => void): void {\n this.promises.mkdtemp(prefix).then(\n (result) => setTimeout(() => callback(null, result), 0),\n (err) => setTimeout(() => callback(err), 0),\n );\n }\n\n cp(src: string, dest: string, callback: (err: Error | null) => void): void;\n cp(src: string, dest: string, options: CpOptions, callback: (err: Error | null) => void): void;\n cp(src: string, dest: string, optionsOrCallback?: any, callback?: any): void | Promise<void> {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n if (cb) {\n this._cpAsync(src, dest, opts).then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n return;\n }\n // No callback — return promise for backward compat\n return this._cpAsync(src, dest, opts);\n }\n\n fdatasync(fd: number, callback: (err: Error | null) => void): void {\n try {\n this.fdatasyncSync(fd);\n callback(null);\n } catch (err: any) {\n callback(err);\n }\n }\n\n fsync(fd: number, callback: (err: Error | null) => void): void {\n try {\n this.fsyncSync(fd);\n callback(null);\n } catch (err: any) {\n callback(err);\n }\n }\n\n exists(filePath: string, callback: (exists: boolean) => void): void {\n this.promises.exists(filePath).then(\n (result) => setTimeout(() => callback(result), 0),\n () => setTimeout(() => callback(false), 0),\n );\n }\n}\n\n// ========== Promises API ==========\n\nclass VFSPromises {\n private _async: AsyncRequestFn;\n private _ns: string;\n\n constructor(asyncRequest: AsyncRequestFn, ns: string) {\n this._async = asyncRequest;\n this._ns = ns;\n }\n\n readFile(filePath: PathLike, options?: ReadOptions | Encoding | null) {\n return _readFile(this._async, toPathString(filePath), options);\n }\n\n writeFile(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _writeFile(this._async, toPathString(filePath), data, options);\n }\n\n appendFile(filePath: PathLike, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _appendFile(this._async, toPathString(filePath), data, options);\n }\n\n mkdir(filePath: PathLike, options?: MkdirOptions | number) {\n return _mkdir(this._async, toPathString(filePath), options);\n }\n\n rmdir(filePath: PathLike, options?: RmdirOptions) {\n return _rmdir(this._async, toPathString(filePath), options);\n }\n\n rm(filePath: PathLike, options?: RmOptions) {\n return _rm(this._async, toPathString(filePath), options);\n }\n\n unlink(filePath: PathLike) {\n return _unlink(this._async, toPathString(filePath));\n }\n\n readdir(filePath: PathLike, options?: ReaddirOptions | Encoding | null) {\n return _readdir(this._async, toPathString(filePath), options);\n }\n\n glob(pattern: string, options?: GlobOptions): Promise<string[]> {\n return _glob(this._async, pattern, options);\n }\n\n stat(filePath: PathLike, options?: StatOptions) {\n return _stat(this._async, toPathString(filePath), options);\n }\n\n lstat(filePath: PathLike, options?: StatOptions) {\n return _lstat(this._async, toPathString(filePath), options);\n }\n\n access(filePath: PathLike, mode?: number) {\n return _access(this._async, toPathString(filePath), mode);\n }\n\n rename(oldPath: PathLike, newPath: PathLike) {\n return _rename(this._async, toPathString(oldPath), toPathString(newPath));\n }\n\n copyFile(src: PathLike, dest: PathLike, mode?: number) {\n return _copyFile(this._async, toPathString(src), toPathString(dest), mode);\n }\n\n async cp(src: PathLike, dest: PathLike, options?: CpOptions): Promise<void> {\n const srcPath = toPathString(src);\n const destPath = toPathString(dest);\n const force = options?.force !== false;\n const errorOnExist = options?.errorOnExist ?? false;\n const dereference = options?.dereference ?? false;\n const preserveTimestamps = options?.preserveTimestamps ?? false;\n\n const srcStat = dereference\n ? await this.stat(srcPath)\n : await this.lstat(srcPath);\n\n if (srcStat.isDirectory()) {\n if (!options?.recursive) {\n throw createError('EISDIR', 'cp', srcPath);\n }\n try {\n await this.mkdir(destPath, { recursive: true });\n } catch (e: any) {\n if (e.code !== 'EEXIST') throw e;\n }\n const entries = await this.readdir(srcPath, { withFileTypes: true }) as Dirent[];\n for (const entry of entries) {\n const srcChild = pathJoin(srcPath, entry.name);\n const destChild = pathJoin(destPath, entry.name);\n await this.cp(srcChild, destChild, options);\n }\n } else if (srcStat.isSymbolicLink() && !dereference) {\n const target = await this.readlink(srcPath) as string;\n let destExists = false;\n try { await this.lstat(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n await this.unlink(destPath);\n }\n await this.symlink(target, destPath);\n } else {\n let destExists = false;\n try { await this.lstat(destPath); destExists = true; } catch {}\n if (destExists) {\n if (errorOnExist) throw createError('EEXIST', 'cp', destPath);\n if (!force) return;\n }\n await this.copyFile(srcPath, destPath, errorOnExist ? constants.COPYFILE_EXCL : 0);\n }\n\n if (preserveTimestamps) {\n const st = await this.stat(srcPath);\n await this.utimes(destPath, st.atime, st.mtime);\n }\n }\n\n truncate(filePath: PathLike, len?: number) {\n return _truncate(this._async, toPathString(filePath), len);\n }\n\n realpath(filePath: PathLike) {\n return _realpath(this._async, toPathString(filePath));\n }\n\n exists(filePath: PathLike) {\n return _exists(this._async, toPathString(filePath));\n }\n\n chmod(filePath: PathLike, mode: number) {\n return _chmod(this._async, toPathString(filePath), mode);\n }\n\n /** Like chmod but operates on the symlink itself. In this VFS, delegates to chmod. */\n lchmod(filePath: string, mode: number) {\n return _chmod(this._async, filePath, mode);\n }\n\n /** chmod on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n async fchmod(_fd: number, _mode: number): Promise<void> {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n chown(filePath: PathLike, uid: number, gid: number) {\n return _chown(this._async, toPathString(filePath), uid, gid);\n }\n\n /** Like chown but operates on the symlink itself. In this VFS, delegates to chown. */\n lchown(filePath: string, uid: number, gid: number) {\n return _chown(this._async, filePath, uid, gid);\n }\n\n /** chown on an open file descriptor. No-op in this VFS (permissions are cosmetic). */\n async fchown(_fd: number, _uid: number, _gid: number): Promise<void> {\n // No-op: fd-based permission changes are not supported in this OPFS VFS.\n }\n\n utimes(filePath: PathLike, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, toPathString(filePath), atime, mtime);\n }\n\n /** Like utimes but operates on the symlink itself. In this VFS, delegates to utimes. */\n lutimes(filePath: string, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, filePath, atime, mtime);\n }\n\n symlink(target: PathLike, linkPath: PathLike, type?: string | null) {\n return _symlink(this._async, toPathString(target), toPathString(linkPath), type);\n }\n\n readlink(filePath: PathLike, options?: { encoding?: string | null } | string | null) {\n return _readlink(this._async, toPathString(filePath), options);\n }\n\n link(existingPath: PathLike, newPath: PathLike) {\n return _link(this._async, toPathString(existingPath), toPathString(newPath));\n }\n\n open(filePath: PathLike, flags?: string | number, mode?: number) {\n return _open(this._async, toPathString(filePath), flags, mode);\n }\n\n opendir(filePath: PathLike) {\n return _opendir(this._async, toPathString(filePath));\n }\n\n mkdtemp(prefix: string) {\n return _mkdtemp(this._async, prefix);\n }\n\n async openAsBlob(filePath: string, options?: OpenAsBlobOptions): Promise<Blob> {\n const data = await this.readFile(filePath);\n const bytes = data instanceof Uint8Array ? data : new TextEncoder().encode(data as string);\n return new Blob([bytes as BlobPart], { type: options?.type ?? '' });\n }\n\n async statfs(path: string): Promise<StatFs> {\n return {\n type: 0x56465321, // \"VFS!\"\n bsize: 4096,\n blocks: 1024 * 1024, // ~4GB virtual capacity\n bfree: 512 * 1024, // ~2GB free (estimate)\n bavail: 512 * 1024,\n files: 10000, // default max inodes\n ffree: 5000, // estimate half free\n };\n }\n\n async *watch(filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n yield* _watchAsync(this._ns, this._async, filePath, options);\n }\n\n async fsync(_fd: number): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async fdatasync(_fd: number): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async flush(): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async purge(): Promise<void> {\n // No-op\n }\n}\n","/**\n * VFS Engine — operates on a FileSystemSyncAccessHandle\n *\n * Manages the binary VFS layout: superblock, inode table, path table,\n * free block bitmap, and data region. All operations are synchronous\n * and run inside the server worker.\n */\n\nimport {\n VFS_MAGIC, VFS_VERSION, SUPERBLOCK, INODE, INODE_SIZE, INODE_TYPE,\n DEFAULT_BLOCK_SIZE, DEFAULT_INODE_COUNT, DEFAULT_FILE_MODE, DEFAULT_DIR_MODE,\n DEFAULT_SYMLINK_MODE, DEFAULT_UMASK, S_IFMT, S_IFREG, S_IFDIR, S_IFLNK,\n MAX_SYMLINK_DEPTH, INITIAL_DATA_BLOCKS, INITIAL_PATH_TABLE_SIZE,\n calculateLayout,\n} from './layout.js';\nimport { CODE_TO_STATUS } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\ninterface Inode {\n type: number;\n pathOffset: number;\n pathLength: number;\n mode: number;\n size: number;\n firstBlock: number;\n blockCount: number;\n mtime: number;\n ctime: number;\n atime: number;\n uid: number;\n gid: number;\n nlink: number;\n}\n\ninterface FdEntry {\n tabId: string;\n inodeIdx: number;\n position: number;\n flags: number;\n}\n\nexport class VFSEngine {\n private handle!: FileSystemSyncAccessHandle;\n private pathIndex = new Map<string, number>(); // path → inode index\n private inodeCount = 0;\n private blockSize = DEFAULT_BLOCK_SIZE;\n private totalBlocks = 0;\n private freeBlocks = 0;\n private inodeTableOffset = 0;\n private pathTableOffset = 0;\n private pathTableUsed = 0;\n private pathTableSize = 0;\n private bitmapOffset = 0;\n private dataOffset = 0;\n private umask = DEFAULT_UMASK;\n private processUid = 0;\n private processGid = 0;\n private strictPermissions = false;\n private debug = false;\n\n // File descriptor table\n private fdTable = new Map<number, FdEntry>();\n private nextFd = 3; // 0=stdin, 1=stdout, 2=stderr reserved\n\n // Reusable buffers to avoid allocations\n private inodeBuf = new Uint8Array(INODE_SIZE);\n private inodeView = new DataView(this.inodeBuf.buffer);\n\n // In-memory inode cache — eliminates disk reads for hot inodes\n private inodeCache = new Map<number, Inode>();\n private superblockBuf = new Uint8Array(SUPERBLOCK.SIZE);\n private superblockView = new DataView(this.superblockBuf.buffer);\n\n // In-memory bitmap cache — eliminates bitmap reads from OPFS\n private bitmap: Uint8Array | null = null;\n private bitmapDirtyLo = Infinity; // lowest dirty byte index\n private bitmapDirtyHi = -1; // highest dirty byte index (inclusive)\n private superblockDirty = false;\n\n // Free inode hint — skip O(n) scan\n private freeInodeHint = 0;\n\n // Configurable upper bounds\n private maxInodes = 4_000_000;\n private maxBlocks = 4_000_000;\n private maxPathTable = 256 * 1024 * 1024; // 256MB\n private maxVFSSize = 100 * 1024 * 1024 * 1024; // 100GB\n\n init(\n handle: FileSystemSyncAccessHandle,\n opts?: {\n uid?: number; gid?: number; umask?: number; strictPermissions?: boolean; debug?: boolean;\n limits?: { maxInodes?: number; maxBlocks?: number; maxPathTable?: number; maxVFSSize?: number };\n }\n ): void {\n this.handle = handle;\n this.processUid = opts?.uid ?? 0;\n this.processGid = opts?.gid ?? 0;\n this.umask = opts?.umask ?? DEFAULT_UMASK;\n this.strictPermissions = opts?.strictPermissions ?? false;\n this.debug = opts?.debug ?? false;\n if (opts?.limits) {\n if (opts.limits.maxInodes != null) this.maxInodes = opts.limits.maxInodes;\n if (opts.limits.maxBlocks != null) this.maxBlocks = opts.limits.maxBlocks;\n if (opts.limits.maxPathTable != null) this.maxPathTable = opts.limits.maxPathTable;\n if (opts.limits.maxVFSSize != null) this.maxVFSSize = opts.limits.maxVFSSize;\n }\n\n const size = handle.getSize();\n\n if (size === 0) {\n this.format();\n } else {\n try {\n this.mount();\n } catch (err) {\n // Ensure all mount errors are prefixed with \"Corrupt VFS:\" so the\n // sync-relay handler recognizes them as corruption (not OPFS contention)\n // and triggers fallback instead of infinite retry.\n const msg = (err as Error).message ?? String(err);\n if (msg.startsWith('Corrupt VFS:')) throw err;\n throw new Error(`Corrupt VFS: ${msg}`);\n }\n }\n }\n\n /** Release the sync access handle (call on fatal error or shutdown) */\n closeHandle(): void {\n try {\n this.handle?.close();\n } catch (_) {\n // Ignore — handle may already be closed\n }\n }\n\n /** Format a fresh VFS */\n private format(): void {\n const layout = calculateLayout(DEFAULT_INODE_COUNT, DEFAULT_BLOCK_SIZE, INITIAL_DATA_BLOCKS);\n\n this.inodeCount = DEFAULT_INODE_COUNT;\n this.blockSize = DEFAULT_BLOCK_SIZE;\n this.totalBlocks = layout.totalBlocks;\n this.freeBlocks = layout.totalBlocks;\n this.inodeTableOffset = layout.inodeTableOffset;\n this.pathTableOffset = layout.pathTableOffset;\n this.pathTableSize = layout.pathTableSize;\n this.pathTableUsed = 0;\n this.bitmapOffset = layout.bitmapOffset;\n this.dataOffset = layout.dataOffset;\n\n // Grow file to total size\n this.handle.truncate(layout.totalSize);\n\n // Write superblock\n this.writeSuperblock();\n\n // Zero out inode table (type=0 means free)\n const zeroBuf = new Uint8Array(layout.inodeTableSize);\n this.handle.write(zeroBuf, { at: this.inodeTableOffset });\n\n // Zero out bitmap and cache in memory\n this.bitmap = new Uint8Array(layout.bitmapSize);\n this.handle.write(this.bitmap, { at: this.bitmapOffset });\n\n // Create root directory inode\n this.createInode('/', INODE_TYPE.DIRECTORY, DEFAULT_DIR_MODE, 0);\n\n // Re-write superblock with updated pathTableUsed (createInode appended \"/\" to path table)\n this.writeSuperblock();\n this.handle.flush();\n }\n\n /** Mount an existing VFS from disk — validates superblock integrity */\n private mount(): void {\n const fileSize = this.handle.getSize();\n if (fileSize < SUPERBLOCK.SIZE) {\n throw new Error(`Corrupt VFS: file too small (${fileSize} bytes, need at least ${SUPERBLOCK.SIZE})`);\n }\n\n this.handle.read(this.superblockBuf, { at: 0 });\n const v = this.superblockView;\n\n // Validate magic\n const magic = v.getUint32(SUPERBLOCK.MAGIC, true);\n if (magic !== VFS_MAGIC) {\n throw new Error(`Corrupt VFS: bad magic 0x${magic.toString(16)} (expected 0x${VFS_MAGIC.toString(16)})`);\n }\n\n // Validate version\n const version = v.getUint32(SUPERBLOCK.VERSION, true);\n if (version !== VFS_VERSION) {\n throw new Error(`Corrupt VFS: unsupported version ${version} (expected ${VFS_VERSION})`);\n }\n\n // Read superblock fields\n const inodeCount = v.getUint32(SUPERBLOCK.INODE_COUNT, true);\n const blockSize = v.getUint32(SUPERBLOCK.BLOCK_SIZE, true);\n const totalBlocks = v.getUint32(SUPERBLOCK.TOTAL_BLOCKS, true);\n const freeBlocks = v.getUint32(SUPERBLOCK.FREE_BLOCKS, true);\n const inodeTableOffset = v.getFloat64(SUPERBLOCK.INODE_OFFSET, true);\n const pathTableOffset = v.getFloat64(SUPERBLOCK.PATH_OFFSET, true);\n const dataOffset = v.getFloat64(SUPERBLOCK.DATA_OFFSET, true);\n const bitmapOffset = v.getFloat64(SUPERBLOCK.BITMAP_OFFSET, true);\n const pathUsed = v.getUint32(SUPERBLOCK.PATH_USED, true);\n\n // Validate field sanity\n if (blockSize === 0 || (blockSize & (blockSize - 1)) !== 0) {\n throw new Error(`Corrupt VFS: invalid block size ${blockSize} (must be power of 2)`);\n }\n if (inodeCount === 0) {\n throw new Error('Corrupt VFS: inode count is 0');\n }\n if (freeBlocks > totalBlocks) {\n throw new Error(`Corrupt VFS: free blocks (${freeBlocks}) exceeds total blocks (${totalBlocks})`);\n }\n\n // Sane upper bounds — prevent huge allocations from corrupt values.\n // Configurable via opts.limits in init().\n if (inodeCount > this.maxInodes) {\n throw new Error(`Corrupt VFS: inode count ${inodeCount} exceeds maximum ${this.maxInodes}`);\n }\n if (totalBlocks > this.maxBlocks) {\n throw new Error(`Corrupt VFS: total blocks ${totalBlocks} exceeds maximum ${this.maxBlocks}`);\n }\n if (fileSize > this.maxVFSSize) {\n throw new Error(`Corrupt VFS: file size ${fileSize} exceeds maximum ${this.maxVFSSize}`);\n }\n\n // Validate all offsets are finite positive integers\n if (!Number.isFinite(inodeTableOffset) || inodeTableOffset < 0 ||\n !Number.isFinite(pathTableOffset) || pathTableOffset < 0 ||\n !Number.isFinite(bitmapOffset) || bitmapOffset < 0 ||\n !Number.isFinite(dataOffset) || dataOffset < 0) {\n throw new Error(`Corrupt VFS: non-finite or negative section offset`);\n }\n\n // Validate section ordering: superblock < inodes < paths < bitmap < data\n if (inodeTableOffset !== SUPERBLOCK.SIZE) {\n throw new Error(`Corrupt VFS: inode table offset ${inodeTableOffset} (expected ${SUPERBLOCK.SIZE})`);\n }\n const expectedPathOffset = inodeTableOffset + inodeCount * INODE_SIZE;\n if (pathTableOffset !== expectedPathOffset) {\n throw new Error(`Corrupt VFS: path table offset ${pathTableOffset} (expected ${expectedPathOffset})`);\n }\n if (bitmapOffset <= pathTableOffset) {\n throw new Error(`Corrupt VFS: bitmap offset ${bitmapOffset} must be after path table ${pathTableOffset}`);\n }\n if (dataOffset <= bitmapOffset) {\n throw new Error(`Corrupt VFS: data offset ${dataOffset} must be after bitmap ${bitmapOffset}`);\n }\n const pathTableSize = bitmapOffset - pathTableOffset;\n if (pathUsed > pathTableSize) {\n throw new Error(`Corrupt VFS: path used (${pathUsed}) exceeds path table size (${pathTableSize})`);\n }\n if (pathTableSize > this.maxPathTable) {\n throw new Error(`Corrupt VFS: path table size ${pathTableSize} exceeds maximum ${this.maxPathTable}`);\n }\n\n // Validate file is large enough for the declared layout\n const expectedMinSize = dataOffset + totalBlocks * blockSize;\n if (expectedMinSize > this.maxVFSSize) {\n throw new Error(`Corrupt VFS: computed layout size ${expectedMinSize} exceeds maximum ${this.maxVFSSize}`);\n }\n if (fileSize < expectedMinSize) {\n throw new Error(`Corrupt VFS: file size ${fileSize} too small for layout (need ${expectedMinSize})`);\n }\n\n // All checks passed — commit to engine state\n this.inodeCount = inodeCount;\n this.blockSize = blockSize;\n this.totalBlocks = totalBlocks;\n this.freeBlocks = freeBlocks;\n this.inodeTableOffset = inodeTableOffset;\n this.pathTableOffset = pathTableOffset;\n this.dataOffset = dataOffset;\n this.bitmapOffset = bitmapOffset;\n this.pathTableUsed = pathUsed;\n this.pathTableSize = pathTableSize;\n\n // Load bitmap into memory\n const bitmapSize = Math.ceil(this.totalBlocks / 8);\n this.bitmap = new Uint8Array(bitmapSize);\n this.handle.read(this.bitmap, { at: this.bitmapOffset });\n\n this.rebuildIndex();\n\n // Verify root directory exists\n if (!this.pathIndex.has('/')) {\n throw new Error('Corrupt VFS: root directory \"/\" not found in inode table');\n }\n }\n\n private writeSuperblock(): void {\n const v = this.superblockView;\n v.setUint32(SUPERBLOCK.MAGIC, VFS_MAGIC, true);\n v.setUint32(SUPERBLOCK.VERSION, VFS_VERSION, true);\n v.setUint32(SUPERBLOCK.INODE_COUNT, this.inodeCount, true);\n v.setUint32(SUPERBLOCK.BLOCK_SIZE, this.blockSize, true);\n v.setUint32(SUPERBLOCK.TOTAL_BLOCKS, this.totalBlocks, true);\n v.setUint32(SUPERBLOCK.FREE_BLOCKS, this.freeBlocks, true);\n v.setFloat64(SUPERBLOCK.INODE_OFFSET, this.inodeTableOffset, true);\n v.setFloat64(SUPERBLOCK.PATH_OFFSET, this.pathTableOffset, true);\n v.setFloat64(SUPERBLOCK.DATA_OFFSET, this.dataOffset, true);\n v.setFloat64(SUPERBLOCK.BITMAP_OFFSET, this.bitmapOffset, true);\n v.setUint32(SUPERBLOCK.PATH_USED, this.pathTableUsed, true);\n this.handle.write(this.superblockBuf, { at: 0 });\n }\n\n /** Flush pending bitmap and superblock writes to disk (one write each) */\n private markBitmapDirty(lo: number, hi: number): void {\n if (lo < this.bitmapDirtyLo) this.bitmapDirtyLo = lo;\n if (hi > this.bitmapDirtyHi) this.bitmapDirtyHi = hi;\n }\n\n private commitPending(): void {\n // Trim trailing free blocks before flushing bitmap/superblock\n if (this.blocksFreedsinceTrim) {\n this.trimTrailingBlocks();\n this.blocksFreedsinceTrim = false;\n }\n\n if (this.bitmapDirtyHi >= 0) {\n const lo = this.bitmapDirtyLo;\n const hi = this.bitmapDirtyHi;\n this.handle.write(this.bitmap!.subarray(lo, hi + 1), { at: this.bitmapOffset + lo });\n this.bitmapDirtyLo = Infinity;\n this.bitmapDirtyHi = -1;\n }\n if (this.superblockDirty) {\n this.writeSuperblock();\n this.superblockDirty = false;\n }\n }\n\n /** Shrink the OPFS file by removing trailing free blocks from the data region.\n * Scans bitmap from end to find the last used block, then truncates. */\n private trimTrailingBlocks(): void {\n const bitmap = this.bitmap!;\n\n // Find the last used block by scanning bitmap from the end\n let lastUsed = -1;\n for (let byteIdx = Math.ceil(this.totalBlocks / 8) - 1; byteIdx >= 0; byteIdx--) {\n if (bitmap[byteIdx] !== 0) {\n // Find highest set bit in this byte\n for (let bit = 7; bit >= 0; bit--) {\n const blockIdx = byteIdx * 8 + bit;\n if (blockIdx < this.totalBlocks && (bitmap[byteIdx] & (1 << bit))) {\n lastUsed = blockIdx;\n break;\n }\n }\n break;\n }\n }\n\n const newTotal = Math.max(lastUsed + 1, INITIAL_DATA_BLOCKS);\n if (newTotal >= this.totalBlocks) return; // nothing to trim\n\n // Truncate the OPFS file\n this.handle.truncate(this.dataOffset + newTotal * this.blockSize);\n\n // Shrink in-memory bitmap\n const newBitmapSize = Math.ceil(newTotal / 8);\n this.bitmap = bitmap.slice(0, newBitmapSize);\n\n // Update counters\n const trimmed = this.totalBlocks - newTotal;\n this.freeBlocks -= trimmed; // these free blocks no longer exist\n this.totalBlocks = newTotal;\n this.superblockDirty = true;\n\n // Re-mark entire bitmap dirty so the smaller bitmap is flushed\n this.bitmapDirtyLo = 0;\n this.bitmapDirtyHi = newBitmapSize - 1;\n }\n\n /** Rebuild in-memory path→inode index from disk.\n * Bulk-reads the entire inode table + path table in 2 I/O calls,\n * then parses in memory (avoids 10k+ individual reads). */\n private rebuildIndex(): void {\n this.pathIndex.clear();\n this.inodeCache.clear();\n\n // Bulk read entire inode table (e.g. 640KB for 10k inodes)\n const inodeTableSize = this.inodeCount * INODE_SIZE;\n const inodeBuf = new Uint8Array(inodeTableSize);\n this.handle.read(inodeBuf, { at: this.inodeTableOffset });\n const inodeView = new DataView(inodeBuf.buffer);\n\n // Bulk read used portion of path table\n const pathBuf = this.pathTableUsed > 0 ? new Uint8Array(this.pathTableUsed) : null;\n if (pathBuf) {\n this.handle.read(pathBuf, { at: this.pathTableOffset });\n }\n\n for (let i = 0; i < this.inodeCount; i++) {\n const off = i * INODE_SIZE;\n const type = inodeView.getUint8(off + INODE.TYPE);\n if (type === INODE_TYPE.FREE) continue;\n\n // Validate inode type\n if (type < INODE_TYPE.FILE || type > INODE_TYPE.SYMLINK) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid type ${type}`);\n }\n\n const pathOffset = inodeView.getUint32(off + INODE.PATH_OFFSET, true);\n const pathLength = inodeView.getUint16(off + INODE.PATH_LENGTH, true);\n const size = inodeView.getFloat64(off + INODE.SIZE, true);\n const firstBlock = inodeView.getUint32(off + INODE.FIRST_BLOCK, true);\n const blockCount = inodeView.getUint32(off + INODE.BLOCK_COUNT, true);\n\n // Validate path bounds\n if (pathLength === 0 || pathOffset + pathLength > this.pathTableUsed) {\n throw new Error(`Corrupt VFS: inode ${i} path out of bounds (offset=${pathOffset}, len=${pathLength}, tableUsed=${this.pathTableUsed})`);\n }\n\n // Validate data bounds for files/symlinks\n if (type !== INODE_TYPE.DIRECTORY) {\n if (size < 0 || !isFinite(size)) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid size ${size}`);\n }\n if (blockCount > 0 && firstBlock + blockCount > this.totalBlocks) {\n throw new Error(`Corrupt VFS: inode ${i} data blocks out of range (first=${firstBlock}, count=${blockCount}, total=${this.totalBlocks})`);\n }\n }\n\n const inode: Inode = {\n type,\n pathOffset,\n pathLength,\n nlink: inodeView.getUint16(off + INODE.NLINK, true) || 1,\n mode: inodeView.getUint32(off + INODE.MODE, true),\n size,\n firstBlock,\n blockCount,\n mtime: inodeView.getFloat64(off + INODE.MTIME, true),\n ctime: inodeView.getFloat64(off + INODE.CTIME, true),\n atime: inodeView.getFloat64(off + INODE.ATIME, true),\n uid: inodeView.getUint32(off + INODE.UID, true),\n gid: inodeView.getUint32(off + INODE.GID, true),\n };\n this.inodeCache.set(i, inode);\n\n // Decode path from in-memory path table buffer (no disk read)\n let path: string;\n if (pathBuf) {\n path = decoder.decode(pathBuf.subarray(inode.pathOffset, inode.pathOffset + inode.pathLength));\n } else {\n path = this.readPath(inode.pathOffset, inode.pathLength);\n }\n\n // Validate path format\n if (!path.startsWith('/') || path.includes('\\0')) {\n throw new Error(`Corrupt VFS: inode ${i} has invalid path \"${path.substring(0, 50)}\"`);\n }\n\n this.pathIndex.set(path, i);\n }\n }\n\n // ========== Low-level inode I/O ==========\n\n private readInode(idx: number): Inode {\n const cached = this.inodeCache.get(idx);\n if (cached) return cached;\n\n const offset = this.inodeTableOffset + idx * INODE_SIZE;\n this.handle.read(this.inodeBuf, { at: offset });\n const v = this.inodeView;\n const inode: Inode = {\n type: v.getUint8(INODE.TYPE),\n pathOffset: v.getUint32(INODE.PATH_OFFSET, true),\n pathLength: v.getUint16(INODE.PATH_LENGTH, true),\n nlink: v.getUint16(INODE.NLINK, true) || 1,\n mode: v.getUint32(INODE.MODE, true),\n size: v.getFloat64(INODE.SIZE, true),\n firstBlock: v.getUint32(INODE.FIRST_BLOCK, true),\n blockCount: v.getUint32(INODE.BLOCK_COUNT, true),\n mtime: v.getFloat64(INODE.MTIME, true),\n ctime: v.getFloat64(INODE.CTIME, true),\n atime: v.getFloat64(INODE.ATIME, true),\n uid: v.getUint32(INODE.UID, true),\n gid: v.getUint32(INODE.GID, true),\n };\n this.inodeCache.set(idx, inode);\n return inode;\n }\n\n private writeInode(idx: number, inode: Inode): void {\n // Maintain inode cache\n if (inode.type === INODE_TYPE.FREE) {\n this.inodeCache.delete(idx);\n } else {\n this.inodeCache.set(idx, inode);\n }\n\n const v = this.inodeView;\n v.setUint8(INODE.TYPE, inode.type);\n v.setUint8(INODE.FLAGS, 0);\n v.setUint8(INODE.FLAGS + 1, 0);\n v.setUint8(INODE.FLAGS + 2, 0);\n v.setUint32(INODE.PATH_OFFSET, inode.pathOffset, true);\n v.setUint16(INODE.PATH_LENGTH, inode.pathLength, true);\n v.setUint16(INODE.NLINK, inode.nlink, true);\n v.setUint32(INODE.MODE, inode.mode, true);\n v.setFloat64(INODE.SIZE, inode.size, true);\n v.setUint32(INODE.FIRST_BLOCK, inode.firstBlock, true);\n v.setUint32(INODE.BLOCK_COUNT, inode.blockCount, true);\n v.setFloat64(INODE.MTIME, inode.mtime, true);\n v.setFloat64(INODE.CTIME, inode.ctime, true);\n v.setFloat64(INODE.ATIME, inode.atime, true);\n v.setUint32(INODE.UID, inode.uid, true);\n v.setUint32(INODE.GID, inode.gid, true);\n\n const offset = this.inodeTableOffset + idx * INODE_SIZE;\n this.handle.write(this.inodeBuf, { at: offset });\n }\n\n // ========== Path table I/O ==========\n\n private readPath(offset: number, length: number): string {\n const buf = new Uint8Array(length);\n this.handle.read(buf, { at: this.pathTableOffset + offset });\n return decoder.decode(buf);\n }\n\n private appendPath(path: string): { offset: number; length: number } {\n const bytes = encoder.encode(path);\n const offset = this.pathTableUsed;\n\n // Check if path table needs to grow\n if (offset + bytes.byteLength > this.pathTableSize) {\n this.growPathTable(offset + bytes.byteLength);\n }\n\n this.handle.write(bytes, { at: this.pathTableOffset + offset });\n this.pathTableUsed += bytes.byteLength;\n\n // Defer superblock write — committed in commitPending()\n this.superblockDirty = true;\n\n return { offset, length: bytes.byteLength };\n }\n\n private growPathTable(needed: number): void {\n // Double the path table or grow to fit needed, whichever is larger\n const newSize = Math.max(this.pathTableSize * 2, needed + INITIAL_PATH_TABLE_SIZE);\n const growth = newSize - this.pathTableSize;\n\n // Need to shift bitmap and data region forward\n // Use in-memory bitmap (no read needed)\n\n // Read existing data region\n const dataSize = this.totalBlocks * this.blockSize;\n const dataBuf = new Uint8Array(dataSize);\n this.handle.read(dataBuf, { at: this.dataOffset });\n\n // Grow file\n const newTotalSize = this.handle.getSize() + growth;\n this.handle.truncate(newTotalSize);\n\n // Write data back at new offset\n const newBitmapOffset = this.bitmapOffset + growth;\n const newDataOffset = this.dataOffset + growth;\n this.handle.write(dataBuf, { at: newDataOffset });\n this.handle.write(this.bitmap!, { at: newBitmapOffset });\n\n // Update offsets\n this.pathTableSize = newSize;\n this.bitmapOffset = newBitmapOffset;\n this.dataOffset = newDataOffset;\n\n // Mark superblock dirty (will be written in commitPending)\n this.superblockDirty = true;\n }\n\n // ========== Bitmap I/O ==========\n\n private allocateBlocks(count: number): number {\n if (count === 0) return 0;\n\n const bitmap = this.bitmap!;\n let run = 0;\n let start = 0;\n\n for (let i = 0; i < this.totalBlocks; i++) {\n const byteIdx = i >>> 3;\n const bitIdx = i & 7;\n const used = (bitmap[byteIdx] >>> bitIdx) & 1;\n\n if (used) {\n run = 0;\n start = i + 1;\n } else {\n run++;\n if (run === count) {\n // Mark blocks as used in memory\n for (let j = start; j <= i; j++) {\n const bj = j >>> 3;\n const bi = j & 7;\n bitmap[bj] |= (1 << bi);\n }\n this.markBitmapDirty(start >>> 3, i >>> 3);\n this.freeBlocks -= count;\n this.superblockDirty = true;\n return start;\n }\n }\n }\n\n // No contiguous space — grow data region\n return this.growAndAllocate(count);\n }\n\n private growAndAllocate(count: number): number {\n const oldTotal = this.totalBlocks;\n // Grow by at least doubling or enough for the request\n const newTotal = Math.max(oldTotal * 2, oldTotal + count);\n const addedBlocks = newTotal - oldTotal;\n\n // Grow the file\n const newFileSize = this.dataOffset + newTotal * this.blockSize;\n this.handle.truncate(newFileSize);\n\n // Grow in-memory bitmap\n const newBitmapSize = Math.ceil(newTotal / 8);\n const newBitmap = new Uint8Array(newBitmapSize);\n newBitmap.set(this.bitmap!);\n this.bitmap = newBitmap;\n\n this.totalBlocks = newTotal;\n this.freeBlocks += addedBlocks;\n\n // Allocate from the newly freed area\n const start = oldTotal;\n for (let j = start; j < start + count; j++) {\n const bj = j >>> 3;\n const bi = j & 7;\n this.bitmap[bj] |= (1 << bi);\n }\n\n this.markBitmapDirty(start >>> 3, (start + count - 1) >>> 3);\n this.freeBlocks -= count;\n this.superblockDirty = true;\n\n return start;\n }\n\n private blocksFreedsinceTrim = false;\n\n private freeBlockRange(start: number, count: number): void {\n if (count === 0) return;\n const bitmap = this.bitmap!;\n\n for (let i = start; i < start + count; i++) {\n const byteIdx = i >>> 3;\n const bitIdx = i & 7;\n bitmap[byteIdx] &= ~(1 << bitIdx);\n }\n\n this.markBitmapDirty(start >>> 3, (start + count - 1) >>> 3);\n this.freeBlocks += count;\n this.superblockDirty = true;\n this.blocksFreedsinceTrim = true;\n }\n\n // updateSuperblockFreeBlocks is no longer needed — superblock writes are coalesced via commitPending()\n\n // ========== Inode allocation ==========\n\n private findFreeInode(): number {\n // Start from hint to skip already-used entries\n for (let i = this.freeInodeHint; i < this.inodeCount; i++) {\n // Check cache first — cached entries are never FREE\n if (this.inodeCache.has(i)) continue;\n\n const offset = this.inodeTableOffset + i * INODE_SIZE;\n const typeBuf = new Uint8Array(1);\n this.handle.read(typeBuf, { at: offset });\n if (typeBuf[0] === INODE_TYPE.FREE) {\n this.freeInodeHint = i + 1;\n return i;\n }\n }\n // All inodes used — grow inode table\n const idx = this.growInodeTable();\n this.freeInodeHint = idx + 1;\n return idx;\n }\n\n private growInodeTable(): number {\n const oldCount = this.inodeCount;\n const newCount = oldCount * 2;\n const growth = (newCount - oldCount) * INODE_SIZE;\n\n // Read everything after inode table\n const afterInodeOffset = this.inodeTableOffset + oldCount * INODE_SIZE;\n const afterSize = this.handle.getSize() - afterInodeOffset;\n const afterBuf = new Uint8Array(afterSize);\n this.handle.read(afterBuf, { at: afterInodeOffset });\n\n // Grow file\n this.handle.truncate(this.handle.getSize() + growth);\n\n // Write back shifted content\n this.handle.write(afterBuf, { at: afterInodeOffset + growth });\n\n // Zero out new inode entries\n const zeroes = new Uint8Array(growth);\n this.handle.write(zeroes, { at: afterInodeOffset });\n\n // Update offsets\n this.pathTableOffset += growth;\n this.bitmapOffset += growth;\n this.dataOffset += growth;\n this.inodeCount = newCount;\n\n this.superblockDirty = true;\n\n return oldCount; // First new free inode\n }\n\n // ========== Data I/O ==========\n\n private readData(firstBlock: number, blockCount: number, size: number): Uint8Array {\n const buf = new Uint8Array(size);\n const offset = this.dataOffset + firstBlock * this.blockSize;\n this.handle.read(buf, { at: offset });\n return buf;\n }\n\n private writeData(firstBlock: number, data: Uint8Array): void {\n const offset = this.dataOffset + firstBlock * this.blockSize;\n this.handle.write(data, { at: offset });\n }\n\n // ========== Path resolution ==========\n\n private resolvePath(path: string, depth: number = 0): number | undefined {\n if (depth > MAX_SYMLINK_DEPTH) return undefined; // ELOOP\n\n const idx = this.pathIndex.get(path);\n if (idx === undefined) {\n // Path not found directly — try component resolution (handles intermediate symlinks)\n return this.resolvePathComponents(path, true, depth);\n }\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.SYMLINK) {\n // Follow symlink\n const target = decoder.decode(this.readData(inode.firstBlock, inode.blockCount, inode.size));\n const resolved = target.startsWith('/') ? target : this.resolveRelative(path, target);\n return this.resolvePath(resolved, depth + 1);\n }\n\n return idx;\n }\n\n /** Resolve symlinks in intermediate path components */\n private resolvePathComponents(path: string, followLast: boolean = true, depth: number = 0): number | undefined {\n const result = this.resolvePathFull(path, followLast, depth);\n return result?.idx;\n }\n\n /**\n * Resolve a path following symlinks, returning both the inode index AND the\n * fully resolved path. This is needed by readdir: when listing a symlinked\n * directory, we must search for children under the resolved target path\n * (where files actually exist in pathIndex), not under the symlink path.\n */\n private resolvePathFull(path: string, followLast: boolean = true, depth: number = 0): { idx: number; resolvedPath: string } | undefined {\n if (depth > MAX_SYMLINK_DEPTH) return undefined; // ELOOP\n\n const parts = path.split('/').filter(Boolean);\n let current = '/';\n\n for (let i = 0; i < parts.length; i++) {\n const isLast = i === parts.length - 1;\n current = current === '/' ? '/' + parts[i] : current + '/' + parts[i];\n\n const idx = this.pathIndex.get(current);\n if (idx === undefined) return undefined;\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.SYMLINK && (!isLast || followLast)) {\n const target = decoder.decode(this.readData(inode.firstBlock, inode.blockCount, inode.size));\n const resolved = target.startsWith('/') ? target : this.resolveRelative(current, target);\n\n if (isLast) {\n // Use resolvePathFull (not resolvePath) so intermediate symlinks\n // in the resolved target path are also followed\n return this.resolvePathFull(resolved, true, depth + 1);\n }\n\n // Reconstruct remaining path with resolved symlink\n const remaining = parts.slice(i + 1).join('/');\n const newPath = resolved + (remaining ? '/' + remaining : '');\n return this.resolvePathFull(newPath, followLast, depth + 1);\n }\n }\n\n const finalIdx = this.pathIndex.get(current);\n if (finalIdx === undefined) return undefined;\n return { idx: finalIdx, resolvedPath: current };\n }\n\n private resolveRelative(from: string, target: string): string {\n const dir = from.substring(0, from.lastIndexOf('/')) || '/';\n const parts = (dir + '/' + target).split('/').filter(Boolean);\n const resolved: string[] = [];\n for (const p of parts) {\n if (p === '.') continue;\n if (p === '..') { resolved.pop(); continue; }\n resolved.push(p);\n }\n return '/' + resolved.join('/');\n }\n\n // ========== Core inode creation helper ==========\n\n private createInode(path: string, type: number, mode: number, size: number, data?: Uint8Array): number {\n const idx = this.findFreeInode();\n const { offset: pathOff, length: pathLen } = this.appendPath(path);\n const now = Date.now();\n\n let firstBlock = 0;\n let blockCount = 0;\n\n if (data && data.byteLength > 0) {\n blockCount = Math.ceil(data.byteLength / this.blockSize);\n firstBlock = this.allocateBlocks(blockCount);\n this.writeData(firstBlock, data);\n }\n\n const inode: Inode = {\n type,\n pathOffset: pathOff,\n pathLength: pathLen,\n nlink: type === INODE_TYPE.DIRECTORY ? 2 : 1,\n mode,\n size,\n firstBlock,\n blockCount,\n mtime: now,\n ctime: now,\n atime: now,\n uid: this.processUid,\n gid: this.processGid,\n };\n\n this.writeInode(idx, inode);\n this.pathIndex.set(path, idx);\n\n return idx;\n }\n\n // ========== Public API — called by server worker dispatch ==========\n\n /** Normalize a path: ensure leading /, resolve . and .. */\n normalizePath(p: string): string {\n if (p.charCodeAt(0) !== 47) p = '/' + p; // 47 = '/'\n // Fast path: already normalized (no '.', '..', '//', trailing '/')\n if (p.length === 1) return p; // \"/\"\n if (p.indexOf('/.') === -1 && p.indexOf('//') === -1 && p.charCodeAt(p.length - 1) !== 47) {\n return p;\n }\n // Slow path: full normalize\n const parts = p.split('/').filter(Boolean);\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '.') continue;\n if (part === '..') { resolved.pop(); continue; }\n resolved.push(part);\n }\n return '/' + resolved.join('/');\n }\n\n // ---- READ ----\n read(path: string): { status: number; data: Uint8Array | null } {\n const t0 = this.debug ? performance.now() : 0;\n path = this.normalizePath(path);\n\n // Fast path: direct index lookup (skips component-by-component walk)\n let idx = this.pathIndex.get(path);\n if (idx !== undefined) {\n const inode = this.inodeCache.get(idx);\n if (inode) {\n // Symlink? Fall through to full resolve\n if (inode.type === INODE_TYPE.SYMLINK) {\n idx = this.resolvePathComponents(path, true);\n } else if (inode.type === INODE_TYPE.DIRECTORY) {\n return { status: CODE_TO_STATUS.EISDIR, data: null };\n } else {\n // Hot path: cached inode, no symlinks\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n if (this.debug) {\n const t1 = performance.now();\n console.log(`[VFS read] path=${path} size=${inode.size} TOTAL=${(t1-t0).toFixed(3)}ms (fast)`);\n }\n return { status: 0, data };\n }\n }\n }\n\n // Slow path: full component resolution (handles symlinks, uncached inodes)\n if (idx === undefined) idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR, data: null };\n\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n\n if (this.debug) {\n const t1 = performance.now();\n console.log(`[VFS read] path=${path} size=${inode.size} TOTAL=${(t1-t0).toFixed(3)}ms (slow path)`);\n }\n\n return { status: 0, data };\n }\n\n // ---- WRITE ----\n write(path: string, data: Uint8Array, flags: number = 0): { status: number } {\n const t0 = this.debug ? performance.now() : 0;\n path = this.normalizePath(path);\n const t1 = this.debug ? performance.now() : 0;\n\n // Ensure parent directory exists\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) return { status: parentStatus };\n const t2 = this.debug ? performance.now() : 0;\n\n const existingIdx = this.resolvePathComponents(path, true);\n const t3 = this.debug ? performance.now() : 0;\n\n let tAlloc = t3, tData = t3, tInode = t3;\n\n if (existingIdx !== undefined) {\n // Update existing file\n const inode = this.readInode(existingIdx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n const neededBlocks = Math.ceil(data.byteLength / this.blockSize);\n\n if (neededBlocks <= inode.blockCount) {\n // Fits in current blocks\n tAlloc = this.debug ? performance.now() : 0;\n this.writeData(inode.firstBlock, data);\n tData = this.debug ? performance.now() : 0;\n if (neededBlocks < inode.blockCount) {\n this.freeBlockRange(inode.firstBlock + neededBlocks, inode.blockCount - neededBlocks);\n }\n } else {\n // Need more blocks — free old, allocate new\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n tAlloc = this.debug ? performance.now() : 0;\n this.writeData(newFirst, data);\n tData = this.debug ? performance.now() : 0;\n inode.firstBlock = newFirst;\n }\n\n inode.size = data.byteLength;\n inode.blockCount = neededBlocks;\n inode.mtime = Date.now();\n this.writeInode(existingIdx, inode);\n tInode = this.debug ? performance.now() : 0;\n } else {\n // Create new file\n const mode = DEFAULT_FILE_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.FILE, mode, data.byteLength, data);\n tAlloc = this.debug ? performance.now() : 0;\n tData = tAlloc;\n tInode = tAlloc;\n }\n\n // Always commit pending superblock/bitmap changes (matches unlink, mkdir, etc.)\n // Without this, PATH_USED won't be persisted for newly created files,\n // causing \"path out of bounds\" corruption on reload.\n this.commitPending();\n if (flags & 1) {\n this.handle.flush();\n }\n const tFlush = this.debug ? performance.now() : 0;\n\n if (this.debug) {\n const existing = existingIdx !== undefined;\n console.log(`[VFS write] path=${path} size=${data.byteLength} ${existing ? 'UPDATE' : 'CREATE'} normalize=${(t1-t0).toFixed(3)}ms parent=${(t2-t1).toFixed(3)}ms resolve=${(t3-t2).toFixed(3)}ms alloc=${(tAlloc-t3).toFixed(3)}ms data=${(tData-tAlloc).toFixed(3)}ms inode=${(tInode-tData).toFixed(3)}ms flush=${(tFlush-tInode).toFixed(3)}ms TOTAL=${(tFlush-t0).toFixed(3)}ms`);\n }\n\n return { status: 0 };\n }\n\n // ---- APPEND ----\n append(path: string, data: Uint8Array): { status: number } {\n path = this.normalizePath(path);\n const existingIdx = this.resolvePathComponents(path, true);\n\n if (existingIdx === undefined) {\n // Create new file with the data\n return this.write(path, data);\n }\n\n const inode = this.readInode(existingIdx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // Read existing data\n const existing = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n\n // Concat\n const combined = new Uint8Array(existing.byteLength + data.byteLength);\n combined.set(existing);\n combined.set(data, existing.byteLength);\n\n // Rewrite\n const neededBlocks = Math.ceil(combined.byteLength / this.blockSize);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n this.writeData(newFirst, combined);\n\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n inode.size = combined.byteLength;\n inode.mtime = Date.now();\n this.writeInode(existingIdx, inode);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- UNLINK ----\n unlink(path: string): { status: number } {\n path = this.normalizePath(path);\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // Decrement nlink; only free data when it reaches 0\n inode.nlink = Math.max(0, inode.nlink - 1);\n\n // Free data blocks\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n\n // Mark inode as free\n inode.type = INODE_TYPE.FREE;\n this.writeInode(idx, inode);\n\n // Remove from index\n this.pathIndex.delete(path);\n // Reset free inode hint\n if (idx < this.freeInodeHint) this.freeInodeHint = idx;\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- STAT ----\n stat(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n return this.encodeStatResponse(idx);\n }\n\n // ---- LSTAT (no symlink follow for the FINAL component) ----\n lstat(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n // Use resolvePathComponents with followLast=false — follows intermediate\n // symlinks but returns the symlink inode itself for the last component.\n // Direct pathIndex.get(path) fails for paths through symlinked directories\n // because children are stored under the symlink target path in pathIndex.\n const idx = this.resolvePathComponents(path, false);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n return this.encodeStatResponse(idx);\n }\n\n private encodeStatResponse(idx: number): { status: number; data: Uint8Array } {\n const inode = this.readInode(idx);\n\n // Compute nlink for directories: 2 + number of child subdirectories\n let nlink = inode.nlink;\n if (inode.type === INODE_TYPE.DIRECTORY) {\n const path = this.readPath(inode.pathOffset, inode.pathLength);\n const children = this.getDirectChildren(path);\n let subdirCount = 0;\n for (const child of children) {\n const childIdx = this.pathIndex.get(child);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\n }\n nlink = 2 + subdirCount;\n }\n\n // Encode stat into binary: type(1) + mode(4) + size(8) + mtime(8) + ctime(8) + atime(8) + uid(4) + gid(4) + ino(4) + nlink(4) = 53 bytes\n const buf = new Uint8Array(53);\n const view = new DataView(buf.buffer);\n view.setUint8(0, inode.type);\n view.setUint32(1, inode.mode, true);\n view.setFloat64(5, inode.size, true);\n view.setFloat64(13, inode.mtime, true);\n view.setFloat64(21, inode.ctime, true);\n view.setFloat64(29, inode.atime, true);\n view.setUint32(37, inode.uid, true);\n view.setUint32(41, inode.gid, true);\n view.setUint32(45, idx, true); // ino = inode index\n view.setUint32(49, nlink, true);\n\n return { status: 0, data: buf };\n }\n\n // ---- MKDIR ----\n mkdir(path: string, flags: number = 0): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const recursive = (flags & 1) !== 0;\n\n if (recursive) {\n return this.mkdirRecursive(path);\n }\n\n // Check if already exists\n if (this.pathIndex.has(path)) return { status: CODE_TO_STATUS.EEXIST, data: null };\n\n // Ensure parent exists\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) return { status: parentStatus, data: null };\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.DIRECTORY, mode, 0);\n\n this.commitPending();\n // Non-recursive mkdir returns undefined (null data) per Node.js spec\n return { status: 0, data: null };\n }\n\n private mkdirRecursive(path: string): { status: number; data: Uint8Array | null } {\n const parts = path.split('/').filter(Boolean);\n let current = '';\n let firstCreated: string | null = null;\n\n for (const part of parts) {\n current += '/' + part;\n\n if (this.pathIndex.has(current)) {\n const idx = this.pathIndex.get(current)!;\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) {\n return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n }\n continue;\n }\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(current, INODE_TYPE.DIRECTORY, mode, 0);\n if (!firstCreated) firstCreated = current;\n }\n\n this.commitPending();\n const result = firstCreated ? encoder.encode(firstCreated) : undefined;\n return { status: 0, data: result ?? null };\n }\n\n // ---- RMDIR ----\n rmdir(path: string, flags: number = 0): { status: number } {\n path = this.normalizePath(path);\n const recursive = (flags & 1) !== 0;\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR };\n\n // Check for children\n const children = this.getDirectChildren(path);\n\n if (children.length > 0) {\n if (!recursive) return { status: CODE_TO_STATUS.ENOTEMPTY };\n\n // Recursive delete\n for (const child of this.getAllDescendants(path)) {\n const childIdx = this.pathIndex.get(child)!;\n const childInode = this.readInode(childIdx);\n this.freeBlockRange(childInode.firstBlock, childInode.blockCount);\n childInode.type = INODE_TYPE.FREE;\n this.writeInode(childIdx, childInode);\n this.pathIndex.delete(child);\n }\n }\n\n // Remove the directory itself\n inode.type = INODE_TYPE.FREE;\n this.writeInode(idx, inode);\n this.pathIndex.delete(path);\n if (idx < this.freeInodeHint) this.freeInodeHint = idx;\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- READDIR ----\n readdir(path: string, flags: number = 0): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const resolved = this.resolvePathFull(path, true);\n if (!resolved) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(resolved.idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n\n const withFileTypes = (flags & 1) !== 0;\n // Use the resolved path for child lookup — when path is a symlink,\n // the actual children are stored under the target path in pathIndex.\n const children = this.getDirectChildren(resolved.resolvedPath);\n\n if (withFileTypes) {\n // Encode as: count(u32) + entries[name_len(u16) + name(bytes) + type(u8)]\n let totalSize = 4;\n const entries: { name: Uint8Array; type: number }[] = [];\n\n for (const childPath of children) {\n const name = childPath.substring(childPath.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n const childIdx = this.pathIndex.get(childPath)!;\n const childInode = this.readInode(childIdx);\n entries.push({ name: nameBytes, type: childInode.type });\n totalSize += 2 + nameBytes.byteLength + 1; // nameLen + name + type\n }\n\n const buf = new Uint8Array(totalSize);\n const view = new DataView(buf.buffer);\n view.setUint32(0, entries.length, true);\n let offset = 4;\n\n for (const entry of entries) {\n view.setUint16(offset, entry.name.byteLength, true);\n offset += 2;\n buf.set(entry.name, offset);\n offset += entry.name.byteLength;\n buf[offset++] = entry.type;\n }\n\n return { status: 0, data: buf };\n }\n\n // Simple name list: count(u32) + entries[name_len(u16) + name(bytes)]\n let totalSize = 4;\n const nameEntries: Uint8Array[] = [];\n\n for (const childPath of children) {\n const name = childPath.substring(childPath.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n nameEntries.push(nameBytes);\n totalSize += 2 + nameBytes.byteLength;\n }\n\n const buf = new Uint8Array(totalSize);\n const view = new DataView(buf.buffer);\n view.setUint32(0, nameEntries.length, true);\n let offset = 4;\n\n for (const nameBytes of nameEntries) {\n view.setUint16(offset, nameBytes.byteLength, true);\n offset += 2;\n buf.set(nameBytes, offset);\n offset += nameBytes.byteLength;\n }\n\n return { status: 0, data: buf };\n }\n\n // ---- RENAME ----\n rename(oldPath: string, newPath: string): { status: number } {\n oldPath = this.normalizePath(oldPath);\n newPath = this.normalizePath(newPath);\n\n const idx = this.pathIndex.get(oldPath);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n // Ensure parent of new path exists\n const parentStatus = this.ensureParent(newPath);\n if (parentStatus !== 0) return { status: parentStatus };\n\n // If target exists, remove it\n const existingIdx = this.pathIndex.get(newPath);\n if (existingIdx !== undefined) {\n const existingInode = this.readInode(existingIdx);\n this.freeBlockRange(existingInode.firstBlock, existingInode.blockCount);\n existingInode.type = INODE_TYPE.FREE;\n this.writeInode(existingIdx, existingInode);\n this.pathIndex.delete(newPath);\n }\n\n // Update inode with new path\n const inode = this.readInode(idx);\n const { offset: pathOff, length: pathLen } = this.appendPath(newPath);\n inode.pathOffset = pathOff;\n inode.pathLength = pathLen;\n inode.mtime = Date.now();\n this.writeInode(idx, inode);\n\n // Update index\n this.pathIndex.delete(oldPath);\n this.pathIndex.set(newPath, idx);\n\n // If it's a directory, rename all descendants\n if (inode.type === INODE_TYPE.DIRECTORY) {\n const prefix = oldPath === '/' ? '/' : oldPath + '/';\n const toRename: [string, number][] = [];\n\n for (const [p, i] of this.pathIndex) {\n if (p.startsWith(prefix)) {\n toRename.push([p, i]);\n }\n }\n\n for (const [p, i] of toRename) {\n const suffix = p.substring(oldPath.length);\n const childNewPath = newPath + suffix;\n const childInode = this.readInode(i);\n const { offset: cpo, length: cpl } = this.appendPath(childNewPath);\n childInode.pathOffset = cpo;\n childInode.pathLength = cpl;\n this.writeInode(i, childInode);\n this.pathIndex.delete(p);\n this.pathIndex.set(childNewPath, i);\n }\n }\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- EXISTS ----\n exists(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n const buf = new Uint8Array(1);\n buf[0] = idx !== undefined ? 1 : 0;\n return { status: 0, data: buf };\n }\n\n // ---- TRUNCATE ----\n truncate(path: string, len: number = 0): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n if (inode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n if (len === 0) {\n // Free all blocks\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n inode.firstBlock = 0;\n inode.blockCount = 0;\n inode.size = 0;\n } else if (len < inode.size) {\n // Shrink\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks < inode.blockCount) {\n this.freeBlockRange(inode.firstBlock + neededBlocks, inode.blockCount - neededBlocks);\n }\n inode.blockCount = neededBlocks;\n inode.size = len;\n } else if (len > inode.size) {\n // Grow (zero-fill)\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Need more blocks\n const oldData = this.readData(inode.firstBlock, inode.blockCount, inode.size);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newData = new Uint8Array(len);\n newData.set(oldData);\n // Rest is already zero-filled\n this.writeData(newFirst, newData);\n inode.firstBlock = newFirst;\n }\n inode.blockCount = neededBlocks;\n inode.size = len;\n }\n\n inode.mtime = Date.now();\n this.writeInode(idx, inode);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- COPY ----\n copy(srcPath: string, destPath: string, flags: number = 0): { status: number } {\n srcPath = this.normalizePath(srcPath);\n destPath = this.normalizePath(destPath);\n\n const srcIdx = this.resolvePathComponents(srcPath, true);\n if (srcIdx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const srcInode = this.readInode(srcIdx);\n if (srcInode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EISDIR };\n\n // COPYFILE_EXCL check\n if ((flags & 1) && this.pathIndex.has(destPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\n\n // Read source data\n const data = srcInode.size > 0\n ? this.readData(srcInode.firstBlock, srcInode.blockCount, srcInode.size)\n : new Uint8Array(0);\n\n return this.write(destPath, data);\n }\n\n // ---- ACCESS ----\n access(path: string, mode: number = 0): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n if (mode === 0) return { status: 0 }; // F_OK — just check existence\n\n if (!this.strictPermissions) return { status: 0 }; // Relaxed mode\n\n const inode = this.readInode(idx);\n // Check permission bits against process identity\n const filePerm = this.getEffectivePermission(inode);\n\n if ((mode & 4) && !(filePerm & 4)) return { status: CODE_TO_STATUS.EACCES }; // R_OK\n if ((mode & 2) && !(filePerm & 2)) return { status: CODE_TO_STATUS.EACCES }; // W_OK\n if ((mode & 1) && !(filePerm & 1)) return { status: CODE_TO_STATUS.EACCES }; // X_OK\n\n return { status: 0 };\n }\n\n private getEffectivePermission(inode: Inode): number {\n const modeBits = inode.mode & 0o777;\n if (this.processUid === inode.uid) return (modeBits >>> 6) & 7;\n if (this.processGid === inode.gid) return (modeBits >>> 3) & 7;\n return modeBits & 7;\n }\n\n // ---- REALPATH ----\n realpath(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n // Find the resolved path for this inode\n const inode = this.readInode(idx);\n const resolvedPath = this.readPath(inode.pathOffset, inode.pathLength);\n return { status: 0, data: encoder.encode(resolvedPath) };\n }\n\n // ---- CHMOD ----\n chmod(path: string, mode: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n // Preserve file type bits, update permission bits\n inode.mode = (inode.mode & S_IFMT) | (mode & 0o7777);\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- CHOWN ----\n chown(path: string, uid: number, gid: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n inode.uid = uid;\n inode.gid = gid;\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- UTIMES ----\n utimes(path: string, atime: number, mtime: number): { status: number } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const inode = this.readInode(idx);\n inode.atime = atime;\n inode.mtime = mtime;\n inode.ctime = Date.now();\n this.writeInode(idx, inode);\n\n return { status: 0 };\n }\n\n // ---- SYMLINK ----\n symlink(target: string, linkPath: string): { status: number } {\n linkPath = this.normalizePath(linkPath);\n if (this.pathIndex.has(linkPath)) return { status: CODE_TO_STATUS.EEXIST };\n\n const parentStatus = this.ensureParent(linkPath);\n if (parentStatus !== 0) return { status: parentStatus };\n\n const targetBytes = encoder.encode(target);\n this.createInode(linkPath, INODE_TYPE.SYMLINK, DEFAULT_SYMLINK_MODE, targetBytes.byteLength, targetBytes);\n\n this.commitPending();\n return { status: 0 };\n }\n\n // ---- READLINK ----\n readlink(path: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.pathIndex.get(path);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.SYMLINK) return { status: CODE_TO_STATUS.EINVAL, data: null };\n\n const target = this.readData(inode.firstBlock, inode.blockCount, inode.size);\n return { status: 0, data: target };\n }\n\n // ---- LINK (hard link — copies the file data, tracks nlink) ----\n link(existingPath: string, newPath: string): { status: number } {\n existingPath = this.normalizePath(existingPath);\n newPath = this.normalizePath(newPath);\n\n const srcIdx = this.resolvePathComponents(existingPath, true);\n if (srcIdx === undefined) return { status: CODE_TO_STATUS.ENOENT };\n\n const srcInode = this.readInode(srcIdx);\n if (srcInode.type === INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.EPERM };\n\n if (this.pathIndex.has(newPath)) return { status: CODE_TO_STATUS.EEXIST };\n\n // Copy file data to new inode\n const result = this.copy(existingPath, newPath);\n if (result.status !== 0) return result;\n\n // Increment nlink on source\n srcInode.nlink++;\n this.writeInode(srcIdx, srcInode);\n\n // Set nlink on destination to match source\n const destIdx = this.pathIndex.get(newPath);\n if (destIdx !== undefined) {\n const destInode = this.readInode(destIdx);\n destInode.nlink = srcInode.nlink;\n this.writeInode(destIdx, destInode);\n }\n\n return { status: 0 };\n }\n\n // ---- OPEN (file descriptor) ----\n open(path: string, flags: number, tabId: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n\n const hasCreate = (flags & 64) !== 0; // O_CREAT\n const hasTrunc = (flags & 512) !== 0; // O_TRUNC\n const hasExcl = (flags & 128) !== 0; // O_EXCL\n\n let idx = this.resolvePathComponents(path, true);\n\n if (idx === undefined) {\n if (!hasCreate) return { status: CODE_TO_STATUS.ENOENT, data: null };\n // Create file\n const mode = DEFAULT_FILE_MODE & ~(this.umask & 0o777);\n idx = this.createInode(path, INODE_TYPE.FILE, mode, 0);\n } else if (hasExcl && hasCreate) {\n return { status: CODE_TO_STATUS.EEXIST, data: null };\n }\n\n if (hasTrunc) {\n this.truncate(path, 0);\n }\n\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: idx, position: 0, flags });\n\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n\n // ---- CLOSE ----\n close(fd: number): { status: number } {\n if (!this.fdTable.has(fd)) return { status: CODE_TO_STATUS.EBADF };\n this.fdTable.delete(fd);\n return { status: 0 };\n }\n\n // ---- FREAD ----\n fread(fd: number, length: number, position: number | null): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n\n const inode = this.readInode(entry.inodeIdx);\n const pos = position ?? entry.position;\n const readLen = Math.min(length, inode.size - pos);\n\n if (readLen <= 0) return { status: 0, data: new Uint8Array(0) };\n\n // Read from specific offset within the file's data blocks\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n const buf = new Uint8Array(readLen);\n this.handle.read(buf, { at: dataOffset });\n\n // Update position\n if (position === null) {\n entry.position += readLen;\n }\n\n return { status: 0, data: buf };\n }\n\n // ---- FWRITE ----\n fwrite(fd: number, data: Uint8Array, position: number | null): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n\n const inode = this.readInode(entry.inodeIdx);\n const isAppend = (entry.flags & 1024) !== 0; // O_APPEND\n const pos = isAppend ? inode.size : (position ?? entry.position);\n const endPos = pos + data.byteLength;\n\n // Check if we need to grow\n if (endPos > inode.size) {\n const neededBlocks = Math.ceil(endPos / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Grow — read old data, reallocate, write back\n const oldData = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBuf = new Uint8Array(endPos);\n newBuf.set(oldData);\n newBuf.set(data, pos);\n this.writeData(newFirst, newBuf);\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n } else {\n // Fits, write at position\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n this.handle.write(data, { at: dataOffset });\n }\n inode.size = endPos;\n } else {\n // Write within existing bounds\n const dataOffset = this.dataOffset + inode.firstBlock * this.blockSize + pos;\n this.handle.write(data, { at: dataOffset });\n }\n\n inode.mtime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n\n // Update position\n if (position === null) {\n entry.position = endPos;\n }\n\n this.commitPending();\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, data.byteLength, true);\n return { status: 0, data: buf };\n }\n\n // ---- FSTAT ----\n fstat(fd: number): { status: number; data: Uint8Array | null } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF, data: null };\n return this.encodeStatResponse(entry.inodeIdx);\n }\n\n // ---- FTRUNCATE ----\n ftruncate(fd: number, len: number = 0): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n\n const inode = this.readInode(entry.inodeIdx);\n const path = this.readPath(inode.pathOffset, inode.pathLength);\n return this.truncate(path, len);\n }\n\n // ---- FSYNC ----\n fsync(): { status: number } {\n this.commitPending();\n this.handle.flush();\n return { status: 0 };\n }\n\n // ---- OPENDIR ----\n opendir(path: string, tabId: string): { status: number; data: Uint8Array | null } {\n path = this.normalizePath(path);\n const idx = this.resolvePathComponents(path, true);\n if (idx === undefined) return { status: CODE_TO_STATUS.ENOENT, data: null };\n\n const inode = this.readInode(idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\n\n // Use fd table for dir handles too\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: idx, position: 0, flags: 0 });\n\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n\n // ---- MKDTEMP ----\n mkdtemp(prefix: string): { status: number; data: Uint8Array | null } {\n const suffix = Math.random().toString(36).substring(2, 8);\n const path = this.normalizePath(prefix + suffix);\n\n // Ensure parent directories exist\n const parentStatus = this.ensureParent(path);\n if (parentStatus !== 0) {\n // Auto-create parent directories for mkdtemp\n const parentPath = path.substring(0, path.lastIndexOf('/'));\n if (parentPath) {\n this.mkdirRecursive(parentPath);\n }\n }\n\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n this.createInode(path, INODE_TYPE.DIRECTORY, mode, 0);\n\n this.commitPending();\n return { status: 0, data: encoder.encode(path) };\n }\n\n // ========== Helpers ==========\n\n private getDirectChildren(dirPath: string): string[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const children: string[] = [];\n\n for (const path of this.pathIndex.keys()) {\n if (path === dirPath) continue;\n if (!path.startsWith(prefix)) continue;\n // Direct child: no more slashes after prefix\n const rest = path.substring(prefix.length);\n if (!rest.includes('/')) {\n children.push(path);\n }\n }\n\n return children.sort();\n }\n\n private getAllDescendants(dirPath: string): string[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const descendants: string[] = [];\n\n for (const path of this.pathIndex.keys()) {\n if (path.startsWith(prefix)) descendants.push(path);\n }\n\n // Sort by depth (deepest first) for safe deletion\n return descendants.sort((a, b) => {\n const da = a.split('/').length;\n const db = b.split('/').length;\n return db - da;\n });\n }\n\n private ensureParent(path: string): number {\n const lastSlash = path.lastIndexOf('/');\n if (lastSlash <= 0) return 0; // Parent is root, always exists\n\n const parentPath = path.substring(0, lastSlash);\n const parentIdx = this.pathIndex.get(parentPath);\n if (parentIdx === undefined) return CODE_TO_STATUS.ENOENT;\n\n const parentInode = this.readInode(parentIdx);\n if (parentInode.type !== INODE_TYPE.DIRECTORY) return CODE_TO_STATUS.ENOTDIR;\n\n return 0;\n }\n\n /** Clean up all fds owned by a tab */\n cleanupTab(tabId: string): void {\n for (const [fd, entry] of this.fdTable) {\n if (entry.tabId === tabId) {\n this.fdTable.delete(fd);\n }\n }\n }\n\n /** Get all file paths and their data for OPFS sync */\n getAllFiles(): { path: string; idx: number }[] {\n const files: { path: string; idx: number }[] = [];\n for (const [path, idx] of this.pathIndex) {\n files.push({ path, idx });\n }\n return files;\n }\n\n /** Get file path for a file descriptor (used by OPFS sync for FD-based ops) */\n getPathForFd(fd: number): string | null {\n const entry = this.fdTable.get(fd);\n if (!entry) return null;\n const inode = this.readInode(entry.inodeIdx);\n return this.readPath(inode.pathOffset, inode.pathLength);\n }\n\n /** Get file data by inode index */\n getInodeData(idx: number): { type: number; data: Uint8Array; mtime: number } {\n const inode = this.readInode(idx);\n const data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n return { type: inode.type, data, mtime: inode.mtime };\n }\n\n /** Export all files/dirs/symlinks from the VFS */\n exportAll(): Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }> {\n const result: Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }> = [];\n for (const [path, idx] of this.pathIndex) {\n const inode = this.readInode(idx);\n let data: Uint8Array | null = null;\n if (inode.type === INODE_TYPE.FILE || inode.type === INODE_TYPE.SYMLINK) {\n data = inode.size > 0\n ? this.readData(inode.firstBlock, inode.blockCount, inode.size)\n : new Uint8Array(0);\n }\n result.push({ path, type: inode.type, data, mode: inode.mode, mtime: inode.mtime });\n }\n // Sort directories first so parents are created before children\n result.sort((a, b) => {\n if (a.type === INODE_TYPE.DIRECTORY && b.type !== INODE_TYPE.DIRECTORY) return -1;\n if (a.type !== INODE_TYPE.DIRECTORY && b.type === INODE_TYPE.DIRECTORY) return 1;\n return a.path.localeCompare(b.path);\n });\n return result;\n }\n\n flush(): void {\n this.handle.flush();\n }\n}\n","/**\n * VFS Helper Functions\n *\n * Standalone utilities for VFS maintenance:\n * - unpackToOPFS: Export VFS contents to real OPFS files\n * - loadFromOPFS: Rebuild VFS from real OPFS files\n * - repairVFS: Attempt to recover files from a corrupt VFS binary\n *\n * Each function accepts an optional `fs` parameter (a running VFSFileSystem\n * instance). When provided, operations go through the VFS worker which holds\n * the exclusive sync handle on .vfs.bin. This allows these functions to work\n * from the main thread while the VFS is running.\n *\n * When `fs` is NOT provided, spawns a repair worker that uses\n * createSyncAccessHandle for direct disk I/O (no RAM bloat).\n */\n\nimport { VFSEngine } from './vfs/engine.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Minimal FS interface accepted by the helper functions.\n * Compatible with VFSFileSystem — avoids circular import.\n */\ninterface FsLike {\n readFileSync(path: string, options?: any): any;\n writeFileSync(path: string, data: any, options?: any): void;\n mkdirSync(path: string, options?: any): any;\n readdirSync(path: string, options?: any): any;\n rmSync(path: string, options?: any): void;\n statSync(path: string): any;\n symlinkSync?(target: string, path: string): void;\n}\n\n// ========== In-Memory Handle (main thread fallback) ==========\n\n/**\n * In-memory implementation of FileSystemSyncAccessHandle.\n * Used on the main thread where createSyncAccessHandle is unavailable.\n * After operations complete, call saveToOPFS() to persist.\n */\nclass MemoryHandle {\n private buf: Uint8Array;\n private len: number;\n\n constructor(initialData?: ArrayBuffer) {\n if (initialData && initialData.byteLength > 0) {\n this.buf = new Uint8Array(initialData);\n this.len = initialData.byteLength;\n } else {\n this.buf = new Uint8Array(1024 * 1024); // 1MB initial\n this.len = 0;\n }\n }\n\n getSize(): number {\n return this.len;\n }\n\n read(target: ArrayBufferView, opts?: { at?: number }): number {\n const offset = opts?.at ?? 0;\n const dst = new Uint8Array(target.buffer, target.byteOffset, target.byteLength);\n const bytesToRead = Math.min(dst.length, this.len - offset);\n if (bytesToRead <= 0) return 0;\n dst.set(this.buf.subarray(offset, offset + bytesToRead));\n return bytesToRead;\n }\n\n write(data: ArrayBufferView, opts?: { at?: number }): number {\n const offset = opts?.at ?? 0;\n const src = new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n const needed = offset + src.length;\n if (needed > this.buf.length) {\n this.grow(needed);\n }\n this.buf.set(src, offset);\n if (needed > this.len) this.len = needed;\n return src.length;\n }\n\n truncate(size: number): void {\n if (size > this.buf.length) {\n this.grow(size);\n }\n if (size > this.len) {\n this.buf.fill(0, this.len, size);\n }\n this.len = size;\n }\n\n flush(): void {}\n close(): void {}\n\n getBuffer(): ArrayBuffer {\n return this.buf.buffer.slice(0, this.len) as ArrayBuffer;\n }\n\n private grow(minSize: number): void {\n const MAX_SIZE = 4 * 1024 * 1024 * 1024; // 4GB\n if (minSize > MAX_SIZE) {\n throw new Error(`MemoryHandle: cannot grow to ${minSize} bytes (max ${MAX_SIZE})`);\n }\n const newSize = Math.max(minSize, this.buf.length * 2);\n const newBuf = new Uint8Array(newSize);\n newBuf.set(this.buf.subarray(0, this.len));\n this.buf = newBuf;\n }\n}\n\nasync function openVFSHandle(\n fileHandle: FileSystemFileHandle\n): Promise<{ handle: any; isMemory: boolean }> {\n try {\n const handle = await (fileHandle as any).createSyncAccessHandle();\n return { handle, isMemory: false };\n } catch {\n const file = await fileHandle.getFile();\n const data = await file.arrayBuffer();\n return { handle: new MemoryHandle(data), isMemory: true };\n }\n}\n\n// ========== OPFS Navigation Helpers ==========\n\nasync function navigateToRoot(root: string): Promise<FileSystemDirectoryHandle> {\n let dir = await navigator.storage.getDirectory();\n if (root && root !== '/') {\n for (const seg of root.split('/').filter(Boolean)) {\n dir = await dir.getDirectoryHandle(seg, { create: true });\n }\n }\n return dir;\n}\n\nasync function ensureParentDirs(rootDir: FileSystemDirectoryHandle, path: string): Promise<FileSystemDirectoryHandle> {\n const parts = path.split('/').filter(Boolean);\n parts.pop();\n let dir = rootDir;\n for (const part of parts) {\n dir = await dir.getDirectoryHandle(part, { create: true });\n }\n return dir;\n}\n\nfunction basename(path: string): string {\n const parts = path.split('/').filter(Boolean);\n return parts[parts.length - 1] || '';\n}\n\nasync function writeOPFSFile(rootDir: FileSystemDirectoryHandle, path: string, data: Uint8Array): Promise<void> {\n const parentDir = await ensureParentDirs(rootDir, path);\n const name = basename(path);\n const fileHandle = await parentDir.getFileHandle(name, { create: true });\n try {\n const syncHandle = await (fileHandle as any).createSyncAccessHandle();\n try {\n syncHandle.truncate(0);\n if (data.byteLength > 0) {\n syncHandle.write(data, { at: 0 });\n }\n syncHandle.flush();\n } finally {\n syncHandle.close();\n }\n } catch {\n const writable = await (fileHandle as any).createWritable();\n await writable.write(data);\n await writable.close();\n }\n}\n\nasync function clearDirectory(dir: FileSystemDirectoryHandle, skip: Set<string>): Promise<void> {\n const entries: string[] = [];\n for await (const name of (dir as any).keys()) {\n if (!skip.has(name)) entries.push(name);\n }\n for (const name of entries) {\n await dir.removeEntry(name, { recursive: true });\n }\n}\n\ninterface RecursiveEntry {\n path: string;\n type: 'file' | 'directory';\n data?: ArrayBuffer;\n}\n\nasync function readOPFSRecursive(\n dir: FileSystemDirectoryHandle,\n prefix: string,\n skip: Set<string>,\n): Promise<RecursiveEntry[]> {\n const result: RecursiveEntry[] = [];\n for await (const [name, handle] of (dir as any).entries()) {\n if (prefix === '' && skip.has(name)) continue;\n const fullPath = prefix ? `${prefix}/${name}` : `/${name}`;\n if (handle.kind === 'directory') {\n result.push({ path: fullPath, type: 'directory' });\n const children = await readOPFSRecursive(handle as FileSystemDirectoryHandle, fullPath, skip);\n result.push(...children);\n } else {\n const file = await (handle as FileSystemFileHandle).getFile();\n const data = await file.arrayBuffer();\n result.push({ path: fullPath, type: 'file', data });\n }\n }\n return result;\n}\n\n/**\n * Recursively read all VFS entries via the fs API.\n */\nfunction readVFSRecursive(fs: FsLike, vfsPath: string): Array<{ path: string; type: 'file' | 'directory'; data?: Uint8Array }> {\n const result: Array<{ path: string; type: 'file' | 'directory'; data?: Uint8Array }> = [];\n let entries: any[];\n try {\n entries = fs.readdirSync(vfsPath, { withFileTypes: true });\n } catch {\n return result;\n }\n for (const entry of entries) {\n const fullPath = vfsPath === '/' ? `/${entry.name}` : `${vfsPath}/${entry.name}`;\n if (entry.isDirectory()) {\n result.push({ path: fullPath, type: 'directory' });\n result.push(...readVFSRecursive(fs, fullPath));\n } else {\n try {\n const data = fs.readFileSync(fullPath) as Uint8Array;\n result.push({ path: fullPath, type: 'file', data });\n } catch {\n // Skip unreadable files\n }\n }\n }\n return result;\n}\n\n// ========== Public Helper Functions ==========\n\nexport interface UnpackResult {\n files: number;\n directories: number;\n}\n\n/**\n * Unpack VFS contents to real OPFS files.\n *\n * When `fs` is provided: reads VFS via the running instance (communicates\n * with VFS worker), writes to OPFS additively (no deletions).\n *\n * When `fs` is NOT provided: opens .vfs.bin directly via VFSEngine,\n * clears OPFS (except .vfs.bin), then writes all entries.\n * Requires VFS to be stopped or a Worker context.\n */\nexport async function unpackToOPFS(root: string = '/', fs?: FsLike): Promise<UnpackResult> {\n const rootDir = await navigateToRoot(root);\n\n if (fs) {\n // Read all entries from VFS via the running instance\n const vfsEntries = readVFSRecursive(fs, '/');\n\n let files = 0;\n let directories = 0;\n\n for (const entry of vfsEntries) {\n if (entry.type === 'directory') {\n const name = basename(entry.path);\n const parent = await ensureParentDirs(rootDir, entry.path);\n await parent.getDirectoryHandle(name, { create: true });\n directories++;\n } else {\n try {\n await writeOPFSFile(rootDir, entry.path, entry.data ?? new Uint8Array(0));\n files++;\n } catch (err: any) {\n console.warn(`[VFS] Failed to write OPFS file ${entry.path}: ${err.message}`);\n }\n }\n }\n\n return { files, directories };\n }\n\n // Direct VFSEngine path (VFS not running)\n const vfsFileHandle = await rootDir.getFileHandle('.vfs.bin');\n const { handle } = await openVFSHandle(vfsFileHandle);\n\n let entries: Array<{ path: string; type: number; data: Uint8Array | null; mode: number; mtime: number }>;\n try {\n const engine = new VFSEngine();\n engine.init(handle);\n entries = engine.exportAll();\n } finally {\n handle.close();\n }\n\n await clearDirectory(rootDir, new Set(['.vfs.bin']));\n\n let files = 0;\n let directories = 0;\n for (const entry of entries) {\n if (entry.path === '/') continue;\n if (entry.type === INODE_TYPE.DIRECTORY) {\n const name = basename(entry.path);\n const parent = await ensureParentDirs(rootDir, entry.path);\n await parent.getDirectoryHandle(name, { create: true });\n directories++;\n } else if (entry.type === INODE_TYPE.FILE || entry.type === INODE_TYPE.SYMLINK) {\n await writeOPFSFile(rootDir, entry.path, entry.data ?? new Uint8Array(0));\n files++;\n }\n }\n\n return { files, directories };\n}\n\nexport interface LoadResult {\n files: number;\n directories: number;\n}\n\n/**\n * Load all real OPFS files into VFS.\n *\n * When `fs` is provided: reads OPFS files, clears VFS, writes to VFS via\n * the running instance. Never touches .vfs.bin directly.\n *\n * When `fs` is NOT provided: reads OPFS files, deletes .vfs.bin, creates\n * fresh VFS via VFSEngine. Requires VFS to be stopped or a Worker context.\n */\nexport async function loadFromOPFS(root: string = '/', fs?: FsLike): Promise<LoadResult> {\n const rootDir = await navigateToRoot(root);\n const opfsEntries = await readOPFSRecursive(rootDir, '', new Set(['.vfs.bin']));\n\n if (fs) {\n // Clear VFS root entries\n try {\n const rootEntries = fs.readdirSync('/') as string[];\n for (const entry of rootEntries) {\n try {\n fs.rmSync(`/${entry}`, { recursive: true, force: true });\n } catch { /* skip entries that can't be removed */ }\n }\n } catch { /* root might be empty */ }\n\n // Write directories first (sorted by depth)\n const dirs = opfsEntries\n .filter(e => e.type === 'directory')\n .sort((a, b) => a.path.localeCompare(b.path));\n\n let files = 0;\n let directories = 0;\n\n for (const dir of dirs) {\n try {\n fs.mkdirSync(dir.path, { recursive: true, mode: 0o755 });\n directories++;\n } catch { /* may already exist */ }\n }\n\n // Write files\n const fileEntries = opfsEntries.filter(e => e.type === 'file');\n for (const file of fileEntries) {\n try {\n const parentPath = file.path.substring(0, file.path.lastIndexOf('/')) || '/';\n if (parentPath !== '/') {\n try { fs.mkdirSync(parentPath, { recursive: true, mode: 0o755 }); } catch {}\n }\n fs.writeFileSync(file.path, new Uint8Array(file.data!));\n files++;\n } catch (err: any) {\n console.warn(`[VFS] Failed to write ${file.path}: ${err.message}`);\n }\n }\n\n return { files, directories };\n }\n\n // Delegate to repair worker (uses createSyncAccessHandle for disk I/O)\n return spawnRepairWorker<LoadResult>({ type: 'load', root });\n}\n\nexport interface RepairResult {\n recovered: number;\n lost: number;\n entries: Array<{\n path: string;\n type: 'file' | 'directory' | 'symlink';\n size: number;\n /** true when the inode was found but data blocks were out of bounds (content lost) */\n contentLost?: boolean;\n }>;\n}\n\n/**\n * Attempt to repair a VFS.\n *\n * When `fs` is provided: rebuilds VFS from OPFS files (non-destructive read\n * of OPFS), then syncs repaired VFS back to OPFS (additive, no deletions).\n * This is the safe path — OPFS is the source of truth.\n *\n * When `fs` is NOT provided: scans raw .vfs.bin for recoverable inodes,\n * creates fresh VFS with recovered data. For corrupt VFS where init failed.\n */\nexport async function repairVFS(root: string = '/', fs?: FsLike): Promise<RepairResult> {\n if (fs) {\n // Step 1: Rebuild VFS from OPFS (reads OPFS, writes to VFS — OPFS untouched)\n const loadResult = await loadFromOPFS(root, fs);\n\n // Step 2: Only now that VFS is healthy, sync back to OPFS (additive)\n await unpackToOPFS(root, fs);\n\n const total = loadResult.files + loadResult.directories;\n return {\n recovered: total,\n lost: 0,\n entries: [], // Detailed entries not available in fs-based path\n };\n }\n\n // Raw .vfs.bin repair via worker (uses createSyncAccessHandle for disk I/O)\n return spawnRepairWorker<RepairResult>({ type: 'repair', root });\n}\n\n// ========== Repair Worker Delegation ==========\n\n/**\n * Spawn the repair worker and await its result.\n * The worker uses createSyncAccessHandle for direct disk I/O —\n * no MemoryHandle, works from main thread, follower tabs, and workers.\n */\nfunction spawnRepairWorker<T>(msg: Record<string, unknown>): Promise<T> {\n return new Promise((resolve, reject) => {\n const worker = new Worker(\n new URL('./workers/repair.worker.js', import.meta.url),\n { type: 'module' },\n );\n worker.onmessage = (event: MessageEvent) => {\n worker.terminate();\n if (event.data.error) {\n reject(new Error(event.data.error));\n } else {\n resolve(event.data as T);\n }\n };\n worker.onerror = (event) => {\n worker.terminate();\n reject(new Error(event.message || 'Repair worker failed'));\n };\n worker.postMessage(msg);\n });\n}\n","/**\n * VFS-FS: High-performance OPFS-based Node.js fs polyfill\n *\n * Uses SharedArrayBuffer + Atomics for sync operations with a VFS binary format.\n *\n * @example\n * ```typescript\n * import fs from '@componentor/fs';\n *\n * // Sync API (blocks until ready)\n * fs.writeFileSync('/hello.txt', 'Hello World!');\n * const data = fs.readFileSync('/hello.txt', 'utf8');\n *\n * // Async API\n * await fs.promises.writeFile('/async.txt', 'Async data');\n * const content = await fs.promises.readFile('/async.txt', 'utf8');\n * ```\n */\n\nexport { VFSFileSystem } from './filesystem.js';\nexport { NodeReadable, NodeWritable, SimpleEventEmitter } from './node-streams.js';\nexport { constants } from './constants.js';\nexport { FSError, createError, statusToError } from './errors.js';\nexport { unpackToOPFS, loadFromOPFS, repairVFS } from './helpers.js';\nexport type { UnpackResult, LoadResult, RepairResult } from './helpers.js';\nexport * as path from './path.js';\nexport type {\n Stats,\n StatFs,\n BigIntStats,\n StatOptions,\n Dirent,\n ReadOptions,\n WriteOptions,\n MkdirOptions,\n RmdirOptions,\n RmOptions,\n CpOptions,\n ReaddirOptions,\n Encoding,\n PathLike,\n FileHandle,\n Dir,\n VFSConfig,\n VFSLimits,\n FSMode,\n WatchOptions,\n WatchEventType,\n FSWatcher,\n WatchListener,\n WatchFileListener,\n ReadStreamOptions,\n WriteStreamOptions,\n FSReadStream,\n FSWriteStream,\n OpenAsBlobOptions,\n} from './types.js';\n\nimport { VFSFileSystem } from './filesystem.js';\n\n/** Create a configured VFS instance */\nexport function createFS(config?: import('./types.js').VFSConfig): VFSFileSystem {\n return new VFSFileSystem(config);\n}\n\n// Lazy default singleton — only created on first access\nlet _defaultFS: VFSFileSystem | undefined;\n\n/** Get (or create) the default VFS singleton */\nexport function getDefaultFS(): VFSFileSystem {\n if (!_defaultFS) _defaultFS = new VFSFileSystem();\n return _defaultFS;\n}\n\n/** Async init helper — avoids blocking main thread */\nexport function init(): Promise<void> {\n return getDefaultFS().init();\n}\n"]}
|