{"version":3,"file":"fs--21njbVS.mjs","names":["fs","fs","fs","fs","fs"],"sources":["../src/main/fs/read.ts","../src/main/internal/guards.ts","../src/main/fs/write.ts","../src/main/fs/file.ts","../src/main/fs/dir.ts","../src/main/fs/link.ts","../src/main/fs/index.ts"],"sourcesContent":["import { promises as fs } from \"node:fs\";\nimport type { FsReadFileOptions, FsReadFileResult } from \"@shared/types.js\";\n\n/**\n * Read the entire contents of a file\n */\nexport async function readFileHandler(...params: unknown[]): Promise<FsReadFileResult> {\n  const [path, options] = params as [string, FsReadFileOptions?];\n  // fs.readFile accepts BufferEncoding | { encoding?: BufferEncoding | null } | { flag?: string } as options\n  return await fs.readFile(\n    path,\n    options as BufferEncoding | { encoding?: BufferEncoding | null; flag?: string } | undefined,\n  );\n}\n\n/**\n * Read the target of a symbolic link\n */\nexport async function readlinkHandler(...params: unknown[]): Promise<string> {\n  const [path, options] = params as [string, { encoding?: BufferEncoding }?];\n  return await fs.readlink(path, options);\n}\n\n/**\n * Resolve the actual path of a file/directory\n */\nexport async function realpathHandler(...params: unknown[]): Promise<string> {\n  const [path, options] = params as [string, { encoding?: BufferEncoding }?];\n  return await fs.realpath(path, options);\n}\n","/**\n * Type guard utilities for RPC parameter validation\n */\n\n/**\n * Check if a value is a Buffer-like object (Buffer or Uint8Array)\n */\nexport function isBufferLike(val: unknown): val is Buffer | Uint8Array {\n  return val instanceof Buffer || val instanceof Uint8Array;\n}\n\n/**\n * Check if a value is a plain object (not null)\n */\nexport function isObject(val: unknown): val is Record<string, unknown> {\n  return typeof val === \"object\" && val !== null;\n}\n\n/**\n * Check if a value is a string\n */\nexport function isString(val: unknown): val is string {\n  return typeof val === \"string\";\n}\n\n/**\n * Check if a value is a number\n */\nexport function isNumber(val: unknown): val is number {\n  return typeof val === \"number\";\n}\n\n/**\n * Check if a value is a boolean\n */\nexport function isBoolean(val: unknown): val is boolean {\n  return typeof val === \"boolean\";\n}\n","import { promises as fs } from \"node:fs\";\nimport type {\n  FsWriteInput,\n  FsWriteOptions,\n  FsAppendFileOptions,\n  FsCopyFileOptions,\n} from \"@shared/types.js\";\nimport { isBufferLike } from \"../internal/guards.js\";\n\n/**\n * Write data to a file\n */\nexport async function writeFileHandler(...params: unknown[]): Promise<void> {\n  const [path, data, options] = params as [string, FsWriteInput, FsWriteOptions?];\n  // Ensure data is a valid type for fs.writeFile\n  const writeData: string | Buffer =\n    typeof data === \"string\"\n      ? data\n      : isBufferLike(data)\n        ? Buffer.from(data)\n        : Buffer.from(data as unknown as Uint8Array);\n  await fs.writeFile(path, writeData, options);\n}\n\n/**\n * Append data to a file\n */\nexport async function appendFileHandler(...params: unknown[]): Promise<void> {\n  const [path, data, options] = params as [string, FsWriteInput, FsAppendFileOptions?];\n  // Ensure data is a valid type for fs.appendFile\n  const writeData: string | Buffer =\n    typeof data === \"string\"\n      ? data\n      : isBufferLike(data)\n        ? Buffer.from(data)\n        : Buffer.from(data as unknown as Uint8Array);\n  await fs.appendFile(path, writeData, options);\n}\n\n/**\n * Copy a file\n */\nexport async function copyFileHandler(...params: unknown[]): Promise<void> {\n  const [src, dest, mode] = params as [string, string, FsCopyFileOptions?];\n  await fs.copyFile(src, dest, mode as number);\n}\n","import { promises as fs } from \"node:fs\";\nimport type { FsStatOptions, FsMode, FsTimeLike } from \"@shared/types.js\";\n\n/**\n * Remove a file\n */\nexport async function unlinkHandler(...params: unknown[]): Promise<void> {\n  const [path] = params as [string];\n  await fs.unlink(path);\n}\n\n/**\n * Rename a file\n */\nexport async function renameHandler(...params: unknown[]): Promise<void> {\n  const [oldPath, newPath] = params as [string, string];\n  await fs.rename(oldPath, newPath);\n}\n\n/**\n * Truncate a file to a specified length\n */\nexport async function truncateHandler(...params: unknown[]): Promise<void> {\n  const [path, len] = params as [string, number | undefined];\n  await fs.truncate(path, len);\n}\n\n/**\n * Get file status information\n */\nexport async function statHandler(...params: unknown[]): Promise<unknown> {\n  const [path, options] = params as [string, FsStatOptions?];\n  const stats = await fs.stat(path, options);\n  // Convert Stats to plain object for IPC serialization\n  return statsToPlain(stats);\n}\n\n/**\n * Get symbolic link status information\n */\nexport async function lstatHandler(...params: unknown[]): Promise<unknown> {\n  const [path, options] = params as [string, FsStatOptions?];\n  const stats = await fs.lstat(path, options);\n  return statsToPlain(stats);\n}\n\n/**\n * Check if a file exists\n */\nexport async function existsHandler(...params: unknown[]): Promise<boolean> {\n  const [path] = params as [string];\n  try {\n    await fs.access(path);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Check if a file is accessible with the given mode\n */\nexport async function accessHandler(...params: unknown[]): Promise<void> {\n  const [path, mode] = params as [string, number?];\n  await fs.access(path, mode);\n}\n\n/**\n * Change file permissions\n */\nexport async function chmodHandler(...params: unknown[]): Promise<void> {\n  const [path, mode] = params as [string, FsMode];\n  await fs.chmod(path, mode);\n}\n\n/**\n * Change file owner\n */\nexport async function chownHandler(...params: unknown[]): Promise<void> {\n  const [path, uid, gid] = params as [string, number, number];\n  await fs.chown(path, uid, gid);\n}\n\n/**\n * Change file timestamps\n */\nexport async function utimesHandler(...params: unknown[]): Promise<void> {\n  const [path, atime, mtime] = params as [string, FsTimeLike, FsTimeLike];\n  await fs.utimes(path, atime, mtime);\n}\n\n/**\n * Convert fs.Stats or fs.BigIntStats to plain object for IPC serialization\n */\nfunction statsToPlain(\n  stats: import(\"fs\").Stats | import(\"fs\").BigIntStats,\n): Record<string, unknown> {\n  // Helper to safely convert bigint or number to number\n  const toNumber = (val: number | bigint): number => {\n    return typeof val === \"bigint\" ? Number(val) : val;\n  };\n\n  return {\n    dev: toNumber((stats as { dev: number | bigint }).dev),\n    ino: toNumber((stats as { ino: number | bigint }).ino),\n    mode: stats.mode,\n    nlink: stats.nlink,\n    uid: stats.uid,\n    gid: stats.gid,\n    rdev: stats.rdev,\n    size: stats.size,\n    blksize: stats.blksize,\n    blocks: stats.blocks,\n    atimeMs: stats.atimeMs,\n    mtimeMs: stats.mtimeMs,\n    ctimeMs: stats.ctimeMs,\n    birthtimeMs: stats.birthtimeMs,\n    atime: stats.atime,\n    mtime: stats.mtime,\n    ctime: stats.ctime,\n    birthtime: stats.birthtime,\n  };\n}\n","import { promises as fs } from \"node:fs\";\nimport type {\n  FsMkdirOptions,\n  FsReaddirOptions,\n  FsReaddirResult,\n  FsDirent,\n  FsRmOptions,\n  FsRmdirOptions,\n  FsCopyOptions,\n} from \"@shared/types.js\";\n\n/**\n * Create a directory\n */\nexport async function mkdirHandler(...params: unknown[]): Promise<void | string> {\n  const [path, options] = params as [string, FsMkdirOptions?];\n  return await fs.mkdir(path, options);\n}\n\n/**\n * Read directory contents\n */\nexport async function readdirHandler(...params: unknown[]): Promise<FsReaddirResult> {\n  const [path, options] = params as [string, FsReaddirOptions?];\n  if (options?.withFileTypes) {\n    const result = await fs.readdir(path, { ...options, withFileTypes: true } as {\n      encoding?: BufferEncoding | null;\n      withFileTypes: true;\n      recursive?: boolean;\n    });\n    // Convert Dirent objects to plain objects for IPC serialization\n    return result.map((d: import(\"fs\").Dirent) => direntToPlain(d));\n  }\n  const result = await fs.readdir(\n    path,\n    options as {\n      encoding?: BufferEncoding | null;\n      withFileTypes?: false;\n      recursive?: boolean;\n    },\n  );\n  return result as FsReaddirResult;\n}\n\n/**\n * Remove a directory\n */\nexport async function rmdirHandler(...params: unknown[]): Promise<void> {\n  const [path, options] = params as [string, FsRmdirOptions?];\n  await fs.rmdir(path, options);\n}\n\n/**\n * Remove a file or directory (recursively)\n */\nexport async function rmHandler(...params: unknown[]): Promise<void> {\n  const [path, options] = params as [string, FsRmOptions?];\n  await fs.rm(path, options);\n}\n\n/**\n * Copy a directory structure\n */\nexport async function cpHandler(...params: unknown[]): Promise<void> {\n  const [source, destination, options] = params as [string, string, FsCopyOptions?];\n  await fs.cp(source, destination, options);\n}\n\n/**\n * Convert fs.Dirent to plain object for IPC serialization\n */\nfunction direntToPlain(dirent: import(\"fs\").Dirent): FsDirent {\n  return {\n    name: dirent.name,\n    isFile: dirent.isFile(),\n    isDirectory: dirent.isDirectory(),\n    isBlockDevice: dirent.isBlockDevice(),\n    isCharacterDevice: dirent.isCharacterDevice(),\n    isSymbolicLink: dirent.isSymbolicLink(),\n    isFIFO: dirent.isFIFO(),\n    isSocket: dirent.isSocket(),\n  };\n}\n","import { promises as fs } from \"node:fs\";\nimport type { FsSymlinkType } from \"@shared/types.js\";\n\n/**\n * Create a hard link\n */\nexport async function linkHandler(...params: unknown[]): Promise<void> {\n  const [existingPath, newPath] = params as [string, string];\n  await fs.link(existingPath, newPath);\n}\n\n/**\n * Create a symbolic link\n */\nexport async function symlinkHandler(...params: unknown[]): Promise<void> {\n  const [target, path, type] = params as [string, string, FsSymlinkType?];\n  await fs.symlink(target, path, type as string | null);\n}\n","import { RpcServer } from \"electron-json-rpc/main\";\nimport { readFileHandler, readlinkHandler, realpathHandler } from \"./read.js\";\nimport { writeFileHandler, appendFileHandler, copyFileHandler } from \"./write.js\";\nimport {\n  unlinkHandler,\n  renameHandler,\n  truncateHandler,\n  statHandler,\n  lstatHandler,\n  existsHandler,\n  accessHandler,\n  chmodHandler,\n  chownHandler,\n  utimesHandler,\n} from \"./file.js\";\nimport { mkdirHandler, readdirHandler, rmdirHandler, rmHandler, cpHandler } from \"./dir.js\";\nimport { linkHandler, symlinkHandler } from \"./link.js\";\n\nconst RPC_METHOD_PREFIX = \"fs\";\n\nexport function registerFsModule(rpc: RpcServer): void {\n  // Read operations\n  rpc.register(`${RPC_METHOD_PREFIX}.readFile`, readFileHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.readlink`, readlinkHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.realpath`, realpathHandler);\n\n  // Write operations\n  rpc.register(`${RPC_METHOD_PREFIX}.writeFile`, writeFileHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.appendFile`, appendFileHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.copyFile`, copyFileHandler);\n\n  // File operations\n  rpc.register(`${RPC_METHOD_PREFIX}.unlink`, unlinkHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.rename`, renameHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.truncate`, truncateHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.stat`, statHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.lstat`, lstatHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.exists`, existsHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.access`, accessHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.chmod`, chmodHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.chown`, chownHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.utimes`, utimesHandler);\n\n  // Directory operations\n  rpc.register(`${RPC_METHOD_PREFIX}.mkdir`, mkdirHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.readdir`, readdirHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.rmdir`, rmdirHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.rm`, rmHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.cp`, cpHandler);\n\n  // Link operations\n  rpc.register(`${RPC_METHOD_PREFIX}.link`, linkHandler);\n  rpc.register(`${RPC_METHOD_PREFIX}.symlink`, symlinkHandler);\n}\n\n// Re-export handlers for testing\nexport {\n  readFileHandler,\n  readlinkHandler,\n  realpathHandler,\n  writeFileHandler,\n  appendFileHandler,\n  copyFileHandler,\n  unlinkHandler,\n  renameHandler,\n  truncateHandler,\n  statHandler,\n  lstatHandler,\n  existsHandler,\n  accessHandler,\n  chmodHandler,\n  chownHandler,\n  utimesHandler,\n  mkdirHandler,\n  readdirHandler,\n  rmdirHandler,\n  rmHandler,\n  cpHandler,\n  linkHandler,\n  symlinkHandler,\n};\n"],"mappings":"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"}