{"version":3,"file":"classes.js","names":[],"sources":["esm/platform/file-system/classes.js"],"sourcesContent":["import { directories, entry, parent, parts, serial, transfer, write } from \"./opfs\";\nimport { PathUtilities } from \"./paths\";\nimport { FileSystemReadableStreamSource, FileSystemWritableSink } from \"./streams\";\nimport { FileMode } from \"./types\";\nimport {\n  assertAlgorithm,\n  assertByteLength,\n  assertDestination,\n  assertEncoding,\n  assertMode,\n  assertOffset,\n  assertReadable,\n  assertUri,\n  assertWritable,\n  assertWriteBytes,\n  assertWriteContent\n} from \"./validate\";\nfunction unavailable(member) {\n  return new Error(`${member} is not available on web`);\n}\nfunction server() {\n  return typeof window === \"undefined\";\n}\nfunction toBytes(content) {\n  if (content instanceof ArrayBuffer) return new Uint8Array(content);\n  if (content.buffer instanceof ArrayBuffer) {\n    return new Uint8Array(content.buffer, content.byteOffset, content.byteLength);\n  }\n  const copy = new Uint8Array(content.byteLength);\n  copy.set(content);\n  return copy;\n}\nfunction toBase64(bytes) {\n  let binary = \"\";\n  for (let i = 0; i < bytes.length; i += 32768) {\n    binary += String.fromCharCode(...bytes.subarray(i, i + 32768));\n  }\n  return btoa(binary);\n}\nasync function fileEntry(uri) {\n  const handle = await entry(parts(uri));\n  if (handle.kind !== \"file\") throw new Error(\"FileSystem: expected a file\");\n  return handle;\n}\nasync function readWholeFile(uri) {\n  return new Uint8Array(await (await (await fileEntry(uri)).getFile()).arrayBuffer());\n}\nasync function writePositioned(uri, position, data) {\n  const handle = await fileEntry(uri);\n  const writable = await handle.createWritable({ keepExistingData: true });\n  try {\n    await writable.write({ type: \"write\", position, data });\n    await writable.close();\n  } catch (error) {\n    await writable.abort().catch(() => {\n    });\n    throw error;\n  }\n}\nclass FileHandle {\n  targetUri;\n  mode;\n  offsetValue = 0;\n  closed = false;\n  truncatePending;\n  appendPending;\n  // obtain through File.open().\n  constructor(uri, mode = FileMode.ReadWrite) {\n    assertUri(uri, \"FileHandle\");\n    assertMode(mode, \"FileHandle\");\n    this.targetUri = uri;\n    this.mode = mode;\n    this.truncatePending = mode === FileMode.Truncate;\n    this.appendPending = mode === FileMode.Append;\n  }\n  get offset() {\n    if (this.closed) return null;\n    return this.offsetValue;\n  }\n  set offset(value) {\n    this.assertOpen(\"offset\");\n    assertOffset(value, \"FileHandle.offset\");\n    this.offsetValue = value;\n    this.appendPending = false;\n  }\n  get size() {\n    if (this.closed) return null;\n    throw unavailable(\"FileHandle.size\");\n  }\n  close() {\n    this.closed = true;\n  }\n  readBytes(length) {\n    this.assertOpen(\"readBytes\");\n    assertReadable(this.mode, \"FileHandle.readBytes\");\n    assertByteLength(length, \"FileHandle.readBytes\");\n    if (server()) return Promise.resolve(new Uint8Array());\n    return serial(async () => {\n      await this.prepare();\n      const bytes = await readWholeFile(this.targetUri);\n      const slice = bytes.slice(this.offsetValue, this.offsetValue + length);\n      this.offsetValue += slice.length;\n      return slice;\n    });\n  }\n  readBytesSync(_length) {\n    throw unavailable(\"FileHandle.readBytesSync\");\n  }\n  writeBytes(bytes) {\n    this.assertOpen(\"writeBytes\");\n    assertWritable(this.mode, \"FileHandle.writeBytes\");\n    assertWriteBytes(bytes, \"FileHandle.writeBytes\");\n    if (server()) return Promise.resolve();\n    const data = toBytes(bytes);\n    return serial(async () => {\n      await this.prepare();\n      let size = 0;\n      try {\n        size = (await (await fileEntry(this.targetUri)).getFile()).size;\n      } catch (error) {\n        if (error.name !== \"NotFoundError\") throw error;\n        if (this.mode === FileMode.ReadOnly || this.mode === FileMode.ReadWrite) throw error;\n        const names = parts(this.targetUri);\n        await (await parent(names)).getFileHandle(names.at(-1), { create: true });\n      }\n      const position = Math.min(this.offsetValue, size);\n      await writePositioned(this.targetUri, position, data);\n      this.offsetValue = position + data.length;\n    });\n  }\n  writeBytesSync(_bytes) {\n    throw unavailable(\"FileHandle.writeBytesSync\");\n  }\n  async prepare() {\n    if (this.truncatePending) {\n      this.truncatePending = false;\n      this.offsetValue = 0;\n      const names = parts(this.targetUri);\n      await write(await (await parent(names)).getFileHandle(names.at(-1), { create: true }), \"\");\n    } else if (this.appendPending) {\n      this.appendPending = false;\n      try {\n        this.offsetValue = (await (await fileEntry(this.targetUri)).getFile()).size;\n      } catch (error) {\n        if (error.name !== \"NotFoundError\") throw error;\n        this.offsetValue = 0;\n      }\n    }\n  }\n  assertOpen(verb) {\n    if (this.closed) throw new Error(`FileHandle.${verb}: the handle is closed`);\n  }\n}\nfunction resolveDestination(source, destination, verb) {\n  assertDestination(destination, verb);\n  if (destination instanceof Directory) {\n    return PathUtilities.join(destination.uri, source.name);\n  }\n  if (destination instanceof File) return destination.uri;\n  throw new Error(`${verb}: expected a File or Directory destination`);\n}\nasync function relocate(source, to, move, overwrite) {\n  if (overwrite && parts(to).length === 1) {\n    throw new Error(\"FileSystem: app root directories are protected\");\n  }\n  if (overwrite) {\n    const names = parts(to);\n    await (await parent(names)).removeEntry(names.at(-1), { recursive: true }).catch((error) => {\n      if (error.name !== \"NotFoundError\") throw error;\n    });\n  }\n  await transfer(source, to, move);\n}\nclass File {\n  currentUri;\n  constructor(...uris) {\n    const joined = PathUtilities.join(...uris);\n    assertUri(joined, \"File\");\n    this.currentUri = joined;\n  }\n  get uri() {\n    return this.currentUri;\n  }\n  get name() {\n    return PathUtilities.basename(this.currentUri);\n  }\n  get extension() {\n    return PathUtilities.extname(this.currentUri);\n  }\n  get parentDirectory() {\n    return new Directory(PathUtilities.dirname(this.currentUri));\n  }\n  get exists() {\n    throw unavailable(\"File.exists\");\n  }\n  get size() {\n    throw unavailable(\"File.size\");\n  }\n  get type() {\n    throw unavailable(\"File.type\");\n  }\n  get creationTime() {\n    throw unavailable(\"File.creationTime\");\n  }\n  get lastModified() {\n    throw unavailable(\"File.lastModified\");\n  }\n  text() {\n    if (server()) return Promise.resolve(\"\");\n    const uri = this.currentUri;\n    return serial(async () => (await (await fileEntry(uri)).getFile()).text());\n  }\n  textSync() {\n    throw unavailable(\"File.textSync\");\n  }\n  bytes() {\n    if (server()) return Promise.resolve(new Uint8Array());\n    const uri = this.currentUri;\n    return serial(() => readWholeFile(uri));\n  }\n  bytesSync() {\n    throw unavailable(\"File.bytesSync\");\n  }\n  base64() {\n    if (server()) return Promise.resolve(\"\");\n    return this.bytes().then(toBase64);\n  }\n  base64Sync() {\n    throw unavailable(\"File.base64Sync\");\n  }\n  async arrayBuffer() {\n    return (await this.bytes()).buffer;\n  }\n  async json() {\n    return JSON.parse(await this.text());\n  }\n  info() {\n    throw unavailable(\"File.info\");\n  }\n  digest(algorithm) {\n    assertAlgorithm(algorithm, \"File.digest\");\n    if (server()) return Promise.reject(new Error(\"File.digest is not available on the server\"));\n    if (algorithm === \"MD5\") {\n      return Promise.reject(new Error(\"File.digest: MD5 is not available on web\"));\n    }\n    if (!globalThis.crypto?.subtle) return Promise.reject(unavailable(\"File.digest\"));\n    return this.bytes().then(async (bytes) => {\n      const hash = await globalThis.crypto.subtle.digest(algorithm, bytes);\n      return Array.from(new Uint8Array(hash)).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n    });\n  }\n  write(content, options) {\n    assertWriteContent(content, \"File.write\");\n    if (server()) return Promise.resolve();\n    const append = options?.append ?? false;\n    let data;\n    if (typeof content === \"string\") {\n      const encoding = options?.encoding ?? \"utf8\";\n      assertEncoding(encoding, \"File.write\");\n      if (encoding === \"base64\") {\n        if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(content)) {\n          throw new Error(\"FileSystem: invalid base64 contents\");\n        }\n        data = Uint8Array.from(atob(content), (char) => char.charCodeAt(0));\n      } else {\n        data = content;\n      }\n    } else {\n      if (options?.encoding !== void 0) assertEncoding(options.encoding, \"File.write\");\n      data = toBytes(content);\n    }\n    const uri = this.currentUri;\n    return serial(async () => {\n      if (append) {\n        let existing = new Uint8Array();\n        try {\n          existing = await readWholeFile(uri);\n        } catch (error) {\n          if (error.name !== \"NotFoundError\") throw error;\n        }\n        const next = typeof data === \"string\" ? new TextEncoder().encode(data) : data;\n        const combined = new Uint8Array(existing.length + next.length);\n        combined.set(existing);\n        combined.set(next, existing.length);\n        data = combined;\n      }\n      const names = parts(uri);\n      await write(await (await parent(names)).getFileHandle(names.at(-1), { create: true }), data);\n    });\n  }\n  writeSync(_content, _options) {\n    throw unavailable(\"File.writeSync\");\n  }\n  create(_options) {\n    throw unavailable(\"File.create\");\n  }\n  delete() {\n    throw unavailable(\"File.delete\");\n  }\n  copy(destination, options) {\n    const to = resolveDestination(this, destination, \"File.copy\");\n    if (server()) return Promise.resolve();\n    const from = this.currentUri;\n    return serial(() => relocate(from, to, false, options?.overwrite ?? false));\n  }\n  copySync(_destination, _options) {\n    throw unavailable(\"File.copySync\");\n  }\n  move(destination, options) {\n    const to = resolveDestination(this, destination, \"File.move\");\n    if (to === this.currentUri || server()) return Promise.resolve();\n    const from = this.currentUri;\n    return serial(\n      () => relocate(from, to, true, options?.overwrite ?? false).then(() => {\n        this.currentUri = to;\n      })\n    );\n  }\n  moveSync(_destination, _options) {\n    throw unavailable(\"File.moveSync\");\n  }\n  rename(_newName) {\n    throw unavailable(\"File.rename\");\n  }\n  open(mode = FileMode.ReadWrite) {\n    assertMode(mode, \"File.open\");\n    return new FileHandle(this.currentUri, mode);\n  }\n  readableStream() {\n    return new ReadableStream(new FileSystemReadableStreamSource(this.open(FileMode.ReadOnly)));\n  }\n  writableStream() {\n    return new WritableStream(new FileSystemWritableSink(this.open(FileMode.WriteOnly)));\n  }\n  stream() {\n    return this.readableStream();\n  }\n}\nclass Directory {\n  currentUri;\n  constructor(...uris) {\n    const joined = PathUtilities.join(...uris);\n    assertUri(joined, \"Directory\");\n    this.currentUri = joined;\n  }\n  get uri() {\n    return this.currentUri;\n  }\n  get name() {\n    return PathUtilities.basename(this.currentUri);\n  }\n  get parentDirectory() {\n    return new Directory(PathUtilities.join(this.currentUri, \"..\"));\n  }\n  get exists() {\n    throw unavailable(\"Directory.exists\");\n  }\n  get size() {\n    throw unavailable(\"Directory.size\");\n  }\n  list() {\n    throw unavailable(\"Directory.list\");\n  }\n  info() {\n    throw unavailable(\"Directory.info\");\n  }\n  create(_options) {\n    throw unavailable(\"Directory.create\");\n  }\n  createFile(_name, _mimeType) {\n    throw unavailable(\"Directory.createFile\");\n  }\n  createDirectory(_name) {\n    throw unavailable(\"Directory.createDirectory\");\n  }\n  delete() {\n    throw unavailable(\"Directory.delete\");\n  }\n  copy(destination, options) {\n    const to = resolveDestination(this, destination, \"Directory.copy\");\n    if (server()) return Promise.resolve();\n    const from = this.currentUri;\n    return serial(() => relocate(from, to, false, options?.overwrite ?? false));\n  }\n  copySync(_destination, _options) {\n    throw unavailable(\"Directory.copySync\");\n  }\n  move(destination, options) {\n    const to = resolveDestination(this, destination, \"Directory.move\");\n    if (to === this.currentUri || server()) return Promise.resolve();\n    const from = this.currentUri;\n    return serial(\n      () => relocate(from, to, true, options?.overwrite ?? false).then(() => {\n        this.currentUri = to;\n      })\n    );\n  }\n  moveSync(_destination, _options) {\n    throw unavailable(\"Directory.moveSync\");\n  }\n  rename(_newName) {\n    throw unavailable(\"Directory.rename\");\n  }\n}\nclass Paths extends PathUtilities {\n  static get cache() {\n    return new Directory(directories.cache);\n  }\n  static get document() {\n    return new Directory(directories.documents);\n  }\n  static get bundle() {\n    throw unavailable(\"Paths.bundle\");\n  }\n  static get totalDiskSpace() {\n    throw unavailable(\"Paths.totalDiskSpace\");\n  }\n  static get availableDiskSpace() {\n    throw unavailable(\"Paths.availableDiskSpace\");\n  }\n  static info(..._uris) {\n    throw unavailable(\"Paths.info\");\n  }\n}\nexport {\n  Directory,\n  File,\n  FileHandle,\n  FileMode,\n  Paths\n};\n//# sourceMappingURL=classes.js.map\n"],"mappings":"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"}