Commit Graph

4 Commits

Author SHA1 Message Date
github-actions[bot]
35d208a978 [AI] api: split browser build into main-thread facade + worker
absurd-sql uses Atomics.wait for sync sqlite access, which only works
inside a Web Worker. Rather than forcing every consumer to wire up
their own worker + RPC glue, ship two artifacts:

  - dist/browser.js: tiny main-thread facade (~10 KB). Reuses
    packages/api/methods.ts verbatim by aliasing
    @actual-app/core/server/main to browser/lib-stub.ts at build time;
    every lib.send call posts to the worker.
  - dist/worker.js: the full loot-core + sql.js + absurd-sql stack
    (~3.6 MB) running in a Web Worker.

Consumer wiring:

    const worker = new Worker(
      new URL('@actual-app/api/dist/worker.js', import.meta.url),
      { type: 'module' },
    );
    await api.init({ worker, dataDir: '/documents', serverURL, password });
    await api.getAccounts();

Same named imports as Node/Electron — the worker is the only
browser-specific wiring. Keeping the URL construction in consumer
code lets their bundler (Vite, Webpack, ...) handle worker.js as an
asset without forcing us onto a single bundler convention.

Tests split accordingly: Node runs the full CRUD roundtrip against
real loot-core; jsdom runs a facade test that verifies init
validation, postMessage payload shapes, and error propagation via
a mock Worker.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:53:50 +01:00
github-actions[bot]
e161eefc02 [AI] api: run integration smoke test under browser jsdom
Adds setup.browser.ts with fake-indexeddb, a fetch polyfill that points
sql.js WASM and loot-core's data-file-index fetches at on-disk files,
and wires the browser Vite config to use jsdom. The shared integration
spec now gates the full CRUD roundtrip behind __API_FULL_SUITE__ (set
only in Node) because absurd-sql's worker + SharedArrayBuffer
requirement is not met under jsdom; the browser smoke test verifies
that init returns a usable handle. Full-flow browser coverage moves
to the playground app in the next phase.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:02:41 +01:00
github-actions[bot]
579e50f727 [AI] api: add shared integration test for Node environment
Adds a small end-to-end integration test that bootstraps a budget via
the internal create-budget handler, writes an account and a couple of
transactions through the public API, then reads them back. The spec is
environment-agnostic and will be rerun under jsdom + fake-indexeddb in
a follow-up task.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 21:55:30 +01:00
github-actions[bot]
1165b5ad1e [AI] api: move tests into test/ and extract node setup
Moves methods.test.ts and its snapshots into test/, and extracts the
loot-core fs mock and IS_TESTING flag into a dedicated setup.node.ts
wired up via vite.config.mts. Prepares for a sibling setup.browser.ts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 21:54:23 +01:00