@componentor/fs 3.0.50 → 3.0.51

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.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/chmod.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/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","result","status","isAbsolute","open","entries","inode","data","children","totalSize","buf","view","offset","fd","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 rawListeners(event: string): Function[] {\n return [...(this._listeners.get(event) ?? [])];\n }\n\n prependListener(event: string, fn: Listener): this {\n const arr = this._listeners.get(event) ?? [];\n arr.unshift(fn);\n this._listeners.set(event, arr);\n return this;\n }\n\n prependOnceListener(event: string, fn: Listener): this {\n const wrapper: Listener = (...args: unknown[]) => {\n this.off(event, wrapper);\n fn(...args);\n };\n return this.prependListener(event, wrapper);\n }\n\n eventNames(): string[] {\n return [...this._listeners.keys()].filter(k => (this._listeners.get(k)?.length ?? 0) > 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 FCHMOD: 31,\n FCHOWN: 32,\n FUTIMES: 33,\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 = 100000;\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, BigIntStats, StatOptions, 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, decodeStatsBigInt } 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 options?: StatOptions\n): Stats | BigIntStats {\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 options?.bigint ? decodeStatsBigInt(data!) : 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\nexport function 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 // Payload: [fd: u32][mode: u32] — engine resolves fd → inode and\n // updates its mode bits directly, matching native libuv.\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const { status } = await asyncRequest(OP.FCHMOD, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\n },\n\n async chown(uid: number, gid: number) {\n // Payload: [fd: u32][uid: u32][gid: u32]\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const { status } = await asyncRequest(OP.FCHOWN, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\n },\n\n async utimes(atime: Date | number, mtime: Date | number) {\n // Payload: [fd: u32][pad: u32][atime: f64][mtime: f64] — 4-byte pad\n // keeps f64 fields 8-byte aligned for DataView access on both sides.\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.FUTIMES, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\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 { 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\n/**\n * fchmodSync — chmod on an open file descriptor. The engine looks up the\n * inode directly from its fd table and mutates the mode bits in place,\n * matching what native Node does at the libuv layer.\n *\n * Payload layout: [fd: u32][mode: u32]\n */\nexport function fchmodSync(\n syncRequest: SyncRequestFn,\n fd: number,\n mode: number\n): void {\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const buf = encodeRequest(OP.FCHMOD, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\n}\n\nexport async function fchmod(\n asyncRequest: AsyncRequestFn,\n fd: number,\n mode: number\n): Promise<void> {\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const { status } = await asyncRequest(OP.FCHMOD, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\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';\nimport { chmodSync, chmod as chmodAsync } from './chmod.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 if (opts?.mode !== undefined) {\n chmodSync(syncRequest, filePath, opts.mode);\n }\n return;\n }\n\n // Non-default flag: use fd-based open → write → close\n const fd = openSync(syncRequest, filePath, flag, opts?.mode);\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 if (opts?.mode !== undefined) {\n await chmodAsync(asyncRequest, filePath, opts.mode);\n }\n return;\n }\n\n // Non-default flag: use FileHandle-based open → writeFile → close\n const handle = await open(asyncRequest, filePath, flag, opts?.mode);\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\nconst textEncoder = new TextEncoder();\n\nfunction namesToBuffers(names: string[]): Uint8Array[] {\n return names.map(n => textEncoder.encode(n));\n}\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[] | Uint8Array[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const asBuffer = opts?.encoding === 'buffer';\n\n if (opts?.recursive) {\n const result = readdirRecursiveSync(\n syncRequest, filePath, '', !!opts?.withFileTypes\n );\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result as string[] | Dirent[];\n }\n\n const result = readdirBaseSync(syncRequest, filePath, !!opts?.withFileTypes);\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result;\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Uint8Array[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const asBuffer = opts?.encoding === 'buffer';\n\n if (opts?.recursive) {\n const result = await readdirRecursiveAsync(\n asyncRequest, filePath, '', !!opts?.withFileTypes\n );\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result as string[] | Dirent[];\n }\n\n const result = await readdirBaseAsync(asyncRequest, filePath, !!opts?.withFileTypes);\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result;\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 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\n/**\n * fchownSync — chown on an open fd. Payload: [fd: u32][uid: u32][gid: u32].\n * The engine looks up the inode from the fd table and updates uid/gid directly.\n */\nexport function fchownSync(\n syncRequest: SyncRequestFn,\n fd: number,\n uid: number,\n gid: number\n): void {\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const buf = encodeRequest(OP.FCHOWN, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\n}\n\nexport async function fchown(\n asyncRequest: AsyncRequestFn,\n fd: number,\n uid: number,\n gid: number\n): Promise<void> {\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const { status } = await asyncRequest(OP.FCHOWN, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\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\n/**\n * futimesSync — utimes on an open fd. Payload layout:\n * [fd: u32][pad: u32][atime: f64][mtime: f64]\n * The 4-byte pad keeps the float64 fields 8-byte aligned so both server and\n * client decode with straight DataView calls.\n */\nexport function futimesSync(\n syncRequest: SyncRequestFn,\n fd: number,\n atime: Date | number,\n mtime: Date | number\n): void {\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.FUTIMES, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\n}\n\nexport async function futimes(\n asyncRequest: AsyncRequestFn,\n fd: number,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.FUTIMES, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\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 throw new TypeError('The \"path\" argument must be of type string, Uint8Array, or URL. Received ' + typeof 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 /** When true, the listener wants Buffer filenames instead of strings. */\n asBuffer: boolean;\n /**\n * Per-tick coalescing: dedupe `(eventType, filename)` pairs emitted during\n * the same microtask, matching libuv's behavior where the kernel queues\n * multiple inotify events per syscall and libuv delivers the deduplicated\n * set in one batch.\n */\n pendingEvents: Set<string> | null;\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 — dedupe per (event, filename) per microtask\n for (const entry of watchers) {\n const filename = matchWatcher(entry, mutatedPath);\n if (filename === null) continue;\n queueWatchEvent(entry, eventType, filename);\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/**\n * Coalesce events for a single watcher during one microtask. Node/libuv\n * collapses runs of rapid inotify events so the listener observes at most one\n * `(event, filename)` per tick — we match that to avoid firing e.g. two\n * `change` events when a single write touches both the file and its inode.\n */\nfunction queueWatchEvent(entry: WatchEntry, eventType: 'change' | 'rename', filename: string): void {\n const key = eventType + ':' + filename;\n if (!entry.pendingEvents) {\n entry.pendingEvents = new Set();\n queueMicrotask(() => {\n const pending = entry.pendingEvents!;\n entry.pendingEvents = null;\n for (const k of pending) {\n const colon = k.indexOf(':');\n const et = k.slice(0, colon) as 'change' | 'rename';\n const name = k.slice(colon + 1);\n try {\n entry.listener(et, entry.asBuffer ? encodeFilename(name) : name);\n } catch { /* swallow */ }\n }\n });\n }\n entry.pendingEvents.add(key);\n}\n\nfunction encodeFilename(name: string): Uint8Array {\n // Node returns a Buffer when encoding='buffer'; Buffer is a Uint8Array\n // subclass, and our wrapper layer (fs.polyfill.ts in the webcontainer)\n // wraps this with Buffer.from() if the host environment has Buffer.\n return new TextEncoder().encode(name);\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 const asBuffer = (opts as { encoding?: string }).encoding === 'buffer';\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive: opts.recursive ?? false,\n listener: cb,\n signal,\n asBuffer,\n pendingEvents: null,\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 asBuffer = (options as { encoding?: string } | undefined)?.encoding === 'buffer';\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 asBuffer,\n pendingEvents: null,\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, Dirent } 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// Glob pattern matching\n//\n// Supports the full Node.js `fs.glob` pattern grammar:\n// * — any run of non-separator characters (including empty)\n// ? — exactly one non-separator character\n// ** — any number of path segments\n// [abc] — character class\n// [a-z] — character range\n// [!abc] — negated character class\n// \\x — literal x (escape)\n// {foo,bar} — brace alternation (expanded to multiple patterns up-front)\n//\n// Brace expansion is handled by producing multiple flat patterns before any\n// directory walking; the walker then matches each expanded pattern in turn.\n// ============================================================================\n\n/** Expand `{a,b}` alternations into a flat list of patterns. */\nfunction expandBraces(pattern: string): string[] {\n const out: string[] = [];\n function recurse(prefix: string, rest: string): void {\n const open = findBrace(rest);\n if (open === -1) {\n out.push(prefix + rest);\n return;\n }\n const close = matchCloseBrace(rest, open);\n if (close === -1) {\n // Unbalanced brace — treat literally, continue past it\n out.push(prefix + rest);\n return;\n }\n const head = rest.slice(0, open);\n const body = rest.slice(open + 1, close);\n const tail = rest.slice(close + 1);\n for (const alt of splitAlternations(body)) {\n recurse(prefix + head + alt, tail);\n }\n }\n recurse('', pattern);\n return out;\n}\n\n/** Find the first unescaped `{`, skipping over character classes. */\nfunction findBrace(s: string): number {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (c === '\\\\') { i++; continue }\n if (c === '[') {\n const end = s.indexOf(']', i + 1);\n if (end !== -1) { i = end; continue }\n }\n if (c === '{') return i;\n }\n return -1;\n}\n\n/** Find the matching `}` for an opening brace, respecting nesting. */\nfunction matchCloseBrace(s: string, open: number): number {\n let depth = 1;\n for (let i = open + 1; i < s.length; i++) {\n const c = s[i];\n if (c === '\\\\') { i++; continue }\n if (c === '[') {\n const end = s.indexOf(']', i + 1);\n if (end !== -1) { i = end; continue }\n }\n if (c === '{') depth++;\n else if (c === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/** Split a brace body on top-level commas, honoring nested braces and escapes. */\nfunction splitAlternations(body: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let start = 0;\n for (let i = 0; i < body.length; i++) {\n const c = body[i];\n if (c === '\\\\') { i++; continue }\n if (c === '{') depth++;\n else if (c === '}') depth--;\n else if (c === ',' && depth === 0) {\n parts.push(body.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(body.slice(start));\n return parts;\n}\n\n/**\n * Compile a single glob path-segment into a RegExp. `pattern` is one segment\n * (no `/`) after brace expansion, so it only needs to handle `*`, `?`, `[...]`\n * and `\\x` escapes.\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 === '\\\\' && i + 1 < pattern.length) {\n // Literal next char\n const next = pattern[++i];\n re += /[.+^${}()|[\\]\\\\*?]/.test(next) ? '\\\\' + next : next;\n } else if (ch === '*') {\n re += '[^/]*';\n } else if (ch === '?') {\n re += '[^/]';\n } else if (ch === '[') {\n // Character class: copy verbatim, translating `!` → `^` and passing\n // ranges through as-is. Escape only `]` which we need to find the end.\n const end = pattern.indexOf(']', i + 1);\n if (end === -1) {\n // Unclosed class — treat as literal `[`\n re += '\\\\[';\n } else {\n let body = pattern.slice(i + 1, end);\n if (body.startsWith('!')) body = '^' + body.slice(1);\n re += '[' + body + ']';\n i = end;\n }\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\nfunction normalizeCwd(cwd: string | URL | undefined): string {\n if (!cwd) return '/';\n if (typeof cwd === 'string') return cwd || '/';\n // URL — only file: supported\n return cwd.pathname || '/';\n}\n\n/** Build a Dirent from a file path + parent dir + stat. */\nfunction makeDirent(parentPath: string, name: string, isDir: boolean, isSymlink: boolean): Dirent {\n return {\n name,\n parentPath,\n isFile: () => !isDir && !isSymlink,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n } as Dirent;\n}\n\n// ============================================================================\n// Sync\n// ============================================================================\n\nexport function globSync(\n syncRequest: SyncRequestFn,\n pattern: string | string[],\n options?: GlobOptions,\n): string[] | Dirent[] {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const cwd = normalizeCwd(options?.cwd);\n const exclude = options?.exclude as ((arg: string | Dirent) => boolean) | undefined;\n const withFileTypes = options?.withFileTypes === true;\n\n const resultsSet = new Set<string>(); // dedupe across expanded patterns\n const resultsDirents: Dirent[] = [];\n\n const pushResult = (fullPath: string): void => {\n if (withFileTypes) {\n if (!resultsSet.has(fullPath)) {\n resultsSet.add(fullPath);\n // Stat to determine type. This matches Node, which exposes Dirents for matches.\n let isDir = false, isSymlink = false;\n try {\n const s = statSync(syncRequest, fullPath);\n isDir = s.isDirectory();\n // statSync follows symlinks — our VFS lstat would distinguish, but we\n // keep it simple here.\n } catch { /* treat as file */ }\n const slash = fullPath.lastIndexOf('/');\n const parent = slash <= 0 ? '/' : fullPath.slice(0, slash);\n const name = fullPath.slice(slash + 1);\n const dirent = makeDirent(parent, name, isDir, isSymlink);\n if (exclude && exclude(dirent)) { resultsSet.delete(fullPath); return }\n resultsDirents.push(dirent);\n }\n } else {\n if (exclude && exclude(fullPath)) return;\n resultsSet.add(fullPath);\n }\n };\n\n function walk(dir: string, segments: 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 // Zero segments: try the next pattern segment in the same directory.\n if (segIdx + 1 < segments.length) {\n walk(dir, segments, segIdx + 1);\n } else {\n // Trailing `**` matches the directory itself too (Node behavior).\n pushResult(dir);\n }\n\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 let isDir: boolean;\n try {\n isDir = statSync(syncRequest, full).isDirectory();\n } catch { continue }\n\n if (isDir) {\n // Keep ** active at same segIdx\n walk(full, segments, segIdx);\n }\n\n // If ** is the last segment, everything underneath matches.\n if (isLast) pushResult(full);\n }\n return;\n }\n\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch { return }\n\n const re = segmentToRegex(seg);\n for (const entry of entries) {\n if (!re.test(entry)) continue;\n const full = joinPath(dir, entry);\n\n if (isLast) {\n pushResult(full);\n } else {\n let isDir: boolean;\n try { isDir = statSync(syncRequest, full).isDirectory() }\n catch { continue }\n if (isDir) walk(full, segments, segIdx + 1);\n }\n }\n }\n\n for (const pat of patterns) {\n for (const expanded of expandBraces(pat)) {\n const segments = expanded.split('/').filter(s => s !== '');\n walk(cwd, segments, 0);\n }\n }\n\n return withFileTypes ? resultsDirents : Array.from(resultsSet);\n}\n\n// ============================================================================\n// Async (also usable via `for await` as an async generator)\n// ============================================================================\n\nexport async function glob(\n asyncRequest: AsyncRequestFn,\n pattern: string | string[],\n options?: GlobOptions,\n): Promise<string[] | Dirent[]> {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const cwd = normalizeCwd(options?.cwd);\n const exclude = options?.exclude as ((arg: string | Dirent) => boolean) | undefined;\n const withFileTypes = options?.withFileTypes === true;\n\n const resultsSet = new Set<string>();\n const resultsDirents: Dirent[] = [];\n\n const pushResult = async (fullPath: string): Promise<void> => {\n if (withFileTypes) {\n if (resultsSet.has(fullPath)) return;\n resultsSet.add(fullPath);\n let isDir = false, isSymlink = false;\n try {\n const s = await stat(asyncRequest, fullPath);\n isDir = s.isDirectory();\n } catch { /* treat as file */ }\n const slash = fullPath.lastIndexOf('/');\n const parent = slash <= 0 ? '/' : fullPath.slice(0, slash);\n const name = fullPath.slice(slash + 1);\n const dirent = makeDirent(parent, name, isDir, isSymlink);\n if (exclude && exclude(dirent)) { resultsSet.delete(fullPath); return }\n resultsDirents.push(dirent);\n } else {\n if (exclude && exclude(fullPath)) return;\n resultsSet.add(fullPath);\n }\n };\n\n async function walk(dir: string, segments: 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 if (segIdx + 1 < segments.length) {\n await walk(dir, segments, segIdx + 1);\n } else {\n await pushResult(dir);\n }\n\n let entries: string[];\n try { entries = (await readdir(asyncRequest, dir)) as string[] }\n catch { return }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n let isDir: boolean;\n try { isDir = (await stat(asyncRequest, full)).isDirectory() }\n catch { continue }\n\n if (isDir) await walk(full, segments, segIdx);\n if (isLast) await pushResult(full);\n }\n return;\n }\n\n let entries: string[];\n try { entries = (await readdir(asyncRequest, dir)) as string[] }\n catch { return }\n\n const re = segmentToRegex(seg);\n for (const entry of entries) {\n if (!re.test(entry)) continue;\n const full = joinPath(dir, entry);\n if (isLast) {\n await pushResult(full);\n } else {\n let isDir: boolean;\n try { isDir = (await stat(asyncRequest, full)).isDirectory() }\n catch { continue }\n if (isDir) await walk(full, segments, segIdx + 1);\n }\n }\n }\n\n for (const pat of patterns) {\n for (const expanded of expandBraces(pat)) {\n const segments = expanded.split('/').filter(s => s !== '');\n await walk(cwd, segments, 0);\n }\n }\n\n return withFileTypes ? resultsDirents : Array.from(resultsSet);\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, Dir, 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, fchmodSync as _fchmodSync, fchmod as _fchmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown, fchownSync as _fchownSync, fchown as _fchown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes, futimesSync as _futimesSync, futimes as _futimes } 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, createFileHandle as _createFileHandle,\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, statusToError as _statusToError } from './errors.js';\nimport { decodeStats as _decodeStats, decodeStatsBigInt as _decodeStatsBigInt } from './stats.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 brokerHeartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private brokerControlPort: MessagePort | null = null;\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 // Attach .native aliases (Node.js compat: fs.realpath.native, fs.realpathSync.native)\n // We create bound own-property functions so .native can be set on them.\n const boundRealpath = this.realpath.bind(this);\n (boundRealpath as any).native = boundRealpath;\n (this as any).realpath = boundRealpath;\n\n const boundRealpathSync = this.realpathSync.bind(this);\n (boundRealpathSync as any).native = boundRealpathSync;\n (this as any).realpathSync = boundRealpathSync;\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 *\n * Re-registers on a heartbeat so the broker survives SW idle-kill. Without this,\n * a follower opening a tab after the SW has been killed (≥30s idle on Chrome)\n * sees its `transfer-port` queued in the new SW's `pending` array forever:\n * the prior leader's `port2` was held by the dead SW instance, the new SW\n * starts with `serverPort=null`, and the leader has no way to know to\n * re-register.\n *\n * Re-posting `register-server` is idempotent in the SW handler — it replaces\n * `serverPort` and flushes `pending` — so the heartbeat alone unsticks\n * followers without needing to disturb anyone else. The follower's queued\n * `mc.port2` rides through the pending-flush, and because it's a\n * MessageChannel, any messages the follower's sync-relay had already posted\n * on `port1` are buffered on `port2` until the leader's syncWorker starts\n * the received port. Standard MessageChannel semantics — no follower-side\n * notification required.\n *\n * We deliberately do NOT broadcast `leader-changed` from the heartbeat:\n * followers receiving it call `connectToLeader()`, which tears down the\n * existing `leader-port` and resolves any in-flight sync FS request with\n * EIO (sync-relay.worker.ts: `pendingResolve(EIO)`). Broadcasting on every\n * tick would inject random EIOs into long-running ops on every connected\n * follower. Broadcast only fires once, at initial registration, to wake any\n * pre-existing followers (e.g. left over from a previous leader). */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n const register = (): void => {\n this.getServiceWorker().then(sw => {\n // Deliberately do NOT close the previous control port. Closing it\n // sends a disentangle signal to the SW on a separate IPC pipe from\n // the one carrying `register-server`, with no FIFO guarantee between\n // them. If the disentangle lands first, any follower `transfer-port`\n // already in the SW's inbox is dispatched against the still-current\n // `serverPort = old.port2`, which is now detached — postMessage to a\n // disentangled port is a silent no-op per spec, so the follower's\n // port disappears and the tab stays stuck.\n //\n // Leaving the old port open keeps it routable for any in-flight\n // `transfer-port` until the SW processes `register-server` and\n // overwrites `serverPort` with the new port. After that, both\n // endpoints of the old channel are unreferenced (leader replaced\n // `brokerControlPort`; SW replaced `serverPort`) and the pair is\n // GC-eligible. The onmessage listener doesn't keep port1 alive — a\n // port that can't receive messages can't fire events.\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 this.brokerControlPort = mc.port1;\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n };\n\n register();\n\n // Notify pre-existing followers (if any) that a leader is now available.\n // Fired exactly once — see comment above for why this MUST NOT happen on\n // every heartbeat.\n const bc = new BroadcastChannel(`${this.ns}-leader-change`);\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n\n // 5s tick — worst-case wait for a follower opened against a dead SW broker.\n if (this.brokerHeartbeatTimer) clearInterval(this.brokerHeartbeatTimer);\n this.brokerHeartbeatTimer = setInterval(register, 5000);\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 // Tear down the prior broker plumbing — initLeaderBroker will rebuild it\n // when sync-relay signals 'ready'. Without this, the old heartbeat keeps\n // running against a stale control port that no longer routes to anything.\n if (this.brokerHeartbeatTimer) {\n clearInterval(this.brokerHeartbeatTimer);\n this.brokerHeartbeatTimer = null;\n }\n if (this.brokerControlPort) {\n try { this.brokerControlPort.close(); } catch { /* ignore */ }\n this.brokerControlPort = null;\n }\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[] | Uint8Array[] | Dirent[] {\n return _readdirSync(this._sync, toPathString(filePath), options);\n }\n\n globSync(pattern: string | string[], options?: GlobOptions): string[] | Dirent[] {\n return _globSync(this._sync, pattern, options);\n }\n\n opendirSync(filePath: PathLike): Dir {\n const dirPath = toPathString(filePath);\n const entries = this.readdirSync(dirPath, { withFileTypes: true }) as Dirent[];\n let index = 0;\n\n return {\n path: dirPath,\n\n async read(): Promise<Dirent | null> {\n if (index >= entries.length) return null;\n return entries[index++];\n },\n\n async close(): Promise<void> {\n // Nothing to release — entries were read eagerly.\n },\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Dirent> {\n for (const entry of entries) {\n yield entry;\n }\n },\n };\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. Resolves the fd to its inode on the\n * server side and mutates the inode's mode bits directly, matching what\n * native Node's libuv does. */\n fchmodSync(fd: number, mode: number): void {\n _fchmodSync(this._sync, fd, mode);\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. Mutates the underlying inode's uid/gid. */\n fchownSync(fd: number, uid: number, gid: number): void {\n _fchownSync(this._sync, fd, uid, gid);\n }\n\n utimesSync(filePath: PathLike, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, toPathString(filePath), atime, mtime);\n }\n\n /** utimes on an open file descriptor. Mutates the underlying inode's atime/mtime. */\n futimesSync(fd: number, atime: Date | number, mtime: Date | number): void {\n _futimesSync(this._sync, fd, 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, options?: StatOptions): Stats | BigIntStats {\n return _fstatSync(this._sync, fd, options);\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 this._validateCb(cb);\n try {\n const bytesRead = this.readvSync(fd, buffers, pos);\n if (cb) setTimeout(() => cb(null, bytesRead, buffers), 0);\n } catch (err: any) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw 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 this._validateCb(cb);\n try {\n const bytesWritten = this.writevSync(fd, buffers, pos);\n if (cb) setTimeout(() => cb(null, bytesWritten, buffers), 0);\n } catch (err: any) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw 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 this._validateCb(callback);\n setTimeout(() => callback(null, result), 0);\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 && ownsHandle) {\n try { await handle.close(); } catch { /* ignore close errors */ }\n }\n handle = null;\n };\n\n // If an fd is provided, create a handle wrapper around it instead of opening a new file\n const providedFd = opts?.fd;\n let ownsHandle = providedFd == null; // only close if we opened it\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 (or wrap provided fd)\n if (!handle) {\n if (providedFd != null) {\n handle = _createFileHandle(providedFd, this._async);\n } else {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'r');\n }\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 const providedWFd = opts?.fd;\n const ownsWHandle = providedWFd == null;\n\n const writeFn = async (chunk: Uint8Array): Promise<void> => {\n if (!handle) {\n if (providedWFd != null) {\n handle = _createFileHandle(providedWFd, this._async);\n } else {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'w');\n }\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 if (ownsWHandle) {\n await handle.close();\n }\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 private _validateCb(cb: any): void {\n // Allow missing callbacks — Node.js tolerates fs.mkdir(path, opts) without callback\n // (returns undefined, errors are silently lost). Callers like webcontainer's polyfill\n // layer strip callbacks before calling native methods, then handle results separately.\n if (cb !== undefined && cb !== null && typeof cb !== 'function') {\n throw new TypeError('The \"cb\" argument must be of type function. Received ' + typeof cb);\n }\n }\n\n /** Adapt a promise to optional Node.js callback style.\n * If cb is a function: calls cb(err, result) via setTimeout. Returns void.\n * If cb is missing: returns the promise (allows .then() or await). */\n private _cb<T>(promise: Promise<T>, cb: any, mapResult?: (val: T) => any[]): any {\n if (typeof cb === 'function') {\n promise.then(\n (val) => setTimeout(() => cb(null, ...(mapResult ? mapResult(val) : [val])), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n return;\n }\n return promise;\n }\n\n /** Like _cb but for void-returning promises (no result value). */\n private _cbVoid(promise: Promise<any>, cb: any): any {\n if (typeof cb === 'function') {\n promise.then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n return;\n }\n return promise;\n }\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readFile(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.writeFile(filePath, data, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.appendFile(filePath, data, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.mkdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.rmdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.rm(filePath, opts), cb);\n }\n\n unlink(filePath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.unlink(filePath), callback);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.stat(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.lstat(filePath, opts), cb);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cbVoid(this.promises.access(filePath, mode), cb);\n }\n\n rename(oldPath: string, newPath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.rename(oldPath, newPath), callback);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cbVoid(this.promises.copyFile(src, dest, mode), cb);\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): any {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n this._validateCb(cb);\n const len = typeof lenOrCallback === 'function' ? undefined : lenOrCallback;\n return this._cbVoid(this.promises.truncate(filePath, len), cb);\n }\n\n realpath(filePath: string, callback?: (err: Error | null, resolvedPath?: string) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.realpath(filePath), callback);\n }\n\n chmod(filePath: string, mode: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.chmod(filePath, mode), callback);\n }\n\n chown(filePath: string, uid: number, gid: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.chown(filePath, uid, gid), callback);\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.utimes(filePath, atime, mtime), callback);\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): any {\n const cb = typeof typeOrCallback === 'function' ? typeOrCallback : callback;\n this._validateCb(cb);\n const type = typeof typeOrCallback === 'function' ? undefined : typeOrCallback;\n return this._cbVoid(this.promises.symlink(target, linkPath, type), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readlink(filePath, opts), cb);\n }\n\n link(existingPath: string, newPath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.link(existingPath, newPath), callback);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cb(this.promises.open(filePath, flags, mode), cb, (handle: any) => [handle.fd]);\n }\n\n mkdtemp(prefix: string, callback?: (err: Error | null, folder?: string) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.mkdtemp(prefix), callback);\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._validateCb(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 this._validateCb(callback);\n try {\n this.fdatasyncSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err: any) {\n if (callback) setTimeout(() => callback(err), 0);\n else throw err;\n }\n }\n\n fsync(fd: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n try {\n this.fsyncSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err: any) {\n if (callback) setTimeout(() => callback(err), 0);\n else throw err;\n }\n }\n\n fstat(fd: number, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n fstat(fd: number, options: any, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n fstat(fd: number, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n try {\n const result = this.fstatSync(fd, opts);\n if (cb) setTimeout(() => cb(null, result), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n ftruncate(fd: number, callback: (err: Error | null) => void): void;\n ftruncate(fd: number, len: number, callback: (err: Error | null) => void): void;\n ftruncate(fd: number, lenOrCallback?: any, callback?: any): void {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n this._validateCb(cb);\n const len = typeof lenOrCallback === 'function' ? 0 : lenOrCallback;\n try {\n this.ftruncateSync(fd, len);\n if (cb) setTimeout(() => cb(null), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n read(fd: number, buffer: Uint8Array, offset: number, length: number, position: number | null, callback: (err: Error | null, bytesRead?: number, buffer?: Uint8Array) => void): void;\n read(fd: number, options: { buffer: Uint8Array; offset?: number; length?: number; position?: number | null }, callback: (err: Error | null, bytesRead?: number, buffer?: Uint8Array) => void): void;\n read(fd: number, buffer: any, offset?: any, length?: any, position?: any, callback?: any): void {\n let cb: Function;\n let buf: Uint8Array;\n let off: number;\n let len: number;\n let pos: number | null;\n if (typeof buffer === 'object' && !(buffer instanceof Uint8Array) && buffer !== null && 'buffer' in buffer) {\n // Object form: read(fd, { buffer, offset?, length?, position? }, callback)\n cb = offset;\n buf = buffer.buffer;\n off = buffer.offset ?? 0;\n len = buffer.length ?? buf.byteLength;\n pos = buffer.position ?? null;\n } else {\n cb = callback;\n buf = buffer;\n off = offset;\n len = length;\n pos = position;\n }\n this._validateCb(cb);\n try {\n const bytesRead = this.readSync(fd, buf, off, len, pos);\n if (cb) setTimeout(() => cb(null, bytesRead, buf), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err as Error), 0);\n else throw err;\n }\n }\n\n write(fd: number, buffer: Uint8Array, offset: number, length: number, position: number | null, callback: (err: Error | null, bytesWritten?: number, buffer?: Uint8Array) => void): void;\n write(fd: number, data: string, position: number | null | undefined, encoding: string | undefined, callback: (err: Error | null, bytesWritten?: number, data?: string) => void): void;\n write(fd: number, bufferOrString: Uint8Array | string, offsetOrPosition?: any, lengthOrEncoding?: any, position?: any, callback?: any): void {\n const cb = [offsetOrPosition, lengthOrEncoding, position, callback].find(a => typeof a === 'function');\n this._validateCb(cb);\n try {\n let bytesWritten: number;\n if (typeof bufferOrString === 'string') {\n const pos = typeof offsetOrPosition === 'function' ? undefined : offsetOrPosition;\n const enc = typeof lengthOrEncoding === 'function' ? undefined : lengthOrEncoding;\n bytesWritten = this.writeSync(fd, bufferOrString, pos, enc);\n } else {\n const off = typeof offsetOrPosition === 'function' ? undefined : offsetOrPosition;\n const len = typeof lengthOrEncoding === 'function' ? undefined : lengthOrEncoding;\n const pos = typeof position === 'function' ? undefined : position;\n bytesWritten = this.writeSync(fd, bufferOrString, off, len, pos);\n }\n if (cb) setTimeout(() => cb(null, bytesWritten, bufferOrString), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n close(fd: number, callback?: (err: Error | null) => void): void {\n try {\n this.closeSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err) {\n if (callback) setTimeout(() => callback(err as Error), 0);\n else throw err;\n }\n }\n\n exists(filePath: string, callback?: (exists: boolean) => void): any {\n const p = this.promises.exists(filePath);\n if (typeof callback === 'function') {\n p.then(\n (result) => setTimeout(() => callback(result), 0),\n () => setTimeout(() => callback(false), 0),\n );\n return;\n }\n return p;\n }\n\n opendir(filePath: string, callback?: (err: Error | null, dir?: Dir) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.opendir(filePath), callback);\n }\n\n glob(pattern: string, callback: (err: Error | null, matches?: string[]) => void): void;\n glob(pattern: string, options: GlobOptions, callback: (err: Error | null, matches?: string[]) => void): void;\n glob(pattern: string, optionsOrCallback?: any, callback?: any): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.glob(pattern, opts), cb);\n }\n\n futimes(fd: number, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.futimes(fd, atime, mtime), callback);\n }\n\n fchmod(fd: number, mode: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.fchmod(fd, mode), callback);\n }\n\n fchown(fd: number, uid: number, gid: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.fchown(fd, uid, gid), callback);\n }\n\n lchmod(filePath: string, mode: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lchmod(filePath, mode), callback);\n }\n\n lchown(filePath: string, uid: number, gid: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lchown(filePath, uid, gid), callback);\n }\n\n lutimes(filePath: string, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lutimes(filePath, atime, mtime), callback);\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 /** Node.js compat: fs.promises.constants (same as fs.constants) */\n get constants() { return constants; }\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 | string[], options?: GlobOptions): Promise<string[] | Dirent[]> {\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. Engine resolves fd → inode and\n * mutates the mode bits directly. */\n fchmod(fd: number, mode: number): Promise<void> {\n return _fchmod(this._async, fd, mode);\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. Engine resolves fd → inode and\n * mutates uid/gid directly. */\n fchown(fd: number, uid: number, gid: number): Promise<void> {\n return _fchown(this._async, fd, uid, gid);\n }\n\n utimes(filePath: PathLike, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, toPathString(filePath), atime, mtime);\n }\n\n /** utimes on an open file descriptor. Engine resolves fd → inode and\n * mutates atime/mtime directly. */\n futimes(fd: number, atime: Date | number, mtime: Date | number): Promise<void> {\n return _futimes(this._async, fd, 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 fstat(fd: number, options?: StatOptions): Promise<Stats | BigIntStats> {\n const { status, data } = await this._async(OP.FSTAT, '', 0, null, undefined, { fd });\n if (status !== 0) throw _statusToError(status, 'fstat', String(fd));\n return options?.bigint ? _decodeStatsBigInt(data!) : _decodeStats(data!);\n }\n\n async ftruncate(fd: number, len: number = 0): Promise<void> {\n const { status } = await this._async(OP.FTRUNCATE, '', 0, null, undefined, { fd, length: len });\n if (status !== 0) throw _statusToError(status, 'ftruncate', String(fd));\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 implicitPath?: string; // set when fd was opened via opendir on an implicit directory\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 // Implicit directory support — tracks all directory prefixes implied by file paths.\n // Rebuilt lazily when pathIndex changes (tracked via generation counter).\n // Map value is the stable timestamp (ms since epoch) assigned when the implicit\n // dir was first discovered, so that stat() returns consistent mtime/ctime/atime\n // across repeated calls.\n private implicitDirs = new Map<string, number>();\n private implicitDirsGen = -1; // generation when implicitDirs was last rebuilt\n private pathIndexGen = 0; // bumped on every pathIndex mutation\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 this.pathIndexGen++;\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 // Grow file first so the shifted data has somewhere to land.\n const newTotalSize = this.handle.getSize() + growth;\n this.handle.truncate(newTotalSize);\n\n // Shift the data region forward by `growth` bytes. We must NOT allocate\n // a single buffer the size of the whole data section — when the VFS\n // holds a large install (pnpm linking ~1300 Directus packages puts the\n // data section in the hundreds of MB) the one-shot\n // new Uint8Array(dataSize)\n // failed with \"Array buffer allocation failed\" because Chrome refuses\n // allocations near the 2 GB cap even with OS memory to spare.\n //\n // Copy back-to-front through a small scratch buffer so we never\n // overwrite bytes we haven't relocated yet, and the peak allocation\n // stays bounded at CHUNK regardless of how big the VFS has grown.\n const dataSize = this.totalBlocks * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, Math.max(dataSize, 1)));\n let remaining = dataSize;\n while (remaining > 0) {\n const chunk = Math.min(remaining, CHUNK);\n const srcAt = this.dataOffset + (remaining - chunk);\n const dstAt = this.dataOffset + growth + (remaining - chunk);\n const slice = chunk < scratch.length ? scratch.subarray(0, chunk) : scratch;\n this.handle.read(slice, { at: srcAt });\n this.handle.write(slice, { at: dstAt });\n remaining -= chunk;\n }\n\n // Write the (in-memory) bitmap to its new offset.\n const newBitmapOffset = this.bitmapOffset + growth;\n const newDataOffset = this.dataOffset + growth;\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 // Write `length` zero bytes at absolute file offset `at` via a small\n // reusable scratch buffer. Used to materialize POSIX \"holes\" when a\n // write starts past the current file size — those bytes must read as\n // zeros rather than whatever stale data happened to live in the\n // underlying storage blocks.\n private zeroFileRange(at: number, length: number): void {\n if (length <= 0) return;\n const CHUNK = 4 * 1024 * 1024;\n const zeros = new Uint8Array(Math.min(length, CHUNK));\n let written = 0;\n while (written < length) {\n const n = Math.min(CHUNK, length - written);\n const slice = n < zeros.length ? zeros.subarray(0, n) : zeros;\n this.handle.write(slice, { at: at + written });\n written += n;\n }\n }\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 this.pathIndexGen++;\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 // Refuse to create a regular file at a path that is an implicit\n // directory (children exist beneath it but no inode for the path\n // itself). Without this guard we'd register a FILE inode at `path`\n // while its descendants stay in pathIndex — the resulting \"file with\n // children\" state breaks every subsequent read of `path` and its\n // subtree.\n if (this.isImplicitDirectory(path)) return { status: CODE_TO_STATUS.EISDIR };\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 // Avoid materializing the whole (existing + data) file in a single\n // Uint8Array — that blew up with \"Array buffer allocation failed\" on\n // large appends (e.g. appending a few MB to a multi-hundred-MB file).\n //\n // Strategy: allocate a new block run sized to the total, copy the\n // existing contents over in bounded chunks, then write the caller's\n // `data` at the end. Peak allocation stays at 4 MB regardless of\n // file size.\n const combinedSize = inode.size + data.byteLength;\n const neededBlocks = Math.ceil(combinedSize / this.blockSize);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n if (inode.size > 0) {\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n this.handle.write(data, { at: newBase + inode.size });\n\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n inode.size = combinedSize;\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 this.pathIndexGen++;\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) {\n // Check for implicit directory (exists because files exist under it)\n if (this.isImplicitDirectory(path)) {\n return this.encodeImplicitDirStatResponse(path);\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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 let idx = this.resolvePathComponents(path, false);\n if (idx === undefined) {\n // Fallback: followLast=false can fail for paths through symlink chains\n // when pathIndex stores files under their resolved (real) path.\n // Try with followLast=true — if it resolves, use the result regardless\n // of whether the final component is a symlink or not. lstat on an\n // existing symlink should return the symlink's own stats, not ENOENT.\n idx = this.resolvePathComponents(path, true);\n if (idx === undefined) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n return this.encodeImplicitDirStatResponse(path);\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\n }\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 // (including implicit subdirectories so nlink stays consistent with\n // what readdir reports).\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.getDirectChildrenWithImplicit(path);\n let subdirCount = 0;\n for (const child of children) {\n if (child.type === 'implicit') {\n subdirCount++;\n } else {\n const childIdx = this.pathIndex.get(child.path);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\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 (explicit or implicit)\n if (this.pathIndex.has(path) || this.isImplicitDirectory(path)) {\n return { status: CODE_TO_STATUS.EEXIST, data: null };\n }\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) {\n // Check for implicit directory — a dir that exists because files\n // exist under it but no explicit inode was created.\n if (this.isImplicitDirectory(path)) {\n const children = this.getDirectChildrenWithImplicit(path);\n if (children.length > 0) {\n if (!recursive) return { status: CODE_TO_STATUS.ENOTEMPTY };\n // Recursive: delete all real descendants; the implicit dir\n // disappears automatically when its children are gone.\n for (const desc of this.getAllDescendants(path)) {\n const descIdx = this.pathIndex.get(desc)!;\n const descInode = this.readInode(descIdx);\n this.freeBlockRange(descInode.firstBlock, descInode.blockCount);\n descInode.type = INODE_TYPE.FREE;\n this.writeInode(descIdx, descInode);\n this.pathIndex.delete(desc);\n }\n this.pathIndexGen++;\n this.commitPending();\n }\n // Empty implicit dir or just-emptied: no-op — it vanishes on its own.\n return { status: 0 };\n }\n return { status: CODE_TO_STATUS.ENOENT };\n }\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 this.pathIndexGen++;\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\n // Determine the effective directory path for child lookup\n let effectiveDirPath: string;\n\n if (resolved) {\n const inode = this.readInode(resolved.idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\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 effectiveDirPath = resolved.resolvedPath;\n } else if (this.isImplicitDirectory(path)) {\n effectiveDirPath = path;\n } else {\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\n\n const withFileTypes = (flags & 1) !== 0;\n // Use getDirectChildrenWithImplicit to discover both real and implicit children\n const children = this.getDirectChildrenWithImplicit(effectiveDirPath);\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 child of children) {\n const name = child.path.substring(child.path.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n let type: number;\n if (child.type === 'implicit') {\n type = INODE_TYPE.DIRECTORY;\n } else {\n const childIdx = this.pathIndex.get(child.path)!;\n const childInode = this.readInode(childIdx);\n type = childInode.type;\n }\n entries.push({ name: nameBytes, 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 child of children) {\n const name = child.path.substring(child.path.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 // Same path → no-op (matches Node.js semantics)\n if (oldPath === newPath) return { status: 0 };\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. For directory targets we MUST recursively\n // free every descendant inode and drop every descendant pathIndex entry —\n // otherwise the source's children get added on top, leaving a mix of\n // source children + leftover target children pointing at zombie inodes\n // (the target's old children still appear in pathIndex, while their\n // inodes are not freed so blocks are leaked too).\n //\n // Concrete consequence of the old behavior: Vite's deps optimization\n // commit (`.vite/deps_temp_<hash>` → `.vite/deps`) on the second run\n // returned success but produced a corrupt deps directory — subsequent\n // requests for `vue.js`, `@unhead/vue`, etc. resolved to stale chunks\n // from the previous round (or 404'd entirely).\n //\n // The target may also be an *implicit* directory (no inode of its own,\n // but children exist under it — the state produced by bulk OPFS import).\n // In that case there's no inode to free, but the descendants must still\n // be cleaned up for the same reason.\n const existingIdx = this.pathIndex.get(newPath);\n const targetIsImplicitDir =\n existingIdx === undefined && this.isImplicitDirectory(newPath);\n\n if (existingIdx !== undefined || targetIsImplicitDir) {\n let cleanDescendants = targetIsImplicitDir;\n\n if (existingIdx !== undefined) {\n const existingInode = this.readInode(existingIdx);\n cleanDescendants = existingInode.type === INODE_TYPE.DIRECTORY;\n this.freeBlockRange(existingInode.firstBlock, existingInode.blockCount);\n existingInode.type = INODE_TYPE.FREE;\n this.writeInode(existingIdx, existingInode);\n this.pathIndex.delete(newPath);\n if (existingIdx < this.freeInodeHint) this.freeInodeHint = existingIdx;\n }\n\n if (cleanDescendants) {\n // Free every descendant inode and remove its pathIndex entry.\n // Use getAllDescendants for the deepest-first ordering (matches\n // rmdir's recursive path) — though for a flat free pass order\n // doesn't affect correctness here.\n for (const desc of this.getAllDescendants(newPath)) {\n const descIdx = this.pathIndex.get(desc)!;\n const descInode = this.readInode(descIdx);\n this.freeBlockRange(descInode.firstBlock, descInode.blockCount);\n descInode.type = INODE_TYPE.FREE;\n this.writeInode(descIdx, descInode);\n this.pathIndex.delete(desc);\n if (descIdx < this.freeInodeHint) this.freeInodeHint = descIdx;\n }\n }\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 this.pathIndexGen++;\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 || this.isImplicitDirectory(path)) ? 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 with POSIX zero-fill semantics. Old code staged the entire\n // new file as a single `new Uint8Array(len)` — OOMs for large\n // truncates and allocates way more than necessary. Instead, copy\n // old contents in bounded chunks and zero-fill the extension\n // directly on disk.\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Allocate-then-copy-then-free so the old range is guaranteed\n // not to overlap the new one. See `fwrite` for the same pattern.\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n if (inode.size > 0) {\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n this.zeroFileRange(newBase + inode.size, len - inode.size);\n inode.firstBlock = newFirst;\n } else {\n // Same block count, just growing `size`. The tail of the last\n // existing block still contains whatever stale data was there\n // before — zero it so the extended region reads as zeros.\n this.zeroFileRange(\n this.dataOffset + inode.firstBlock * this.blockSize + inode.size,\n len - inode.size,\n );\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) || this.isImplicitDirectory(destPath))) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\n\n // Self-copy — no-op.\n if (srcPath === destPath) return { status: 0 };\n\n const srcSize = srcInode.size;\n const srcFirstBlock = srcInode.firstBlock;\n\n // Stage 1: create the destination as an empty file. This goes through\n // the normal `write` path which handles parent-directory creation,\n // freeing any pre-existing blocks at `destPath`, and registering the\n // inode in `pathIndex`. Doing this first also means any side effects\n // (e.g. a `growPathTable` shift of the data region) happen BEFORE we\n // start allocating destination blocks, so the relative block indices\n // we capture below stay valid.\n const emptyStatus = this.write(destPath, new Uint8Array(0));\n if (emptyStatus.status !== 0) return emptyStatus;\n\n if (srcSize === 0) return { status: 0 };\n\n // Stage 2: allocate a destination block run sized to the source, then\n // copy the bytes directly between block ranges via the file handle in\n // bounded chunks. No full-file buffer is ever allocated — peak scratch\n // stays at 4 MB regardless of how big the source file is.\n const destIdx = this.resolvePathComponents(destPath, true);\n if (destIdx === undefined) return { status: CODE_TO_STATUS.EIO };\n const destInode = this.readInode(destIdx);\n\n const neededBlocks = Math.ceil(srcSize / this.blockSize);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n const srcBase = this.dataOffset + srcFirstBlock * this.blockSize;\n\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, srcSize));\n let copied = 0;\n while (copied < srcSize) {\n const n = Math.min(CHUNK, srcSize - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: srcBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n\n destInode.firstBlock = newFirst;\n destInode.blockCount = neededBlocks;\n destInode.size = srcSize;\n destInode.mtime = Date.now();\n this.writeInode(destIdx, destInode);\n this.commitPending();\n return { status: 0 };\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) return { status: 0 };\n return { status: CODE_TO_STATUS.ENOENT };\n }\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n return { status: 0, data: encoder.encode(path) };\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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) || this.isImplicitDirectory(linkPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\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) || this.isImplicitDirectory(newPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\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 by relocating to a larger block run. We used to stage the\n // entire new file contents in a single `new Uint8Array(endPos)`\n // and then call `writeData` once — that blew up with\n // \"Array buffer allocation failed\" on multi-hundred-MB writes\n // because Chrome refuses contiguous allocations near ~2 GB even\n // with plenty of OS RAM. Instead, allocate new blocks, copy the\n // old contents forward in chunks via the underlying file handle\n // (which is O(N) bytes but with a bounded scratch buffer), then\n // free the old blocks and write just the caller's `data` at its\n // offset inside the new region.\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n // Copy oldData from old block run to new block run in chunks.\n if (inode.size > 0) {\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n // POSIX \"hole\" — if the caller is writing past the current EOF\n // with a gap in between, those bytes must read back as zeros\n // rather than whatever stale data lives in the freshly allocated\n // blocks. `allocateBlocks` only flips bitmap bits, it never\n // zeroes the underlying storage.\n if (pos > inode.size) {\n this.zeroFileRange(newBase + inode.size, pos - inode.size);\n }\n // Write the caller's new data at its offset inside the new region.\n this.handle.write(data, { at: newBase + pos });\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n } else {\n // Fits within existing blocks. Same hole semantics as above —\n // stale bytes in the tail of the last allocated block (past the\n // old file size) must be zeroed before the caller's write lands.\n if (pos > inode.size) {\n this.zeroFileRange(\n this.dataOffset + inode.firstBlock * this.blockSize + inode.size,\n pos - inode.size,\n );\n }\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 if (entry.implicitPath) return this.encodeImplicitDirStatResponse(entry.implicitPath);\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 // ---- FCHMOD ----\n // fd-based chmod: look up the inode directly from the fd table and mutate\n // its mode bits. Native Node does the same thing at the libuv layer.\n fchmod(fd: number, mode: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.mode = (inode.mode & S_IFMT) | (mode & 0o7777);\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n return { status: 0 };\n }\n\n // ---- FCHOWN ----\n fchown(fd: number, uid: number, gid: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.uid = uid;\n inode.gid = gid;\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n return { status: 0 };\n }\n\n // ---- FUTIMES ----\n futimes(fd: number, atime: number, mtime: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.atime = atime;\n inode.mtime = mtime;\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n // Create fd with synthetic inode index -1 and the path stored so\n // fd-based operations (fstat, fchmod, etc.) can handle it.\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: -1, position: 0, flags: 0, implicitPath: path });\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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 /**\n * Rebuild the set of all implicit directory paths.\n * An implicit directory is any ancestor path of a file/symlink in pathIndex\n * that doesn't itself have an explicit inode entry.\n * Only rebuilt when pathIndex has changed (tracked via generation counter).\n */\n private rebuildImplicitDirs(): void {\n if (this.implicitDirsGen === this.pathIndexGen) return;\n\n const now = Date.now();\n const prev = this.implicitDirs;\n this.implicitDirs = new Map<string, number>();\n for (const filePath of this.pathIndex.keys()) {\n // Walk up from each path, adding all ancestor dirs that aren't explicit\n let pos = filePath.length;\n while (true) {\n pos = filePath.lastIndexOf('/', pos - 1);\n if (pos <= 0) break; // reached root\n const ancestor = filePath.substring(0, pos);\n if (this.implicitDirs.has(ancestor)) break; // already tracked all ancestors from here up\n if (!this.pathIndex.has(ancestor)) {\n // Preserve timestamp if this implicit dir was already known,\n // otherwise stamp it with \"now\" so stat() stays stable.\n this.implicitDirs.set(ancestor, prev.get(ancestor) ?? now);\n }\n }\n }\n\n this.implicitDirsGen = this.pathIndexGen;\n }\n\n /**\n * Check if a path is an implicit directory (exists because files exist under it,\n * but no explicit directory inode was created for it).\n */\n private isImplicitDirectory(path: string): boolean {\n if (path === '/') return false; // root always has an explicit inode\n this.rebuildImplicitDirs();\n return this.implicitDirs.has(path);\n }\n\n /**\n * Get direct children of a directory path, including implicit subdirectories.\n * Returns unique child full paths. Each entry is tagged with whether it's a\n * real inode or an implicit directory.\n */\n private getDirectChildrenWithImplicit(dirPath: string): { path: string; type: 'real' | 'implicit' }[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const childNames = new Map<string, 'real' | 'implicit'>();\n\n for (const path of this.pathIndex.keys()) {\n if (path === dirPath) continue;\n if (!path.startsWith(prefix)) continue;\n const rest = path.substring(prefix.length);\n const slashPos = rest.indexOf('/');\n if (slashPos === -1) {\n // Direct child file/dir — it's a real inode\n childNames.set(rest, 'real');\n } else {\n // Deeper descendant — the first segment is an implicit subdirectory\n const childName = rest.substring(0, slashPos);\n if (!childNames.has(childName)) {\n // Only mark as implicit if there's no real inode for it\n const childFullPath = prefix + childName;\n childNames.set(childName, this.pathIndex.has(childFullPath) ? 'real' : 'implicit');\n }\n }\n }\n\n const result: { path: string; type: 'real' | 'implicit' }[] = [];\n for (const [name, type] of childNames) {\n result.push({ path: prefix + name, type });\n }\n result.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);\n return result;\n }\n\n /**\n * Encode a synthetic stat response for an implicit directory.\n * Returns directory stats with default mode, zero size, current timestamps.\n */\n private encodeImplicitDirStatResponse(path: string): { status: number; data: Uint8Array } {\n // Use the stable timestamp assigned when this implicit dir was first\n // discovered, so repeated stat() calls return the same mtime/ctime/atime.\n this.rebuildImplicitDirs();\n const ts = this.implicitDirs.get(path) ?? Date.now();\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n\n // Count implicit subdirectories for nlink\n const children = this.getDirectChildrenWithImplicit(path);\n let subdirCount = 0;\n for (const child of children) {\n if (child.type === 'implicit') {\n subdirCount++;\n } else {\n const childIdx = this.pathIndex.get(child.path);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\n }\n }\n const nlink = 2 + subdirCount;\n\n // Encode stat: 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.DIRECTORY);\n view.setUint32(1, mode, true);\n view.setFloat64(5, 0, true); // size = 0\n view.setFloat64(13, ts, true); // mtime\n view.setFloat64(21, ts, true); // ctime\n view.setFloat64(29, ts, true); // atime\n view.setUint32(37, this.processUid, true);\n view.setUint32(41, this.processGid, true);\n view.setUint32(45, 0, true); // ino = 0 (synthetic)\n view.setUint32(49, nlink, true);\n\n return { status: 0, data: buf };\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(parentPath)) return 0;\n return CODE_TO_STATUS.ENOENT;\n }\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 { NodeReadable as ReadStream, NodeWritable as WriteStream } 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/chmod.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/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","result","status","isAbsolute","open","entries","inode","data","children","totalSize","buf","view","offset","fd","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 rawListeners(event: string): Function[] {\n return [...(this._listeners.get(event) ?? [])];\n }\n\n prependListener(event: string, fn: Listener): this {\n const arr = this._listeners.get(event) ?? [];\n arr.unshift(fn);\n this._listeners.set(event, arr);\n return this;\n }\n\n prependOnceListener(event: string, fn: Listener): this {\n const wrapper: Listener = (...args: unknown[]) => {\n this.off(event, wrapper);\n fn(...args);\n };\n return this.prependListener(event, wrapper);\n }\n\n eventNames(): string[] {\n return [...this._listeners.keys()].filter(k => (this._listeners.get(k)?.length ?? 0) > 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 FCHMOD: 31,\n FCHOWN: 32,\n FUTIMES: 33,\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 = 100000;\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, BigIntStats, StatOptions, 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, decodeStatsBigInt } 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 options?: StatOptions\n): Stats | BigIntStats {\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 options?.bigint ? decodeStatsBigInt(data!) : 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\nexport function 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 // Payload: [fd: u32][mode: u32] — engine resolves fd → inode and\n // updates its mode bits directly, matching native libuv.\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const { status } = await asyncRequest(OP.FCHMOD, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\n },\n\n async chown(uid: number, gid: number) {\n // Payload: [fd: u32][uid: u32][gid: u32]\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const { status } = await asyncRequest(OP.FCHOWN, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\n },\n\n async utimes(atime: Date | number, mtime: Date | number) {\n // Payload: [fd: u32][pad: u32][atime: f64][mtime: f64] — 4-byte pad\n // keeps f64 fields 8-byte aligned for DataView access on both sides.\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.FUTIMES, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\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 { 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\n/**\n * fchmodSync — chmod on an open file descriptor. The engine looks up the\n * inode directly from its fd table and mutates the mode bits in place,\n * matching what native Node does at the libuv layer.\n *\n * Payload layout: [fd: u32][mode: u32]\n */\nexport function fchmodSync(\n syncRequest: SyncRequestFn,\n fd: number,\n mode: number\n): void {\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const buf = encodeRequest(OP.FCHMOD, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\n}\n\nexport async function fchmod(\n asyncRequest: AsyncRequestFn,\n fd: number,\n mode: number\n): Promise<void> {\n const payload = new Uint8Array(8);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, mode, true);\n const { status } = await asyncRequest(OP.FCHMOD, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchmod', String(fd));\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';\nimport { chmodSync, chmod as chmodAsync } from './chmod.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 if (opts?.mode !== undefined) {\n chmodSync(syncRequest, filePath, opts.mode);\n }\n return;\n }\n\n // Non-default flag: use fd-based open → write → close\n const fd = openSync(syncRequest, filePath, flag, opts?.mode);\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 if (opts?.mode !== undefined) {\n await chmodAsync(asyncRequest, filePath, opts.mode);\n }\n return;\n }\n\n // Non-default flag: use FileHandle-based open → writeFile → close\n const handle = await open(asyncRequest, filePath, flag, opts?.mode);\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\nconst textEncoder = new TextEncoder();\n\nfunction namesToBuffers(names: string[]): Uint8Array[] {\n return names.map(n => textEncoder.encode(n));\n}\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[] | Uint8Array[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const asBuffer = opts?.encoding === 'buffer';\n\n if (opts?.recursive) {\n const result = readdirRecursiveSync(\n syncRequest, filePath, '', !!opts?.withFileTypes\n );\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result as string[] | Dirent[];\n }\n\n const result = readdirBaseSync(syncRequest, filePath, !!opts?.withFileTypes);\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result;\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Uint8Array[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const asBuffer = opts?.encoding === 'buffer';\n\n if (opts?.recursive) {\n const result = await readdirRecursiveAsync(\n asyncRequest, filePath, '', !!opts?.withFileTypes\n );\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result as string[] | Dirent[];\n }\n\n const result = await readdirBaseAsync(asyncRequest, filePath, !!opts?.withFileTypes);\n if (asBuffer && !opts?.withFileTypes) {\n return namesToBuffers(result as string[]);\n }\n return result;\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 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\n/**\n * fchownSync — chown on an open fd. Payload: [fd: u32][uid: u32][gid: u32].\n * The engine looks up the inode from the fd table and updates uid/gid directly.\n */\nexport function fchownSync(\n syncRequest: SyncRequestFn,\n fd: number,\n uid: number,\n gid: number\n): void {\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const buf = encodeRequest(OP.FCHOWN, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\n}\n\nexport async function fchown(\n asyncRequest: AsyncRequestFn,\n fd: number,\n uid: number,\n gid: number\n): Promise<void> {\n const payload = new Uint8Array(12);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, uid, true);\n dv.setUint32(8, gid, true);\n const { status } = await asyncRequest(OP.FCHOWN, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'fchown', String(fd));\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\n/**\n * futimesSync — utimes on an open fd. Payload layout:\n * [fd: u32][pad: u32][atime: f64][mtime: f64]\n * The 4-byte pad keeps the float64 fields 8-byte aligned so both server and\n * client decode with straight DataView calls.\n */\nexport function futimesSync(\n syncRequest: SyncRequestFn,\n fd: number,\n atime: Date | number,\n mtime: Date | number\n): void {\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.FUTIMES, '', 0, payload);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\n}\n\nexport async function futimes(\n asyncRequest: AsyncRequestFn,\n fd: number,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const payload = new Uint8Array(24);\n const dv = new DataView(payload.buffer);\n dv.setUint32(0, fd, true);\n dv.setFloat64(8, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(16, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.FUTIMES, '', 0, payload);\n if (status !== 0) throw statusToError(status, 'futimes', String(fd));\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 throw new TypeError('The \"path\" argument must be of type string, Uint8Array, or URL. Received ' + typeof 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 /** When true, the listener wants Buffer filenames instead of strings. */\n asBuffer: boolean;\n /**\n * Per-tick coalescing: dedupe `(eventType, filename)` pairs emitted during\n * the same microtask, matching libuv's behavior where the kernel queues\n * multiple inotify events per syscall and libuv delivers the deduplicated\n * set in one batch.\n */\n pendingEvents: Set<string> | null;\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 — dedupe per (event, filename) per microtask\n for (const entry of watchers) {\n const filename = matchWatcher(entry, mutatedPath);\n if (filename === null) continue;\n queueWatchEvent(entry, eventType, filename);\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/**\n * Coalesce events for a single watcher during one microtask. Node/libuv\n * collapses runs of rapid inotify events so the listener observes at most one\n * `(event, filename)` per tick — we match that to avoid firing e.g. two\n * `change` events when a single write touches both the file and its inode.\n */\nfunction queueWatchEvent(entry: WatchEntry, eventType: 'change' | 'rename', filename: string): void {\n const key = eventType + ':' + filename;\n if (!entry.pendingEvents) {\n entry.pendingEvents = new Set();\n queueMicrotask(() => {\n const pending = entry.pendingEvents!;\n entry.pendingEvents = null;\n for (const k of pending) {\n const colon = k.indexOf(':');\n const et = k.slice(0, colon) as 'change' | 'rename';\n const name = k.slice(colon + 1);\n try {\n entry.listener(et, entry.asBuffer ? encodeFilename(name) : name);\n } catch { /* swallow */ }\n }\n });\n }\n entry.pendingEvents.add(key);\n}\n\nfunction encodeFilename(name: string): Uint8Array {\n // Node returns a Buffer when encoding='buffer'; Buffer is a Uint8Array\n // subclass, and our wrapper layer (fs.polyfill.ts in the webcontainer)\n // wraps this with Buffer.from() if the host environment has Buffer.\n return new TextEncoder().encode(name);\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 const asBuffer = (opts as { encoding?: string }).encoding === 'buffer';\n\n const entry: WatchEntry = {\n ns,\n absPath,\n recursive: opts.recursive ?? false,\n listener: cb,\n signal,\n asBuffer,\n pendingEvents: null,\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 asBuffer = (options as { encoding?: string } | undefined)?.encoding === 'buffer';\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 asBuffer,\n pendingEvents: null,\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, Dirent } 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// Glob pattern matching\n//\n// Supports the full Node.js `fs.glob` pattern grammar:\n// * — any run of non-separator characters (including empty)\n// ? — exactly one non-separator character\n// ** — any number of path segments\n// [abc] — character class\n// [a-z] — character range\n// [!abc] — negated character class\n// \\x — literal x (escape)\n// {foo,bar} — brace alternation (expanded to multiple patterns up-front)\n//\n// Brace expansion is handled by producing multiple flat patterns before any\n// directory walking; the walker then matches each expanded pattern in turn.\n// ============================================================================\n\n/** Expand `{a,b}` alternations into a flat list of patterns. */\nfunction expandBraces(pattern: string): string[] {\n const out: string[] = [];\n function recurse(prefix: string, rest: string): void {\n const open = findBrace(rest);\n if (open === -1) {\n out.push(prefix + rest);\n return;\n }\n const close = matchCloseBrace(rest, open);\n if (close === -1) {\n // Unbalanced brace — treat literally, continue past it\n out.push(prefix + rest);\n return;\n }\n const head = rest.slice(0, open);\n const body = rest.slice(open + 1, close);\n const tail = rest.slice(close + 1);\n for (const alt of splitAlternations(body)) {\n recurse(prefix + head + alt, tail);\n }\n }\n recurse('', pattern);\n return out;\n}\n\n/** Find the first unescaped `{`, skipping over character classes. */\nfunction findBrace(s: string): number {\n for (let i = 0; i < s.length; i++) {\n const c = s[i];\n if (c === '\\\\') { i++; continue }\n if (c === '[') {\n const end = s.indexOf(']', i + 1);\n if (end !== -1) { i = end; continue }\n }\n if (c === '{') return i;\n }\n return -1;\n}\n\n/** Find the matching `}` for an opening brace, respecting nesting. */\nfunction matchCloseBrace(s: string, open: number): number {\n let depth = 1;\n for (let i = open + 1; i < s.length; i++) {\n const c = s[i];\n if (c === '\\\\') { i++; continue }\n if (c === '[') {\n const end = s.indexOf(']', i + 1);\n if (end !== -1) { i = end; continue }\n }\n if (c === '{') depth++;\n else if (c === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/** Split a brace body on top-level commas, honoring nested braces and escapes. */\nfunction splitAlternations(body: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let start = 0;\n for (let i = 0; i < body.length; i++) {\n const c = body[i];\n if (c === '\\\\') { i++; continue }\n if (c === '{') depth++;\n else if (c === '}') depth--;\n else if (c === ',' && depth === 0) {\n parts.push(body.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(body.slice(start));\n return parts;\n}\n\n/**\n * Compile a single glob path-segment into a RegExp. `pattern` is one segment\n * (no `/`) after brace expansion, so it only needs to handle `*`, `?`, `[...]`\n * and `\\x` escapes.\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 === '\\\\' && i + 1 < pattern.length) {\n // Literal next char\n const next = pattern[++i];\n re += /[.+^${}()|[\\]\\\\*?]/.test(next) ? '\\\\' + next : next;\n } else if (ch === '*') {\n re += '[^/]*';\n } else if (ch === '?') {\n re += '[^/]';\n } else if (ch === '[') {\n // Character class: copy verbatim, translating `!` → `^` and passing\n // ranges through as-is. Escape only `]` which we need to find the end.\n const end = pattern.indexOf(']', i + 1);\n if (end === -1) {\n // Unclosed class — treat as literal `[`\n re += '\\\\[';\n } else {\n let body = pattern.slice(i + 1, end);\n if (body.startsWith('!')) body = '^' + body.slice(1);\n re += '[' + body + ']';\n i = end;\n }\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\nfunction normalizeCwd(cwd: string | URL | undefined): string {\n if (!cwd) return '/';\n if (typeof cwd === 'string') return cwd || '/';\n // URL — only file: supported\n return cwd.pathname || '/';\n}\n\n/** Build a Dirent from a file path + parent dir + stat. */\nfunction makeDirent(parentPath: string, name: string, isDir: boolean, isSymlink: boolean): Dirent {\n return {\n name,\n parentPath,\n isFile: () => !isDir && !isSymlink,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => isSymlink,\n isFIFO: () => false,\n isSocket: () => false,\n } as Dirent;\n}\n\n// ============================================================================\n// Sync\n// ============================================================================\n\nexport function globSync(\n syncRequest: SyncRequestFn,\n pattern: string | string[],\n options?: GlobOptions,\n): string[] | Dirent[] {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const cwd = normalizeCwd(options?.cwd);\n const exclude = options?.exclude as ((arg: string | Dirent) => boolean) | undefined;\n const withFileTypes = options?.withFileTypes === true;\n\n const resultsSet = new Set<string>(); // dedupe across expanded patterns\n const resultsDirents: Dirent[] = [];\n\n const pushResult = (fullPath: string): void => {\n if (withFileTypes) {\n if (!resultsSet.has(fullPath)) {\n resultsSet.add(fullPath);\n // Stat to determine type. This matches Node, which exposes Dirents for matches.\n let isDir = false, isSymlink = false;\n try {\n const s = statSync(syncRequest, fullPath);\n isDir = s.isDirectory();\n // statSync follows symlinks — our VFS lstat would distinguish, but we\n // keep it simple here.\n } catch { /* treat as file */ }\n const slash = fullPath.lastIndexOf('/');\n const parent = slash <= 0 ? '/' : fullPath.slice(0, slash);\n const name = fullPath.slice(slash + 1);\n const dirent = makeDirent(parent, name, isDir, isSymlink);\n if (exclude && exclude(dirent)) { resultsSet.delete(fullPath); return }\n resultsDirents.push(dirent);\n }\n } else {\n if (exclude && exclude(fullPath)) return;\n resultsSet.add(fullPath);\n }\n };\n\n function walk(dir: string, segments: 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 // Zero segments: try the next pattern segment in the same directory.\n if (segIdx + 1 < segments.length) {\n walk(dir, segments, segIdx + 1);\n } else {\n // Trailing `**` matches the directory itself too (Node behavior).\n pushResult(dir);\n }\n\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 let isDir: boolean;\n try {\n isDir = statSync(syncRequest, full).isDirectory();\n } catch { continue }\n\n if (isDir) {\n // Keep ** active at same segIdx\n walk(full, segments, segIdx);\n }\n\n // If ** is the last segment, everything underneath matches.\n if (isLast) pushResult(full);\n }\n return;\n }\n\n let entries: string[];\n try {\n entries = readdirSync(syncRequest, dir) as string[];\n } catch { return }\n\n const re = segmentToRegex(seg);\n for (const entry of entries) {\n if (!re.test(entry)) continue;\n const full = joinPath(dir, entry);\n\n if (isLast) {\n pushResult(full);\n } else {\n let isDir: boolean;\n try { isDir = statSync(syncRequest, full).isDirectory() }\n catch { continue }\n if (isDir) walk(full, segments, segIdx + 1);\n }\n }\n }\n\n for (const pat of patterns) {\n for (const expanded of expandBraces(pat)) {\n const segments = expanded.split('/').filter(s => s !== '');\n walk(cwd, segments, 0);\n }\n }\n\n return withFileTypes ? resultsDirents : Array.from(resultsSet);\n}\n\n// ============================================================================\n// Async (also usable via `for await` as an async generator)\n// ============================================================================\n\nexport async function glob(\n asyncRequest: AsyncRequestFn,\n pattern: string | string[],\n options?: GlobOptions,\n): Promise<string[] | Dirent[]> {\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\n const cwd = normalizeCwd(options?.cwd);\n const exclude = options?.exclude as ((arg: string | Dirent) => boolean) | undefined;\n const withFileTypes = options?.withFileTypes === true;\n\n const resultsSet = new Set<string>();\n const resultsDirents: Dirent[] = [];\n\n const pushResult = async (fullPath: string): Promise<void> => {\n if (withFileTypes) {\n if (resultsSet.has(fullPath)) return;\n resultsSet.add(fullPath);\n let isDir = false, isSymlink = false;\n try {\n const s = await stat(asyncRequest, fullPath);\n isDir = s.isDirectory();\n } catch { /* treat as file */ }\n const slash = fullPath.lastIndexOf('/');\n const parent = slash <= 0 ? '/' : fullPath.slice(0, slash);\n const name = fullPath.slice(slash + 1);\n const dirent = makeDirent(parent, name, isDir, isSymlink);\n if (exclude && exclude(dirent)) { resultsSet.delete(fullPath); return }\n resultsDirents.push(dirent);\n } else {\n if (exclude && exclude(fullPath)) return;\n resultsSet.add(fullPath);\n }\n };\n\n async function walk(dir: string, segments: 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 if (segIdx + 1 < segments.length) {\n await walk(dir, segments, segIdx + 1);\n } else {\n await pushResult(dir);\n }\n\n let entries: string[];\n try { entries = (await readdir(asyncRequest, dir)) as string[] }\n catch { return }\n\n for (const entry of entries) {\n const full = joinPath(dir, entry);\n let isDir: boolean;\n try { isDir = (await stat(asyncRequest, full)).isDirectory() }\n catch { continue }\n\n if (isDir) await walk(full, segments, segIdx);\n if (isLast) await pushResult(full);\n }\n return;\n }\n\n let entries: string[];\n try { entries = (await readdir(asyncRequest, dir)) as string[] }\n catch { return }\n\n const re = segmentToRegex(seg);\n for (const entry of entries) {\n if (!re.test(entry)) continue;\n const full = joinPath(dir, entry);\n if (isLast) {\n await pushResult(full);\n } else {\n let isDir: boolean;\n try { isDir = (await stat(asyncRequest, full)).isDirectory() }\n catch { continue }\n if (isDir) await walk(full, segments, segIdx + 1);\n }\n }\n }\n\n for (const pat of patterns) {\n for (const expanded of expandBraces(pat)) {\n const segments = expanded.split('/').filter(s => s !== '');\n await walk(cwd, segments, 0);\n }\n }\n\n return withFileTypes ? resultsDirents : Array.from(resultsSet);\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, Dir, 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, fchmodSync as _fchmodSync, fchmod as _fchmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown, fchownSync as _fchownSync, fchown as _fchown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes, futimesSync as _futimesSync, futimes as _futimes } 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, createFileHandle as _createFileHandle,\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, statusToError as _statusToError } from './errors.js';\nimport { decodeStats as _decodeStats, decodeStatsBigInt as _decodeStatsBigInt } from './stats.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 brokerHeartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private brokerControlPort: MessagePort | null = null;\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 // Attach .native aliases (Node.js compat: fs.realpath.native, fs.realpathSync.native)\n // We create bound own-property functions so .native can be set on them.\n const boundRealpath = this.realpath.bind(this);\n (boundRealpath as any).native = boundRealpath;\n (this as any).realpath = boundRealpath;\n\n const boundRealpathSync = this.realpathSync.bind(this);\n (boundRealpathSync as any).native = boundRealpathSync;\n (this as any).realpathSync = boundRealpathSync;\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 *\n * Re-registers on a heartbeat so the broker survives SW idle-kill. Without this,\n * a follower opening a tab after the SW has been killed (≥30s idle on Chrome)\n * sees its `transfer-port` queued in the new SW's `pending` array forever:\n * the prior leader's `port2` was held by the dead SW instance, the new SW\n * starts with `serverPort=null`, and the leader has no way to know to\n * re-register.\n *\n * Re-posting `register-server` is idempotent in the SW handler — it replaces\n * `serverPort` and flushes `pending` — so the heartbeat alone unsticks\n * followers without needing to disturb anyone else. The follower's queued\n * `mc.port2` rides through the pending-flush, and because it's a\n * MessageChannel, any messages the follower's sync-relay had already posted\n * on `port1` are buffered on `port2` until the leader's syncWorker starts\n * the received port. Standard MessageChannel semantics — no follower-side\n * notification required.\n *\n * We deliberately do NOT broadcast `leader-changed` from the heartbeat:\n * followers receiving it call `connectToLeader()`, which tears down the\n * existing `leader-port` and resolves any in-flight sync FS request with\n * EIO (sync-relay.worker.ts: `pendingResolve(EIO)`). Broadcasting on every\n * tick would inject random EIOs into long-running ops on every connected\n * follower. Broadcast only fires once, at initial registration, to wake any\n * pre-existing followers (e.g. left over from a previous leader). */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n const register = (): void => {\n this.getServiceWorker().then(sw => {\n // Deliberately do NOT close the previous control port. Closing it\n // sends a disentangle signal to the SW on a separate IPC pipe from\n // the one carrying `register-server`, with no FIFO guarantee between\n // them. If the disentangle lands first, any follower `transfer-port`\n // already in the SW's inbox is dispatched against the still-current\n // `serverPort = old.port2`, which is now detached — postMessage to a\n // disentangled port is a silent no-op per spec, so the follower's\n // port disappears and the tab stays stuck.\n //\n // Leaving the old port open keeps it routable for any in-flight\n // `transfer-port` until the SW processes `register-server` and\n // overwrites `serverPort` with the new port. After that, both\n // endpoints of the old channel are unreferenced (leader replaced\n // `brokerControlPort`; SW replaced `serverPort`) and the pair is\n // GC-eligible. The onmessage listener doesn't keep port1 alive — a\n // port that can't receive messages can't fire events.\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 this.brokerControlPort = mc.port1;\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n };\n\n register();\n\n // Notify pre-existing followers (if any) that a leader is now available.\n // Fired exactly once — see comment above for why this MUST NOT happen on\n // every heartbeat.\n const bc = new BroadcastChannel(`${this.ns}-leader-change`);\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n\n // 5s tick — worst-case wait for a follower opened against a dead SW broker.\n if (this.brokerHeartbeatTimer) clearInterval(this.brokerHeartbeatTimer);\n this.brokerHeartbeatTimer = setInterval(register, 5000);\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 // Tear down the prior broker plumbing — initLeaderBroker will rebuild it\n // when sync-relay signals 'ready'. Without this, the old heartbeat keeps\n // running against a stale control port that no longer routes to anything.\n if (this.brokerHeartbeatTimer) {\n clearInterval(this.brokerHeartbeatTimer);\n this.brokerHeartbeatTimer = null;\n }\n if (this.brokerControlPort) {\n try { this.brokerControlPort.close(); } catch { /* ignore */ }\n this.brokerControlPort = null;\n }\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[] | Uint8Array[] | Dirent[] {\n return _readdirSync(this._sync, toPathString(filePath), options);\n }\n\n globSync(pattern: string | string[], options?: GlobOptions): string[] | Dirent[] {\n return _globSync(this._sync, pattern, options);\n }\n\n opendirSync(filePath: PathLike): Dir {\n const dirPath = toPathString(filePath);\n const entries = this.readdirSync(dirPath, { withFileTypes: true }) as Dirent[];\n let index = 0;\n\n return {\n path: dirPath,\n\n async read(): Promise<Dirent | null> {\n if (index >= entries.length) return null;\n return entries[index++];\n },\n\n async close(): Promise<void> {\n // Nothing to release — entries were read eagerly.\n },\n\n async *[Symbol.asyncIterator](): AsyncIterableIterator<Dirent> {\n for (const entry of entries) {\n yield entry;\n }\n },\n };\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. Resolves the fd to its inode on the\n * server side and mutates the inode's mode bits directly, matching what\n * native Node's libuv does. */\n fchmodSync(fd: number, mode: number): void {\n _fchmodSync(this._sync, fd, mode);\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. Mutates the underlying inode's uid/gid. */\n fchownSync(fd: number, uid: number, gid: number): void {\n _fchownSync(this._sync, fd, uid, gid);\n }\n\n utimesSync(filePath: PathLike, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, toPathString(filePath), atime, mtime);\n }\n\n /** utimes on an open file descriptor. Mutates the underlying inode's atime/mtime. */\n futimesSync(fd: number, atime: Date | number, mtime: Date | number): void {\n _futimesSync(this._sync, fd, 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, options?: StatOptions): Stats | BigIntStats {\n return _fstatSync(this._sync, fd, options);\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 this._validateCb(cb);\n try {\n const bytesRead = this.readvSync(fd, buffers, pos);\n if (cb) setTimeout(() => cb(null, bytesRead, buffers), 0);\n } catch (err: any) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw 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 this._validateCb(cb);\n try {\n const bytesWritten = this.writevSync(fd, buffers, pos);\n if (cb) setTimeout(() => cb(null, bytesWritten, buffers), 0);\n } catch (err: any) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw 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 this._validateCb(callback);\n setTimeout(() => callback(null, result), 0);\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 && ownsHandle) {\n try { await handle.close(); } catch { /* ignore close errors */ }\n }\n handle = null;\n };\n\n // If an fd is provided, create a handle wrapper around it instead of opening a new file\n const providedFd = opts?.fd;\n let ownsHandle = providedFd == null; // only close if we opened it\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 (or wrap provided fd)\n if (!handle) {\n if (providedFd != null) {\n handle = _createFileHandle(providedFd, this._async);\n } else {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'r');\n }\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 const providedWFd = opts?.fd;\n const ownsWHandle = providedWFd == null;\n\n const writeFn = async (chunk: Uint8Array): Promise<void> => {\n if (!handle) {\n if (providedWFd != null) {\n handle = _createFileHandle(providedWFd, this._async);\n } else {\n handle = await this.promises.open(toPathString(filePath), opts?.flags ?? 'w');\n }\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 if (ownsWHandle) {\n await handle.close();\n }\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 private _validateCb(cb: any): void {\n // Allow missing callbacks — Node.js tolerates fs.mkdir(path, opts) without callback\n // (returns undefined, errors are silently lost). Callers like webcontainer's polyfill\n // layer strip callbacks before calling native methods, then handle results separately.\n if (cb !== undefined && cb !== null && typeof cb !== 'function') {\n throw new TypeError('The \"cb\" argument must be of type function. Received ' + typeof cb);\n }\n }\n\n /** Adapt a promise to optional Node.js callback style.\n * If cb is a function: calls cb(err, result) via setTimeout. Returns void.\n * If cb is missing: returns the promise (allows .then() or await). */\n private _cb<T>(promise: Promise<T>, cb: any, mapResult?: (val: T) => any[]): any {\n if (typeof cb === 'function') {\n promise.then(\n (val) => setTimeout(() => cb(null, ...(mapResult ? mapResult(val) : [val])), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n return;\n }\n return promise;\n }\n\n /** Like _cb but for void-returning promises (no result value). */\n private _cbVoid(promise: Promise<any>, cb: any): any {\n if (typeof cb === 'function') {\n promise.then(\n () => setTimeout(() => cb(null), 0),\n (err) => setTimeout(() => cb(err), 0),\n );\n return;\n }\n return promise;\n }\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readFile(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.writeFile(filePath, data, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.appendFile(filePath, data, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.mkdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.rmdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cbVoid(this.promises.rm(filePath, opts), cb);\n }\n\n unlink(filePath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.unlink(filePath), callback);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readdir(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.stat(filePath, opts), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.lstat(filePath, opts), cb);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cbVoid(this.promises.access(filePath, mode), cb);\n }\n\n rename(oldPath: string, newPath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.rename(oldPath, newPath), callback);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cbVoid(this.promises.copyFile(src, dest, mode), cb);\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): any {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n this._validateCb(cb);\n const len = typeof lenOrCallback === 'function' ? undefined : lenOrCallback;\n return this._cbVoid(this.promises.truncate(filePath, len), cb);\n }\n\n realpath(filePath: string, callback?: (err: Error | null, resolvedPath?: string) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.realpath(filePath), callback);\n }\n\n chmod(filePath: string, mode: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.chmod(filePath, mode), callback);\n }\n\n chown(filePath: string, uid: number, gid: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.chown(filePath, uid, gid), callback);\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.utimes(filePath, atime, mtime), callback);\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): any {\n const cb = typeof typeOrCallback === 'function' ? typeOrCallback : callback;\n this._validateCb(cb);\n const type = typeof typeOrCallback === 'function' ? undefined : typeOrCallback;\n return this._cbVoid(this.promises.symlink(target, linkPath, type), cb);\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): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.readlink(filePath, opts), cb);\n }\n\n link(existingPath: string, newPath: string, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.link(existingPath, newPath), callback);\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): any {\n const cb = typeof modeOrCallback === 'function' ? modeOrCallback : callback;\n this._validateCb(cb);\n const mode = typeof modeOrCallback === 'function' ? undefined : modeOrCallback;\n return this._cb(this.promises.open(filePath, flags, mode), cb, (handle: any) => [handle.fd]);\n }\n\n mkdtemp(prefix: string, callback?: (err: Error | null, folder?: string) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.mkdtemp(prefix), callback);\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._validateCb(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 this._validateCb(callback);\n try {\n this.fdatasyncSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err: any) {\n if (callback) setTimeout(() => callback(err), 0);\n else throw err;\n }\n }\n\n fsync(fd: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n try {\n this.fsyncSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err: any) {\n if (callback) setTimeout(() => callback(err), 0);\n else throw err;\n }\n }\n\n fstat(fd: number, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n fstat(fd: number, options: any, callback: (err: Error | null, stats?: Stats | BigIntStats) => void): void;\n fstat(fd: number, optionsOrCallback?: any, callback?: any): void {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n try {\n const result = this.fstatSync(fd, opts);\n if (cb) setTimeout(() => cb(null, result), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n ftruncate(fd: number, callback: (err: Error | null) => void): void;\n ftruncate(fd: number, len: number, callback: (err: Error | null) => void): void;\n ftruncate(fd: number, lenOrCallback?: any, callback?: any): void {\n const cb = typeof lenOrCallback === 'function' ? lenOrCallback : callback;\n this._validateCb(cb);\n const len = typeof lenOrCallback === 'function' ? 0 : lenOrCallback;\n try {\n this.ftruncateSync(fd, len);\n if (cb) setTimeout(() => cb(null), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n read(fd: number, buffer: Uint8Array, offset: number, length: number, position: number | null, callback: (err: Error | null, bytesRead?: number, buffer?: Uint8Array) => void): void;\n read(fd: number, options: { buffer: Uint8Array; offset?: number; length?: number; position?: number | null }, callback: (err: Error | null, bytesRead?: number, buffer?: Uint8Array) => void): void;\n read(fd: number, buffer: any, offset?: any, length?: any, position?: any, callback?: any): void {\n let cb: Function;\n let buf: Uint8Array;\n let off: number;\n let len: number;\n let pos: number | null;\n if (typeof buffer === 'object' && !(buffer instanceof Uint8Array) && buffer !== null && 'buffer' in buffer) {\n // Object form: read(fd, { buffer, offset?, length?, position? }, callback)\n cb = offset;\n buf = buffer.buffer;\n off = buffer.offset ?? 0;\n len = buffer.length ?? buf.byteLength;\n pos = buffer.position ?? null;\n } else {\n cb = callback;\n buf = buffer;\n off = offset;\n len = length;\n pos = position;\n }\n this._validateCb(cb);\n try {\n const bytesRead = this.readSync(fd, buf, off, len, pos);\n if (cb) setTimeout(() => cb(null, bytesRead, buf), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err as Error), 0);\n else throw err;\n }\n }\n\n write(fd: number, buffer: Uint8Array, offset: number, length: number, position: number | null, callback: (err: Error | null, bytesWritten?: number, buffer?: Uint8Array) => void): void;\n write(fd: number, data: string, position: number | null | undefined, encoding: string | undefined, callback: (err: Error | null, bytesWritten?: number, data?: string) => void): void;\n write(fd: number, bufferOrString: Uint8Array | string, offsetOrPosition?: any, lengthOrEncoding?: any, position?: any, callback?: any): void {\n const cb = [offsetOrPosition, lengthOrEncoding, position, callback].find(a => typeof a === 'function');\n this._validateCb(cb);\n try {\n let bytesWritten: number;\n if (typeof bufferOrString === 'string') {\n const pos = typeof offsetOrPosition === 'function' ? undefined : offsetOrPosition;\n const enc = typeof lengthOrEncoding === 'function' ? undefined : lengthOrEncoding;\n bytesWritten = this.writeSync(fd, bufferOrString, pos, enc);\n } else {\n const off = typeof offsetOrPosition === 'function' ? undefined : offsetOrPosition;\n const len = typeof lengthOrEncoding === 'function' ? undefined : lengthOrEncoding;\n const pos = typeof position === 'function' ? undefined : position;\n bytesWritten = this.writeSync(fd, bufferOrString, off, len, pos);\n }\n if (cb) setTimeout(() => cb(null, bytesWritten, bufferOrString), 0);\n } catch (err) {\n if (cb) setTimeout(() => cb(err), 0);\n else throw err;\n }\n }\n\n close(fd: number, callback?: (err: Error | null) => void): void {\n try {\n this.closeSync(fd);\n if (callback) setTimeout(() => callback(null), 0);\n } catch (err) {\n if (callback) setTimeout(() => callback(err as Error), 0);\n else throw err;\n }\n }\n\n exists(filePath: string, callback?: (exists: boolean) => void): any {\n const p = this.promises.exists(filePath);\n if (typeof callback === 'function') {\n p.then(\n (result) => setTimeout(() => callback(result), 0),\n () => setTimeout(() => callback(false), 0),\n );\n return;\n }\n return p;\n }\n\n opendir(filePath: string, callback?: (err: Error | null, dir?: Dir) => void): any {\n this._validateCb(callback);\n return this._cb(this.promises.opendir(filePath), callback);\n }\n\n glob(pattern: string, callback: (err: Error | null, matches?: string[]) => void): void;\n glob(pattern: string, options: GlobOptions, callback: (err: Error | null, matches?: string[]) => void): void;\n glob(pattern: string, optionsOrCallback?: any, callback?: any): any {\n const cb = typeof optionsOrCallback === 'function' ? optionsOrCallback : callback;\n this._validateCb(cb);\n const opts = typeof optionsOrCallback === 'function' ? undefined : optionsOrCallback;\n return this._cb(this.promises.glob(pattern, opts), cb);\n }\n\n futimes(fd: number, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.futimes(fd, atime, mtime), callback);\n }\n\n fchmod(fd: number, mode: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.fchmod(fd, mode), callback);\n }\n\n fchown(fd: number, uid: number, gid: number, callback?: (err: Error | null) => void): void {\n this._validateCb(callback);\n return this._cbVoid(this.promises.fchown(fd, uid, gid), callback);\n }\n\n lchmod(filePath: string, mode: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lchmod(filePath, mode), callback);\n }\n\n lchown(filePath: string, uid: number, gid: number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lchown(filePath, uid, gid), callback);\n }\n\n lutimes(filePath: string, atime: Date | number, mtime: Date | number, callback?: (err: Error | null) => void): any {\n this._validateCb(callback);\n return this._cbVoid(this.promises.lutimes(filePath, atime, mtime), callback);\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 /** Node.js compat: fs.promises.constants (same as fs.constants) */\n get constants() { return constants; }\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 | string[], options?: GlobOptions): Promise<string[] | Dirent[]> {\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. Engine resolves fd → inode and\n * mutates the mode bits directly. */\n fchmod(fd: number, mode: number): Promise<void> {\n return _fchmod(this._async, fd, mode);\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. Engine resolves fd → inode and\n * mutates uid/gid directly. */\n fchown(fd: number, uid: number, gid: number): Promise<void> {\n return _fchown(this._async, fd, uid, gid);\n }\n\n utimes(filePath: PathLike, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, toPathString(filePath), atime, mtime);\n }\n\n /** utimes on an open file descriptor. Engine resolves fd → inode and\n * mutates atime/mtime directly. */\n futimes(fd: number, atime: Date | number, mtime: Date | number): Promise<void> {\n return _futimes(this._async, fd, 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 fstat(fd: number, options?: StatOptions): Promise<Stats | BigIntStats> {\n const { status, data } = await this._async(OP.FSTAT, '', 0, null, undefined, { fd });\n if (status !== 0) throw _statusToError(status, 'fstat', String(fd));\n return options?.bigint ? _decodeStatsBigInt(data!) : _decodeStats(data!);\n }\n\n async ftruncate(fd: number, len: number = 0): Promise<void> {\n const { status } = await this._async(OP.FTRUNCATE, '', 0, null, undefined, { fd, length: len });\n if (status !== 0) throw _statusToError(status, 'ftruncate', String(fd));\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 implicitPath?: string; // set when fd was opened via opendir on an implicit directory\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 // Implicit directory support — tracks all directory prefixes implied by file paths.\n // Rebuilt lazily when pathIndex changes (tracked via generation counter).\n // Map value is the stable timestamp (ms since epoch) assigned when the implicit\n // dir was first discovered, so that stat() returns consistent mtime/ctime/atime\n // across repeated calls.\n private implicitDirs = new Map<string, number>();\n private implicitDirsGen = -1; // generation when implicitDirs was last rebuilt\n private pathIndexGen = 0; // bumped on every pathIndex mutation\n\n // Incrementally maintained \"number of pathIndex entries that have this\n // path as a strict ancestor\" map. Lets `isImplicitDirectory` answer in\n // O(1) — an implicit dir P is exactly !pathIndex.has(P) && descCount[P] > 0.\n // Without this, every `isImplicitDirectory` call triggered an O(N×depth)\n // rebuild of `implicitDirs`, and the 3.0.49 fix put one of those calls on\n // the hot path of every fresh write/symlink/link/copy — making batch\n // writes O(N²) on total path count.\n private descCount = new Map<string, number>();\n // descCount is in sync with pathIndex iff descCountGen >= pathIndexGen.\n // Helpers `setPathIndex`/`deletePathIndex` keep them in sync. Code that\n // mutates `pathIndex` directly (only test scaffolding does this in\n // practice — see the implicit-directory tests in vfs-engine.test.ts)\n // bumps `pathIndexGen` without going through the helpers, which leaves\n // descCount stale; `isImplicitDirectory` notices the mismatch and\n // recomputes descCount on demand.\n private descCountGen = 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.setPathIndex(path, i);\n }\n this.pathIndexGen++;\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 // Grow file first so the shifted data has somewhere to land.\n const newTotalSize = this.handle.getSize() + growth;\n this.handle.truncate(newTotalSize);\n\n // Shift the data region forward by `growth` bytes. We must NOT allocate\n // a single buffer the size of the whole data section — when the VFS\n // holds a large install (pnpm linking ~1300 Directus packages puts the\n // data section in the hundreds of MB) the one-shot\n // new Uint8Array(dataSize)\n // failed with \"Array buffer allocation failed\" because Chrome refuses\n // allocations near the 2 GB cap even with OS memory to spare.\n //\n // Copy back-to-front through a small scratch buffer so we never\n // overwrite bytes we haven't relocated yet, and the peak allocation\n // stays bounded at CHUNK regardless of how big the VFS has grown.\n const dataSize = this.totalBlocks * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, Math.max(dataSize, 1)));\n let remaining = dataSize;\n while (remaining > 0) {\n const chunk = Math.min(remaining, CHUNK);\n const srcAt = this.dataOffset + (remaining - chunk);\n const dstAt = this.dataOffset + growth + (remaining - chunk);\n const slice = chunk < scratch.length ? scratch.subarray(0, chunk) : scratch;\n this.handle.read(slice, { at: srcAt });\n this.handle.write(slice, { at: dstAt });\n remaining -= chunk;\n }\n\n // Write the (in-memory) bitmap to its new offset.\n const newBitmapOffset = this.bitmapOffset + growth;\n const newDataOffset = this.dataOffset + growth;\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 // Write `length` zero bytes at absolute file offset `at` via a small\n // reusable scratch buffer. Used to materialize POSIX \"holes\" when a\n // write starts past the current file size — those bytes must read as\n // zeros rather than whatever stale data happened to live in the\n // underlying storage blocks.\n private zeroFileRange(at: number, length: number): void {\n if (length <= 0) return;\n const CHUNK = 4 * 1024 * 1024;\n const zeros = new Uint8Array(Math.min(length, CHUNK));\n let written = 0;\n while (written < length) {\n const n = Math.min(CHUNK, length - written);\n const slice = n < zeros.length ? zeros.subarray(0, n) : zeros;\n this.handle.write(slice, { at: at + written });\n written += n;\n }\n }\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.setPathIndex(path, idx);\n this.pathIndexGen++;\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 // Refuse to create a regular file at a path that is an implicit\n // directory (children exist beneath it but no inode for the path\n // itself). Without this guard we'd register a FILE inode at `path`\n // while its descendants stay in pathIndex — the resulting \"file with\n // children\" state breaks every subsequent read of `path` and its\n // subtree.\n if (this.isImplicitDirectory(path)) return { status: CODE_TO_STATUS.EISDIR };\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 // Avoid materializing the whole (existing + data) file in a single\n // Uint8Array — that blew up with \"Array buffer allocation failed\" on\n // large appends (e.g. appending a few MB to a multi-hundred-MB file).\n //\n // Strategy: allocate a new block run sized to the total, copy the\n // existing contents over in bounded chunks, then write the caller's\n // `data` at the end. Peak allocation stays at 4 MB regardless of\n // file size.\n const combinedSize = inode.size + data.byteLength;\n const neededBlocks = Math.ceil(combinedSize / this.blockSize);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n if (inode.size > 0) {\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n this.handle.write(data, { at: newBase + inode.size });\n\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n inode.size = combinedSize;\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.deletePathIndex(path);\n this.pathIndexGen++;\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) {\n // Check for implicit directory (exists because files exist under it)\n if (this.isImplicitDirectory(path)) {\n return this.encodeImplicitDirStatResponse(path);\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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 let idx = this.resolvePathComponents(path, false);\n if (idx === undefined) {\n // Fallback: followLast=false can fail for paths through symlink chains\n // when pathIndex stores files under their resolved (real) path.\n // Try with followLast=true — if it resolves, use the result regardless\n // of whether the final component is a symlink or not. lstat on an\n // existing symlink should return the symlink's own stats, not ENOENT.\n idx = this.resolvePathComponents(path, true);\n if (idx === undefined) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n return this.encodeImplicitDirStatResponse(path);\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\n }\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 // (including implicit subdirectories so nlink stays consistent with\n // what readdir reports).\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.getDirectChildrenWithImplicit(path);\n let subdirCount = 0;\n for (const child of children) {\n if (child.type === 'implicit') {\n subdirCount++;\n } else {\n const childIdx = this.pathIndex.get(child.path);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\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 (explicit or implicit)\n if (this.pathIndex.has(path) || this.isImplicitDirectory(path)) {\n return { status: CODE_TO_STATUS.EEXIST, data: null };\n }\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) {\n // Check for implicit directory — a dir that exists because files\n // exist under it but no explicit inode was created.\n if (this.isImplicitDirectory(path)) {\n const children = this.getDirectChildrenWithImplicit(path);\n if (children.length > 0) {\n if (!recursive) return { status: CODE_TO_STATUS.ENOTEMPTY };\n // Recursive: delete all real descendants; the implicit dir\n // disappears automatically when its children are gone.\n for (const desc of this.getAllDescendants(path)) {\n const descIdx = this.pathIndex.get(desc)!;\n const descInode = this.readInode(descIdx);\n this.freeBlockRange(descInode.firstBlock, descInode.blockCount);\n descInode.type = INODE_TYPE.FREE;\n this.writeInode(descIdx, descInode);\n this.deletePathIndex(desc);\n }\n this.pathIndexGen++;\n this.commitPending();\n }\n // Empty implicit dir or just-emptied: no-op — it vanishes on its own.\n return { status: 0 };\n }\n return { status: CODE_TO_STATUS.ENOENT };\n }\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.deletePathIndex(child);\n }\n }\n\n // Remove the directory itself\n inode.type = INODE_TYPE.FREE;\n this.writeInode(idx, inode);\n this.deletePathIndex(path);\n this.pathIndexGen++;\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\n // Determine the effective directory path for child lookup\n let effectiveDirPath: string;\n\n if (resolved) {\n const inode = this.readInode(resolved.idx);\n if (inode.type !== INODE_TYPE.DIRECTORY) return { status: CODE_TO_STATUS.ENOTDIR, data: null };\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 effectiveDirPath = resolved.resolvedPath;\n } else if (this.isImplicitDirectory(path)) {\n effectiveDirPath = path;\n } else {\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\n\n const withFileTypes = (flags & 1) !== 0;\n // Use getDirectChildrenWithImplicit to discover both real and implicit children\n const children = this.getDirectChildrenWithImplicit(effectiveDirPath);\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 child of children) {\n const name = child.path.substring(child.path.lastIndexOf('/') + 1);\n const nameBytes = encoder.encode(name);\n let type: number;\n if (child.type === 'implicit') {\n type = INODE_TYPE.DIRECTORY;\n } else {\n const childIdx = this.pathIndex.get(child.path)!;\n const childInode = this.readInode(childIdx);\n type = childInode.type;\n }\n entries.push({ name: nameBytes, 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 child of children) {\n const name = child.path.substring(child.path.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 // Same path → no-op (matches Node.js semantics)\n if (oldPath === newPath) return { status: 0 };\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. For directory targets we MUST recursively\n // free every descendant inode and drop every descendant pathIndex entry —\n // otherwise the source's children get added on top, leaving a mix of\n // source children + leftover target children pointing at zombie inodes\n // (the target's old children still appear in pathIndex, while their\n // inodes are not freed so blocks are leaked too).\n //\n // Concrete consequence of the old behavior: Vite's deps optimization\n // commit (`.vite/deps_temp_<hash>` → `.vite/deps`) on the second run\n // returned success but produced a corrupt deps directory — subsequent\n // requests for `vue.js`, `@unhead/vue`, etc. resolved to stale chunks\n // from the previous round (or 404'd entirely).\n //\n // The target may also be an *implicit* directory (no inode of its own,\n // but children exist under it — the state produced by bulk OPFS import).\n // In that case there's no inode to free, but the descendants must still\n // be cleaned up for the same reason.\n const existingIdx = this.pathIndex.get(newPath);\n const targetIsImplicitDir =\n existingIdx === undefined && this.isImplicitDirectory(newPath);\n\n if (existingIdx !== undefined || targetIsImplicitDir) {\n let cleanDescendants = targetIsImplicitDir;\n\n if (existingIdx !== undefined) {\n const existingInode = this.readInode(existingIdx);\n cleanDescendants = existingInode.type === INODE_TYPE.DIRECTORY;\n this.freeBlockRange(existingInode.firstBlock, existingInode.blockCount);\n existingInode.type = INODE_TYPE.FREE;\n this.writeInode(existingIdx, existingInode);\n this.deletePathIndex(newPath);\n if (existingIdx < this.freeInodeHint) this.freeInodeHint = existingIdx;\n }\n\n if (cleanDescendants) {\n // Free every descendant inode and remove its pathIndex entry.\n // Use getAllDescendants for the deepest-first ordering (matches\n // rmdir's recursive path) — though for a flat free pass order\n // doesn't affect correctness here.\n for (const desc of this.getAllDescendants(newPath)) {\n const descIdx = this.pathIndex.get(desc)!;\n const descInode = this.readInode(descIdx);\n this.freeBlockRange(descInode.firstBlock, descInode.blockCount);\n descInode.type = INODE_TYPE.FREE;\n this.writeInode(descIdx, descInode);\n this.deletePathIndex(desc);\n if (descIdx < this.freeInodeHint) this.freeInodeHint = descIdx;\n }\n }\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.deletePathIndex(oldPath);\n this.setPathIndex(newPath, idx);\n this.pathIndexGen++;\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.deletePathIndex(p);\n this.setPathIndex(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 || this.isImplicitDirectory(path)) ? 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 with POSIX zero-fill semantics. Old code staged the entire\n // new file as a single `new Uint8Array(len)` — OOMs for large\n // truncates and allocates way more than necessary. Instead, copy\n // old contents in bounded chunks and zero-fill the extension\n // directly on disk.\n const neededBlocks = Math.ceil(len / this.blockSize);\n if (neededBlocks > inode.blockCount) {\n // Allocate-then-copy-then-free so the old range is guaranteed\n // not to overlap the new one. See `fwrite` for the same pattern.\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n if (inode.size > 0) {\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n this.zeroFileRange(newBase + inode.size, len - inode.size);\n inode.firstBlock = newFirst;\n } else {\n // Same block count, just growing `size`. The tail of the last\n // existing block still contains whatever stale data was there\n // before — zero it so the extended region reads as zeros.\n this.zeroFileRange(\n this.dataOffset + inode.firstBlock * this.blockSize + inode.size,\n len - inode.size,\n );\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) || this.isImplicitDirectory(destPath))) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\n\n // Self-copy — no-op.\n if (srcPath === destPath) return { status: 0 };\n\n const srcSize = srcInode.size;\n const srcFirstBlock = srcInode.firstBlock;\n\n // Stage 1: create the destination as an empty file. This goes through\n // the normal `write` path which handles parent-directory creation,\n // freeing any pre-existing blocks at `destPath`, and registering the\n // inode in `pathIndex`. Doing this first also means any side effects\n // (e.g. a `growPathTable` shift of the data region) happen BEFORE we\n // start allocating destination blocks, so the relative block indices\n // we capture below stay valid.\n const emptyStatus = this.write(destPath, new Uint8Array(0));\n if (emptyStatus.status !== 0) return emptyStatus;\n\n if (srcSize === 0) return { status: 0 };\n\n // Stage 2: allocate a destination block run sized to the source, then\n // copy the bytes directly between block ranges via the file handle in\n // bounded chunks. No full-file buffer is ever allocated — peak scratch\n // stays at 4 MB regardless of how big the source file is.\n const destIdx = this.resolvePathComponents(destPath, true);\n if (destIdx === undefined) return { status: CODE_TO_STATUS.EIO };\n const destInode = this.readInode(destIdx);\n\n const neededBlocks = Math.ceil(srcSize / this.blockSize);\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n const srcBase = this.dataOffset + srcFirstBlock * this.blockSize;\n\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, srcSize));\n let copied = 0;\n while (copied < srcSize) {\n const n = Math.min(CHUNK, srcSize - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: srcBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n\n destInode.firstBlock = newFirst;\n destInode.blockCount = neededBlocks;\n destInode.size = srcSize;\n destInode.mtime = Date.now();\n this.writeInode(destIdx, destInode);\n this.commitPending();\n return { status: 0 };\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) return { status: 0 };\n return { status: CODE_TO_STATUS.ENOENT };\n }\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n return { status: 0, data: encoder.encode(path) };\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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) || this.isImplicitDirectory(linkPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\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) || this.isImplicitDirectory(newPath)) {\n return { status: CODE_TO_STATUS.EEXIST };\n }\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 by relocating to a larger block run. We used to stage the\n // entire new file contents in a single `new Uint8Array(endPos)`\n // and then call `writeData` once — that blew up with\n // \"Array buffer allocation failed\" on multi-hundred-MB writes\n // because Chrome refuses contiguous allocations near ~2 GB even\n // with plenty of OS RAM. Instead, allocate new blocks, copy the\n // old contents forward in chunks via the underlying file handle\n // (which is O(N) bytes but with a bounded scratch buffer), then\n // free the old blocks and write just the caller's `data` at its\n // offset inside the new region.\n const newFirst = this.allocateBlocks(neededBlocks);\n const newBase = this.dataOffset + newFirst * this.blockSize;\n const oldBase = this.dataOffset + inode.firstBlock * this.blockSize;\n // Copy oldData from old block run to new block run in chunks.\n if (inode.size > 0) {\n const CHUNK = 4 * 1024 * 1024; // 4 MB\n const scratch = new Uint8Array(Math.min(CHUNK, inode.size));\n let copied = 0;\n while (copied < inode.size) {\n const n = Math.min(CHUNK, inode.size - copied);\n const slice = n < scratch.length ? scratch.subarray(0, n) : scratch;\n this.handle.read(slice, { at: oldBase + copied });\n this.handle.write(slice, { at: newBase + copied });\n copied += n;\n }\n }\n this.freeBlockRange(inode.firstBlock, inode.blockCount);\n // POSIX \"hole\" — if the caller is writing past the current EOF\n // with a gap in between, those bytes must read back as zeros\n // rather than whatever stale data lives in the freshly allocated\n // blocks. `allocateBlocks` only flips bitmap bits, it never\n // zeroes the underlying storage.\n if (pos > inode.size) {\n this.zeroFileRange(newBase + inode.size, pos - inode.size);\n }\n // Write the caller's new data at its offset inside the new region.\n this.handle.write(data, { at: newBase + pos });\n inode.firstBlock = newFirst;\n inode.blockCount = neededBlocks;\n } else {\n // Fits within existing blocks. Same hole semantics as above —\n // stale bytes in the tail of the last allocated block (past the\n // old file size) must be zeroed before the caller's write lands.\n if (pos > inode.size) {\n this.zeroFileRange(\n this.dataOffset + inode.firstBlock * this.blockSize + inode.size,\n pos - inode.size,\n );\n }\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 if (entry.implicitPath) return this.encodeImplicitDirStatResponse(entry.implicitPath);\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 // ---- FCHMOD ----\n // fd-based chmod: look up the inode directly from the fd table and mutate\n // its mode bits. Native Node does the same thing at the libuv layer.\n fchmod(fd: number, mode: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.mode = (inode.mode & S_IFMT) | (mode & 0o7777);\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n return { status: 0 };\n }\n\n // ---- FCHOWN ----\n fchown(fd: number, uid: number, gid: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.uid = uid;\n inode.gid = gid;\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\n return { status: 0 };\n }\n\n // ---- FUTIMES ----\n futimes(fd: number, atime: number, mtime: number): { status: number } {\n const entry = this.fdTable.get(fd);\n if (!entry) return { status: CODE_TO_STATUS.EBADF };\n if (entry.implicitPath) return { status: 0 }; // no-op for implicit dirs\n const inode = this.readInode(entry.inodeIdx);\n inode.atime = atime;\n inode.mtime = mtime;\n inode.ctime = Date.now();\n this.writeInode(entry.inodeIdx, inode);\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(path)) {\n // Create fd with synthetic inode index -1 and the path stored so\n // fd-based operations (fstat, fchmod, etc.) can handle it.\n const fd = this.nextFd++;\n this.fdTable.set(fd, { tabId, inodeIdx: -1, position: 0, flags: 0, implicitPath: path });\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, fd, true);\n return { status: 0, data: buf };\n }\n return { status: CODE_TO_STATUS.ENOENT, data: null };\n }\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 /**\n * Rebuild the set of all implicit directory paths.\n * An implicit directory is any ancestor path of a file/symlink in pathIndex\n * that doesn't itself have an explicit inode entry.\n * Only rebuilt when pathIndex has changed (tracked via generation counter).\n */\n private rebuildImplicitDirs(): void {\n if (this.implicitDirsGen === this.pathIndexGen) return;\n\n const now = Date.now();\n const prev = this.implicitDirs;\n this.implicitDirs = new Map<string, number>();\n for (const filePath of this.pathIndex.keys()) {\n // Walk up from each path, adding all ancestor dirs that aren't explicit\n let pos = filePath.length;\n while (true) {\n pos = filePath.lastIndexOf('/', pos - 1);\n if (pos <= 0) break; // reached root\n const ancestor = filePath.substring(0, pos);\n if (this.implicitDirs.has(ancestor)) break; // already tracked all ancestors from here up\n if (!this.pathIndex.has(ancestor)) {\n // Preserve timestamp if this implicit dir was already known,\n // otherwise stamp it with \"now\" so stat() stays stable.\n this.implicitDirs.set(ancestor, prev.get(ancestor) ?? now);\n }\n }\n }\n\n this.implicitDirsGen = this.pathIndexGen;\n }\n\n /**\n * Check if a path is an implicit directory (exists because files exist under it,\n * but no explicit directory inode was created for it).\n *\n * O(1) via the incrementally maintained `descCount` map (an implicit dir\n * is exactly !pathIndex.has(P) && descCount[P] > 0). If `pathIndex` was\n * mutated directly without going through the helpers (test scaffolding),\n * descCount is stale and we rebuild it from scratch — once — to resync.\n */\n private isImplicitDirectory(path: string): boolean {\n if (path === '/') return false; // root always has an explicit inode\n if (this.pathIndex.has(path)) return false;\n if (this.descCountGen < this.pathIndexGen) this.rebuildDescCount();\n return (this.descCount.get(path) ?? 0) > 0;\n }\n\n /**\n * Recompute `descCount` from scratch by walking every pathIndex entry's\n * ancestor chain. O(N×depth). Only triggered when something bypassed the\n * setPathIndex/deletePathIndex helpers — in production code that's\n * never; the tests exercise this path.\n */\n private rebuildDescCount(): void {\n this.descCount.clear();\n for (const path of this.pathIndex.keys()) {\n this.bumpDescCount(path);\n }\n this.descCountGen = this.pathIndexGen;\n }\n\n // ---- pathIndex helpers — keep `descCount` in sync ----\n // Every pathIndex.set/delete in the engine MUST go through these so the\n // `descCount` map (used by `isImplicitDirectory`) stays correct. We\n // anticipate the caller's `pathIndexGen++` by setting `descCountGen` to\n // `pathIndexGen + 1`; idempotent across multiple helper calls within a\n // single logical op (e.g. rmdir doing N deletes then one bump). Test\n // code that mutates `pathIndex` directly leaves descCountGen behind,\n // which is what triggers the rebuild path in `isImplicitDirectory`.\n\n private setPathIndex(path: string, idx: number): void {\n const had = this.pathIndex.has(path);\n this.pathIndex.set(path, idx);\n if (!had) this.bumpDescCount(path);\n this.descCountGen = this.pathIndexGen + 1;\n }\n\n private deletePathIndex(path: string): boolean {\n const had = this.pathIndex.delete(path);\n if (had) this.decDescCount(path);\n this.descCountGen = this.pathIndexGen + 1;\n return had;\n }\n\n private bumpDescCount(path: string): void {\n let pos = path.length;\n while (true) {\n pos = path.lastIndexOf('/', pos - 1);\n if (pos <= 0) break; // reached root, which has no descCount entry\n const ancestor = path.substring(0, pos);\n this.descCount.set(ancestor, (this.descCount.get(ancestor) ?? 0) + 1);\n }\n }\n\n private decDescCount(path: string): void {\n let pos = path.length;\n while (true) {\n pos = path.lastIndexOf('/', pos - 1);\n if (pos <= 0) break;\n const ancestor = path.substring(0, pos);\n const cur = this.descCount.get(ancestor);\n if (cur === undefined) break;\n if (cur <= 1) this.descCount.delete(ancestor);\n else this.descCount.set(ancestor, cur - 1);\n }\n }\n\n /**\n * Get direct children of a directory path, including implicit subdirectories.\n * Returns unique child full paths. Each entry is tagged with whether it's a\n * real inode or an implicit directory.\n */\n private getDirectChildrenWithImplicit(dirPath: string): { path: string; type: 'real' | 'implicit' }[] {\n const prefix = dirPath === '/' ? '/' : dirPath + '/';\n const childNames = new Map<string, 'real' | 'implicit'>();\n\n for (const path of this.pathIndex.keys()) {\n if (path === dirPath) continue;\n if (!path.startsWith(prefix)) continue;\n const rest = path.substring(prefix.length);\n const slashPos = rest.indexOf('/');\n if (slashPos === -1) {\n // Direct child file/dir — it's a real inode\n childNames.set(rest, 'real');\n } else {\n // Deeper descendant — the first segment is an implicit subdirectory\n const childName = rest.substring(0, slashPos);\n if (!childNames.has(childName)) {\n // Only mark as implicit if there's no real inode for it\n const childFullPath = prefix + childName;\n childNames.set(childName, this.pathIndex.has(childFullPath) ? 'real' : 'implicit');\n }\n }\n }\n\n const result: { path: string; type: 'real' | 'implicit' }[] = [];\n for (const [name, type] of childNames) {\n result.push({ path: prefix + name, type });\n }\n result.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);\n return result;\n }\n\n /**\n * Encode a synthetic stat response for an implicit directory.\n * Returns directory stats with default mode, zero size, current timestamps.\n */\n private encodeImplicitDirStatResponse(path: string): { status: number; data: Uint8Array } {\n // Use the stable timestamp assigned when this implicit dir was first\n // discovered, so repeated stat() calls return the same mtime/ctime/atime.\n this.rebuildImplicitDirs();\n const ts = this.implicitDirs.get(path) ?? Date.now();\n const mode = DEFAULT_DIR_MODE & ~(this.umask & 0o777);\n\n // Count implicit subdirectories for nlink\n const children = this.getDirectChildrenWithImplicit(path);\n let subdirCount = 0;\n for (const child of children) {\n if (child.type === 'implicit') {\n subdirCount++;\n } else {\n const childIdx = this.pathIndex.get(child.path);\n if (childIdx !== undefined) {\n const childInode = this.readInode(childIdx);\n if (childInode.type === INODE_TYPE.DIRECTORY) subdirCount++;\n }\n }\n }\n const nlink = 2 + subdirCount;\n\n // Encode stat: 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.DIRECTORY);\n view.setUint32(1, mode, true);\n view.setFloat64(5, 0, true); // size = 0\n view.setFloat64(13, ts, true); // mtime\n view.setFloat64(21, ts, true); // ctime\n view.setFloat64(29, ts, true); // atime\n view.setUint32(37, this.processUid, true);\n view.setUint32(41, this.processGid, true);\n view.setUint32(45, 0, true); // ino = 0 (synthetic)\n view.setUint32(49, nlink, true);\n\n return { status: 0, data: buf };\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) {\n // Check for implicit directory\n if (this.isImplicitDirectory(parentPath)) return 0;\n return CODE_TO_STATUS.ENOENT;\n }\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 { NodeReadable as ReadStream, NodeWritable as WriteStream } 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"]}