mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-29 05:54:21 +01:00
src moved under web/ to make it cleaner build does less moving of files, mostly just moves the wasm-pack into dist for node and web
68 lines
1.7 KiB
JavaScript
68 lines
1.7 KiB
JavaScript
export class VFSInterface {
|
|
constructor(workerUrl) {
|
|
this.worker = new Worker(workerUrl, { type: "module" });
|
|
this.nextMessageId = 1;
|
|
this.pendingRequests = new Map();
|
|
|
|
this.worker.onmessage = (event) => {
|
|
console.log("interface onmessage: ", event.data);
|
|
let { id, result, error } = event.data;
|
|
const resolver = this.pendingRequests.get(id);
|
|
if (event.data?.buffer && event.data?.size) {
|
|
result = { size: event.data.size, buffer: event.data.buffer };
|
|
}
|
|
|
|
if (resolver) {
|
|
this.pendingRequests.delete(id);
|
|
if (error) {
|
|
resolver.reject(new Error(error));
|
|
} else {
|
|
resolver.resolve(result);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
_sendMessage(method, args) {
|
|
const id = this.nextMessageId++;
|
|
return new Promise((resolve, reject) => {
|
|
this.pendingRequests.set(id, { resolve, reject });
|
|
this.worker.postMessage({ id, method, args });
|
|
});
|
|
}
|
|
|
|
async open(path, flags) {
|
|
return await this._sendMessage("open", { path, flags });
|
|
}
|
|
|
|
async close(fd) {
|
|
return await this._sendMessage("close", { fd });
|
|
}
|
|
|
|
async pwrite(fd, buffer, offset) {
|
|
return await this._sendMessage("pwrite", { fd, buffer, offset }, [
|
|
buffer.buffer,
|
|
]);
|
|
}
|
|
|
|
async pread(fd, buffer, offset) {
|
|
console.log("interface in buffer: ", [...buffer]);
|
|
const result = await this._sendMessage("pread", {
|
|
fd,
|
|
buffer: buffer,
|
|
offset,
|
|
}, []);
|
|
console.log("interface out buffer: ", [...buffer]);
|
|
buffer.set(new Uint8Array(result.buffer));
|
|
return buffer.length;
|
|
}
|
|
|
|
async size(fd) {
|
|
return await this._sendMessage("size", { fd });
|
|
}
|
|
|
|
async sync(fd) {
|
|
return await this._sendMessage("sync", { fd });
|
|
}
|
|
}
|