@ricsam/quickjs-fs
v0.2.17
Published
File system API implementation for QuickJS runtime
Maintainers
Readme
@ricsam/quickjs-fs
File System Access API (OPFS-compatible).
import { setupFs, createNodeDirectoryHandle } from "@ricsam/quickjs-fs";
const handle = setupFs(context, {
getDirectory: async (path) => {
// Validate path access
if (!path.startsWith("/allowed")) {
throw new Error("Access denied");
}
return createNodeDirectoryHandle(`./sandbox${path}`);
},
});Injected Globals:
fs.getDirectory(path)- Entry point for file system accessFileSystemDirectoryHandle,FileSystemFileHandleFileSystemWritableFileStream
Usage in QuickJS:
// Get directory handle
const root = await fs.getDirectory("/data");
// Read a file
const fileHandle = await root.getFileHandle("config.json");
const file = await fileHandle.getFile();
const text = await file.text();
const config = JSON.parse(text);
// Write a file
const outputHandle = await root.getFileHandle("output.txt", { create: true });
const writable = await outputHandle.createWritable();
await writable.write("Hello, World!");
await writable.close();
// Directory operations
const subDir = await root.getDirectoryHandle("subdir", { create: true });
await root.removeEntry("old-file.txt");
await root.removeEntry("old-dir", { recursive: true });
// Iterate directory
for await (const [name, handle] of root.entries()) {
console.log(name, handle.kind); // "file" or "directory"
}Host Adapters
Node.js/Bun adapter:
import { createNodeDirectoryHandle } from "@ricsam/quickjs-fs";
const dirHandle = createNodeDirectoryHandle("/path/to/directory");In-memory adapter (for testing):
import { createMemoryDirectoryHandle } from "@ricsam/quickjs-fs";
const memFs = createMemoryDirectoryHandle({
"config.json": JSON.stringify({ debug: true }),
"data/users.json": JSON.stringify([]),
});