import type { UXDataWriteOptions } from "@lib/common/types"; import type { IVaultAdapter } from "@lib/serviceModules/adapters"; import { toArrayBuffer } from "@lib/serviceModules/FileAccessBase"; import type { TFile, App, TFolder } from "obsidian"; /** * Vault adapter implementation for Obsidian */ export class ObsidianVaultAdapter implements IVaultAdapter { constructor(private app: App) {} async read(file: TFile): Promise { return await this.app.vault.read(file); } async cachedRead(file: TFile): Promise { return await this.app.vault.cachedRead(file); } async readBinary(file: TFile): Promise { return await this.app.vault.readBinary(file); } async modify(file: TFile, data: string, options?: UXDataWriteOptions): Promise { return await this.app.vault.modify(file, data, options); } async modifyBinary(file: TFile, data: ArrayBuffer, options?: UXDataWriteOptions): Promise { return await this.app.vault.modifyBinary(file, toArrayBuffer(data), options); } async create(path: string, data: string, options?: UXDataWriteOptions): Promise { return await this.app.vault.create(path, data, options); } async createBinary(path: string, data: ArrayBuffer, options?: UXDataWriteOptions): Promise { return await this.app.vault.createBinary(path, toArrayBuffer(data), options); } async delete(file: TFile | TFolder, force = false): Promise { if ("trashFile" in this.app.fileManager) { // eslint-disable-next-line obsidianmd/no-unsupported-api return await this.app.fileManager.trashFile(file); } // eslint-disable-next-line obsidianmd/prefer-file-manager-trash-file -- Fallback for older versions of Obsidian without trashFile support return await this.app.vault.delete(file, force); } async trash(file: TFile | TFolder, force = false): Promise { if ("trashFile" in this.app.fileManager) { // eslint-disable-next-line obsidianmd/no-unsupported-api return await this.app.fileManager.trashFile(file); } // eslint-disable-next-line obsidianmd/prefer-file-manager-trash-file -- Fallback for older versions of Obsidian without trashFile support return await this.app.vault.trash(file, force); } trigger(name: string, ...data: unknown[]): void { return this.app.vault.trigger(name, ...data); } }