mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-08-24 04:13:59 +02:00
The browser host now stores data through yaak-models compiled to wasm — the same queries, migrations, cascade rules, duplicate naming and first-run bootstrap the desktop and CLI use — instead of a TypeScript port of them. - crates/yaak-web: the wasm crate. boot() registers an IndexedDB-backed VFS and calls init_standalone; rpc(cmd, payload, label) answers the models_* commands via ClientDb and returns the model_writes it caused; blob get/put through blob_manager. Built like yaak-templates (pkg/ committed); the build script keeps pkg/ and says so when no wasm-capable clang is present, so a desktop bootstrap never depends on one. - models_ops moves from crates/yaak into yaak-models so the wasm crate can use it without the send engine. - The database lives in a SharedWorker (packages/platform/src/web/worker.ts): one process holds the data and pushes writes to every tab, as on the desktop. Where SharedWorker is missing or its script cannot be fetched, a dedicated worker guarded by a Web Lock takes over and a second tab is told so. The worker imports the wasm lazily so a tab's connect is answered instantly; the tab reconnects if it isn't. - packages/platform/src/web loses models.ts, schema.ts, db.ts and the BroadcastChannel; commands.ts forwards model commands to the worker and keeps the fixed answers and refusals. Verified in Chrome, dev and production builds: bootstrap, CRUD across every model type, serde defaults, engine-format ids, Rust copy naming, folder cascade with per-descendant events, single-event workspace delete, reload persistence, two tabs coherent, Send declined with a toast, 8/8 reloads rendering in ~100 ms.
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
/* tslint:disable */
|
|
/* eslint-disable */
|
|
|
|
export function blob_delete(id: string): void;
|
|
|
|
/**
|
|
* The bytes stored under an id, or none. Ids are the desktop's: a response's
|
|
* own id for its body, `{responseId}.request` for the request that produced
|
|
* it. Bytes cross to JS as a `Uint8Array` rather than through JSON.
|
|
*/
|
|
export function blob_get(id: string): Uint8Array | undefined;
|
|
|
|
/**
|
|
* Store bytes under an id, replacing anything already there. Chunked the way
|
|
* the desktop chunks, so a body written here reads back on a desktop that
|
|
* imports the database, and vice versa.
|
|
*/
|
|
export function blob_put(id: string, bytes: Uint8Array): void;
|
|
|
|
/**
|
|
* Register the IndexedDB-backed VFS and open the database.
|
|
*
|
|
* Migrations run inside `init_standalone`, exactly as they do for the CLI.
|
|
* Safe to call more than once; later calls are no-ops.
|
|
*/
|
|
export function boot(): Promise<void>;
|
|
|
|
/**
|
|
* Run one command as `label` (the calling tab's identity, which stands in for
|
|
* the desktop's window label on every write it makes).
|
|
*
|
|
* The payload shapes match the `Cmd*Req` types in `yaak-rpc-schema` — that
|
|
* crate itself pulls the git, gRPC and plugin crates for their response types
|
|
* and cannot come to wasm, so the handful needed here are declared locally.
|
|
*/
|
|
export function rpc(cmd: string, payload: any, label: string): any;
|