@componentor/fs 3.0.1 → 3.0.3
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/README.md +42 -16
- package/dist/index.js +226 -24
- package/dist/index.js.map +1 -1
- package/dist/workers/server.worker.js +7 -4
- package/dist/workers/server.worker.js.map +1 -1
- package/dist/workers/sync-relay.worker.js +86 -16
- package/dist/workers/sync-relay.worker.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/src/protocol/opcodes.ts","../src/src/errors.ts","../src/src/methods/readFile.ts","../src/src/methods/writeFile.ts","../src/src/methods/appendFile.ts","../src/src/methods/exists.ts","../src/src/methods/mkdir.ts","../src/src/methods/rmdir.ts","../src/src/methods/rm.ts","../src/src/methods/unlink.ts","../src/src/vfs/layout.ts","../src/src/stats.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/constants.ts","../src/src/methods/access.ts","../src/src/methods/realpath.ts","../src/src/methods/chmod.ts","../src/src/methods/chown.ts","../src/src/methods/utimes.ts","../src/src/methods/symlink.ts","../src/src/methods/link.ts","../src/src/methods/mkdtemp.ts","../src/src/methods/open.ts","../src/src/methods/opendir.ts","../src/src/path.ts","../src/src/methods/watch.ts","../src/src/filesystem.ts","../src/src/index.ts"],"names":["decoder","encoder","status","isAbsolute","resolve"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Binary protocol operation codes and header encoding/decoding.\n * All inter-worker messages use this minimal binary protocol — no JSON, no strings.\n */\n\n// Operation codes\nexport const OP = {\n READ: 1,\n WRITE: 2,\n UNLINK: 3,\n STAT: 4,\n LSTAT: 5,\n MKDIR: 6,\n RMDIR: 7,\n READDIR: 8,\n RENAME: 9,\n EXISTS: 10,\n TRUNCATE: 11,\n APPEND: 12,\n COPY: 13,\n ACCESS: 14,\n REALPATH: 15,\n CHMOD: 16,\n CHOWN: 17,\n UTIMES: 18,\n SYMLINK: 19,\n READLINK: 20,\n LINK: 21,\n OPEN: 22,\n CLOSE: 23,\n FREAD: 24,\n FWRITE: 25,\n FSTAT: 26,\n FTRUNCATE: 27,\n FSYNC: 28,\n OPENDIR: 29,\n MKDTEMP: 30,\n} as const;\n\nexport type OpCode = (typeof OP)[keyof typeof OP];\n\n// Response status codes\nexport const STATUS = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n} as const;\n\n// SAB layout offsets\nexport const SAB_OFFSETS = {\n CONTROL: 0, // Int32 - signal (0=idle, 1=request, 2=response, 3=chunk, 4=ack)\n OPCODE: 4, // Int32 - operation code\n STATUS: 8, // Int32 - response status / error\n CHUNK_LEN: 12, // Int32 - bytes in this chunk\n TOTAL_LEN: 16, // BigUint64 - full data size across all chunks\n CHUNK_IDX: 24, // Int32 - 0-based chunk index\n RESERVED: 28, // Int32 - reserved\n HEADER_SIZE: 32, // Data payload starts here\n} as const;\n\n// SAB control signals\nexport const SIGNAL = {\n IDLE: 0,\n REQUEST: 1,\n RESPONSE: 2,\n CHUNK: 3,\n CHUNK_ACK: 4,\n} as const;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Encode a request into an ArrayBuffer for MessageChannel transfer.\n *\n * Request format (16-byte header + path + data):\n * bytes 0-3: operation (uint32)\n * bytes 4-7: flags (uint32)\n * bytes 8-11: pathLen (uint32)\n * bytes 12-15: dataLen (uint32)\n * bytes 16+: path (UTF-8)\n * bytes 16+pathLen: data payload\n */\nexport function encodeRequest(\n op: number,\n path: string,\n flags: number = 0,\n data?: Uint8Array\n): ArrayBuffer {\n const pathBytes = encoder.encode(path);\n const dataLen = data ? data.byteLength : 0;\n const totalLen = 16 + pathBytes.byteLength + dataLen;\n const buf = new ArrayBuffer(totalLen);\n const view = new DataView(buf);\n\n view.setUint32(0, op, true);\n view.setUint32(4, flags, true);\n view.setUint32(8, pathBytes.byteLength, true);\n view.setUint32(12, dataLen, true);\n\n const bytes = new Uint8Array(buf);\n bytes.set(pathBytes, 16);\n if (data) {\n bytes.set(data, 16 + pathBytes.byteLength);\n }\n\n return buf;\n}\n\n/**\n * Decode a request ArrayBuffer.\n */\nexport function decodeRequest(buf: ArrayBuffer): {\n op: number;\n flags: number;\n path: string;\n data: Uint8Array | null;\n} {\n 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 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","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';\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 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 decoder.decode(result);\n return result;\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 { status, data } = await asyncRequest(OP.READ, filePath);\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decoder.decode(result);\n return result;\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 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' ? encoder.encode(data) : data;\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}\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 flags = opts?.flush === true ? 1 : 0;\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.WRITE, filePath, flags, encoded);\n if (status !== 0) throw statusToError(status, 'write', filePath);\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';\n\nexport function rmSync(\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 async function rm(\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","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","/**\n * VFS Binary Layout Constants\n *\n * Defines the on-disk structure of the virtual filesystem binary file.\n * All reads/writes go through a FileSystemSyncAccessHandle.\n */\n\n// Magic number: \"VFS!\" in ASCII\nexport const VFS_MAGIC = 0x56465321;\nexport const VFS_VERSION = 1;\n\n// Default sizes\nexport const DEFAULT_BLOCK_SIZE = 4096;\nexport const DEFAULT_INODE_COUNT = 10000;\nexport const INODE_SIZE = 64; // bytes per inode entry\n\n// Superblock layout (64 bytes)\nexport const SUPERBLOCK = {\n SIZE: 64,\n MAGIC: 0, // uint32 - 0x56465321\n VERSION: 4, // uint32\n INODE_COUNT: 8, // uint32 - total inodes allocated\n BLOCK_SIZE: 12, // uint32 - data block size (default 4096)\n TOTAL_BLOCKS: 16, // uint32 - total data blocks\n FREE_BLOCKS: 20, // uint32 - available data blocks\n INODE_OFFSET: 24, // float64 - byte offset to inode table\n PATH_OFFSET: 32, // float64 - byte offset to path table\n DATA_OFFSET: 40, // float64 - byte offset to data region\n BITMAP_OFFSET: 48, // float64 - byte offset to free block bitmap\n PATH_USED: 56, // uint32 - bytes used in path table\n RESERVED: 60, // uint32\n} as const;\n\n// Inode entry layout (64 bytes each)\nexport const INODE = {\n TYPE: 0, // uint8 - 0=free, 1=file, 2=directory, 3=symlink\n FLAGS: 1, // uint8[3] - reserved\n PATH_OFFSET: 4, // uint32 - byte offset into path table\n PATH_LENGTH: 8, // uint16 - length of path string\n RESERVED_10: 10, // uint16\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, Dirent } from './types.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Decode a binary stat response (49 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 */\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\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: 0,\n ino,\n mode,\n nlink: 1,\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 };\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): 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 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","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\nexport function readdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): string[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const flags = opts?.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 opts?.withFileTypes ? decodeDirents(data) : decodeNames(data);\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const flags = opts?.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 opts?.withFileTypes ? decodeDirents(data) : decodeNames(data);\n}\n","import type { Stats } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\n\nexport function statSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): Stats {\n const buf = encodeRequest(OP.STAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return decodeStats(data!);\n}\n\nexport function lstatSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): Stats {\n const buf = encodeRequest(OP.LSTAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return decodeStats(data!);\n}\n\nexport async function stat(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Stats> {\n const { status, data } = await asyncRequest(OP.STAT, filePath);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return decodeStats(data!);\n}\n\nexport async function lstat(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Stats> {\n const { status, data } = await asyncRequest(OP.LSTAT, filePath);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return 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(4);\n new DataView(lenBuf.buffer).setUint32(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(4);\n new DataView(lenBuf.buffer).setUint32(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","/**\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_SYNC: 4096,\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 { 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\n): Promise<void> {\n const { status } = await asyncRequest(OP.ACCESS, filePath, mode ?? 0);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function realpathSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): string {\n const buf = encodeRequest(OP.REALPATH, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n\nexport async function realpath(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.REALPATH, filePath);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chmodSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number\n): void {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const buf = encodeRequest(OP.CHMOD, filePath, 0, modeBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n\nexport async function chmod(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number\n): Promise<void> {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const { status } = await asyncRequest(OP.CHMOD, filePath, 0, modeBuf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chownSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): void {\n const ownerBuf = new Uint8Array(8);\n const dv = new DataView(ownerBuf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const buf = encodeRequest(OP.CHOWN, filePath, 0, ownerBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n\nexport async function chown(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): Promise<void> {\n const buf = new Uint8Array(8);\n const dv = new DataView(buf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const { status } = await asyncRequest(OP.CHOWN, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function utimesSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): void {\n const timesBuf = new Uint8Array(16);\n const dv = new DataView(timesBuf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.UTIMES, filePath, 0, timesBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n\nexport async function utimes(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const buf = new Uint8Array(16);\n const dv = new DataView(buf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.UTIMES, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function symlinkSync(\n syncRequest: SyncRequestFn,\n target: string,\n linkPath: string\n): 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): string {\n const buf = encodeRequest(OP.READLINK, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n return decoder.decode(data!);\n}\n\nexport async function symlink(\n asyncRequest: AsyncRequestFn,\n target: string,\n linkPath: string\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): Promise<string> {\n const { status, data } = await asyncRequest(OP.READLINK, filePath);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\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 { Stats, FileHandle, ReadOptions, WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\nimport { constants } from '../constants.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function parseFlags(flags: string): number {\n switch (flags) {\n case 'r': return constants.O_RDONLY;\n case 'r+': return constants.O_RDWR;\n case 'w': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC;\n case 'w+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC;\n case 'a': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND;\n case 'a+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND;\n case 'wx': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'wx+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'ax': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n case 'ax+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n default: return constants.O_RDONLY;\n }\n}\n\nexport function openSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n flags: string | number = 'r',\n _mode?: number\n): number {\n const numFlags = typeof flags === 'string' ? parseFlags(flags) : flags;\n const buf = encodeRequest(OP.OPEN, filePath, numFlags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n return new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n}\n\nexport function closeSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.CLOSE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n}\n\nexport function readSync(\n syncRequest: SyncRequestFn,\n fd: number,\n buffer: Uint8Array,\n offset: number = 0,\n length: number = buffer.byteLength,\n position: number | null = null\n): number {\n const fdBuf = new Uint8Array(12);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, length, true);\n dv.setInt32(8, position ?? -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, length)), offset);\n return data.byteLength;\n }\n return 0;\n}\n\nexport function writeSyncFd(\n syncRequest: SyncRequestFn,\n fd: number,\n buffer: Uint8Array,\n offset: number = 0,\n length: number = buffer.byteLength,\n position: number | null = null\n): number {\n const writeData = buffer.subarray(offset, offset + length);\n const fdBuf = new Uint8Array(8 + writeData.byteLength);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setInt32(4, position ?? -1, true);\n fdBuf.set(writeData, 8);\n const buf = encodeRequest(OP.FWRITE, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n return data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n}\n\nexport function fstatSync(\n syncRequest: SyncRequestFn,\n fd: number\n): Stats {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.FSTAT, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n}\n\nexport function ftruncateSync(\n syncRequest: SyncRequestFn,\n fd: number,\n len: number = 0\n): void {\n const fdBuf = new Uint8Array(8);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, len, true);\n const buf = encodeRequest(OP.FTRUNCATE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n}\n\nexport function fdatasyncSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const buf = encodeRequest(OP.FSYNC, '');\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fdatasync', String(fd));\n}\n\n// ========== Async FileHandle ==========\n\nexport async function open(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n flags?: string | number,\n _mode?: number\n): Promise<FileHandle> {\n const numFlags = typeof flags === 'string' ? parseFlags(flags ?? 'r') : (flags ?? 0);\n const { status, data } = await asyncRequest(OP.OPEN, filePath, numFlags);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n return createFileHandle(fd, asyncRequest);\n}\n\nfunction createFileHandle(fd: number, asyncRequest: AsyncRequestFn): FileHandle {\n return {\n fd,\n\n async read(buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null) {\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length, position: position ?? -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, length)), offset);\n return { bytesRead, buffer };\n },\n\n async write(buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null) {\n const writeData = buffer.subarray(offset, offset + length);\n const { status, data } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: writeData, position: position ?? -1 });\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 };\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 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}\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\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 } from '../types.js';\nimport type { AsyncRequestFn } from './context.js';\nimport { stat } from './stat.js';\nimport * as path from '../path.js';\n\nexport function watch(\n _filePath: string,\n _options?: WatchOptions | string,\n _listener?: WatchListener\n): FSWatcher {\n const interval = setInterval(() => {\n // Polling-based watch placeholder\n }, 1000);\n\n const watcher: FSWatcher = {\n close: () => clearInterval(interval),\n ref: () => watcher,\n unref: () => watcher,\n };\n\n return watcher;\n}\n\nexport function watchFile(\n _filePath: string,\n _optionsOrListener?: WatchFileOptions | WatchFileListener,\n _listener?: WatchFileListener\n): void {\n // Stat polling placeholder\n}\n\nexport function unwatchFile(\n _filePath: string,\n _listener?: WatchFileListener\n): void {\n // Clear stat polling placeholder\n}\n\nexport async function* watchAsync(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: WatchOptions\n): AsyncIterable<WatchEventType> {\n let lastMtime = 0;\n const signal = options?.signal;\n\n while (!signal?.aborted) {\n try {\n const s = await stat(asyncRequest, filePath);\n if (s.mtimeMs !== lastMtime) {\n if (lastMtime !== 0) {\n yield { eventType: 'change', filename: path.basename(filePath) };\n }\n lastMtime = s.mtimeMs;\n }\n } catch {\n yield { eventType: 'rename', filename: path.basename(filePath) };\n return;\n }\n await new Promise(r => setTimeout(r, 100));\n }\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,\n ReaddirOptions, Stats, Dirent, VFSConfig,\n WatchOptions, WatchFileOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener,\n ReadStreamOptions, WriteStreamOptions,\n} from './types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './methods/context.js';\nimport { SAB_OFFSETS, SIGNAL, OP, encodeRequest, decodeResponse } from './protocol/opcodes.js';\n\n// ---- Method imports ----\nimport { readFileSync as _readFileSync, readFile as _readFile } from './methods/readFile.js';\nimport { writeFileSync as _writeFileSync, writeFile as _writeFile } from './methods/writeFile.js';\nimport { appendFileSync as _appendFileSync, appendFile as _appendFile } from './methods/appendFile.js';\nimport { existsSync as _existsSync, exists as _exists } from './methods/exists.js';\nimport { mkdirSync as _mkdirSync, mkdir as _mkdir } from './methods/mkdir.js';\nimport { rmdirSync as _rmdirSync, rmdir as _rmdir } from './methods/rmdir.js';\nimport { rmSync as _rmSync, rm as _rm } from './methods/rm.js';\nimport { unlinkSync as _unlinkSync, unlink as _unlink } from './methods/unlink.js';\nimport { readdirSync as _readdirSync, readdir as _readdir } from './methods/readdir.js';\nimport { statSync as _statSync, lstatSync as _lstatSync, stat as _stat, lstat as _lstat } from './methods/stat.js';\nimport { renameSync as _renameSync, rename as _rename } from './methods/rename.js';\nimport { copyFileSync as _copyFileSync, copyFile as _copyFile } from './methods/copyFile.js';\nimport { truncateSync as _truncateSync, truncate as _truncate } from './methods/truncate.js';\nimport { accessSync as _accessSync, access as _access } from './methods/access.js';\nimport { realpathSync as _realpathSync, realpath as _realpath } from './methods/realpath.js';\nimport { chmodSync as _chmodSync, chmod as _chmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes } from './methods/utimes.js';\nimport { symlinkSync as _symlinkSync, readlinkSync as _readlinkSync, symlink as _symlink, readlink as _readlink } from './methods/symlink.js';\nimport { linkSync as _linkSync, link as _link } from './methods/link.js';\nimport { mkdtempSync as _mkdtempSync, mkdtemp as _mkdtemp } from './methods/mkdtemp.js';\nimport {\n openSync as _openSync, closeSync as _closeSync,\n readSync as _readSync, writeSyncFd as _writeSyncFd,\n fstatSync as _fstatSync, ftruncateSync as _ftruncateSync, fdatasyncSync as _fdatasyncSync,\n open as _open,\n} from './methods/open.js';\nimport { opendir as _opendir } from './methods/opendir.js';\nimport { watch as _watch, watchFile as _watchFile, unwatchFile as _unwatchFile, watchAsync as _watchAsync } from './methods/watch.js';\n\nconst encoder = new TextEncoder();\n\n// Default SAB size: 2MB\nconst DEFAULT_SAB_SIZE = 2 * 1024 * 1024;\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\nfunction spinWait(arr: Int32Array, index: number, value: number): void {\n if (_canAtomicsWait) {\n Atomics.wait(arr, index, value);\n } else {\n while (Atomics.load(arr, index) === value) {\n // spin\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 isReady = false;\n\n // Config\n private config: Omit<Required<VFSConfig>, 'opfsSyncRoot'> & { opfsSyncRoot?: string };\n private tabId: string;\n\n // Service worker registration for multi-tab port transfer\n private swReg: ServiceWorkerRegistration | null = null;\n private isFollower = false;\n private holdingLeaderLock = false;\n private brokerInitialized = false;\n private leaderChangeBc: BroadcastChannel | null = null;\n\n // Bound request functions for method delegation\n private _sync: SyncRequestFn = (buf) => this.syncRequest(buf);\n private _async: AsyncRequestFn = (op, p, flags, data, path2, fdArgs) =>\n this.asyncRequest(op, p, flags, data, path2, fdArgs);\n\n // Promises API namespace\n readonly promises: VFSPromises;\n\n constructor(config: VFSConfig = {}) {\n this.config = {\n root: config.root ?? '/',\n opfsSync: config.opfsSync ?? true,\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 };\n\n this.tabId = crypto.randomUUID();\n this.readyPromise = new Promise(resolve => { this.resolveReady = resolve; });\n this.promises = new VFSPromises(this._async);\n\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 this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n 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 if (this.hasSAB) {\n // Initialize async relay with SAB (leader mode fast path)\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\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('vfs-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('vfs-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 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 },\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 this.sendLeaderInit();\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('vfs-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 = new URL('./workers/service.worker.js', import.meta.url);\n this.swReg = await navigator.serviceWorker.register(swUrl.href, { type: 'module' });\n }\n const reg = this.swReg;\n\n if (reg.active) return reg.active;\n const sw = reg.installing || reg.waiting;\n if (!sw) throw new Error('No service worker found');\n\n return new Promise<ServiceWorker>((resolve, reject) => {\n const timer = setTimeout(() => {\n sw.removeEventListener('statechange', onState);\n reject(new Error('Service worker activation timeout'));\n }, 5000);\n const onState = () => {\n if (sw.state === 'activated') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n resolve(sw);\n } else if (sw.state === 'redundant') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n reject(new Error('SW redundant'));\n }\n };\n sw.addEventListener('statechange', onState);\n onState(); // Check immediately — state may have changed before listener was added\n });\n }\n\n /** Register as leader with SW broker (receives follower ports via control channel) */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n this.getServiceWorker().then(sw => {\n const mc = new MessageChannel();\n sw.postMessage({ type: 'register-server' }, [mc.port2]);\n\n mc.port1.onmessage = (event: MessageEvent) => {\n if (event.data.type === 'client-port') {\n const clientPort = event.ports[0];\n if (clientPort) {\n this.syncWorker.postMessage(\n { type: 'client-port', tabId: event.data.tabId, port: clientPort },\n [clientPort],\n );\n }\n }\n };\n mc.port1.start();\n\n // Notify followers that a (new) leader is available — they should reconnect\n const bc = new BroadcastChannel('vfs-leader-change');\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n }\n\n /** Promote from follower to leader (after leader tab dies and lock is acquired) */\n private promoteToLeader(): void {\n this.isFollower = false;\n this.isReady = false;\n this.brokerInitialized = false; // Allow re-registration with SW as new leader\n\n // Stop listening for leader changes (we ARE the leader now)\n if (this.leaderChangeBc) {\n this.leaderChangeBc.close();\n this.leaderChangeBc = null;\n }\n\n // Reset readyPromise for async callers during transition\n this.readyPromise = new Promise(resolve => { this.resolveReady = resolve; });\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 // 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 // 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 this.sendLeaderInit();\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.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 if (Atomics.load(this.readySignal, 0) === 1) {\n this.isReady = true;\n return;\n }\n // Block until ready\n spinWait(this.readySignal, 0, 0);\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: string, options?: ReadOptions | Encoding | null): string | Uint8Array {\n return _readFileSync(this._sync, filePath, options);\n }\n\n writeFileSync(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _writeFileSync(this._sync, filePath, data, options);\n }\n\n appendFileSync(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _appendFileSync(this._sync, filePath, data, options);\n }\n\n existsSync(filePath: string): boolean {\n return _existsSync(this._sync, filePath);\n }\n\n mkdirSync(filePath: string, options?: MkdirOptions | number): string | undefined {\n return _mkdirSync(this._sync, filePath, options);\n }\n\n rmdirSync(filePath: string, options?: RmdirOptions): void {\n _rmdirSync(this._sync, filePath, options);\n }\n\n rmSync(filePath: string, options?: RmOptions): void {\n _rmSync(this._sync, filePath, options);\n }\n\n unlinkSync(filePath: string): void {\n _unlinkSync(this._sync, filePath);\n }\n\n readdirSync(filePath: string, options?: ReaddirOptions | Encoding | null): string[] | Dirent[] {\n return _readdirSync(this._sync, filePath, options);\n }\n\n statSync(filePath: string): Stats {\n return _statSync(this._sync, filePath);\n }\n\n lstatSync(filePath: string): Stats {\n return _lstatSync(this._sync, filePath);\n }\n\n renameSync(oldPath: string, newPath: string): void {\n _renameSync(this._sync, oldPath, newPath);\n }\n\n copyFileSync(src: string, dest: string, mode?: number): void {\n _copyFileSync(this._sync, src, dest, mode);\n }\n\n truncateSync(filePath: string, len?: number): void {\n _truncateSync(this._sync, filePath, len);\n }\n\n accessSync(filePath: string, mode?: number): void {\n _accessSync(this._sync, filePath, mode);\n }\n\n realpathSync(filePath: string): string {\n return _realpathSync(this._sync, filePath);\n }\n\n chmodSync(filePath: string, mode: number): void {\n _chmodSync(this._sync, filePath, mode);\n }\n\n chownSync(filePath: string, uid: number, gid: number): void {\n _chownSync(this._sync, filePath, uid, gid);\n }\n\n utimesSync(filePath: string, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, filePath, atime, mtime);\n }\n\n symlinkSync(target: string, linkPath: string): void {\n _symlinkSync(this._sync, target, linkPath);\n }\n\n readlinkSync(filePath: string): string {\n return _readlinkSync(this._sync, filePath);\n }\n\n linkSync(existingPath: string, newPath: string): void {\n _linkSync(this._sync, existingPath, 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: string, flags: string | number = 'r', mode?: number): number {\n return _openSync(this._sync, filePath, flags, mode);\n }\n\n closeSync(fd: number): void {\n _closeSync(this._sync, fd);\n }\n\n readSync(fd: number, buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null): number {\n return _readSync(this._sync, fd, buffer, offset, length, position);\n }\n\n writeSync(fd: number, buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null): number {\n return _writeSyncFd(this._sync, fd, buffer, offset, length, position);\n }\n\n fstatSync(fd: number): Stats {\n return _fstatSync(this._sync, fd);\n }\n\n ftruncateSync(fd: number, len?: number): void {\n _ftruncateSync(this._sync, fd, len);\n }\n\n fdatasyncSync(fd: number): void {\n _fdatasyncSync(this._sync, fd);\n }\n\n // ---- Watch methods ----\n\n watch(filePath: string, options?: WatchOptions | Encoding, listener?: WatchListener): FSWatcher {\n return _watch(filePath, options, listener);\n }\n\n watchFile(filePath: string, optionsOrListener?: WatchFileOptions | WatchFileListener, listener?: WatchFileListener): void {\n _watchFile(filePath, optionsOrListener, listener);\n }\n\n unwatchFile(filePath: string, listener?: WatchFileListener): void {\n _unwatchFile(filePath, listener);\n }\n\n // ---- Stream methods ----\n\n createReadStream(filePath: string, options?: ReadStreamOptions | string): ReadableStream<Uint8Array> {\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\n return new ReadableStream<Uint8Array>({\n pull: async (controller) => {\n try {\n const readLen = end !== undefined\n ? Math.min(highWaterMark, end - position + 1)\n : highWaterMark;\n\n if (readLen <= 0) {\n controller.close();\n return;\n }\n\n const result = await this.promises.readFile(filePath);\n const data = result instanceof Uint8Array ? result : encoder.encode(result);\n const chunk = data.subarray(position, position + readLen);\n\n if (chunk.byteLength === 0) {\n controller.close();\n return;\n }\n\n controller.enqueue(chunk);\n position += chunk.byteLength;\n\n if (end !== undefined && position > end) {\n controller.close();\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n\n createWriteStream(filePath: string, options?: WriteStreamOptions | string): WritableStream<Uint8Array> {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n let position = opts?.start ?? 0;\n let initialized = false;\n\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n if (!initialized) {\n // Truncate file on first write (unless appending)\n if (opts?.flags !== 'a' && opts?.flags !== 'a+') {\n await this.promises.writeFile(filePath, new Uint8Array(0));\n }\n initialized = true;\n }\n await this.promises.appendFile(filePath, chunk);\n position += chunk.byteLength;\n },\n close: async () => {\n if (opts?.flush) {\n await this.promises.flush();\n }\n },\n });\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 /** Async init helper — avoid blocking main thread */\n init(): Promise<void> {\n return this.readyPromise;\n }\n}\n\n// ========== Promises API ==========\n\nclass VFSPromises {\n private _async: AsyncRequestFn;\n\n constructor(asyncRequest: AsyncRequestFn) {\n this._async = asyncRequest;\n }\n\n readFile(filePath: string, options?: ReadOptions | Encoding | null) {\n return _readFile(this._async, filePath, options);\n }\n\n writeFile(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _writeFile(this._async, filePath, data, options);\n }\n\n appendFile(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _appendFile(this._async, filePath, data, options);\n }\n\n mkdir(filePath: string, options?: MkdirOptions | number) {\n return _mkdir(this._async, filePath, options);\n }\n\n rmdir(filePath: string, options?: RmdirOptions) {\n return _rmdir(this._async, filePath, options);\n }\n\n rm(filePath: string, options?: RmOptions) {\n return _rm(this._async, filePath, options);\n }\n\n unlink(filePath: string) {\n return _unlink(this._async, filePath);\n }\n\n readdir(filePath: string, options?: ReaddirOptions | Encoding | null) {\n return _readdir(this._async, filePath, options);\n }\n\n stat(filePath: string) {\n return _stat(this._async, filePath);\n }\n\n lstat(filePath: string) {\n return _lstat(this._async, filePath);\n }\n\n access(filePath: string, mode?: number) {\n return _access(this._async, filePath, mode);\n }\n\n rename(oldPath: string, newPath: string) {\n return _rename(this._async, oldPath, newPath);\n }\n\n copyFile(src: string, dest: string, mode?: number) {\n return _copyFile(this._async, src, dest, mode);\n }\n\n truncate(filePath: string, len?: number) {\n return _truncate(this._async, filePath, len);\n }\n\n realpath(filePath: string) {\n return _realpath(this._async, filePath);\n }\n\n exists(filePath: string) {\n return _exists(this._async, filePath);\n }\n\n chmod(filePath: string, mode: number) {\n return _chmod(this._async, filePath, mode);\n }\n\n chown(filePath: string, uid: number, gid: number) {\n return _chown(this._async, filePath, uid, gid);\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, filePath, atime, mtime);\n }\n\n symlink(target: string, linkPath: string) {\n return _symlink(this._async, target, linkPath);\n }\n\n readlink(filePath: string) {\n return _readlink(this._async, filePath);\n }\n\n link(existingPath: string, newPath: string) {\n return _link(this._async, existingPath, newPath);\n }\n\n open(filePath: string, flags?: string | number, mode?: number) {\n return _open(this._async, filePath, flags, mode);\n }\n\n opendir(filePath: string) {\n return _opendir(this._async, filePath);\n }\n\n mkdtemp(prefix: string) {\n return _mkdtemp(this._async, prefix);\n }\n\n async *watch(filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n yield* _watchAsync(this._async, filePath, options);\n }\n\n async flush(): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async purge(): Promise<void> {\n // No-op\n }\n}\n","/**\n * VFS-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 { constants } from './constants.js';\nexport { FSError, createError, statusToError } from './errors.js';\nexport * as path from './path.js';\nexport type {\n Stats,\n Dirent,\n ReadOptions,\n WriteOptions,\n MkdirOptions,\n RmdirOptions,\n RmOptions,\n ReaddirOptions,\n Encoding,\n PathLike,\n FileHandle,\n Dir,\n VFSConfig,\n WatchOptions,\n WatchEventType,\n FSWatcher,\n WatchListener,\n WatchFileListener,\n ReadStreamOptions,\n WriteStreamOptions,\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/protocol/opcodes.ts","../src/src/errors.ts","../src/src/methods/readFile.ts","../src/src/methods/writeFile.ts","../src/src/methods/appendFile.ts","../src/src/methods/exists.ts","../src/src/methods/mkdir.ts","../src/src/methods/rmdir.ts","../src/src/methods/rm.ts","../src/src/methods/unlink.ts","../src/src/vfs/layout.ts","../src/src/stats.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/constants.ts","../src/src/methods/access.ts","../src/src/methods/realpath.ts","../src/src/methods/chmod.ts","../src/src/methods/chown.ts","../src/src/methods/utimes.ts","../src/src/methods/symlink.ts","../src/src/methods/link.ts","../src/src/methods/mkdtemp.ts","../src/src/methods/open.ts","../src/src/methods/opendir.ts","../src/src/path.ts","../src/src/methods/watch.ts","../src/src/filesystem.ts","../src/src/index.ts"],"names":["decoder","encoder","status","isAbsolute","resolve","bc"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Binary protocol operation codes and header encoding/decoding.\n * All inter-worker messages use this minimal binary protocol — no JSON, no strings.\n */\n\n// Operation codes\nexport const OP = {\n READ: 1,\n WRITE: 2,\n UNLINK: 3,\n STAT: 4,\n LSTAT: 5,\n MKDIR: 6,\n RMDIR: 7,\n READDIR: 8,\n RENAME: 9,\n EXISTS: 10,\n TRUNCATE: 11,\n APPEND: 12,\n COPY: 13,\n ACCESS: 14,\n REALPATH: 15,\n CHMOD: 16,\n CHOWN: 17,\n UTIMES: 18,\n SYMLINK: 19,\n READLINK: 20,\n LINK: 21,\n OPEN: 22,\n CLOSE: 23,\n FREAD: 24,\n FWRITE: 25,\n FSTAT: 26,\n FTRUNCATE: 27,\n FSYNC: 28,\n OPENDIR: 29,\n MKDTEMP: 30,\n} as const;\n\nexport type OpCode = (typeof OP)[keyof typeof OP];\n\n// Response status codes\nexport const STATUS = {\n OK: 0,\n ENOENT: 1,\n EEXIST: 2,\n EISDIR: 3,\n ENOTDIR: 4,\n ENOTEMPTY: 5,\n EACCES: 6,\n EINVAL: 7,\n EBADF: 8,\n ELOOP: 9,\n ENOSPC: 10,\n} as const;\n\n// SAB layout offsets\nexport const SAB_OFFSETS = {\n CONTROL: 0, // Int32 - signal (0=idle, 1=request, 2=response, 3=chunk, 4=ack)\n OPCODE: 4, // Int32 - operation code\n STATUS: 8, // Int32 - response status / error\n CHUNK_LEN: 12, // Int32 - bytes in this chunk\n TOTAL_LEN: 16, // BigUint64 - full data size across all chunks\n CHUNK_IDX: 24, // Int32 - 0-based chunk index\n RESERVED: 28, // Int32 - reserved\n HEADER_SIZE: 32, // Data payload starts here\n} as const;\n\n// SAB control signals\nexport const SIGNAL = {\n IDLE: 0,\n REQUEST: 1,\n RESPONSE: 2,\n CHUNK: 3,\n CHUNK_ACK: 4,\n} as const;\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\n/**\n * Encode a request into an ArrayBuffer for MessageChannel transfer.\n *\n * Request format (16-byte header + path + data):\n * bytes 0-3: operation (uint32)\n * bytes 4-7: flags (uint32)\n * bytes 8-11: pathLen (uint32)\n * bytes 12-15: dataLen (uint32)\n * bytes 16+: path (UTF-8)\n * bytes 16+pathLen: data payload\n */\nexport function encodeRequest(\n op: number,\n path: string,\n flags: number = 0,\n data?: Uint8Array\n): ArrayBuffer {\n const pathBytes = encoder.encode(path);\n const dataLen = data ? data.byteLength : 0;\n const totalLen = 16 + pathBytes.byteLength + dataLen;\n const buf = new ArrayBuffer(totalLen);\n const view = new DataView(buf);\n\n view.setUint32(0, op, true);\n view.setUint32(4, flags, true);\n view.setUint32(8, pathBytes.byteLength, true);\n view.setUint32(12, dataLen, true);\n\n const bytes = new Uint8Array(buf);\n bytes.set(pathBytes, 16);\n if (data) {\n bytes.set(data, 16 + pathBytes.byteLength);\n }\n\n return buf;\n}\n\n/**\n * Decode a request ArrayBuffer.\n */\nexport function decodeRequest(buf: ArrayBuffer): {\n op: number;\n flags: number;\n path: string;\n data: Uint8Array | null;\n} {\n 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 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","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';\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 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 decoder.decode(result);\n return result;\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 { status, data } = await asyncRequest(OP.READ, filePath);\n if (status !== 0) throw statusToError(status, 'read', filePath);\n const result = data ?? new Uint8Array(0);\n if (encoding) return decoder.decode(result);\n return result;\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 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' ? encoder.encode(data) : data;\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}\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 flags = opts?.flush === true ? 1 : 0;\n const encoded = typeof data === 'string' ? encoder.encode(data) : data;\n const { status } = await asyncRequest(OP.WRITE, filePath, flags, encoded);\n if (status !== 0) throw statusToError(status, 'write', filePath);\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';\n\nexport function rmSync(\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 async function rm(\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","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","/**\n * VFS Binary Layout Constants\n *\n * Defines the on-disk structure of the virtual filesystem binary file.\n * All reads/writes go through a FileSystemSyncAccessHandle.\n */\n\n// Magic number: \"VFS!\" in ASCII\nexport const VFS_MAGIC = 0x56465321;\nexport const VFS_VERSION = 1;\n\n// Default sizes\nexport const DEFAULT_BLOCK_SIZE = 4096;\nexport const DEFAULT_INODE_COUNT = 10000;\nexport const INODE_SIZE = 64; // bytes per inode entry\n\n// Superblock layout (64 bytes)\nexport const SUPERBLOCK = {\n SIZE: 64,\n MAGIC: 0, // uint32 - 0x56465321\n VERSION: 4, // uint32\n INODE_COUNT: 8, // uint32 - total inodes allocated\n BLOCK_SIZE: 12, // uint32 - data block size (default 4096)\n TOTAL_BLOCKS: 16, // uint32 - total data blocks\n FREE_BLOCKS: 20, // uint32 - available data blocks\n INODE_OFFSET: 24, // float64 - byte offset to inode table\n PATH_OFFSET: 32, // float64 - byte offset to path table\n DATA_OFFSET: 40, // float64 - byte offset to data region\n BITMAP_OFFSET: 48, // float64 - byte offset to free block bitmap\n PATH_USED: 56, // uint32 - bytes used in path table\n RESERVED: 60, // uint32\n} as const;\n\n// Inode entry layout (64 bytes each)\nexport const INODE = {\n TYPE: 0, // uint8 - 0=free, 1=file, 2=directory, 3=symlink\n FLAGS: 1, // uint8[3] - reserved\n PATH_OFFSET: 4, // uint32 - byte offset into path table\n PATH_LENGTH: 8, // uint16 - length of path string\n RESERVED_10: 10, // uint16\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, Dirent } from './types.js';\nimport { INODE_TYPE } from './vfs/layout.js';\n\n/**\n * Decode a binary stat response (49 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 */\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\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: 0,\n ino,\n mode,\n nlink: 1,\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 };\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): 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 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","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\nexport function readdirSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): string[] | Dirent[] {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const flags = opts?.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 opts?.withFileTypes ? decodeDirents(data) : decodeNames(data);\n}\n\nexport async function readdir(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: ReaddirOptions | Encoding | null\n): Promise<string[] | Dirent[]> {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const flags = opts?.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 opts?.withFileTypes ? decodeDirents(data) : decodeNames(data);\n}\n","import type { Stats } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\n\nexport function statSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): Stats {\n const buf = encodeRequest(OP.STAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return decodeStats(data!);\n}\n\nexport function lstatSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): Stats {\n const buf = encodeRequest(OP.LSTAT, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return decodeStats(data!);\n}\n\nexport async function stat(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Stats> {\n const { status, data } = await asyncRequest(OP.STAT, filePath);\n if (status !== 0) throw statusToError(status, 'stat', filePath);\n return decodeStats(data!);\n}\n\nexport async function lstat(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<Stats> {\n const { status, data } = await asyncRequest(OP.LSTAT, filePath);\n if (status !== 0) throw statusToError(status, 'lstat', filePath);\n return 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(4);\n new DataView(lenBuf.buffer).setUint32(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(4);\n new DataView(lenBuf.buffer).setUint32(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","/**\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_SYNC: 4096,\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 { 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\n): Promise<void> {\n const { status } = await asyncRequest(OP.ACCESS, filePath, mode ?? 0);\n if (status !== 0) throw statusToError(status, 'access', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst decoder = new TextDecoder();\n\nexport function realpathSync(\n syncRequest: SyncRequestFn,\n filePath: string\n): string {\n const buf = encodeRequest(OP.REALPATH, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n\nexport async function realpath(\n asyncRequest: AsyncRequestFn,\n filePath: string\n): Promise<string> {\n const { status, data } = await asyncRequest(OP.REALPATH, filePath);\n if (status !== 0) throw statusToError(status, 'realpath', filePath);\n return decoder.decode(data!);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chmodSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n mode: number\n): void {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const buf = encodeRequest(OP.CHMOD, filePath, 0, modeBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n\nexport async function chmod(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n mode: number\n): Promise<void> {\n const modeBuf = new Uint8Array(4);\n new DataView(modeBuf.buffer).setUint32(0, mode, true);\n const { status } = await asyncRequest(OP.CHMOD, filePath, 0, modeBuf);\n if (status !== 0) throw statusToError(status, 'chmod', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function chownSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): void {\n const ownerBuf = new Uint8Array(8);\n const dv = new DataView(ownerBuf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const buf = encodeRequest(OP.CHOWN, filePath, 0, ownerBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n\nexport async function chown(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n uid: number,\n gid: number\n): Promise<void> {\n const buf = new Uint8Array(8);\n const dv = new DataView(buf.buffer);\n dv.setUint32(0, uid, true);\n dv.setUint32(4, gid, true);\n const { status } = await asyncRequest(OP.CHOWN, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'chown', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nexport function utimesSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): void {\n const timesBuf = new Uint8Array(16);\n const dv = new DataView(timesBuf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const buf = encodeRequest(OP.UTIMES, filePath, 0, timesBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n\nexport async function utimes(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n atime: Date | number,\n mtime: Date | number\n): Promise<void> {\n const buf = new Uint8Array(16);\n const dv = new DataView(buf.buffer);\n dv.setFloat64(0, typeof atime === 'number' ? atime : atime.getTime(), true);\n dv.setFloat64(8, typeof mtime === 'number' ? mtime : mtime.getTime(), true);\n const { status } = await asyncRequest(OP.UTIMES, filePath, 0, buf);\n if (status !== 0) throw statusToError(status, 'utimes', filePath);\n}\n","import type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function symlinkSync(\n syncRequest: SyncRequestFn,\n target: string,\n linkPath: string\n): 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): string {\n const buf = encodeRequest(OP.READLINK, filePath);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\n return decoder.decode(data!);\n}\n\nexport async function symlink(\n asyncRequest: AsyncRequestFn,\n target: string,\n linkPath: string\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): Promise<string> {\n const { status, data } = await asyncRequest(OP.READLINK, filePath);\n if (status !== 0) throw statusToError(status, 'readlink', filePath);\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 { Stats, FileHandle, ReadOptions, WriteOptions, Encoding } from '../types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './context.js';\nimport { OP, encodeRequest } from '../protocol/opcodes.js';\nimport { statusToError } from '../errors.js';\nimport { decodeStats } from '../stats.js';\nimport { constants } from '../constants.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport function parseFlags(flags: string): number {\n switch (flags) {\n case 'r': return constants.O_RDONLY;\n case 'r+': return constants.O_RDWR;\n case 'w': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC;\n case 'w+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC;\n case 'a': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND;\n case 'a+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND;\n case 'wx': return constants.O_WRONLY | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'wx+': return constants.O_RDWR | constants.O_CREAT | constants.O_TRUNC | constants.O_EXCL;\n case 'ax': return constants.O_WRONLY | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n case 'ax+': return constants.O_RDWR | constants.O_CREAT | constants.O_APPEND | constants.O_EXCL;\n default: return constants.O_RDONLY;\n }\n}\n\nexport function openSync(\n syncRequest: SyncRequestFn,\n filePath: string,\n flags: string | number = 'r',\n _mode?: number\n): number {\n const numFlags = typeof flags === 'string' ? parseFlags(flags) : flags;\n const buf = encodeRequest(OP.OPEN, filePath, numFlags);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n return new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n}\n\nexport function closeSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.CLOSE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'close', String(fd));\n}\n\nexport function readSync(\n syncRequest: SyncRequestFn,\n fd: number,\n buffer: Uint8Array,\n offset: number = 0,\n length: number = buffer.byteLength,\n position: number | null = null\n): number {\n const fdBuf = new Uint8Array(12);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, length, true);\n dv.setInt32(8, position ?? -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, length)), offset);\n return data.byteLength;\n }\n return 0;\n}\n\nexport function writeSyncFd(\n syncRequest: SyncRequestFn,\n fd: number,\n buffer: Uint8Array,\n offset: number = 0,\n length: number = buffer.byteLength,\n position: number | null = null\n): number {\n const writeData = buffer.subarray(offset, offset + length);\n const fdBuf = new Uint8Array(8 + writeData.byteLength);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setInt32(4, position ?? -1, true);\n fdBuf.set(writeData, 8);\n const buf = encodeRequest(OP.FWRITE, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'write', String(fd));\n return data ? new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true) : 0;\n}\n\nexport function fstatSync(\n syncRequest: SyncRequestFn,\n fd: number\n): Stats {\n const fdBuf = new Uint8Array(4);\n new DataView(fdBuf.buffer).setUint32(0, fd, true);\n const buf = encodeRequest(OP.FSTAT, '', 0, fdBuf);\n const { status, data } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fstat', String(fd));\n return decodeStats(data!);\n}\n\nexport function ftruncateSync(\n syncRequest: SyncRequestFn,\n fd: number,\n len: number = 0\n): void {\n const fdBuf = new Uint8Array(8);\n const dv = new DataView(fdBuf.buffer);\n dv.setUint32(0, fd, true);\n dv.setUint32(4, len, true);\n const buf = encodeRequest(OP.FTRUNCATE, '', 0, fdBuf);\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'ftruncate', String(fd));\n}\n\nexport function fdatasyncSync(\n syncRequest: SyncRequestFn,\n fd: number\n): void {\n const buf = encodeRequest(OP.FSYNC, '');\n const { status } = syncRequest(buf);\n if (status !== 0) throw statusToError(status, 'fdatasync', String(fd));\n}\n\n// ========== Async FileHandle ==========\n\nexport async function open(\n asyncRequest: AsyncRequestFn,\n filePath: string,\n flags?: string | number,\n _mode?: number\n): Promise<FileHandle> {\n const numFlags = typeof flags === 'string' ? parseFlags(flags ?? 'r') : (flags ?? 0);\n const { status, data } = await asyncRequest(OP.OPEN, filePath, numFlags);\n if (status !== 0) throw statusToError(status, 'open', filePath);\n const fd = new DataView(data!.buffer, data!.byteOffset, data!.byteLength).getUint32(0, true);\n return createFileHandle(fd, asyncRequest);\n}\n\nfunction createFileHandle(fd: number, asyncRequest: AsyncRequestFn): FileHandle {\n return {\n fd,\n\n async read(buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null) {\n const { status, data } = await asyncRequest(OP.FREAD, '', 0, null, undefined, { fd, length, position: position ?? -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, length)), offset);\n return { bytesRead, buffer };\n },\n\n async write(buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null) {\n const writeData = buffer.subarray(offset, offset + length);\n const { status, data } = await asyncRequest(OP.FWRITE, '', 0, null, undefined, { fd, data: writeData, position: position ?? -1 });\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 };\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 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}\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\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 absPath: string;\n recursive: boolean;\n listener: WatchListener;\n signal?: AbortSignal;\n}\n\ninterface WatchFileEntry {\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\nlet bc: BroadcastChannel | null = null;\nlet bcRefCount = 0;\n\nfunction ensureBc(): void {\n if (bc) { bcRefCount++; return; }\n bc = new BroadcastChannel('vfs-watch');\n bcRefCount = 1;\n bc.onmessage = onBroadcast;\n}\n\nfunction releaseBc(): void {\n if (--bcRefCount <= 0 && bc) {\n bc.close();\n bc = null;\n bcRefCount = 0;\n }\n}\n\n// ========== BroadcastChannel handler ==========\n\nfunction onBroadcast(event: MessageEvent<{ eventType: 'change' | 'rename'; path: string }>): void {\n const { eventType, path: mutatedPath } = event.data;\n\n // Notify fs.watch() watchers\n for (const entry of watchers) {\n const filename = matchWatcher(entry, mutatedPath);\n if (filename !== null) {\n try { entry.listener(eventType, filename); } catch { /* swallow */ }\n }\n }\n\n // Notify fs.watchFile() watchers\n const fileSet = fileWatchers.get(mutatedPath);\n if (fileSet) {\n for (const entry of fileSet) {\n triggerWatchFile(entry);\n }\n }\n}\n\n// ========== Path matching ==========\n\nfunction matchWatcher(entry: WatchEntry, mutatedPath: string): string | null {\n const { absPath, recursive } = entry;\n\n // Exact match (watching a specific file, or the directory itself was modified)\n if (mutatedPath === absPath) {\n return path.basename(mutatedPath);\n }\n\n // Check if mutatedPath is inside absPath (directory watching)\n if (!mutatedPath.startsWith(absPath) || mutatedPath.charAt(absPath.length) !== '/') {\n return null;\n }\n\n const relativePath = mutatedPath.substring(absPath.length + 1);\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 filePath: string,\n options?: WatchOptions | string,\n listener?: WatchListener\n): FSWatcher {\n const opts: WatchOptions = typeof options === 'string'\n ? { encoding: options as any }\n : (options ?? {});\n\n const cb: WatchListener = listener ?? (() => {});\n const absPath = path.resolve(filePath);\n const signal = opts.signal;\n\n const entry: WatchEntry = {\n absPath,\n recursive: opts.recursive ?? false,\n listener: cb,\n signal,\n };\n\n ensureBc();\n watchers.add(entry);\n\n // AbortSignal support\n if (signal) {\n const onAbort = () => {\n watchers.delete(entry);\n releaseBc();\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();\n },\n ref() { return watcher; },\n unref() { return watcher; },\n };\n\n return watcher;\n}\n\n// ========== fs.watchFile() ==========\n\nexport function watchFile(\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); } catch { /* file may not exist */ }\n\n const entry: WatchFileEntry = {\n absPath,\n listener: cb,\n interval,\n prevStats,\n syncRequest,\n timerId: null,\n };\n\n ensureBc();\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 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();\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();\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); } catch { /* file gone */ }\n\n const prev = entry.prevStats ?? emptyStats();\n const curr = currStats ?? emptyStats();\n\n if (prev.mtimeMs !== curr.mtimeMs || prev.size !== curr.size || prev.ino !== curr.ino) {\n entry.prevStats = currStats;\n try { entry.listener(curr, prev); } catch { /* swallow */ }\n }\n}\n\nfunction emptyStats(): Stats {\n const zero = new Date(0);\n return {\n isFile: () => false,\n isDirectory: () => false,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0, ino: 0, mode: 0, nlink: 0, uid: 0, gid: 0, rdev: 0,\n size: 0, blksize: 4096, blocks: 0,\n atimeMs: 0, mtimeMs: 0, ctimeMs: 0, birthtimeMs: 0,\n atime: zero, mtime: zero, ctime: zero, birthtime: zero,\n };\n}\n\n// ========== promises.watch() ==========\n\nexport async function* watchAsync(\n _asyncRequest: AsyncRequestFn,\n filePath: string,\n options?: WatchOptions\n): AsyncIterable<WatchEventType> {\n const absPath = path.resolve(filePath);\n const recursive = options?.recursive ?? false;\n const signal = options?.signal;\n\n const queue: WatchEventType[] = [];\n let resolve: (() => void) | null = null;\n\n const entry: WatchEntry = {\n absPath,\n recursive,\n listener: (eventType, filename) => {\n queue.push({ eventType, filename });\n if (resolve) { resolve(); resolve = null; }\n },\n signal,\n };\n\n ensureBc();\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();\n }\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,\n ReaddirOptions, Stats, Dirent, VFSConfig,\n WatchOptions, WatchFileOptions, WatchEventType, FSWatcher, WatchListener, WatchFileListener,\n ReadStreamOptions, WriteStreamOptions,\n} from './types.js';\nimport type { SyncRequestFn, AsyncRequestFn } from './methods/context.js';\nimport { SAB_OFFSETS, SIGNAL, OP, encodeRequest, decodeResponse } from './protocol/opcodes.js';\n\n// ---- Method imports ----\nimport { readFileSync as _readFileSync, readFile as _readFile } from './methods/readFile.js';\nimport { writeFileSync as _writeFileSync, writeFile as _writeFile } from './methods/writeFile.js';\nimport { appendFileSync as _appendFileSync, appendFile as _appendFile } from './methods/appendFile.js';\nimport { existsSync as _existsSync, exists as _exists } from './methods/exists.js';\nimport { mkdirSync as _mkdirSync, mkdir as _mkdir } from './methods/mkdir.js';\nimport { rmdirSync as _rmdirSync, rmdir as _rmdir } from './methods/rmdir.js';\nimport { rmSync as _rmSync, rm as _rm } from './methods/rm.js';\nimport { unlinkSync as _unlinkSync, unlink as _unlink } from './methods/unlink.js';\nimport { readdirSync as _readdirSync, readdir as _readdir } from './methods/readdir.js';\nimport { statSync as _statSync, lstatSync as _lstatSync, stat as _stat, lstat as _lstat } from './methods/stat.js';\nimport { renameSync as _renameSync, rename as _rename } from './methods/rename.js';\nimport { copyFileSync as _copyFileSync, copyFile as _copyFile } from './methods/copyFile.js';\nimport { truncateSync as _truncateSync, truncate as _truncate } from './methods/truncate.js';\nimport { accessSync as _accessSync, access as _access } from './methods/access.js';\nimport { realpathSync as _realpathSync, realpath as _realpath } from './methods/realpath.js';\nimport { chmodSync as _chmodSync, chmod as _chmod } from './methods/chmod.js';\nimport { chownSync as _chownSync, chown as _chown } from './methods/chown.js';\nimport { utimesSync as _utimesSync, utimes as _utimes } from './methods/utimes.js';\nimport { symlinkSync as _symlinkSync, readlinkSync as _readlinkSync, symlink as _symlink, readlink as _readlink } from './methods/symlink.js';\nimport { linkSync as _linkSync, link as _link } from './methods/link.js';\nimport { mkdtempSync as _mkdtempSync, mkdtemp as _mkdtemp } from './methods/mkdtemp.js';\nimport {\n openSync as _openSync, closeSync as _closeSync,\n readSync as _readSync, writeSyncFd as _writeSyncFd,\n fstatSync as _fstatSync, ftruncateSync as _ftruncateSync, fdatasyncSync as _fdatasyncSync,\n open as _open,\n} from './methods/open.js';\nimport { opendir as _opendir } from './methods/opendir.js';\nimport { watch as _watch, watchFile as _watchFile, unwatchFile as _unwatchFile, watchAsync as _watchAsync } from './methods/watch.js';\n\nconst encoder = new TextEncoder();\n\n// Default SAB size: 2MB\nconst DEFAULT_SAB_SIZE = 2 * 1024 * 1024;\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\nfunction spinWait(arr: Int32Array, index: number, value: number): void {\n if (_canAtomicsWait) {\n Atomics.wait(arr, index, value);\n } else {\n while (Atomics.load(arr, index) === value) {\n // spin\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 isReady = false;\n\n // Config\n private config: Omit<Required<VFSConfig>, 'opfsSyncRoot'> & { opfsSyncRoot?: string };\n private tabId: string;\n\n // Service worker registration for multi-tab port transfer\n private swReg: ServiceWorkerRegistration | null = null;\n private isFollower = false;\n private holdingLeaderLock = false;\n private brokerInitialized = false;\n private leaderChangeBc: BroadcastChannel | null = null;\n\n // Bound request functions for method delegation\n private _sync: SyncRequestFn = (buf) => this.syncRequest(buf);\n private _async: AsyncRequestFn = (op, p, flags, data, path2, fdArgs) =>\n this.asyncRequest(op, p, flags, data, path2, fdArgs);\n\n // Promises API namespace\n readonly promises: VFSPromises;\n\n constructor(config: VFSConfig = {}) {\n this.config = {\n root: config.root ?? '/',\n opfsSync: config.opfsSync ?? true,\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 };\n\n this.tabId = crypto.randomUUID();\n this.readyPromise = new Promise(resolve => { this.resolveReady = resolve; });\n this.promises = new VFSPromises(this._async);\n\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 this.resolveReady();\n if (!this.isFollower) {\n this.initLeaderBroker();\n }\n } else if (msg.type === 'init-failed') {\n 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 if (this.hasSAB) {\n // Initialize async relay with SAB (leader mode fast path)\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\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('vfs-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('vfs-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 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 },\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 this.sendLeaderInit();\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('vfs-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 = new URL('./workers/service.worker.js', import.meta.url);\n this.swReg = await navigator.serviceWorker.register(swUrl.href, { type: 'module' });\n }\n const reg = this.swReg;\n\n if (reg.active) return reg.active;\n const sw = reg.installing || reg.waiting;\n if (!sw) throw new Error('No service worker found');\n\n return new Promise<ServiceWorker>((resolve, reject) => {\n const timer = setTimeout(() => {\n sw.removeEventListener('statechange', onState);\n reject(new Error('Service worker activation timeout'));\n }, 5000);\n const onState = () => {\n if (sw.state === 'activated') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n resolve(sw);\n } else if (sw.state === 'redundant') {\n clearTimeout(timer);\n sw.removeEventListener('statechange', onState);\n reject(new Error('SW redundant'));\n }\n };\n sw.addEventListener('statechange', onState);\n onState(); // Check immediately — state may have changed before listener was added\n });\n }\n\n /** Register as leader with SW broker (receives follower ports via control channel) */\n private initLeaderBroker(): void {\n if (this.brokerInitialized) return;\n this.brokerInitialized = true;\n\n this.getServiceWorker().then(sw => {\n const mc = new MessageChannel();\n sw.postMessage({ type: 'register-server' }, [mc.port2]);\n\n mc.port1.onmessage = (event: MessageEvent) => {\n if (event.data.type === 'client-port') {\n const clientPort = event.ports[0];\n if (clientPort) {\n this.syncWorker.postMessage(\n { type: 'client-port', tabId: event.data.tabId, port: clientPort },\n [clientPort],\n );\n }\n }\n };\n mc.port1.start();\n\n // Notify followers that a (new) leader is available — they should reconnect\n const bc = new BroadcastChannel('vfs-leader-change');\n bc.postMessage({ type: 'leader-changed' });\n bc.close();\n }).catch(err => {\n console.warn('[VFS] SW broker unavailable, single-tab only:', (err as Error).message);\n });\n }\n\n /** Promote from follower to leader (after leader tab dies and lock is acquired) */\n private promoteToLeader(): void {\n this.isFollower = false;\n this.isReady = false;\n this.brokerInitialized = false; // Allow re-registration with SW as new leader\n\n // Stop listening for leader changes (we ARE the leader now)\n if (this.leaderChangeBc) {\n this.leaderChangeBc.close();\n this.leaderChangeBc = null;\n }\n\n // Reset readyPromise for async callers during transition\n this.readyPromise = new Promise(resolve => { this.resolveReady = resolve; });\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 // 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 // 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 this.sendLeaderInit();\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.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 if (Atomics.load(this.readySignal, 0) === 1) {\n this.isReady = true;\n return;\n }\n // Block until ready\n spinWait(this.readySignal, 0, 0);\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: string, options?: ReadOptions | Encoding | null): string | Uint8Array {\n return _readFileSync(this._sync, filePath, options);\n }\n\n writeFileSync(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _writeFileSync(this._sync, filePath, data, options);\n }\n\n appendFileSync(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding): void {\n _appendFileSync(this._sync, filePath, data, options);\n }\n\n existsSync(filePath: string): boolean {\n return _existsSync(this._sync, filePath);\n }\n\n mkdirSync(filePath: string, options?: MkdirOptions | number): string | undefined {\n return _mkdirSync(this._sync, filePath, options);\n }\n\n rmdirSync(filePath: string, options?: RmdirOptions): void {\n _rmdirSync(this._sync, filePath, options);\n }\n\n rmSync(filePath: string, options?: RmOptions): void {\n _rmSync(this._sync, filePath, options);\n }\n\n unlinkSync(filePath: string): void {\n _unlinkSync(this._sync, filePath);\n }\n\n readdirSync(filePath: string, options?: ReaddirOptions | Encoding | null): string[] | Dirent[] {\n return _readdirSync(this._sync, filePath, options);\n }\n\n statSync(filePath: string): Stats {\n return _statSync(this._sync, filePath);\n }\n\n lstatSync(filePath: string): Stats {\n return _lstatSync(this._sync, filePath);\n }\n\n renameSync(oldPath: string, newPath: string): void {\n _renameSync(this._sync, oldPath, newPath);\n }\n\n copyFileSync(src: string, dest: string, mode?: number): void {\n _copyFileSync(this._sync, src, dest, mode);\n }\n\n truncateSync(filePath: string, len?: number): void {\n _truncateSync(this._sync, filePath, len);\n }\n\n accessSync(filePath: string, mode?: number): void {\n _accessSync(this._sync, filePath, mode);\n }\n\n realpathSync(filePath: string): string {\n return _realpathSync(this._sync, filePath);\n }\n\n chmodSync(filePath: string, mode: number): void {\n _chmodSync(this._sync, filePath, mode);\n }\n\n chownSync(filePath: string, uid: number, gid: number): void {\n _chownSync(this._sync, filePath, uid, gid);\n }\n\n utimesSync(filePath: string, atime: Date | number, mtime: Date | number): void {\n _utimesSync(this._sync, filePath, atime, mtime);\n }\n\n symlinkSync(target: string, linkPath: string): void {\n _symlinkSync(this._sync, target, linkPath);\n }\n\n readlinkSync(filePath: string): string {\n return _readlinkSync(this._sync, filePath);\n }\n\n linkSync(existingPath: string, newPath: string): void {\n _linkSync(this._sync, existingPath, 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: string, flags: string | number = 'r', mode?: number): number {\n return _openSync(this._sync, filePath, flags, mode);\n }\n\n closeSync(fd: number): void {\n _closeSync(this._sync, fd);\n }\n\n readSync(fd: number, buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null): number {\n return _readSync(this._sync, fd, buffer, offset, length, position);\n }\n\n writeSync(fd: number, buffer: Uint8Array, offset = 0, length = buffer.byteLength, position: number | null = null): number {\n return _writeSyncFd(this._sync, fd, buffer, offset, length, position);\n }\n\n fstatSync(fd: number): Stats {\n return _fstatSync(this._sync, fd);\n }\n\n ftruncateSync(fd: number, len?: number): void {\n _ftruncateSync(this._sync, fd, len);\n }\n\n fdatasyncSync(fd: number): void {\n _fdatasyncSync(this._sync, fd);\n }\n\n // ---- Watch methods ----\n\n watch(filePath: string, options?: WatchOptions | Encoding, listener?: WatchListener): FSWatcher {\n return _watch(filePath, options, listener);\n }\n\n watchFile(filePath: string, optionsOrListener?: WatchFileOptions | WatchFileListener, listener?: WatchFileListener): void {\n _watchFile(this._sync, filePath, optionsOrListener, listener);\n }\n\n unwatchFile(filePath: string, listener?: WatchFileListener): void {\n _unwatchFile(filePath, listener);\n }\n\n // ---- Stream methods ----\n\n createReadStream(filePath: string, options?: ReadStreamOptions | string): ReadableStream<Uint8Array> {\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\n return new ReadableStream<Uint8Array>({\n pull: async (controller) => {\n try {\n const readLen = end !== undefined\n ? Math.min(highWaterMark, end - position + 1)\n : highWaterMark;\n\n if (readLen <= 0) {\n controller.close();\n return;\n }\n\n const result = await this.promises.readFile(filePath);\n const data = result instanceof Uint8Array ? result : encoder.encode(result);\n const chunk = data.subarray(position, position + readLen);\n\n if (chunk.byteLength === 0) {\n controller.close();\n return;\n }\n\n controller.enqueue(chunk);\n position += chunk.byteLength;\n\n if (end !== undefined && position > end) {\n controller.close();\n }\n } catch (err) {\n controller.error(err);\n }\n },\n });\n }\n\n createWriteStream(filePath: string, options?: WriteStreamOptions | string): WritableStream<Uint8Array> {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options;\n let position = opts?.start ?? 0;\n let initialized = false;\n\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n if (!initialized) {\n // Truncate file on first write (unless appending)\n if (opts?.flags !== 'a' && opts?.flags !== 'a+') {\n await this.promises.writeFile(filePath, new Uint8Array(0));\n }\n initialized = true;\n }\n await this.promises.appendFile(filePath, chunk);\n position += chunk.byteLength;\n },\n close: async () => {\n if (opts?.flush) {\n await this.promises.flush();\n }\n },\n });\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 /** Async init helper — avoid blocking main thread */\n init(): Promise<void> {\n return this.readyPromise;\n }\n}\n\n// ========== Promises API ==========\n\nclass VFSPromises {\n private _async: AsyncRequestFn;\n\n constructor(asyncRequest: AsyncRequestFn) {\n this._async = asyncRequest;\n }\n\n readFile(filePath: string, options?: ReadOptions | Encoding | null) {\n return _readFile(this._async, filePath, options);\n }\n\n writeFile(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _writeFile(this._async, filePath, data, options);\n }\n\n appendFile(filePath: string, data: string | Uint8Array, options?: WriteOptions | Encoding) {\n return _appendFile(this._async, filePath, data, options);\n }\n\n mkdir(filePath: string, options?: MkdirOptions | number) {\n return _mkdir(this._async, filePath, options);\n }\n\n rmdir(filePath: string, options?: RmdirOptions) {\n return _rmdir(this._async, filePath, options);\n }\n\n rm(filePath: string, options?: RmOptions) {\n return _rm(this._async, filePath, options);\n }\n\n unlink(filePath: string) {\n return _unlink(this._async, filePath);\n }\n\n readdir(filePath: string, options?: ReaddirOptions | Encoding | null) {\n return _readdir(this._async, filePath, options);\n }\n\n stat(filePath: string) {\n return _stat(this._async, filePath);\n }\n\n lstat(filePath: string) {\n return _lstat(this._async, filePath);\n }\n\n access(filePath: string, mode?: number) {\n return _access(this._async, filePath, mode);\n }\n\n rename(oldPath: string, newPath: string) {\n return _rename(this._async, oldPath, newPath);\n }\n\n copyFile(src: string, dest: string, mode?: number) {\n return _copyFile(this._async, src, dest, mode);\n }\n\n truncate(filePath: string, len?: number) {\n return _truncate(this._async, filePath, len);\n }\n\n realpath(filePath: string) {\n return _realpath(this._async, filePath);\n }\n\n exists(filePath: string) {\n return _exists(this._async, filePath);\n }\n\n chmod(filePath: string, mode: number) {\n return _chmod(this._async, filePath, mode);\n }\n\n chown(filePath: string, uid: number, gid: number) {\n return _chown(this._async, filePath, uid, gid);\n }\n\n utimes(filePath: string, atime: Date | number, mtime: Date | number) {\n return _utimes(this._async, filePath, atime, mtime);\n }\n\n symlink(target: string, linkPath: string) {\n return _symlink(this._async, target, linkPath);\n }\n\n readlink(filePath: string) {\n return _readlink(this._async, filePath);\n }\n\n link(existingPath: string, newPath: string) {\n return _link(this._async, existingPath, newPath);\n }\n\n open(filePath: string, flags?: string | number, mode?: number) {\n return _open(this._async, filePath, flags, mode);\n }\n\n opendir(filePath: string) {\n return _opendir(this._async, filePath);\n }\n\n mkdtemp(prefix: string) {\n return _mkdtemp(this._async, prefix);\n }\n\n async *watch(filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n yield* _watchAsync(this._async, filePath, options);\n }\n\n async flush(): Promise<void> {\n await this._async(OP.FSYNC, '');\n }\n\n async purge(): Promise<void> {\n // No-op\n }\n}\n","/**\n * VFS-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 { constants } from './constants.js';\nexport { FSError, createError, statusToError } from './errors.js';\nexport * as path from './path.js';\nexport type {\n Stats,\n Dirent,\n ReadOptions,\n WriteOptions,\n MkdirOptions,\n RmdirOptions,\n RmOptions,\n ReaddirOptions,\n Encoding,\n PathLike,\n FileHandle,\n Dir,\n VFSConfig,\n WatchOptions,\n WatchEventType,\n FSWatcher,\n WatchListener,\n WatchFileListener,\n ReadStreamOptions,\n WriteStreamOptions,\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"]}
|