@e280/quay
Version:
File-browser and outliner UI for the web
44 lines • 1.39 kB
JavaScript
export class OpfsForklift {
directory;
static async setup(dirname) {
const root = await navigator.storage.getDirectory();
const directory = await root.getDirectoryHandle(dirname, { create: true });
return new this(directory);
}
constructor(directory) {
this.directory = directory;
}
async *list() {
for await (const [name, handle] of this.directory.entries()) {
if (handle.kind === "file")
yield name;
}
}
async has(label) {
try {
await this.directory.getFileHandle(label);
return true;
}
catch (err) {
if (err.name === "NotFoundError")
return false;
throw err;
}
}
async save(label, bytes) {
const fileHandle = await this.directory.getFileHandle(label, { create: true });
const writable = await fileHandle.createWritable();
await writable.write(bytes);
await writable.close();
}
async load(label) {
const fileHandle = await this.directory.getFileHandle(label);
const file = await fileHandle.getFile();
const buffer = await file.arrayBuffer();
return new Uint8Array(buffer);
}
async delete(label) {
await this.directory.removeEntry(label);
}
}
//# sourceMappingURL=opfs-forklift.js.map