@componentor/fs 2.0.12 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/path.ts","../src/constants.ts","../src/errors.ts","../src/filesystem.ts","../src/index.ts"],"names":["isAbsolute","resolve","result","self"],"mappings":"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AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AA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","file":"index.js","sourcesContent":["/**\n * POSIX-style path utilities for OPFS\n * Mirrors Node.js path module behavior\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 trailingSlash = p.charCodeAt(p.length - 1) === 47;\n\n const segments = p.split('/');\n const result: string[] = [];\n\n for (const segment of segments) {\n if (segment === '' || segment === '.') {\n continue;\n }\n if (segment === '..') {\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(segment);\n }\n }\n\n let normalized = result.join('/');\n\n if (isAbsolute) {\n normalized = '/' + normalized;\n }\n\n if (trailingSlash && normalized.length > 1) {\n normalized += '/';\n }\n\n return normalized || (isAbsolute ? '/' : '.');\n}\n\nexport function join(...paths: string[]): string {\n if (paths.length === 0) return '.';\n\n let joined: string | undefined;\n\n for (const path of paths) {\n if (path.length > 0) {\n if (joined === undefined) {\n joined = path;\n } else {\n joined += '/' + path;\n }\n }\n }\n\n if (joined === undefined) return '.';\n\n return normalize(joined);\n}\n\nexport function resolve(...paths: string[]): string {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n\n for (let i = paths.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? paths[i] : '/';\n\n // Handle undefined, null, or empty paths\n if (path == null || path.length === 0) continue;\n\n resolvedPath = resolvedPath ? path + '/' + resolvedPath : path;\n resolvedAbsolute = path.charCodeAt(0) === 47; // '/'\n }\n\n resolvedPath = normalize(resolvedPath);\n\n // Remove trailing slash unless it's the root\n if (resolvedPath.length > 1 && resolvedPath.endsWith('/')) {\n resolvedPath = resolvedPath.slice(0, -1);\n }\n\n if (resolvedAbsolute) {\n return resolvedPath.length > 0 ? resolvedPath : '/';\n }\n\n return resolvedPath.length > 0 ? resolvedPath : '.';\n}\n\nexport function isAbsolute(p: string): boolean {\n return p.length > 0 && p.charCodeAt(0) === 47; // '/'\n}\n\nexport function dirname(p: string): string {\n if (p.length === 0) return '.';\n\n const hasRoot = p.charCodeAt(0) === 47;\n let end = -1;\n let matchedSlash = true;\n\n for (let i = p.length - 1; i >= 1; --i) {\n if (p.charCodeAt(i) === 47) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n\n return p.slice(0, end);\n}\n\nexport function basename(p: string, ext?: string): string {\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n\n for (let i = p.length - 1; i >= 0; --i) {\n if (p.charCodeAt(i) === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n\n const base = p.slice(start, end);\n\n if (ext && base.endsWith(ext)) {\n return base.slice(0, base.length - ext.length);\n }\n\n return base;\n}\n\nexport function extname(p: string): string {\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let preDotState = 0;\n\n for (let i = p.length - 1; i >= 0; --i) {\n const code = p.charCodeAt(i);\n\n if (code === 47) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46) {\n if (startDot === -1) {\n startDot = i;\n } else if (preDotState !== 1) {\n preDotState = 1;\n }\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n\n if (\n startDot === -1 ||\n end === -1 ||\n preDotState === 0 ||\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return '';\n }\n\n return p.slice(startDot, end);\n}\n\nexport function relative(from: string, to: string): string {\n if (from === to) return '';\n\n from = resolve(from);\n to = resolve(to);\n\n if (from === to) return '';\n\n // Split into segments\n const fromParts = from.split('/').filter(Boolean);\n const toParts = to.split('/').filter(Boolean);\n\n // Find common base\n let commonLength = 0;\n const minLength = Math.min(fromParts.length, toParts.length);\n for (let i = 0; i < minLength; i++) {\n if (fromParts[i] === toParts[i]) {\n commonLength++;\n } else {\n break;\n }\n }\n\n // Build relative path\n const upCount = fromParts.length - commonLength;\n const relativeParts: string[] = [];\n\n for (let i = 0; i < upCount; i++) {\n relativeParts.push('..');\n }\n\n for (let i = commonLength; i < toParts.length; i++) {\n relativeParts.push(toParts[i]);\n }\n\n return relativeParts.join('/') || '.';\n}\n\nexport function parse(p: string): {\n root: string;\n dir: string;\n base: string;\n ext: string;\n name: string;\n} {\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n\n if (p.length === 0) return ret;\n\n const isAbsolutePath = p.charCodeAt(0) === 47;\n\n if (isAbsolutePath) {\n ret.root = '/';\n }\n\n let start = 0;\n let end = -1;\n let startDot = -1;\n let matchedSlash = true;\n let preDotState = 0;\n\n for (let i = p.length - 1; i >= 0; --i) {\n const code = p.charCodeAt(i);\n\n if (code === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n continue;\n }\n\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46) {\n if (startDot === -1) {\n startDot = i;\n } else if (preDotState !== 1) {\n preDotState = 1;\n }\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n\n if (end !== -1) {\n if (\n startDot === -1 ||\n preDotState === 0 ||\n (preDotState === 1 && startDot === end - 1 && startDot === start + 1)\n ) {\n ret.base = p.slice(start, end);\n ret.name = ret.base;\n } else {\n ret.name = p.slice(start, startDot);\n ret.base = p.slice(start, end);\n ret.ext = p.slice(startDot, end);\n }\n }\n\n if (start > 0) {\n ret.dir = p.slice(0, start - 1);\n } else if (isAbsolutePath) {\n ret.dir = '/';\n }\n\n return ret;\n}\n\nexport function format(pathObject: {\n root?: string;\n dir?: string;\n base?: string;\n ext?: string;\n name?: string;\n}): string {\n const dir = pathObject.dir || pathObject.root || '';\n const base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n\n if (!dir) return base;\n if (dir === pathObject.root) return dir + base;\n\n return dir + '/' + base;\n}\n\nexport const posix = {\n sep,\n delimiter,\n normalize,\n join,\n resolve,\n isAbsolute,\n dirname,\n basename,\n extname,\n relative,\n parse,\n format,\n};\n\nexport default posix;\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: 61440,\n S_IFREG: 32768,\n S_IFDIR: 16384,\n S_IFCHR: 8192,\n S_IFBLK: 24576,\n S_IFIFO: 4096,\n S_IFLNK: 40960,\n S_IFSOCK: 49152,\n\n // File mode constants\n S_IRWXU: 448,\n S_IRUSR: 256,\n S_IWUSR: 128,\n S_IXUSR: 64,\n S_IRWXG: 56,\n S_IRGRP: 32,\n S_IWGRP: 16,\n S_IXGRP: 8,\n S_IRWXO: 7,\n S_IROTH: 4,\n S_IWOTH: 2,\n S_IXOTH: 1,\n} as const;\n\nexport type Constants = typeof constants;\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 // Maintain proper stack trace (V8 specific)\n const ErrorWithCapture = Error as unknown as { captureStackTrace?: (target: object, constructor: Function) => void };\n if (ErrorWithCapture.captureStackTrace) {\n ErrorWithCapture.captureStackTrace(this, FSError);\n }\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\nexport function createENOENT(syscall: string, path: string): FSError {\n return new FSError(\n 'ENOENT',\n ErrorCodes.ENOENT,\n `ENOENT: no such file or directory, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createEEXIST(syscall: string, path: string): FSError {\n return new FSError(\n 'EEXIST',\n ErrorCodes.EEXIST,\n `EEXIST: file already exists, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createEISDIR(syscall: string, path: string): FSError {\n return new FSError(\n 'EISDIR',\n ErrorCodes.EISDIR,\n `EISDIR: illegal operation on a directory, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createENOTDIR(syscall: string, path: string): FSError {\n return new FSError(\n 'ENOTDIR',\n ErrorCodes.ENOTDIR,\n `ENOTDIR: not a directory, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createENOTEMPTY(syscall: string, path: string): FSError {\n return new FSError(\n 'ENOTEMPTY',\n ErrorCodes.ENOTEMPTY,\n `ENOTEMPTY: directory not empty, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createEACCES(syscall: string, path: string): FSError {\n return new FSError(\n 'EACCES',\n ErrorCodes.EACCES,\n `EACCES: permission denied, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createEINVAL(syscall: string, path: string): FSError {\n return new FSError(\n 'EINVAL',\n ErrorCodes.EINVAL,\n `EINVAL: invalid argument, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createENOSYS(syscall: string, path: string): FSError {\n return new FSError(\n 'ENOSYS',\n ErrorCodes.ENOSYS,\n `ENOSYS: function not implemented, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function createELOOP(syscall: string, path: string): FSError {\n return new FSError(\n 'ELOOP',\n ErrorCodes.ELOOP,\n `ELOOP: too many symbolic links encountered, ${syscall} '${path}'`,\n syscall,\n path\n );\n}\n\nexport function mapErrorCode(errorName: string, syscall: string, path: string): FSError {\n switch (errorName) {\n case 'NotFoundError':\n return createENOENT(syscall, path);\n case 'NotAllowedError':\n return createEACCES(syscall, path);\n case 'TypeMismatchError':\n return createENOTDIR(syscall, path);\n case 'InvalidModificationError':\n return createENOTEMPTY(syscall, path);\n case 'QuotaExceededError':\n return new FSError('ENOSPC', ErrorCodes.ENOSPC, `ENOSPC: no space left on device, ${syscall} '${path}'`, syscall, path);\n default:\n return new FSError('EINVAL', ErrorCodes.EINVAL, `${errorName}: ${syscall} '${path}'`, syscall, path);\n }\n}\n","/**\n * OPFS FileSystem - Node.js fs-compatible API\n * Supports two performance tiers:\n * - Tier 1 (Sync): SharedArrayBuffer + Atomics - requires crossOriginIsolated (COOP/COEP headers)\n * - Tier 2 (Async): Promises API using Worker kernel - always available\n */\n\nimport * as path from './path.js';\nimport { constants } from './constants.js';\nimport {\n FSError,\n createENOENT,\n mapErrorCode,\n} from './errors.js';\nimport type {\n Stats,\n Dirent,\n ReadOptions,\n WriteOptions,\n MkdirOptions,\n RmdirOptions,\n RmOptions,\n ReaddirOptions,\n Encoding,\n FileSystemPromises,\n KernelResponse,\n KernelResult,\n ReadStreamOptions,\n WriteStreamOptions,\n WatchOptions,\n WatchFileOptions,\n WatchEventType,\n FileHandle,\n Dir,\n FSWatcher,\n StatWatcher,\n WatchListener,\n WatchFileListener,\n FileSystemChangeRecord,\n FileSystemObserverCallback,\n FileSystemObserverInterface,\n} from './types.js';\n\n// Detect if we're running in a Worker context (where Atomics.wait and createSyncAccessHandle work)\nconst isWorkerContext = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n\n// Worker kernel source - inlined for zero-config deployment\n// Uses direct Worker postMessage for simple communication\n// Includes sync handle caching for performance (same as sync kernel)\nconst KERNEL_SOURCE = `\nconst LOCK_NAME = 'opfs_fs_lock';\nlet messageQueue = [];\nlet isReady = false;\nlet cachedRoot = null;\nconst dirCache = new Map();\n\n// Sync handle cache - MAJOR performance optimization (2-5x speedup)\n// Uses readwrite-unsafe mode when available (no exclusive lock, allows external access)\n// Falls back to readwrite with debounced release for older browsers\nconst syncHandleCache = new Map();\nconst MAX_HANDLES = 100;\n\n// Track if readwrite-unsafe mode is supported (detected on first use)\nlet unsafeModeSupported = null;\n\n// Debug tracing - set via 'setDebug' message\nlet debugTrace = false;\nfunction trace(...args) {\n if (debugTrace) console.log('[OPFS-T2]', ...args);\n}\n\n// Handle release timing\n// - Legacy mode (readwrite): 100ms delay (handles block, release ASAP)\n// - Unsafe mode (readwrite-unsafe): 500ms delay (handles don't block each other,\n// but DO block external tools using default mode like OPFS Explorer)\nlet releaseTimer = null;\nconst LEGACY_RELEASE_DELAY = 100;\nconst UNSAFE_RELEASE_DELAY = 500;\n\nfunction scheduleHandleRelease() {\n if (releaseTimer) return; // Already scheduled\n\n const delay = unsafeModeSupported ? UNSAFE_RELEASE_DELAY : LEGACY_RELEASE_DELAY;\n\n releaseTimer = setTimeout(() => {\n releaseTimer = null;\n const count = syncHandleCache.size;\n if (count === 0) return;\n\n for (const h of syncHandleCache.values()) {\n try { h.flush(); h.close(); } catch {}\n }\n syncHandleCache.clear();\n trace('Released ' + count + ' handles (' + (unsafeModeSupported ? 'unsafe' : 'legacy') + ' mode, ' + delay + 'ms delay)');\n }, delay);\n}\n\nasync function getSyncHandle(filePath, create) {\n const cached = syncHandleCache.get(filePath);\n if (cached) {\n trace('Handle cache HIT: ' + filePath);\n return cached;\n }\n\n // Evict oldest handles if cache is full\n if (syncHandleCache.size >= MAX_HANDLES) {\n const keys = Array.from(syncHandleCache.keys()).slice(0, 10);\n trace('LRU evicting ' + keys.length + ' handles');\n for (const key of keys) {\n const h = syncHandleCache.get(key);\n if (h) { try { h.close(); } catch {} syncHandleCache.delete(key); }\n }\n }\n\n const fh = await getFileHandle(filePath, create);\n\n // Try readwrite-unsafe mode first (no exclusive lock, Chrome 121+)\n let access;\n if (unsafeModeSupported === null) {\n // First time - detect support\n try {\n access = await fh.createSyncAccessHandle({ mode: 'readwrite-unsafe' });\n unsafeModeSupported = true;\n trace('readwrite-unsafe mode SUPPORTED - handles won\\\\'t block');\n } catch {\n // Not supported, use default mode\n access = await fh.createSyncAccessHandle();\n unsafeModeSupported = false;\n trace('readwrite-unsafe mode NOT supported - using legacy mode');\n }\n } else if (unsafeModeSupported) {\n access = await fh.createSyncAccessHandle({ mode: 'readwrite-unsafe' });\n } else {\n access = await fh.createSyncAccessHandle();\n }\n\n syncHandleCache.set(filePath, access);\n trace('Handle ACQUIRED: ' + filePath + ' (cache size: ' + syncHandleCache.size + ')');\n return access;\n}\n\nfunction closeSyncHandle(filePath) {\n const h = syncHandleCache.get(filePath);\n if (h) {\n try { h.close(); } catch {}\n syncHandleCache.delete(filePath);\n trace('Handle RELEASED: ' + filePath);\n }\n}\n\nfunction closeHandlesUnder(prefix) {\n for (const [p, h] of syncHandleCache) {\n if (p === prefix || p.startsWith(prefix + '/')) {\n try { h.close(); } catch {}\n syncHandleCache.delete(p);\n }\n }\n}\n\n// Clear directory cache entries for a path and all descendants\nfunction clearDirCacheUnder(filePath) {\n // Convert to cache key format (no leading slash)\n const prefix = parsePath(filePath).join('/');\n if (!prefix) {\n // Root directory - clear everything\n dirCache.clear();\n return;\n }\n for (const key of dirCache.keys()) {\n if (key === prefix || key.startsWith(prefix + '/')) {\n dirCache.delete(key);\n }\n }\n}\n\nasync function getRoot() {\n if (!cachedRoot) {\n cachedRoot = await navigator.storage.getDirectory();\n }\n return cachedRoot;\n}\n\nfunction parsePath(filePath) {\n return filePath.split('/').filter(Boolean);\n}\n\nasync function getDirectoryHandle(parts, create = false) {\n if (parts.length === 0) return getRoot();\n\n const cacheKey = parts.join('/');\n if (dirCache.has(cacheKey)) {\n return dirCache.get(cacheKey);\n }\n\n let curr = await getRoot();\n let pathSoFar = '';\n\n for (const part of parts) {\n pathSoFar += (pathSoFar ? '/' : '') + part;\n\n if (dirCache.has(pathSoFar)) {\n curr = dirCache.get(pathSoFar);\n } else {\n curr = await curr.getDirectoryHandle(part, { create });\n dirCache.set(pathSoFar, curr);\n }\n }\n\n return curr;\n}\n\nasync function getFileHandle(filePath, create = false) {\n const parts = parsePath(filePath);\n const fileName = parts.pop();\n if (!fileName) throw new Error('Invalid file path');\n const dir = parts.length > 0 ? await getDirectoryHandle(parts, create) : await getRoot();\n return await dir.getFileHandle(fileName, { create });\n}\n\nasync function getParentAndName(filePath) {\n const parts = parsePath(filePath);\n const name = parts.pop();\n if (!name) throw new Error('Invalid path');\n const parent = parts.length > 0 ? await getDirectoryHandle(parts, false) : await getRoot();\n return { parent, name };\n}\n\nasync function handleRead(filePath, payload) {\n const access = await getSyncHandle(filePath, false);\n const size = access.getSize();\n const offset = payload?.offset || 0;\n const len = payload?.len || (size - offset);\n const buf = new Uint8Array(len);\n const bytesRead = access.read(buf, { at: offset });\n return { data: buf.slice(0, bytesRead) };\n}\n\n// Non-blocking read using getFile() - does NOT lock the file\n// Use this for HMR scenarios where external tools need to modify files\nasync function handleReadAsync(filePath, payload) {\n const parts = parsePath(filePath);\n const fileName = parts.pop();\n if (!fileName) throw new Error('Invalid file path');\n const dir = parts.length > 0 ? await getDirectoryHandle(parts, false) : await getRoot();\n const fh = await dir.getFileHandle(fileName);\n const file = await fh.getFile();\n\n const offset = payload?.offset || 0;\n const len = payload?.len || (file.size - offset);\n\n if (offset === 0 && len === file.size) {\n // Fast path: read entire file\n const buf = new Uint8Array(await file.arrayBuffer());\n return { data: buf };\n }\n\n // Partial read using slice\n const slice = file.slice(offset, offset + len);\n const buf = new Uint8Array(await slice.arrayBuffer());\n return { data: buf };\n}\n\n// Force release a file handle - allows external tools to modify the file\nfunction handleReleaseHandle(filePath) {\n closeSyncHandle(filePath);\n return { success: true };\n}\n\n// Force release ALL file handles - use before HMR notifications\nfunction handleReleaseAllHandles() {\n for (const h of syncHandleCache.values()) {\n try { h.close(); } catch {}\n }\n syncHandleCache.clear();\n return { success: true };\n}\n\nasync function handleWrite(filePath, payload) {\n const access = await getSyncHandle(filePath, true);\n if (payload?.data) {\n const offset = payload.offset ?? 0;\n if (offset === 0) access.truncate(0);\n access.write(payload.data, { at: offset });\n if (payload?.flush !== false) access.flush();\n }\n return { success: true };\n}\n\nasync function handleAppend(filePath, payload) {\n const access = await getSyncHandle(filePath, true);\n if (payload?.data) {\n const size = access.getSize();\n access.write(payload.data, { at: size });\n if (payload?.flush !== false) access.flush();\n }\n return { success: true };\n}\n\nasync function handleTruncate(filePath, payload) {\n const access = await getSyncHandle(filePath, false);\n access.truncate(payload?.len ?? 0);\n access.flush();\n return { success: true };\n}\n\nasync function handleStat(filePath) {\n const parts = parsePath(filePath);\n // Node.js compatible stat shape: mode 33188 = file (0o100644), 16877 = dir (0o40755)\n if (parts.length === 0) {\n return { size: 0, mtimeMs: Date.now(), mode: 16877, type: 'directory' };\n }\n const name = parts.pop();\n const parent = parts.length > 0 ? await getDirectoryHandle(parts, false) : await getRoot();\n try {\n const fh = await parent.getFileHandle(name);\n // Use getFile() for metadata - faster than createSyncAccessHandle\n const file = await fh.getFile();\n return { size: file.size, mtimeMs: file.lastModified, mode: 33188, type: 'file' };\n } catch {\n try {\n await parent.getDirectoryHandle(name);\n return { size: 0, mtimeMs: Date.now(), mode: 16877, type: 'directory' };\n } catch {\n throw new Error('NotFoundError');\n }\n }\n}\n\nasync function handleExists(filePath) {\n try {\n await handleStat(filePath);\n return { exists: true };\n } catch {\n return { exists: false };\n }\n}\n\nasync function handleMkdir(filePath, payload) {\n const parts = parsePath(filePath);\n if (payload?.recursive) {\n let curr = await getRoot();\n for (const part of parts) {\n curr = await curr.getDirectoryHandle(part, { create: true });\n }\n } else {\n const name = parts.pop();\n if (!name) throw new Error('Invalid path');\n const parent = parts.length > 0 ? await getDirectoryHandle(parts, false) : await getRoot();\n await parent.getDirectoryHandle(name, { create: true });\n }\n return { success: true };\n}\n\nasync function handleRmdir(filePath, payload) {\n closeHandlesUnder(filePath); // Close all cached file handles under this directory\n clearDirCacheUnder(filePath); // Clear stale directory cache entries\n const { parent, name } = await getParentAndName(filePath);\n if (payload?.recursive) {\n await parent.removeEntry(name, { recursive: true });\n } else {\n const dir = await parent.getDirectoryHandle(name);\n const entries = dir.entries();\n const first = await entries.next();\n if (!first.done) {\n const e = new Error('InvalidModificationError');\n e.name = 'InvalidModificationError';\n throw e;\n }\n await parent.removeEntry(name);\n }\n return { success: true };\n}\n\nasync function handleUnlink(filePath) {\n closeSyncHandle(filePath); // Close cached handle before deleting\n const { parent, name } = await getParentAndName(filePath);\n await parent.removeEntry(name);\n return { success: true };\n}\n\nasync function handleReaddir(filePath) {\n const parts = parsePath(filePath);\n const dir = parts.length > 0 ? await getDirectoryHandle(parts, false) : await getRoot();\n const entries = [];\n for await (const [name] of dir.entries()) {\n entries.push(name);\n }\n return { entries };\n}\n\nasync function handleRename(oldPath, payload) {\n if (!payload?.newPath) throw new Error('newPath required');\n const newPath = payload.newPath;\n\n // Close cached handles for old path (file will be deleted)\n closeSyncHandle(oldPath);\n closeHandlesUnder(oldPath); // For directory renames\n clearDirCacheUnder(oldPath); // Clear stale directory cache entries\n\n const oldParts = parsePath(oldPath);\n const newParts = parsePath(newPath);\n const oldName = oldParts.pop();\n const newName = newParts.pop();\n const oldParent = oldParts.length > 0 ? await getDirectoryHandle(oldParts, false) : await getRoot();\n const newParent = newParts.length > 0 ? await getDirectoryHandle(newParts, true) : await getRoot();\n\n try {\n const fh = await oldParent.getFileHandle(oldName);\n const file = await fh.getFile();\n const data = new Uint8Array(await file.arrayBuffer());\n\n // Use cached handle for new file\n const access = await getSyncHandle(newPath, true);\n access.truncate(0);\n access.write(data, { at: 0 });\n access.flush();\n\n await oldParent.removeEntry(oldName);\n return { success: true };\n } catch {\n const oldDir = await oldParent.getDirectoryHandle(oldName);\n async function copyDir(src, dst, dstPath) {\n for await (const [name, handle] of src.entries()) {\n if (handle.kind === 'file') {\n const srcFile = await handle.getFile();\n const data = new Uint8Array(await srcFile.arrayBuffer());\n const filePath = dstPath + '/' + name;\n const access = await getSyncHandle(filePath, true);\n access.truncate(0);\n access.write(data, { at: 0 });\n access.flush();\n } else {\n const newSubDir = await dst.getDirectoryHandle(name, { create: true });\n await copyDir(handle, newSubDir, dstPath + '/' + name);\n }\n }\n }\n const newDir = await newParent.getDirectoryHandle(newName, { create: true });\n await copyDir(oldDir, newDir, newPath);\n await oldParent.removeEntry(oldName, { recursive: true });\n return { success: true };\n }\n}\n\nasync function handleCopy(srcPath, payload) {\n if (!payload?.newPath) throw new Error('newPath required');\n const dstPath = payload.newPath;\n const srcParts = parsePath(srcPath);\n const srcName = srcParts.pop();\n const srcParent = srcParts.length > 0 ? await getDirectoryHandle(srcParts, false) : await getRoot();\n const srcFh = await srcParent.getFileHandle(srcName);\n const srcFile = await srcFh.getFile();\n const data = new Uint8Array(await srcFile.arrayBuffer());\n\n // Use cached handle for destination\n const access = await getSyncHandle(dstPath, true);\n access.truncate(0);\n access.write(data, { at: 0 });\n access.flush();\n return { success: true };\n}\n\nfunction handleFlush() {\n // Flush all cached sync handles\n for (const [, handle] of syncHandleCache) {\n try { handle.flush(); } catch {}\n }\n return { success: true };\n}\n\nfunction handlePurge() {\n if (releaseTimer) {\n clearTimeout(releaseTimer);\n releaseTimer = null;\n }\n for (const handle of syncHandleCache.values()) {\n try { handle.flush(); handle.close(); } catch {}\n }\n syncHandleCache.clear();\n dirCache.clear();\n cachedRoot = null;\n return { success: true };\n}\n\nasync function processMessage(msg) {\n const { type, path, payload } = msg;\n switch (type) {\n case 'read': return handleRead(path, payload);\n case 'readAsync': return handleReadAsync(path, payload);\n case 'write': return handleWrite(path, payload);\n case 'append': return handleAppend(path, payload);\n case 'truncate': return handleTruncate(path, payload);\n case 'stat': return handleStat(path);\n case 'exists': return handleExists(path);\n case 'mkdir': return handleMkdir(path, payload);\n case 'rmdir': return handleRmdir(path, payload);\n case 'unlink': return handleUnlink(path);\n case 'readdir': return handleReaddir(path);\n case 'rename': return handleRename(path, payload);\n case 'copy': return handleCopy(path, payload);\n case 'flush': return handleFlush();\n case 'purge': return handlePurge();\n case 'releaseHandle': return handleReleaseHandle(path);\n case 'releaseAllHandles': return handleReleaseAllHandles();\n case 'setDebug':\n debugTrace = !!payload?.enabled;\n trace('Debug tracing ' + (debugTrace ? 'ENABLED' : 'DISABLED') + ', unsafeMode: ' + unsafeModeSupported);\n return { success: true, debugTrace, unsafeModeSupported, cacheSize: syncHandleCache.size };\n default: throw new Error('Unknown operation: ' + type);\n }\n}\n\nfunction sendAtomicsResponse(result, payload) {\n const ctrl = payload.ctrl;\n if (result.data && payload.dataBuffer) {\n const view = new Uint8Array(payload.dataBuffer);\n view.set(result.data);\n Atomics.store(ctrl, 0, result.data.length);\n } else if (result.entries && payload.resultBuffer) {\n const json = JSON.stringify(result);\n const encoded = new TextEncoder().encode(json);\n const view = new Uint8Array(payload.resultBuffer);\n view.set(encoded);\n Atomics.store(ctrl, 0, encoded.length);\n } else if (result.success) {\n Atomics.store(ctrl, 0, 1);\n } else if (result.exists !== undefined) {\n Atomics.store(ctrl, 0, result.exists ? 1 : 0);\n } else if (result.isFile !== undefined) {\n if (payload.resultBuffer) {\n const json = JSON.stringify(result);\n const encoded = new TextEncoder().encode(json);\n const view = new Uint8Array(payload.resultBuffer);\n view.set(encoded);\n Atomics.store(ctrl, 0, encoded.length);\n } else {\n Atomics.store(ctrl, 0, result.size || 0);\n }\n }\n Atomics.notify(ctrl, 0);\n}\n\n// Handle incoming messages\nasync function handleMessage(msg) {\n const { id, payload } = msg;\n try {\n const result = await processMessage(msg);\n if (payload?.ctrl) {\n sendAtomicsResponse(result, payload);\n } else {\n // Use Transferable for data to avoid copying\n if (result.data) {\n const buffer = result.data.buffer;\n self.postMessage({ id, result }, [buffer]);\n } else {\n self.postMessage({ id, result });\n }\n }\n } catch (e) {\n const error = e instanceof Error ? e : new Error(String(e));\n // Use error name if it's a specific DOM exception, otherwise use message\n // (handleStat throws new Error('NotFoundError') where message contains the type)\n const errorName = error.name || 'Error';\n const errorCode = errorName !== 'Error' ? errorName : (error.message || 'Error');\n if (payload?.ctrl) {\n Atomics.store(payload.ctrl, 0, -1);\n Atomics.notify(payload.ctrl, 0);\n } else {\n self.postMessage({ id, error: errorCode, code: errorCode });\n }\n } finally {\n // Schedule handle release (debounced - waits 100ms after last operation)\n scheduleHandleRelease();\n }\n}\n\n// Process queued messages after ready\nfunction processQueue() {\n while (messageQueue.length > 0) {\n const msg = messageQueue.shift();\n handleMessage(msg); // Process concurrently - don't wait\n }\n}\n\n// Handle messages concurrently - each operation proceeds independently\n// This is better than a queue with concurrency limit because:\n// 1. If one operation hangs, others can still complete\n// 2. Small files don't get blocked behind large files\n// 3. The Web Locks API already handles per-file serialization\nself.onmessage = (event) => {\n messageQueue.push(event.data);\n if (isReady) {\n processQueue();\n }\n};\n\n// Signal ready after a timeout to ensure main thread handler is set\nsetTimeout(() => {\n isReady = true;\n processQueue();\n self.postMessage({ type: 'ready' });\n}, 10);\n`;\n\n// --- Helper functions ---\n\nfunction createStats(result: KernelResult): Stats {\n // Support both new format (type, mtimeMs) and legacy format (isFile, isDirectory, mtime)\n const isFile = result.type ? result.type === 'file' : (result.isFile ?? false);\n const isDir = result.type ? result.type === 'directory' : (result.isDirectory ?? false);\n const mtimeMs = result.mtimeMs ?? result.mtime ?? Date.now();\n const size = result.size ?? 0;\n const mode = result.mode ?? (isDir ? 16877 : 33188);\n\n return {\n isFile: () => isFile,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n dev: 0,\n ino: 0,\n mode,\n nlink: 1,\n uid: 0,\n gid: 0,\n rdev: 0,\n size,\n blksize: 4096,\n blocks: Math.ceil(size / 512),\n atimeMs: mtimeMs,\n mtimeMs,\n ctimeMs: mtimeMs,\n birthtimeMs: mtimeMs,\n atime: new Date(mtimeMs),\n mtime: new Date(mtimeMs),\n ctime: new Date(mtimeMs),\n birthtime: new Date(mtimeMs),\n };\n}\n\nfunction createDirent(name: string, isDir: boolean): Dirent {\n return {\n name,\n isFile: () => !isDir,\n isDirectory: () => isDir,\n isBlockDevice: () => false,\n isCharacterDevice: () => false,\n isSymbolicLink: () => false,\n isFIFO: () => false,\n isSocket: () => false,\n };\n}\n\nfunction generateId(): string {\n return Math.random().toString(36).substring(2, 15);\n}\n\nfunction encodeData(data: Uint8Array | string | ArrayBufferView | ArrayBuffer, _encoding?: Encoding): Uint8Array {\n if (typeof data === 'string') {\n return new TextEncoder().encode(data);\n }\n if (data instanceof Uint8Array) {\n return data;\n }\n if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n // Fallback for unknown types - convert to string\n return new TextEncoder().encode(String(data ?? ''));\n}\n\nfunction decodeData(data: Uint8Array, encoding?: Encoding | null): Uint8Array | string {\n if (encoding === 'utf8' || encoding === 'utf-8') {\n return new TextDecoder().decode(data);\n }\n return data;\n}\n\n// File descriptor entry for low-level read/write operations\ninterface FileDescriptor {\n path: string;\n flags: number;\n position: number;\n}\n\nexport class OPFSFileSystem {\n private worker: Worker | null = null;\n private pending = new Map<string, { resolve: (v: KernelResult) => void; reject: (e: Error) => void; path: string; type: string }>();\n private initialized = false;\n private initPromise: Promise<void> | null = null;\n\n // File descriptor table for openSync/readSync/writeSync/closeSync\n private fdTable = new Map<number, FileDescriptor>();\n private nextFd = 3; // Start at 3 (0=stdin, 1=stdout, 2=stderr)\n\n // Stat cache - reduces FS traffic by 30-50% for git operations\n private statCache = new Map<string, Stats>();\n\n constructor() {\n // Auto-initialize worker for fast async operations\n this.initWorker();\n }\n\n // Invalidate stat cache for a path (and parent for directory operations)\n private invalidateStat(filePath: string): void {\n const absPath = path.normalize(path.resolve(filePath));\n this.statCache.delete(absPath);\n // Also invalidate parent directory (for readdir caching if added later)\n const parent = path.dirname(absPath);\n if (parent !== absPath) {\n this.statCache.delete(parent);\n }\n }\n\n // Invalidate all stats under a directory (for recursive operations)\n private invalidateStatsUnder(dirPath: string): void {\n const prefix = path.normalize(path.resolve(dirPath));\n for (const key of this.statCache.keys()) {\n if (key === prefix || key.startsWith(prefix + '/')) {\n this.statCache.delete(key);\n }\n }\n }\n\n private async initWorker(): Promise<void> {\n if (this.initialized) return;\n if (this.initPromise) return this.initPromise;\n\n this.initPromise = (async () => {\n const blob = new Blob([KERNEL_SOURCE], { type: 'application/javascript' });\n this.worker = new Worker(URL.createObjectURL(blob));\n\n // Set up message handler FIRST, before worker can send 'ready'\n const readyPromise = new Promise<void>((resolve) => {\n this.worker!.onmessage = (event: MessageEvent<KernelResponse>) => {\n const { id, result, error, code, type: msgType } = event.data;\n\n // Handle ready signal\n if (msgType === 'ready') {\n resolve();\n return;\n }\n\n const pending = this.pending.get(id);\n if (pending) {\n this.pending.delete(id);\n if (error) {\n // Map DOM exception names to Node.js-style error codes\n // Use stored path from pending request (more reliable than extracting from error)\n const errCode = code || 'Error';\n if (errCode === 'NotFoundError' || errCode === 'NotAllowedError' ||\n errCode === 'TypeMismatchError' || errCode === 'InvalidModificationError' ||\n errCode === 'QuotaExceededError') {\n pending.reject(mapErrorCode(errCode, pending.type, pending.path));\n } else {\n pending.reject(new FSError(errCode, -1, `${error}: ${pending.type} '${pending.path}'`));\n }\n } else if (result) {\n pending.resolve(result);\n }\n }\n };\n });\n\n await readyPromise;\n this.initialized = true;\n })();\n\n return this.initPromise;\n }\n\n // Async call to worker - uses fast createSyncAccessHandle internally\n private async asyncCall(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): Promise<KernelResult> {\n await this.initWorker();\n\n if (!this.worker) {\n throw new Error('Worker not initialized');\n }\n\n const absPath = path.resolve(filePath);\n const id = generateId();\n\n return new Promise((resolve, reject) => {\n this.pending.set(id, { resolve, reject, path: absPath, type });\n\n const msg = {\n id,\n type,\n path: absPath,\n payload,\n };\n\n // Transfer ArrayBuffer if payload contains data (for writes)\n if (payload?.data instanceof Uint8Array) {\n // Clone the data since we're transferring - caller might still need original\n const clone = new Uint8Array(payload.data);\n const newPayload = { ...payload, data: clone };\n this.worker!.postMessage({ ...msg, payload: newPayload }, [clone.buffer]);\n } else {\n this.worker!.postMessage(msg);\n }\n });\n }\n\n // Kernel worker for Tier 1 sync operations (loaded from URL, not blob)\n private syncKernel: Worker | null = null;\n private syncKernelReady = false;\n\n /**\n * Initialize sync operations with a kernel worker loaded from URL.\n * Required for Tier 1 (SharedArrayBuffer + Atomics) to work in nested Workers.\n * @param kernelUrl URL to the kernel.js file (defaults to '/kernel.js')\n */\n async initSync(kernelUrl = '/kernel.js'): Promise<void> {\n if (this.syncKernelReady) return;\n\n this.syncKernel = new Worker(kernelUrl, { type: 'module' });\n\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Kernel init timeout')), 10000);\n this.syncKernel!.onmessage = (e) => {\n if (e.data?.type === 'ready') {\n clearTimeout(timeout);\n this.syncKernelReady = true;\n resolve();\n }\n };\n this.syncKernel!.onerror = (e) => {\n clearTimeout(timeout);\n reject(new Error(`Kernel error: ${e.message}`));\n };\n });\n }\n\n // Tier 1: SharedArrayBuffer + Atomics via kernel worker\n // Data is transferred via SharedArrayBuffer (zero-copy)\n // Synchronization via Atomics.wait/notify\n\n // Buffer sizes for Tier 1 communication\n private static readonly META_SIZE = 1024 * 64; // 64KB for metadata/results\n private static readonly DEFAULT_DATA_SIZE = 1024 * 1024 * 10; // 10MB default buffer\n private static readonly MAX_CHUNK_SIZE = 1024 * 1024 * 10; // 10MB max per chunk\n\n // Reusable SharedArrayBuffer pool to prevent memory leaks\n // SharedArrayBuffers are expensive to allocate and don't get GC'd quickly\n private syncBufferPool: {\n ctrl: SharedArrayBuffer;\n meta: SharedArrayBuffer;\n data: SharedArrayBuffer;\n dataSize: number;\n } | null = null;\n\n private getSyncBuffers(requiredDataSize: number): {\n ctrlBuffer: SharedArrayBuffer;\n ctrl: Int32Array;\n metaBuffer: SharedArrayBuffer;\n dataBuffer: SharedArrayBuffer;\n } {\n // Reuse existing buffers if they're large enough\n if (this.syncBufferPool && this.syncBufferPool.dataSize >= requiredDataSize) {\n return {\n ctrlBuffer: this.syncBufferPool.ctrl,\n ctrl: new Int32Array(this.syncBufferPool.ctrl),\n metaBuffer: this.syncBufferPool.meta,\n dataBuffer: this.syncBufferPool.data,\n };\n }\n\n // Allocate new buffers (or larger ones if needed)\n const dataSize = Math.max(\n OPFSFileSystem.DEFAULT_DATA_SIZE,\n Math.min(requiredDataSize + 1024, 1024 * 1024 * 64) // Up to 64MB\n );\n\n const ctrlBuffer = new SharedArrayBuffer(4);\n const metaBuffer = new SharedArrayBuffer(OPFSFileSystem.META_SIZE);\n const dataBuffer = new SharedArrayBuffer(dataSize);\n\n // Store in pool for reuse\n this.syncBufferPool = {\n ctrl: ctrlBuffer,\n meta: metaBuffer,\n data: dataBuffer,\n dataSize,\n };\n\n return {\n ctrlBuffer,\n ctrl: new Int32Array(ctrlBuffer),\n metaBuffer,\n dataBuffer,\n };\n }\n\n private syncCallTier1(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): KernelResult {\n if (!this.syncKernel || !this.syncKernelReady) {\n throw new Error('Sync kernel not initialized. Call initSync() first.');\n }\n\n // Path normalization: resolve and normalize to ensure consistent paths\n // e.g., /foo/bar, foo/bar/, and /foo//bar all become /foo/bar\n const absPath = path.normalize(path.resolve(filePath));\n\n const data = payload?.data instanceof Uint8Array ? payload.data : null;\n const dataSize = data?.length ?? 0;\n\n // For large writes, use chunked approach\n if (type === 'write' && data && dataSize > OPFSFileSystem.MAX_CHUNK_SIZE) {\n return this.syncCallTier1Chunked(absPath, data);\n }\n\n // Get reusable SharedArrayBuffers from pool (prevents memory leaks)\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(dataSize);\n\n // Initialize control signal to \"waiting\"\n Atomics.store(ctrl, 0, 0);\n\n // For write operations, copy data to SharedArrayBuffer\n let dataLength = 0;\n if (data) {\n const view = new Uint8Array(dataBuffer);\n view.set(data);\n dataLength = data.length;\n }\n\n // Send command to kernel with SharedArrayBuffers\n this.syncKernel.postMessage({\n type,\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength,\n payload: payload ? { ...payload, data: undefined } : undefined,\n });\n\n // Block until kernel signals completion\n const waitResult = Atomics.wait(ctrl, 0, 0, 30000);\n if (waitResult === 'timed-out') {\n throw new Error('Operation timed out');\n }\n\n const status = Atomics.load(ctrl, 0);\n\n // Status codes:\n // > 0: success, value indicates data length or result\n // -1: error (error message in metaBuffer)\n // -2: not found\n\n if (status === -1) {\n const metaView = new Uint8Array(metaBuffer);\n let end = metaView.indexOf(0);\n if (end === -1) end = OPFSFileSystem.META_SIZE;\n const errorMsg = new TextDecoder().decode(metaView.slice(0, end));\n throw mapErrorCode(errorMsg || 'Error', type, absPath);\n }\n\n if (status === -2) {\n throw createENOENT(type, absPath);\n }\n\n // Parse result based on operation type\n if (type === 'read') {\n const bytesRead = status;\n const bufferSize = dataBuffer.byteLength;\n\n // If we filled the buffer completely, there might be more data\n // Use stat to check total size and switch to chunked read if needed\n if (bytesRead === bufferSize) {\n const stat = this.syncStatTier1(absPath);\n if (stat && stat.size > bytesRead) {\n // File is larger than buffer, use chunked read from the beginning\n return this.syncCallTier1ChunkedRead(absPath, stat.size);\n }\n }\n\n const dataView = new Uint8Array(dataBuffer);\n return { data: dataView.slice(0, bytesRead) };\n }\n\n if (type === 'stat') {\n // Binary stat: [type:u8] [pad:3] [mode:u32] [size:f64] [mtimeMs:f64]\n const view = new DataView(metaBuffer);\n const typeVal = view.getUint8(0);\n return {\n type: typeVal === 0 ? 'file' : 'directory',\n mode: view.getUint32(4, true),\n size: view.getFloat64(8, true),\n mtimeMs: view.getFloat64(16, true),\n };\n }\n\n if (type === 'readdir') {\n // Binary readdir: [count:u32] [len:u16 + utf8]...\n const view = new DataView(metaBuffer);\n const bytes = new Uint8Array(metaBuffer);\n const count = view.getUint32(0, true);\n const entries: string[] = [];\n let offset = 4;\n for (let i = 0; i < count; i++) {\n const len = view.getUint16(offset, true);\n offset += 2;\n // Use slice() instead of subarray() to copy from SharedArrayBuffer (TextDecoder requires regular ArrayBuffer)\n const name = new TextDecoder().decode(bytes.slice(offset, offset + len));\n entries.push(name);\n offset += len;\n }\n return { entries };\n }\n\n if (type === 'exists') {\n return { exists: status === 1 };\n }\n\n return { success: status === 1 };\n }\n\n // Mutex for async operations to prevent buffer reuse race conditions\n // Multiple concurrent Atomics.waitAsync calls would share the same buffer pool,\n // causing data corruption when operations complete out of order\n private asyncOperationPromise: Promise<void> = Promise.resolve();\n\n // Async version of syncCallTier1 using Atomics.waitAsync (works on main thread)\n // This allows the main thread to use the fast SharedArrayBuffer path without blocking\n // IMPORTANT: Operations are serialized to prevent buffer reuse race conditions\n private async syncCallTier1Async(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): Promise<KernelResult> {\n // Serialize async operations to prevent buffer reuse race conditions\n const previousOp = this.asyncOperationPromise;\n let resolveCurrentOp: () => void;\n this.asyncOperationPromise = new Promise(resolve => { resolveCurrentOp = resolve; });\n\n try {\n // Wait for previous operation to complete\n await previousOp;\n return await this.syncCallTier1AsyncImpl(type, filePath, payload);\n } finally {\n // Signal that this operation is complete\n resolveCurrentOp!();\n }\n }\n\n // Implementation of async Tier 1 call (called after serialization)\n private async syncCallTier1AsyncImpl(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): Promise<KernelResult> {\n if (!this.syncKernel || !this.syncKernelReady) {\n throw new Error('Sync kernel not initialized. Call initSync() first.');\n }\n\n const absPath = path.normalize(path.resolve(filePath));\n const data = payload?.data instanceof Uint8Array ? payload.data : null;\n const dataSize = data?.length ?? 0;\n\n // For large writes, use chunked approach (async version)\n if (type === 'write' && data && dataSize > OPFSFileSystem.MAX_CHUNK_SIZE) {\n return this.syncCallTier1ChunkedAsync(absPath, data);\n }\n\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(dataSize);\n\n Atomics.store(ctrl, 0, 0);\n\n let dataLength = 0;\n if (data) {\n const view = new Uint8Array(dataBuffer);\n view.set(data);\n dataLength = data.length;\n }\n\n this.syncKernel.postMessage({\n type,\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength,\n payload: payload ? { ...payload, data: undefined } : undefined,\n });\n\n // Use Atomics.waitAsync for non-blocking wait (works on main thread)\n const waitResult = await Atomics.waitAsync(ctrl, 0, 0, 30000).value;\n if (waitResult === 'timed-out') {\n throw new Error('Operation timed out');\n }\n\n const status = Atomics.load(ctrl, 0);\n\n if (status === -1) {\n const metaView = new Uint8Array(metaBuffer);\n let end = metaView.indexOf(0);\n if (end === -1) end = OPFSFileSystem.META_SIZE;\n const errorMsg = new TextDecoder().decode(metaView.slice(0, end));\n throw mapErrorCode(errorMsg || 'Error', type, absPath);\n }\n\n if (status === -2) {\n throw createENOENT(type, absPath);\n }\n\n // Parse result based on operation type\n if (type === 'read') {\n const bytesRead = status;\n const bufferSize = dataBuffer.byteLength;\n\n if (bytesRead === bufferSize) {\n const stat = await this.syncStatTier1Async(absPath);\n if (stat && stat.size > bytesRead) {\n return this.syncCallTier1ChunkedReadAsync(absPath, stat.size);\n }\n }\n\n const dataView = new Uint8Array(dataBuffer);\n return { data: dataView.slice(0, bytesRead) };\n }\n\n if (type === 'stat') {\n const view = new DataView(metaBuffer);\n const typeVal = view.getUint8(0);\n return {\n type: typeVal === 0 ? 'file' : 'directory',\n mode: view.getUint32(4, true),\n size: view.getFloat64(8, true),\n mtimeMs: view.getFloat64(16, true),\n };\n }\n\n if (type === 'readdir') {\n const view = new DataView(metaBuffer);\n const bytes = new Uint8Array(metaBuffer);\n const count = view.getUint32(0, true);\n const entries: string[] = [];\n let offset = 4;\n for (let i = 0; i < count; i++) {\n const len = view.getUint16(offset, true);\n offset += 2;\n // Use slice() instead of subarray() to copy from SharedArrayBuffer (TextDecoder requires regular ArrayBuffer)\n const name = new TextDecoder().decode(bytes.slice(offset, offset + len));\n entries.push(name);\n offset += len;\n }\n return { entries };\n }\n\n if (type === 'exists') {\n return { exists: status === 1 };\n }\n\n return { success: status === 1 };\n }\n\n // Async stat helper for main thread\n // NOTE: Called from within syncCallTier1AsyncImpl, so uses impl directly to avoid deadlock\n private async syncStatTier1Async(absPath: string): Promise<{ size: number } | null> {\n try {\n const result = await this.syncCallTier1AsyncImpl('stat', absPath);\n return { size: result.size as number };\n } catch {\n return null;\n }\n }\n\n // Async chunked write for main thread\n private async syncCallTier1ChunkedAsync(\n absPath: string,\n data: Uint8Array\n ): Promise<KernelResult> {\n const totalSize = data.length;\n let offset = 0;\n\n while (offset < totalSize) {\n const remaining = totalSize - offset;\n const currentChunkSize = Math.min(remaining, OPFSFileSystem.MAX_CHUNK_SIZE);\n const chunk = data.subarray(offset, offset + currentChunkSize);\n\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(currentChunkSize);\n Atomics.store(ctrl, 0, 0);\n\n const view = new Uint8Array(dataBuffer);\n view.set(chunk);\n\n const isFirstChunk = offset === 0;\n this.syncKernel!.postMessage({\n type: isFirstChunk ? 'write' : 'append',\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength: currentChunkSize,\n payload: { flush: false },\n });\n\n const waitResult = await Atomics.waitAsync(ctrl, 0, 0, 30000).value;\n if (waitResult === 'timed-out') {\n throw new Error('Chunked write timed out');\n }\n\n const status = Atomics.load(ctrl, 0);\n if (status === -1 || status === -2) {\n throw createENOENT('write', absPath);\n }\n\n offset += currentChunkSize;\n }\n\n return { success: true };\n }\n\n // Async chunked read for main thread\n private async syncCallTier1ChunkedReadAsync(\n absPath: string,\n totalSize: number\n ): Promise<KernelResult> {\n const result = new Uint8Array(totalSize);\n let offset = 0;\n\n while (offset < totalSize) {\n const remaining = totalSize - offset;\n const currentChunkSize = Math.min(remaining, OPFSFileSystem.MAX_CHUNK_SIZE);\n\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(currentChunkSize);\n Atomics.store(ctrl, 0, 0);\n\n this.syncKernel!.postMessage({\n type: 'readChunk',\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength: 0,\n payload: { offset, length: currentChunkSize },\n });\n\n const waitResult = await Atomics.waitAsync(ctrl, 0, 0, 30000).value;\n if (waitResult === 'timed-out') {\n throw new Error('Chunked read timed out');\n }\n\n const status = Atomics.load(ctrl, 0);\n if (status === -1 || status === -2) {\n throw createENOENT('read', absPath);\n }\n\n const bytesRead = status;\n const dataView = new Uint8Array(dataBuffer);\n result.set(dataView.subarray(0, bytesRead), offset);\n offset += bytesRead;\n }\n\n return { data: result };\n }\n\n // Chunked write for files larger than MAX_CHUNK_SIZE\n private syncCallTier1Chunked(\n absPath: string,\n data: Uint8Array\n ): KernelResult {\n const totalSize = data.length;\n const chunkSize = OPFSFileSystem.MAX_CHUNK_SIZE;\n\n // Reuse buffers from pool (prevents memory leaks)\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(chunkSize);\n const dataView = new Uint8Array(dataBuffer);\n\n let offset = 0;\n while (offset < totalSize) {\n const remaining = totalSize - offset;\n const currentChunkSize = Math.min(chunkSize, remaining);\n const chunk = data.subarray(offset, offset + currentChunkSize);\n\n // Reset control signal\n Atomics.store(ctrl, 0, 0);\n\n // Copy chunk to SharedArrayBuffer\n dataView.set(chunk);\n\n // First chunk: truncate file (offset 0), subsequent chunks: append at offset\n this.syncKernel!.postMessage({\n type: 'write',\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength: currentChunkSize,\n payload: { offset }, // Kernel writes at this offset\n });\n\n // Wait for completion\n const waitResult = Atomics.wait(ctrl, 0, 0, 60000); // Longer timeout for large chunks\n if (waitResult === 'timed-out') {\n throw new Error(`Chunked write timed out at offset ${offset}`);\n }\n\n const status = Atomics.load(ctrl, 0);\n if (status === -1) {\n const metaView = new Uint8Array(metaBuffer);\n let end = metaView.indexOf(0);\n if (end === -1) end = OPFSFileSystem.META_SIZE;\n const errorMsg = new TextDecoder().decode(metaView.slice(0, end));\n throw mapErrorCode(errorMsg || 'Error', 'write', absPath);\n }\n if (status === -2) {\n throw createENOENT('write', absPath);\n }\n\n offset += currentChunkSize;\n }\n\n return { success: true };\n }\n\n // Chunked read for files larger than buffer size\n private syncCallTier1ChunkedRead(\n absPath: string,\n totalSize: number\n ): KernelResult {\n const chunkSize = OPFSFileSystem.MAX_CHUNK_SIZE;\n\n // Allocate result buffer on main thread\n const result = new Uint8Array(totalSize);\n\n // Reuse buffers from pool (prevents memory leaks)\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(chunkSize);\n\n let offset = 0;\n while (offset < totalSize) {\n const remaining = totalSize - offset;\n const currentChunkSize = Math.min(chunkSize, remaining);\n\n // Reset control signal\n Atomics.store(ctrl, 0, 0);\n\n // Request chunk from kernel\n this.syncKernel!.postMessage({\n type: 'read',\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength: 0,\n payload: { offset, len: currentChunkSize },\n });\n\n // Wait for completion\n const waitResult = Atomics.wait(ctrl, 0, 0, 60000);\n if (waitResult === 'timed-out') {\n throw new Error(`Chunked read timed out at offset ${offset}`);\n }\n\n const status = Atomics.load(ctrl, 0);\n if (status === -1) {\n const metaView = new Uint8Array(metaBuffer);\n let end = metaView.indexOf(0);\n if (end === -1) end = OPFSFileSystem.META_SIZE;\n const errorMsg = new TextDecoder().decode(metaView.slice(0, end));\n throw mapErrorCode(errorMsg || 'Error', 'read', absPath);\n }\n if (status === -2) {\n throw createENOENT('read', absPath);\n }\n\n // Copy chunk from SharedArrayBuffer to result\n const bytesRead = status;\n const dataView = new Uint8Array(dataBuffer, 0, bytesRead);\n result.set(dataView, offset);\n\n offset += bytesRead;\n\n // If we read less than requested, we've reached EOF\n if (bytesRead < currentChunkSize) {\n break;\n }\n }\n\n return { data: result.subarray(0, offset) };\n }\n\n // Get file size via stat (used for chunked reads)\n private syncStatTier1(absPath: string): { size: number } | null {\n // Reuse buffers from pool (prevents memory leaks)\n const { ctrlBuffer, ctrl, metaBuffer, dataBuffer } = this.getSyncBuffers(1024);\n\n Atomics.store(ctrl, 0, 0);\n\n this.syncKernel!.postMessage({\n type: 'stat',\n path: absPath,\n ctrlBuffer,\n metaBuffer,\n dataBuffer,\n dataLength: 0,\n });\n\n const waitResult = Atomics.wait(ctrl, 0, 0, 10000);\n if (waitResult === 'timed-out') {\n return null;\n }\n\n const status = Atomics.load(ctrl, 0);\n if (status <= 0) {\n return null;\n }\n\n // Binary stat: [type:u8] [pad:3] [mode:u32] [size:f64] [mtimeMs:f64]\n const view = new DataView(metaBuffer);\n return { size: view.getFloat64(8, true) };\n }\n\n private syncCall(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): KernelResult {\n // Sync operations require SharedArrayBuffer + Atomics\n // This requires crossOriginIsolated (COOP/COEP headers) and initSync() to be called\n if (\n isWorkerContext &&\n typeof SharedArrayBuffer !== 'undefined' &&\n this.syncKernelReady\n ) {\n return this.syncCallTier1(type, filePath, payload);\n }\n\n // No sync tier available - throw helpful error\n throw new Error(\n `Sync operations require crossOriginIsolated environment (COOP/COEP headers) and initSync() to be called. ` +\n `Current state: crossOriginIsolated=${typeof crossOriginIsolated !== 'undefined' ? crossOriginIsolated : 'N/A'}, ` +\n `isWorkerContext=${isWorkerContext}, syncKernelReady=${this.syncKernelReady}. ` +\n `Use fs.promises.* for async operations that work everywhere.`\n );\n }\n\n // --- Synchronous API (Node.js fs compatible) ---\n\n readFileSync(filePath: string, options?: ReadOptions | Encoding | null): Uint8Array | string {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const result = this.syncCall('read', filePath);\n if (!result.data) throw createENOENT('read', filePath);\n return decodeData(result.data, encoding);\n }\n\n writeFileSync(filePath: string, data: Uint8Array | string, options?: WriteOptions | Encoding): void {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = encodeData(data, opts?.encoding);\n // Pass flush option (defaults to true in kernel for safety)\n this.syncCall('write', filePath, { data: encoded, flush: opts?.flush });\n this.invalidateStat(filePath);\n }\n\n appendFileSync(filePath: string, data: Uint8Array | string, options?: WriteOptions | Encoding): void {\n const encoding = typeof options === 'string' ? options : options?.encoding;\n const encoded = encodeData(data, encoding);\n this.syncCall('append', filePath, { data: encoded });\n this.invalidateStat(filePath);\n }\n\n existsSync(filePath: string): boolean {\n try {\n const result = this.syncCall('exists', filePath);\n return result.exists ?? false;\n } catch {\n return false;\n }\n }\n\n mkdirSync(filePath: string, options?: MkdirOptions | number): string | undefined {\n const recursive = typeof options === 'object' ? options?.recursive : false;\n this.syncCall('mkdir', filePath, { recursive });\n this.invalidateStat(filePath);\n return recursive ? filePath : undefined;\n }\n\n rmdirSync(filePath: string, options?: RmdirOptions): void {\n this.syncCall('rmdir', filePath, { recursive: options?.recursive });\n if (options?.recursive) {\n this.invalidateStatsUnder(filePath);\n } else {\n this.invalidateStat(filePath);\n }\n }\n\n rmSync(filePath: string, options?: RmOptions): void {\n try {\n const result = this.syncCall('stat', filePath);\n try {\n if (result.isDirectory || result.type === 'directory') {\n this.syncCall('rmdir', filePath, { recursive: options?.recursive });\n if (options?.recursive) {\n this.invalidateStatsUnder(filePath);\n } else {\n this.invalidateStat(filePath);\n }\n } else {\n this.syncCall('unlink', filePath);\n this.invalidateStat(filePath);\n }\n } catch (e) {\n // Handle errors from rmdir/unlink with force option\n if (!options?.force) throw e;\n }\n } catch (e) {\n // Handle errors from stat with force option\n if (!options?.force) throw e;\n }\n }\n\n unlinkSync(filePath: string): void {\n this.syncCall('unlink', filePath);\n this.invalidateStat(filePath);\n }\n\n readdirSync(filePath: string, options?: ReaddirOptions | Encoding | null): string[] | Dirent[] {\n const result = this.syncCall('readdir', filePath);\n const entries = result.entries || [];\n\n const opts = typeof options === 'object' ? options : { encoding: options };\n\n if (opts?.withFileTypes) {\n return entries.map((name) => {\n try {\n const stat = this.syncCall('stat', path.join(filePath, name));\n // Check type first (from kernel result), fall back to isDirectory boolean\n const isDir = stat.type === 'directory' || stat.isDirectory === true;\n return createDirent(name, isDir);\n } catch {\n return createDirent(name, false);\n }\n });\n }\n\n return entries;\n }\n\n statSync(filePath: string): Stats {\n const absPath = path.normalize(path.resolve(filePath));\n\n // Check cache first\n const cached = this.statCache.get(absPath);\n if (cached) return cached;\n\n const result = this.syncCall('stat', filePath);\n // Check for both new format (type) and legacy format (isFile/isDirectory)\n if (result.type === undefined && result.isFile === undefined && result.isDirectory === undefined) {\n throw createENOENT('stat', filePath);\n }\n const stats = createStats(result);\n\n // Cache the result\n this.statCache.set(absPath, stats);\n return stats;\n }\n\n lstatSync(filePath: string): Stats {\n const stats = this.statSync(filePath);\n // Check if it's a symlink and update the stats accordingly\n if (stats.isFile() && this.isSymlinkSync(filePath)) {\n return this.createSymlinkStats(stats);\n }\n return stats;\n }\n\n /**\n * Create stats object for a symlink file.\n */\n private createSymlinkStats(baseStats: Stats): Stats {\n return {\n ...baseStats,\n isFile: () => false,\n isSymbolicLink: () => true,\n // Symlink mode: 0o120777 (41471 decimal)\n mode: 41471,\n };\n }\n\n renameSync(oldPath: string, newPath: string): void {\n this.syncCall('rename', oldPath, { newPath });\n this.invalidateStat(oldPath);\n this.invalidateStat(newPath);\n }\n\n copyFileSync(src: string, dest: string): void {\n this.syncCall('copy', src, { newPath: dest });\n this.invalidateStat(dest);\n }\n\n truncateSync(filePath: string, len = 0): void {\n this.syncCall('truncate', filePath, { len });\n this.invalidateStat(filePath);\n }\n\n /**\n * Flush all pending writes to storage.\n * Use this after writes with { flush: false } to ensure data is persisted.\n */\n flushSync(): void {\n this.syncCall('flush', '/');\n }\n\n /**\n * Alias for flushSync() - matches Node.js fdatasync behavior\n */\n fdatasyncSync(): void {\n this.flushSync();\n }\n\n /**\n * Purge all kernel caches (sync handles, directory handles).\n * Use between major operations to ensure clean state.\n */\n purgeSync(): void {\n this.syncCall('purge', '/');\n this.statCache.clear();\n }\n\n /**\n * Enable or disable debug tracing for handle operations.\n * When enabled, logs handle cache hits, acquisitions, releases, and mode information.\n * @param enabled - Whether to enable debug tracing\n * @returns Debug state information including unsafeModeSupported and cache size\n */\n setDebugSync(enabled: boolean): { debugTrace: boolean; unsafeModeSupported: boolean; cacheSize: number } {\n return this.syncCall('setDebug', '/', { enabled }) as unknown as { debugTrace: boolean; unsafeModeSupported: boolean; cacheSize: number };\n }\n\n /**\n * Enable or disable debug tracing for handle operations (async version).\n * When enabled, logs handle cache hits, acquisitions, releases, and mode information.\n * @param enabled - Whether to enable debug tracing\n * @returns Debug state information including unsafeModeSupported and cache size\n */\n async setDebug(enabled: boolean): Promise<{ debugTrace: boolean; unsafeModeSupported: boolean; cacheSize: number }> {\n return this.asyncCall('setDebug', '/', { enabled }) as unknown as Promise<{ debugTrace: boolean; unsafeModeSupported: boolean; cacheSize: number }>;\n }\n\n accessSync(filePath: string, _mode?: number): void {\n const exists = this.existsSync(filePath);\n if (!exists) {\n throw createENOENT('access', filePath);\n }\n }\n\n // --- Low-level File Descriptor API ---\n // For efficient packfile access (read specific offsets without loading entire file)\n\n openSync(filePath: string, flags: string | number = 'r'): number {\n // Verify file exists for read modes\n const flagNum = typeof flags === 'string' ? this.parseFlags(flags) : flags;\n const isReadOnly = (flagNum & constants.O_WRONLY) === 0 && (flagNum & constants.O_RDWR) === 0;\n\n if (isReadOnly && !this.existsSync(filePath)) {\n throw createENOENT('open', filePath);\n }\n\n const fd = this.nextFd++;\n this.fdTable.set(fd, {\n path: path.normalize(path.resolve(filePath)),\n flags: flagNum,\n position: 0,\n });\n return fd;\n }\n\n closeSync(fd: number): void {\n if (!this.fdTable.has(fd)) {\n throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n }\n this.fdTable.delete(fd);\n }\n\n readSync(\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null\n ): number {\n const entry = this.fdTable.get(fd);\n if (!entry) {\n throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n }\n\n const readPos = position !== null ? position : entry.position;\n const result = this.syncCall('read', entry.path, { offset: readPos, len: length });\n\n if (!result.data) {\n return 0; // EOF or error\n }\n\n // Copy data into the provided buffer at the specified offset\n const bytesRead = Math.min(result.data.length, length);\n buffer.set(result.data.subarray(0, bytesRead), offset);\n\n // Update position if not using explicit position\n if (position === null) {\n entry.position += bytesRead;\n }\n\n return bytesRead;\n }\n\n writeSync(\n fd: number,\n buffer: Uint8Array,\n offset: number,\n length: number,\n position: number | null\n ): number {\n const entry = this.fdTable.get(fd);\n if (!entry) {\n throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n }\n\n const writePos = position !== null ? position : entry.position;\n const data = buffer.subarray(offset, offset + length);\n\n // Use truncate: false to avoid truncating on positional writes\n this.syncCall('write', entry.path, {\n data,\n offset: writePos,\n truncate: false,\n });\n\n // Invalidate stat cache after write\n this.invalidateStat(entry.path);\n\n // Update position if not using explicit position\n if (position === null) {\n entry.position += length;\n }\n\n return length;\n }\n\n fstatSync(fd: number): Stats {\n const entry = this.fdTable.get(fd);\n if (!entry) {\n throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n }\n return this.statSync(entry.path);\n }\n\n ftruncateSync(fd: number, len = 0): void {\n const entry = this.fdTable.get(fd);\n if (!entry) {\n throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n }\n this.truncateSync(entry.path, len);\n }\n\n /**\n * Resolve a path to an absolute path.\n * OPFS doesn't support symlinks, so this just normalizes the path.\n */\n realpathSync(filePath: string): string {\n // Verify the path exists\n this.accessSync(filePath);\n return path.normalize(path.resolve(filePath));\n }\n\n /**\n * Change file mode (no-op in OPFS - permissions not supported).\n */\n chmodSync(_filePath: string, _mode: number): void {\n // No-op: OPFS doesn't support file permissions\n }\n\n /**\n * Change file owner (no-op in OPFS - ownership not supported).\n */\n chownSync(_filePath: string, _uid: number, _gid: number): void {\n // No-op: OPFS doesn't support file ownership\n }\n\n /**\n * Change file timestamps (no-op in OPFS - timestamps are read-only).\n */\n utimesSync(_filePath: string, _atime: Date | number, _mtime: Date | number): void {\n // No-op: OPFS doesn't support modifying timestamps\n }\n\n // Magic prefix for symlink files - must be unique enough to not appear in regular files\n private static readonly SYMLINK_MAGIC = 'OPFS_SYMLINK_V1:';\n\n /**\n * Create a symbolic link.\n * Emulated by storing target path in a special file format.\n */\n symlinkSync(target: string, filePath: string, _type?: string): void {\n const content = OPFSFileSystem.SYMLINK_MAGIC + target;\n this.writeFileSync(filePath, content);\n }\n\n /**\n * Read a symbolic link target.\n */\n readlinkSync(filePath: string): string {\n const content = this.readFileSync(filePath, { encoding: 'utf8' }) as string;\n if (!content.startsWith(OPFSFileSystem.SYMLINK_MAGIC)) {\n throw new FSError('EINVAL', -22, `EINVAL: invalid argument, readlink '${filePath}'`, 'readlink', filePath);\n }\n return content.slice(OPFSFileSystem.SYMLINK_MAGIC.length);\n }\n\n /**\n * Check if a file is a symlink (sync).\n */\n private isSymlinkSync(filePath: string): boolean {\n try {\n const content = this.readFileSync(filePath, { encoding: 'utf8' }) as string;\n return content.startsWith(OPFSFileSystem.SYMLINK_MAGIC);\n } catch {\n return false;\n }\n }\n\n /**\n * Check if a file is a symlink (async).\n */\n private async isSymlinkAsync(filePath: string): Promise<boolean> {\n try {\n const content = await this.promises.readFile(filePath, { encoding: 'utf8' }) as string;\n return content.startsWith(OPFSFileSystem.SYMLINK_MAGIC);\n } catch {\n return false;\n }\n }\n\n /**\n * Create a hard link.\n * Emulated by copying the file (true hard links not supported in OPFS).\n */\n linkSync(existingPath: string, newPath: string): void {\n // For symlinks, copy the symlink file itself (not the target)\n this.copyFileSync(existingPath, newPath);\n }\n\n private 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 default: return constants.O_RDONLY;\n }\n }\n\n // --- Async Promises API ---\n // When Tier 1 sync kernel is available, use it for better performance (wrapped in Promise)\n // Otherwise fall back to async worker\n\n // Operations NOT implemented in the sync kernel - must use async worker\n private static readonly ASYNC_ONLY_OPS = new Set([\n 'releaseAllHandles',\n 'releaseHandle',\n ]);\n\n // Helper: Use sync kernel if available (in worker context), otherwise async worker\n private async fastCall(\n type: string,\n filePath: string,\n payload?: Record<string, unknown>\n ): Promise<KernelResult> {\n // Use sync kernel when available for best performance\n // Benefits of sync kernel:\n // 1. SharedArrayBuffer zero-copy data transfer\n // 2. Optimized sync handle caching\n // 3. No postMessage serialization overhead\n // Note: Some operations are async-only (not in kernel)\n if (this.syncKernelReady && !OPFSFileSystem.ASYNC_ONLY_OPS.has(type)) {\n if (isWorkerContext) {\n // In Worker: use blocking Atomics.wait (fastest)\n return Promise.resolve(this.syncCallTier1(type, filePath, payload));\n } else {\n // Main thread: use Atomics.waitAsync (non-blocking but still fast)\n return this.syncCallTier1Async(type, filePath, payload);\n }\n }\n // Fallback to async worker\n return this.asyncCall(type, filePath, payload);\n }\n\n promises: FileSystemPromises = {\n readFile: async (filePath: string, options?: ReadOptions | Encoding | null) => {\n // Validate path - isomorphic-git sometimes calls with no args\n if (!filePath) {\n throw createENOENT('read', filePath || '');\n }\n const encoding = typeof options === 'string' ? options : options?.encoding;\n\n // Use sync kernel if available (faster than async worker)\n if (this.syncKernelReady) {\n if (isWorkerContext) {\n // Worker: blocking wait (fastest)\n const result = this.syncCallTier1('read', filePath);\n if (!result.data) throw createENOENT('read', filePath);\n return decodeData(result.data, encoding);\n } else {\n // Main thread: use Atomics.waitAsync (non-blocking)\n const result = await this.syncCallTier1Async('read', filePath);\n if (!result.data) throw createENOENT('read', filePath);\n return decodeData(result.data, encoding);\n }\n }\n\n // Fallback to async worker (no sync kernel) - ensures consistent read/write path\n // Using asyncCall ensures reads go through same worker as writes,\n // which is important for file locking and cache consistency\n const result = await this.asyncCall('read', filePath);\n if (!result.data) throw createENOENT('read', filePath);\n return decodeData(result.data, encoding);\n },\n\n writeFile: async (filePath: string, data: Uint8Array | string, options?: WriteOptions | Encoding) => {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = encodeData(data, opts?.encoding);\n await this.fastCall('write', filePath, { data: encoded, flush: opts?.flush });\n this.invalidateStat(filePath);\n },\n\n appendFile: async (filePath: string, data: Uint8Array | string, options?: WriteOptions | Encoding) => {\n const opts = typeof options === 'string' ? { encoding: options } : options;\n const encoded = encodeData(data, opts?.encoding);\n await this.fastCall('append', filePath, { data: encoded, flush: opts?.flush });\n this.invalidateStat(filePath);\n },\n\n mkdir: async (filePath: string, options?: MkdirOptions | number) => {\n const recursive = typeof options === 'object' ? options?.recursive : false;\n await this.fastCall('mkdir', filePath, { recursive });\n return recursive ? filePath : undefined;\n },\n\n rmdir: async (filePath: string, options?: RmdirOptions) => {\n await this.fastCall('rmdir', filePath, { recursive: options?.recursive });\n },\n\n rm: async (filePath: string, options?: RmOptions) => {\n try {\n const result = await this.fastCall('stat', filePath);\n try {\n if (result.isDirectory || result.type === 'directory') {\n await this.fastCall('rmdir', filePath, { recursive: options?.recursive });\n if (options?.recursive) {\n this.invalidateStatsUnder(filePath);\n } else {\n this.invalidateStat(filePath);\n }\n } else {\n await this.fastCall('unlink', filePath);\n this.invalidateStat(filePath);\n }\n } catch (e) {\n // Handle errors from rmdir/unlink with force option\n if (!options?.force) throw e;\n }\n } catch (e) {\n // Handle errors from stat with force option\n if (!options?.force) throw e;\n }\n },\n\n unlink: async (filePath: string) => {\n await this.fastCall('unlink', filePath);\n },\n\n readdir: async (filePath: string, options?: ReaddirOptions | Encoding | null) => {\n const result = await this.fastCall('readdir', filePath);\n const entries = result.entries || [];\n const opts = typeof options === 'object' ? options : { encoding: options };\n\n if (opts?.withFileTypes) {\n const dirents: Dirent[] = [];\n for (const name of entries) {\n try {\n const stat = await this.fastCall('stat', path.join(filePath, name));\n // Check type first (from kernel result), fall back to isDirectory boolean\n const isDir = stat.type === 'directory' || stat.isDirectory === true;\n dirents.push(createDirent(name, isDir));\n } catch {\n dirents.push(createDirent(name, false));\n }\n }\n return dirents;\n }\n\n return entries;\n },\n\n stat: async (filePath: string) => {\n const result = await this.fastCall('stat', filePath);\n return createStats(result);\n },\n\n access: async (filePath: string, _mode?: number) => {\n const result = await this.fastCall('exists', filePath);\n if (!result.exists) {\n throw createENOENT('access', filePath);\n }\n },\n\n rename: async (oldFilePath: string, newFilePath: string) => {\n await this.fastCall('rename', oldFilePath, { newPath: path.resolve(newFilePath) });\n },\n\n copyFile: async (srcPath: string, destPath: string) => {\n await this.fastCall('copy', srcPath, { newPath: path.resolve(destPath) });\n },\n\n truncate: async (filePath: string, len = 0) => {\n await this.fastCall('truncate', filePath, { len });\n this.invalidateStat(filePath);\n },\n\n lstat: async (filePath: string) => {\n const result = await this.fastCall('stat', filePath);\n const stats = createStats(result);\n // Check if it's a symlink\n if (stats.isFile()) {\n const isSymlink = await this.isSymlinkAsync(filePath);\n if (isSymlink) {\n return this.createSymlinkStats(stats);\n }\n }\n return stats;\n },\n\n realpath: async (filePath: string) => {\n // Verify the path exists\n await this.promises.access(filePath);\n return path.normalize(path.resolve(filePath));\n },\n\n exists: async (filePath: string) => {\n try {\n const result = await this.fastCall('exists', filePath);\n return result.exists ?? false;\n } catch {\n return false;\n }\n },\n\n chmod: async (_filePath: string, _mode: number) => {\n // No-op: OPFS doesn't support file permissions\n },\n\n chown: async (_filePath: string, _uid: number, _gid: number) => {\n // No-op: OPFS doesn't support file ownership\n },\n\n utimes: async (_filePath: string, _atime: Date | number, _mtime: Date | number) => {\n // No-op: OPFS doesn't support modifying timestamps\n },\n\n symlink: async (target: string, filePath: string, _type?: string) => {\n const content = OPFSFileSystem.SYMLINK_MAGIC + target;\n await this.promises.writeFile(filePath, content);\n },\n\n readlink: async (filePath: string): Promise<string> => {\n const content = await this.promises.readFile(filePath, { encoding: 'utf8' }) as string;\n if (!content.startsWith(OPFSFileSystem.SYMLINK_MAGIC)) {\n throw new FSError('EINVAL', -22, `EINVAL: invalid argument, readlink '${filePath}'`, 'readlink', filePath);\n }\n return content.slice(OPFSFileSystem.SYMLINK_MAGIC.length);\n },\n\n link: async (existingPath: string, newPath: string) => {\n // Emulate hard link by copying the file\n await this.promises.copyFile(existingPath, newPath);\n },\n\n open: async (filePath: string, flags: string | number = 'r', _mode?: number): Promise<FileHandle> => {\n // Use async existence check instead of sync to work in main thread\n const flagNum = typeof flags === 'string' ? this.parseFlags(flags) : flags;\n const isReadOnly = (flagNum & constants.O_WRONLY) === 0 && (flagNum & constants.O_RDWR) === 0;\n\n if (isReadOnly) {\n const exists = await this.promises.exists(filePath);\n if (!exists) {\n throw createENOENT('open', filePath);\n }\n }\n\n const fd = this.nextFd++;\n this.fdTable.set(fd, {\n path: path.normalize(path.resolve(filePath)),\n flags: flagNum,\n position: 0,\n });\n return this.createFileHandle(fd, filePath);\n },\n\n opendir: async (dirPath: string): Promise<Dir> => {\n return this.createDir(dirPath);\n },\n\n mkdtemp: async (prefix: string): Promise<string> => {\n const suffix = Math.random().toString(36).substring(2, 8);\n const tmpDir = `${prefix}${suffix}`;\n await this.promises.mkdir(tmpDir, { recursive: true });\n return tmpDir;\n },\n\n watch: (filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> => {\n return this.createAsyncWatcher(filePath, options);\n },\n\n /**\n * Flush all pending writes to storage.\n * Use after writes with { flush: false } to ensure data is persisted.\n */\n flush: async () => {\n await this.fastCall('flush', '/');\n },\n\n /**\n * Purge all kernel caches.\n * Use between major operations to ensure clean state.\n */\n purge: async () => {\n await this.fastCall('purge', '/');\n this.statCache.clear();\n },\n };\n\n /**\n * Async flush - use after promises.writeFile with { flush: false }\n */\n async flush(): Promise<void> {\n await this.fastCall('flush', '/');\n }\n\n /**\n * Async purge - clears all kernel caches\n */\n async purge(): Promise<void> {\n await this.fastCall('purge', '/');\n this.statCache.clear();\n }\n\n /**\n * Release all cached file handles.\n * Call this before expecting external tools (OPFS Explorer, browser console, etc.)\n * to modify files. This allows external access without waiting for the idle timeout.\n * Unlike purge(), this only releases file handles without clearing directory caches.\n */\n async releaseAllHandles(): Promise<void> {\n await this.fastCall('releaseAllHandles', '/');\n }\n\n /**\n * Release a specific file's handle.\n * Use this when you know a specific file needs to be externally modified.\n */\n async releaseHandle(filePath: string): Promise<void> {\n await this.fastCall('releaseHandle', filePath);\n }\n\n // Constants\n constants = constants;\n\n // --- FileHandle Implementation ---\n\n private createFileHandle(fd: number, filePath: string): FileHandle {\n const self = this;\n const absPath = path.normalize(path.resolve(filePath));\n\n return {\n fd,\n\n async read(buffer: Uint8Array, offset = 0, length?: number, position: number | null = null): Promise<{ bytesRead: number; buffer: Uint8Array }> {\n const len = length ?? buffer.length - offset;\n const entry = self.fdTable.get(fd);\n if (!entry) throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n\n const readPos = position !== null ? position : entry.position;\n const result = await self.fastCall('read', absPath, { offset: readPos, len });\n\n if (!result.data) {\n return { bytesRead: 0, buffer };\n }\n\n const bytesRead = Math.min(result.data.length, len);\n buffer.set(result.data.subarray(0, bytesRead), offset);\n\n if (position === null) {\n entry.position += bytesRead;\n }\n\n return { bytesRead, buffer };\n },\n\n async write(buffer: Uint8Array, offset = 0, length?: number, position: number | null = null): Promise<{ bytesWritten: number; buffer: Uint8Array }> {\n const len = length ?? buffer.length - offset;\n const entry = self.fdTable.get(fd);\n if (!entry) throw new FSError('EBADF', -9, `bad file descriptor: ${fd}`);\n\n const writePos = position !== null ? position : entry.position;\n const data = buffer.subarray(offset, offset + len);\n\n await self.fastCall('write', absPath, { data, offset: writePos, truncate: false });\n self.invalidateStat(absPath);\n\n if (position === null) {\n entry.position += len;\n }\n\n return { bytesWritten: len, buffer };\n },\n\n async readFile(options?: ReadOptions | Encoding | null): Promise<Uint8Array | string> {\n return self.promises.readFile(absPath, options);\n },\n\n async writeFile(data: Uint8Array | string, options?: WriteOptions | Encoding): Promise<void> {\n return self.promises.writeFile(absPath, data, options);\n },\n\n async truncate(len = 0): Promise<void> {\n await self.fastCall('truncate', absPath, { len });\n self.invalidateStat(absPath);\n },\n\n async stat(): Promise<Stats> {\n return self.promises.stat(absPath);\n },\n\n async sync(): Promise<void> {\n await self.fastCall('flush', '/');\n },\n\n async datasync(): Promise<void> {\n await self.fastCall('flush', '/');\n },\n\n async close(): Promise<void> {\n self.fdTable.delete(fd);\n },\n };\n }\n\n // --- Dir Implementation ---\n\n private createDir(dirPath: string): Dir {\n const self = this;\n const absPath = path.normalize(path.resolve(dirPath));\n let entries: string[] | null = null;\n let index = 0;\n let closed = false;\n\n const loadEntries = async () => {\n if (entries === null) {\n const result = await self.fastCall('readdir', absPath);\n entries = result.entries || [];\n }\n };\n\n const dir: Dir = {\n path: absPath,\n\n async read(): Promise<Dirent | null> {\n if (closed) throw new FSError('EBADF', -9, 'Directory handle was closed');\n await loadEntries();\n if (index >= entries!.length) return null;\n\n const name = entries![index++];\n try {\n const stat = await self.fastCall('stat', path.join(absPath, name));\n const isDir = stat.type === 'directory' || stat.isDirectory === true;\n return createDirent(name, isDir);\n } catch {\n return createDirent(name, false);\n }\n },\n\n async close(): Promise<void> {\n closed = true;\n entries = null;\n },\n\n [Symbol.asyncIterator](): AsyncIterableIterator<Dirent> {\n const iterator: AsyncIterableIterator<Dirent> = {\n next: async (): Promise<IteratorResult<Dirent>> => {\n const dirent = await dir.read();\n if (dirent === null) {\n return { done: true, value: undefined };\n }\n return { done: false, value: dirent };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n return iterator;\n },\n };\n\n return dir;\n }\n\n // --- Watch Implementation (Native FileSystemObserver with polling fallback) ---\n\n private watchedFiles = new Map<string, { interval?: ReturnType<typeof setInterval>; observer?: FileSystemObserverInterface; listeners: Set<WatchFileListener>; lastStat: Stats | null }>();\n\n // Check if native FileSystemObserver is available\n private static readonly hasNativeObserver = typeof globalThis.FileSystemObserver !== 'undefined';\n\n // Get OPFS directory handle for a path\n private async getDirectoryHandle(dirPath: string, create = false): Promise<FileSystemDirectoryHandle> {\n const parts = dirPath.split('/').filter(Boolean);\n let current = await navigator.storage.getDirectory();\n for (const part of parts) {\n current = await current.getDirectoryHandle(part, { create });\n }\n return current;\n }\n\n // Get OPFS file handle for a path\n private async getFileHandle(filePath: string, create = false): Promise<FileSystemFileHandle> {\n const parts = filePath.split('/').filter(Boolean);\n const fileName = parts.pop();\n if (!fileName) throw new Error('Invalid file path');\n\n let current = await navigator.storage.getDirectory();\n for (const part of parts) {\n current = await current.getDirectoryHandle(part, { create });\n }\n return current.getFileHandle(fileName, { create });\n }\n\n // Convert FileSystemObserver change type to Node.js event type\n private mapChangeType(type: FileSystemChangeRecord['type']): 'rename' | 'change' {\n switch (type) {\n case 'appeared':\n case 'disappeared':\n case 'moved':\n return 'rename';\n case 'modified':\n return 'change';\n default:\n return 'change';\n }\n }\n\n private createAsyncWatcher(filePath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n const absPath = path.normalize(path.resolve(filePath));\n\n // Use native FileSystemObserver if available\n if (OPFSFileSystem.hasNativeObserver) {\n return this.createNativeAsyncWatcher(absPath, options);\n }\n\n // Fallback to polling\n return this.createPollingAsyncWatcher(absPath, options);\n }\n\n private createNativeAsyncWatcher(absPath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n const self = this;\n\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<WatchEventType> {\n const eventQueue: WatchEventType[] = [];\n let resolveNext: ((value: IteratorResult<WatchEventType>) => void) | null = null;\n let observer: FileSystemObserverInterface | null = null;\n let aborted = false;\n let initialized = false;\n\n // Handle abort signal\n if (options?.signal) {\n options.signal.addEventListener('abort', () => {\n aborted = true;\n observer?.disconnect();\n if (resolveNext) {\n resolveNext({ done: true, value: undefined });\n resolveNext = null;\n }\n });\n }\n\n const callback: FileSystemObserverCallback = (records) => {\n for (const record of records) {\n if (record.type === 'errored' || record.type === 'unknown') continue;\n\n const filename = record.relativePathComponents.length > 0\n ? record.relativePathComponents[record.relativePathComponents.length - 1]\n : path.basename(absPath);\n\n const event: WatchEventType = {\n eventType: self.mapChangeType(record.type),\n filename,\n };\n\n if (resolveNext) {\n resolveNext({ done: false, value: event });\n resolveNext = null;\n } else {\n eventQueue.push(event);\n }\n }\n };\n\n const init = async () => {\n if (initialized) return;\n initialized = true;\n\n try {\n observer = new globalThis.FileSystemObserver!(callback);\n const stat = await self.promises.stat(absPath);\n const handle = stat.isDirectory()\n ? await self.getDirectoryHandle(absPath)\n : await self.getFileHandle(absPath);\n await observer.observe(handle, { recursive: options?.recursive });\n } catch (e) {\n // If native observer fails, we should return done\n aborted = true;\n }\n };\n\n const iterator: AsyncIterableIterator<WatchEventType> = {\n async next(): Promise<IteratorResult<WatchEventType>> {\n if (aborted) {\n return { done: true, value: undefined };\n }\n\n await init();\n\n if (aborted) {\n return { done: true, value: undefined };\n }\n\n // Return queued event if available\n if (eventQueue.length > 0) {\n return { done: false, value: eventQueue.shift()! };\n }\n\n // Wait for next event\n return new Promise(resolve => {\n resolveNext = resolve;\n });\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n return iterator;\n },\n };\n }\n\n private createPollingAsyncWatcher(absPath: string, options?: WatchOptions): AsyncIterable<WatchEventType> {\n const self = this;\n const interval = 1000;\n\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<WatchEventType> {\n let lastMtimeMs: number | null = null;\n let lastEntries: Set<string> | null = null;\n let aborted = false;\n let pollTimeout: ReturnType<typeof setTimeout> | null = null;\n\n if (options?.signal) {\n options.signal.addEventListener('abort', () => {\n aborted = true;\n if (pollTimeout) clearTimeout(pollTimeout);\n });\n }\n\n const checkForChanges = async (): Promise<WatchEventType | null> => {\n if (aborted) return null;\n\n try {\n const stat = await self.promises.stat(absPath);\n\n if (stat.isDirectory()) {\n const entries = await self.promises.readdir(absPath) as string[];\n const currentEntries = new Set(entries);\n\n if (lastEntries === null) {\n lastEntries = currentEntries;\n return null;\n }\n\n for (const entry of currentEntries) {\n if (!lastEntries.has(entry)) {\n lastEntries = currentEntries;\n return { eventType: 'rename', filename: entry };\n }\n }\n\n for (const entry of lastEntries) {\n if (!currentEntries.has(entry)) {\n lastEntries = currentEntries;\n return { eventType: 'rename', filename: entry };\n }\n }\n\n lastEntries = currentEntries;\n } else {\n if (lastMtimeMs === null) {\n lastMtimeMs = stat.mtimeMs;\n return null;\n }\n\n if (stat.mtimeMs !== lastMtimeMs) {\n lastMtimeMs = stat.mtimeMs;\n return { eventType: 'change', filename: path.basename(absPath) };\n }\n }\n } catch {\n if (lastMtimeMs !== null || lastEntries !== null) {\n lastMtimeMs = null;\n lastEntries = null;\n return { eventType: 'rename', filename: path.basename(absPath) };\n }\n }\n\n return null;\n };\n\n const iterator: AsyncIterableIterator<WatchEventType> = {\n async next(): Promise<IteratorResult<WatchEventType>> {\n if (aborted) {\n return { done: true, value: undefined };\n }\n\n while (!aborted) {\n const event = await checkForChanges();\n if (event) {\n return { done: false, value: event };\n }\n\n await new Promise<void>(resolve => {\n pollTimeout = setTimeout(resolve, interval);\n });\n }\n\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n return iterator;\n },\n };\n }\n\n /**\n * Watch a file or directory for changes.\n * Uses native FileSystemObserver when available, falls back to polling.\n */\n watch(filePath: string, options: WatchOptions | WatchListener = {}, listener?: WatchListener): FSWatcher {\n const absPath = path.normalize(path.resolve(filePath));\n const opts = typeof options === 'function' ? {} : options;\n const cb = typeof options === 'function' ? options : listener;\n\n // Use native FileSystemObserver if available\n if (OPFSFileSystem.hasNativeObserver) {\n return this.createNativeWatcher(absPath, opts, cb);\n }\n\n // Fallback to polling\n return this.createPollingWatcher(absPath, cb);\n }\n\n private createNativeWatcher(absPath: string, opts: WatchOptions, cb?: WatchListener): FSWatcher {\n const self = this;\n let observer: FileSystemObserverInterface | null = null;\n let closed = false;\n\n const callback: FileSystemObserverCallback = async (records) => {\n if (closed) return;\n\n // Release all file handles before notifying callbacks\n // This allows external tools to immediately access/modify files after changes\n await self.releaseAllHandles();\n\n for (const record of records) {\n if (record.type === 'errored' || record.type === 'unknown') continue;\n\n const filename = record.relativePathComponents.length > 0\n ? record.relativePathComponents[record.relativePathComponents.length - 1]\n : path.basename(absPath);\n\n cb?.(self.mapChangeType(record.type), filename);\n }\n };\n\n // Initialize observer asynchronously\n (async () => {\n if (closed) return;\n try {\n observer = new globalThis.FileSystemObserver!(callback);\n const stat = await self.promises.stat(absPath);\n const handle = stat.isDirectory()\n ? await self.getDirectoryHandle(absPath)\n : await self.getFileHandle(absPath);\n await observer.observe(handle, { recursive: opts.recursive });\n } catch {\n // Silently fail - watcher will just not work\n }\n })();\n\n const watcher: FSWatcher = {\n close: () => {\n closed = true;\n observer?.disconnect();\n },\n ref: () => watcher,\n unref: () => watcher,\n };\n\n return watcher;\n }\n\n private createPollingWatcher(absPath: string, cb?: WatchListener): FSWatcher {\n const interval = 1000;\n let lastMtimeMs: number | null = null;\n let lastEntries: Set<string> | null = null;\n let closed = false;\n\n const poll = async () => {\n if (closed) return;\n\n try {\n const stat = await this.promises.stat(absPath);\n\n if (stat.isDirectory()) {\n const entries = await this.promises.readdir(absPath) as string[];\n const currentEntries = new Set(entries);\n\n if (lastEntries !== null) {\n // Check for changes\n let hasChanges = false;\n const added: string[] = [];\n const removed: string[] = [];\n for (const entry of currentEntries) {\n if (!lastEntries.has(entry)) {\n added.push(entry);\n hasChanges = true;\n }\n }\n for (const entry of lastEntries) {\n if (!currentEntries.has(entry)) {\n removed.push(entry);\n hasChanges = true;\n }\n }\n // Release handles before notifying callbacks\n if (hasChanges) {\n await this.releaseAllHandles();\n for (const entry of added) cb?.('rename', entry);\n for (const entry of removed) cb?.('rename', entry);\n }\n }\n lastEntries = currentEntries;\n } else {\n if (lastMtimeMs !== null && stat.mtimeMs !== lastMtimeMs) {\n // Release handles before notifying callbacks\n await this.releaseAllHandles();\n cb?.('change', path.basename(absPath));\n }\n lastMtimeMs = stat.mtimeMs;\n }\n } catch {\n if (lastMtimeMs !== null || lastEntries !== null) {\n // Release handles before notifying callbacks\n await this.releaseAllHandles();\n cb?.('rename', path.basename(absPath));\n lastMtimeMs = null;\n lastEntries = null;\n }\n }\n };\n\n const intervalId = setInterval(poll, interval);\n poll();\n\n const watcher: FSWatcher = {\n close: () => {\n closed = true;\n clearInterval(intervalId);\n },\n ref: () => watcher,\n unref: () => watcher,\n };\n\n return watcher;\n }\n\n /**\n * Watch a file for changes using native FileSystemObserver or stat polling.\n */\n watchFile(filePath: string, options: WatchFileOptions | WatchFileListener = {}, listener?: WatchFileListener): StatWatcher {\n const absPath = path.normalize(path.resolve(filePath));\n const opts = typeof options === 'function' ? {} : options;\n const cb = typeof options === 'function' ? options : listener;\n const interval = opts.interval ?? 5007;\n\n let lastStat: Stats | null = null;\n let closed = false;\n let observer: FileSystemObserverInterface | undefined;\n\n // Polling function used as fallback or primary\n const poll = async () => {\n if (closed) return;\n\n try {\n const stat = await this.promises.stat(absPath);\n if (lastStat !== null) {\n if (stat.mtimeMs !== lastStat.mtimeMs || stat.size !== lastStat.size) {\n // Release handles before notifying callbacks\n await this.releaseAllHandles();\n cb?.(stat, lastStat);\n }\n }\n lastStat = stat;\n } catch {\n const emptyStat = createStats({ type: 'file', size: 0, mtimeMs: 0, mode: 0 });\n if (lastStat !== null) {\n // Release handles before notifying callbacks\n await this.releaseAllHandles();\n cb?.(emptyStat, lastStat);\n }\n lastStat = emptyStat;\n }\n };\n\n // Try native observer first, fall back to polling\n if (OPFSFileSystem.hasNativeObserver && cb) {\n const self = this;\n\n const observerCallback: FileSystemObserverCallback = async () => {\n if (closed) return;\n // Release handles before notifying callbacks\n await self.releaseAllHandles();\n try {\n const stat = await self.promises.stat(absPath);\n if (lastStat !== null && (stat.mtimeMs !== lastStat.mtimeMs || stat.size !== lastStat.size)) {\n cb(stat, lastStat);\n }\n lastStat = stat;\n } catch {\n const emptyStat = createStats({ type: 'file', size: 0, mtimeMs: 0, mode: 0 });\n if (lastStat !== null) {\n cb(emptyStat, lastStat);\n }\n lastStat = emptyStat;\n }\n };\n\n (async () => {\n if (closed) return;\n try {\n // Get initial stat\n lastStat = await self.promises.stat(absPath);\n\n observer = new globalThis.FileSystemObserver!(observerCallback);\n const handle = await self.getFileHandle(absPath);\n await observer.observe(handle);\n } catch {\n // Native observer failed, fall back to polling\n if (!closed && !this.watchedFiles.get(absPath)?.interval) {\n const entry = this.watchedFiles.get(absPath);\n if (entry) {\n entry.interval = setInterval(poll, interval);\n }\n }\n }\n })();\n\n if (!this.watchedFiles.has(absPath)) {\n this.watchedFiles.set(absPath, {\n observer,\n listeners: new Set(),\n lastStat: null,\n });\n }\n this.watchedFiles.get(absPath)!.listeners.add(cb);\n } else {\n // Polling fallback (no native observer available)\n if (!this.watchedFiles.has(absPath)) {\n this.watchedFiles.set(absPath, {\n interval: setInterval(poll, interval),\n listeners: new Set(),\n lastStat: null,\n });\n }\n if (cb) this.watchedFiles.get(absPath)!.listeners.add(cb);\n\n poll();\n }\n\n const watcher: StatWatcher = {\n ref: () => watcher,\n unref: () => watcher,\n };\n\n return watcher;\n }\n\n /**\n * Stop watching a file.\n */\n unwatchFile(filePath: string, listener?: WatchFileListener): void {\n const absPath = path.normalize(path.resolve(filePath));\n const entry = this.watchedFiles.get(absPath);\n\n if (entry) {\n if (listener) {\n entry.listeners.delete(listener);\n if (entry.listeners.size === 0) {\n if (entry.interval) clearInterval(entry.interval);\n if (entry.observer) entry.observer.disconnect();\n this.watchedFiles.delete(absPath);\n }\n } else {\n if (entry.interval) clearInterval(entry.interval);\n if (entry.observer) entry.observer.disconnect();\n this.watchedFiles.delete(absPath);\n }\n }\n }\n\n // --- Stream Implementation ---\n\n /**\n * Create a readable stream for a file.\n */\n createReadStream(filePath: string, options?: ReadStreamOptions | string): ReadableStream<Uint8Array> {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options ?? {};\n const absPath = path.normalize(path.resolve(filePath));\n const start = opts.start ?? 0;\n const end = opts.end;\n const highWaterMark = opts.highWaterMark ?? 64 * 1024;\n\n let position = start;\n let closed = false;\n const self = this;\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n if (closed) {\n controller.close();\n return;\n }\n\n try {\n const maxRead = end !== undefined ? Math.min(highWaterMark, end - position + 1) : highWaterMark;\n if (maxRead <= 0) {\n controller.close();\n closed = true;\n return;\n }\n\n const result = await self.fastCall('read', absPath, { offset: position, len: maxRead });\n\n if (!result.data || result.data.length === 0) {\n controller.close();\n closed = true;\n return;\n }\n\n controller.enqueue(result.data);\n position += result.data.length;\n\n if (end !== undefined && position > end) {\n controller.close();\n closed = true;\n }\n } catch (e) {\n controller.error(e);\n closed = true;\n }\n },\n\n cancel() {\n closed = true;\n },\n });\n }\n\n /**\n * Create a writable stream for a file.\n */\n createWriteStream(filePath: string, options?: WriteStreamOptions | string): WritableStream<Uint8Array> {\n const opts = typeof options === 'string' ? { encoding: options as Encoding } : options ?? {};\n const absPath = path.normalize(path.resolve(filePath));\n const start = opts.start ?? 0;\n const shouldFlush = opts.flush !== false;\n\n let position = start;\n let initialized = false;\n const self = this;\n\n return new WritableStream<Uint8Array>({\n async write(chunk) {\n // Truncate on first write if starting from beginning\n if (!initialized && start === 0) {\n await self.fastCall('write', absPath, { data: chunk, offset: 0, flush: false });\n position = chunk.length;\n initialized = true;\n } else {\n await self.fastCall('write', absPath, { data: chunk, offset: position, truncate: false, flush: false });\n position += chunk.length;\n initialized = true;\n }\n self.invalidateStat(absPath);\n },\n\n async close() {\n if (shouldFlush) {\n await self.fastCall('flush', '/');\n }\n },\n\n async abort() {\n // Nothing to clean up\n },\n });\n }\n\n // --- Sync methods for opendir and mkdtemp ---\n\n /**\n * Open a directory for iteration (sync).\n */\n opendirSync(dirPath: string): Dir {\n return this.createDir(dirPath);\n }\n\n /**\n * Create a unique temporary directory (sync).\n */\n mkdtempSync(prefix: string): string {\n const suffix = Math.random().toString(36).substring(2, 8);\n const tmpDir = `${prefix}${suffix}`;\n this.mkdirSync(tmpDir, { recursive: true });\n return tmpDir;\n }\n}\n","/**\n * OPFS-FS: Battle-tested OPFS-based Node.js fs polyfill\n *\n * Provides a Node.js-compatible filesystem API that works in browsers using OPFS.\n *\n * Features:\n * - Synchronous API: fs.readFileSync, fs.writeFileSync, etc. (requires crossOriginIsolated)\n * - Async Promises API: fs.promises.readFile, fs.promises.writeFile, etc.\n * - Cross-tab safety via navigator.locks\n *\n * Performance Tiers:\n * - Tier 1 (Sync): SharedArrayBuffer + Atomics - requires crossOriginIsolated (COOP/COEP headers)\n * - Tier 2 (Async): Promises API - always available\n *\n * @example\n * ```typescript\n * import { fs } from '@componentor/fs';\n *\n * // Sync API (requires crossOriginIsolated)\n * fs.writeFileSync('/hello.txt', 'Hello World!');\n * const data = fs.readFileSync('/hello.txt', 'utf8');\n *\n * // Async API (always available)\n * await fs.promises.writeFile('/async.txt', 'Async data');\n * const content = await fs.promises.readFile('/async.txt', 'utf8');\n * ```\n */\n\nexport { OPFSFileSystem } from './filesystem.js';\nexport { constants } from './constants.js';\nexport { FSError, createENOENT, createEEXIST, createEISDIR, createENOTDIR, createENOTEMPTY, createEACCES, createEINVAL, mapErrorCode } 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 FileSystemPromises,\n PathLike,\n} from './types.js';\n\nimport { OPFSFileSystem } from './filesystem.js';\n\n// Default singleton instance\nexport const fs = new OPFSFileSystem();\n\n// Default export for convenience\nexport default fs;\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"],"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"]}