{"version":3,"file":"opfs.js","names":[],"sources":["esm/platform/file-system/opfs.js"],"sourcesContent":["const folders = [\"documents\", \"cache\", \"applicationSupport\", \"temporary\"];\nconst directories = Object.fromEntries(\n  folders.map((name) => [name, `opfs://one/${name}/`])\n);\nfunction parts(uri) {\n  const url = new URL(uri);\n  if (url.protocol !== \"opfs:\" || url.host !== \"one\" || url.search || url.hash) {\n    throw new Error(\"FileSystem: expected an opfs://one/ URI\");\n  }\n  const names = url.pathname.split(\"/\").filter(Boolean).map(decodeURIComponent);\n  if (!folders.includes(names[0]) || names.some((name) => name === \".\" || name === \"..\" || /[/\\\\\\0]/.test(name))) {\n    throw new Error(\"FileSystem: invalid path\");\n  }\n  return names;\n}\nasync function root() {\n  if (!navigator.storage?.getDirectory)\n    throw new Error(\"FileSystem: Origin Private File System is unavailable\");\n  const handle = await navigator.storage.getDirectory();\n  for (const name of folders) await handle.getDirectoryHandle(name, { create: true });\n  return handle;\n}\nasync function parent(names, create = false) {\n  let handle = await root();\n  for (const name of names.slice(0, -1))\n    handle = await handle.getDirectoryHandle(name, { create });\n  return handle;\n}\nasync function entry(names) {\n  const handle = await parent(names);\n  const name = names.at(-1);\n  try {\n    return await handle.getFileHandle(name);\n  } catch (error) {\n    if (error.name !== \"TypeMismatchError\") throw error;\n    return handle.getDirectoryHandle(name);\n  }\n}\nasync function info(uri) {\n  const names = parts(uri);\n  try {\n    const handle = await entry(names);\n    if (handle.kind === \"directory\") return { uri, exists: true, isDirectory: true };\n    const file = await handle.getFile();\n    return {\n      uri,\n      exists: true,\n      isDirectory: false,\n      size: file.size,\n      modifiedAt: file.lastModified\n    };\n  } catch (error) {\n    if (error.name !== \"NotFoundError\") throw error;\n    return { uri, exists: false, isDirectory: false };\n  }\n}\nasync function write(handle, data) {\n  const writable = await handle.createWritable();\n  try {\n    await writable.write(data);\n    await writable.close();\n  } catch (error) {\n    await writable.abort().catch(() => {\n    });\n    throw error;\n  }\n}\nasync function copyEntry(source, target, name) {\n  if (source.kind === \"file\") {\n    await write(\n      await target.getFileHandle(name, { create: true }),\n      await source.getFile()\n    );\n  } else {\n    const directory = await target.getDirectoryHandle(name, { create: true });\n    for await (const [childName, child] of source.entries())\n      await copyEntry(child, directory, childName);\n  }\n}\nasync function transfer(fromUri, toUri, move) {\n  const from = parts(fromUri), to = parts(toUri);\n  if (move && from.length === 1)\n    throw new Error(\"FileSystem: app root directories are protected\");\n  if (to.length <= from.length && to.every((name, i) => name === from[i]) || from.every((name, i) => name === to[i]))\n    throw new Error(\"FileSystem: overlapping paths\");\n  const source = await entry(from);\n  if ((await info(toUri)).exists)\n    throw new Error(\"FileSystem: destination already exists\");\n  const destination = await parent(to);\n  try {\n    await copyEntry(source, destination, to.at(-1));\n  } catch (error) {\n    await destination.removeEntry(to.at(-1), { recursive: true }).catch(() => {\n    });\n    throw error;\n  }\n  if (move) await (await parent(from)).removeEntry(from.at(-1), { recursive: true });\n}\nlet tail = Promise.resolve();\nfunction serial(work) {\n  const next = tail.then(work);\n  tail = next.catch(() => {\n  });\n  return next;\n}\nexport {\n  directories,\n  entry,\n  folders,\n  info,\n  parent,\n  parts,\n  root,\n  serial,\n  transfer,\n  write\n};\n//# sourceMappingURL=opfs.js.map\n"],"mappings":"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"}