From 3b16f912c2748f25f9bb2d039259dddb3ea89227 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 25 Mar 2026 09:28:38 -0600 Subject: [PATCH 1/7] refactor: rename persistence packages to follow {variant}-db-{subsystem} convention MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aligns SQLite persistence package names with the existing naming scheme used by other packages (e.g. electric-db-collection, react-db). Renames: - db-sqlite-persisted-collection-core → db-persistence-core - db-tauri-sqlite-persisted-collection → tauri-db-persistence - db-expo-sqlite-persisted-collection → expo-db-persistence - db-node-sqlite-persisted-collection → node-db-persistence - db-electron-sqlite-persisted-collection → electron-db-persistence - db-cloudflare-do-sqlite-persisted-collection → cloudflare-durable-objects-db-persistence - db-capacitor-sqlite-persisted-collection → capacitor-db-persistence - db-browser-wa-sqlite-persisted-collection → browser-db-persistence - db-react-native-sqlite-persisted-collection → react-native-db-persistence Co-Authored-By: Claude Opus 4.6 --- .changeset/persisted-metadata-followups.md | 2 +- .changeset/sqlite-persistence.md | 36 +- .github/workflows/e2e-tests.yml | 10 +- PERSISTNCE-PLAN-SQLITE-ONLY.md | 14 +- eslint.config.js | 6 +- .../electron/offline-first/electron/main.ts | 4 +- examples/electron/offline-first/package.json | 4 +- .../electron/offline-first/src/db/todos.ts | 2 +- .../offline-transactions/package.json | 2 +- .../offline-transactions/src/db/todos.ts | 2 +- .../react/offline-transactions/package.json | 2 +- .../src/db/persisted-todos.ts | 2 +- .../react/offline-transactions/vite.config.ts | 16 +- .../README.md | 4 +- ...ingle-tab-persisted-collection.e2e.test.ts | 4 +- .../package.json | 8 +- .../src/browser-coordinator.ts | 2 +- .../src/browser-persistence.ts | 4 +- .../src/index.ts | 4 +- .../src/opfs-database.ts | 2 +- .../src/opfs-worker-protocol.ts | 0 .../src/opfs-worker.ts | 2 +- .../src/vite-env.d.ts | 0 .../src/wa-sqlite-driver.ts | 4 +- .../src/wa-sqlite-examples.d.ts | 0 .../tests/browser-coordinator.test.ts | 2 +- .../tests/browser-persistence.test.ts | 6 +- .../tests/browser-single-tab.test.ts | 2 +- .../tests/helpers/wa-sqlite-test-db.ts | 0 .../tests/opfs-database.test.ts | 2 +- .../tests/wa-sqlite-driver.test.ts | 4 +- .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 12 +- .../e2e/app/.gitignore | 0 .../e2e/app/capacitor.config.ts | 0 .../e2e/app/index.html | 0 .../e2e/app/package.json | 4 +- .../e2e/app/src/main.ts | 0 .../src/native-capacitor-sqlite-test-db.ts | 0 .../e2e/app/src/node-crypto.ts | 0 .../app/src/register-capacitor-e2e-suite.ts | 0 .../e2e/app/src/runtime-vitest.ts | 0 .../e2e/app/tsconfig.json | 0 .../e2e/app/vite.config.ts | 4 +- ...-persisted-collection-conformance-suite.ts | 2 +- ...capacitor-persisted-collection.e2e.test.ts | 0 .../e2e/run-android-e2e.ts | 0 .../e2e/run-ios-e2e.ts | 0 .../capacitor-persisted-collection-harness.ts | 4 +- ...-persisted-collection-conformance-suite.ts | 2 +- .../package.json | 8 +- .../src/capacitor-persistence.ts | 4 +- .../src/capacitor-sqlite-driver.ts | 4 +- .../src/capacitor.ts | 2 +- .../src/index.ts | 4 +- .../tests/capacitor-persistence.test.ts | 0 ...citor-runtime-persistence-contract.test.ts | 8 +- ...citor-sqlite-core-adapter-contract.test.ts | 6 +- .../capacitor-sqlite-driver-contract.test.ts | 4 +- .../tests/capacitor-sqlite-driver.test.ts | 2 +- .../tests/helpers/capacitor-sqlite-test-db.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 4 +- .../cloudflare-do-runtime-bridge.e2e.test.ts | 4 +- .../e2e/fixtures/worker.mjs | 0 .../e2e/fixtures/wrangler.toml | 0 .../package.json | 8 +- .../src/do-driver.ts | 4 +- .../src/do-persistence.ts | 4 +- .../src/index.ts | 4 +- .../tests/do-driver.test.ts | 6 +- .../tests/do-persistence.test.ts | 6 +- .../do-sqlite-core-adapter-contract.test.ts | 6 +- .../tests/helpers/better-sqlite-do-storage.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../tsconfig.docs.json | 15 - .../tsconfig.docs.json | 12 - .../README.md | 12 +- .../package.json | 4 +- .../src/errors.ts | 0 .../src/index.ts | 0 .../src/persisted.ts | 0 .../src/sqlite-core-adapter.ts | 0 ...rsisted-collection-conformance-contract.ts | 0 .../contracts/runtime-bridge-e2e-contract.ts | 0 .../contracts/runtime-persistence-contract.ts | 0 .../contracts/sqlite-core-adapter-contract.ts | 0 .../tests/contracts/sqlite-driver-contract.ts | 0 .../tests/persisted.test-d.ts | 0 .../tests/persisted.test.ts | 2 +- .../sqlite-core-adapter-cli-runtime.test.ts | 0 .../tests/sqlite-core-adapter.test.ts | 0 .../tsconfig.docs.json | 0 .../tsconfig.json | 0 .../vite.config.ts | 0 .../tsconfig.docs.json | 12 - .../tsconfig.docs.json | 12 - .../tests/electric.test.ts | 2 +- .../README.md | 12 +- .../package.json | 10 +- .../src/electron-coordinator.ts | 2 +- .../src/errors.ts | 0 .../src/index.ts | 4 +- .../src/main.ts | 4 +- .../src/protocol.ts | 2 +- .../src/renderer.ts | 4 +- .../tests/e2e/electron-process-client.ts | 0 .../tests/e2e/fixtures/electron-main.mjs | 2 +- .../tests/e2e/fixtures/renderer-page.html | 0 .../tests/e2e/fixtures/renderer-preload.cjs | 0 .../e2e/fixtures/runtime-bridge-types.ts | 4 +- .../tests/electron-ipc.test-d.ts | 0 .../tests/electron-ipc.test.ts | 8 +- .../electron-persisted-collection.e2e.test.ts | 12 +- .../tests/electron-runtime-bridge.e2e.test.ts | 4 +- ...ctron-sqlite-core-adapter-contract.test.ts | 8 +- .../tsconfig.docs.json | 15 + .../tsconfig.json | 8 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 8 +- .../README.md | 14 +- .../e2e/expo-emulator-smoke.e2e.test.ts | 0 .../e2e/expo-persisted-collection.e2e.test.ts | 0 .../e2e/expo-runtime-app/App.tsx | 2 +- .../e2e/expo-runtime-app/app.json | 0 .../e2e/expo-runtime-app/index.js | 0 .../e2e/expo-runtime-app/metro.config.js | 0 .../e2e/expo-runtime-app/package.json | 4 +- .../e2e/expo-runtime-app/polyfills.js | 0 .../e2e/expo-runtime-app/tsconfig.json | 0 ...-persisted-collection-conformance-suite.ts | 6 +- .../e2e/runtime-protocol.ts | 0 .../package.json | 12 +- .../src/expo-sqlite-driver.ts | 4 +- .../src/expo.ts | 4 +- .../src/index.ts | 4 +- .../tests/expo-persistence.test.ts | 0 .../expo-runtime-persistence-contract.test.ts | 8 +- .../expo-sqlite-core-adapter-contract.test.ts | 6 +- .../tests/expo-sqlite-driver-contract.test.ts | 4 +- .../tests/expo-sqlite-driver.test.ts | 2 +- .../helpers/expo-emulator-database-factory.ts | 0 .../tests/helpers/expo-emulator-runtime.ts | 0 .../tests/helpers/expo-sqlite-test-db.ts | 0 .../helpers/mobile-runtime-test-setup.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 4 +- .../e2e/node-persisted-collection.e2e.test.ts | 4 +- .../package.json | 8 +- .../src/index.ts | 4 +- .../src/node-driver.ts | 4 +- .../src/node-persistence.ts | 4 +- .../tests/node-driver.test.ts | 4 +- .../tests/node-persistence.test.ts | 6 +- .../node-sqlite-core-adapter-contract.test.ts | 6 +- .../node-db-persistence/tsconfig.docs.json | 12 + .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../query-db-collection/tests/query.test.ts | 4 +- .../README.md | 4 +- .../e2e/expo-persisted-collection.e2e.test.ts | 0 ...-persisted-collection-conformance-suite.ts | 6 +- ...ct-native-persisted-collection.e2e.test.ts | 0 .../package.json | 10 +- .../src/index.ts | 4 +- .../src/mobile-persistence.ts | 4 +- .../src/op-sqlite-driver.ts | 4 +- .../src/react-native.ts | 2 +- .../expo-sqlite-core-adapter-contract.test.ts | 6 +- .../helpers/mobile-runtime-test-setup.ts | 0 .../tests/helpers/op-sqlite-test-db.ts | 0 ...obile-runtime-persistence-contract.test.ts | 8 +- .../tests/op-sqlite-driver.test.ts | 2 +- .../tests/react-native-persistence.test.ts | 0 ...ative-sqlite-core-adapter-contract.test.ts | 6 +- .../tsconfig.docs.json | 12 + .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 10 +- .../e2e/app/index.html | 0 .../e2e/app/package.json | 4 +- .../e2e/app/src-tauri/.gitignore | 0 .../e2e/app/src-tauri/Cargo.toml | 0 .../e2e/app/src-tauri/build.rs | 0 .../app/src-tauri/capabilities/default.json | 0 .../e2e/app/src-tauri/icons/icon.png | Bin .../e2e/app/src-tauri/src/main.rs | 0 .../e2e/app/src-tauri/tauri.conf.json | 0 .../e2e/app/src/main.ts | 0 .../e2e/app/src/native-tauri-sql-test-db.ts | 0 .../e2e/app/src/node-crypto.ts | 0 .../e2e/app/src/register-tauri-e2e-suite.ts | 2 +- .../e2e/app/src/runtime-vitest.ts | 0 .../e2e/app/src/vite-env.d.ts | 0 .../e2e/app/tsconfig.json | 0 .../e2e/app/vite.config.ts | 4 +- .../e2e/run-tauri-e2e.ts | 0 ...-persisted-collection-conformance-suite.ts | 2 +- .../tauri-persisted-collection-harness.ts | 4 +- .../tauri-persisted-collection.e2e.test.ts | 0 .../package.json | 8 +- .../src/index.ts | 4 +- .../src/tauri-persistence.ts | 4 +- .../src/tauri-sql-driver.ts | 4 +- .../src/tauri.ts | 2 +- .../tests/helpers/tauri-sql-test-db.ts | 0 .../tests/tauri-persistence.test.ts | 0 ...tauri-runtime-persistence-contract.test.ts | 6 +- .../tests/tauri-sql-driver-contract.test.ts | 4 +- .../tests/tauri-sql-driver.test.ts | 2 +- ...tauri-sqlite-core-adapter-contract.test.ts | 6 +- .../tauri-db-persistence/tsconfig.docs.json | 12 + .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- persistance-plan/phase-4-node-electron.md | 4 +- persistance-plan/phase-5-react-native-expo.md | 2 +- .../phase-6-cloudflare-durable-objects.md | 2 +- persistance-plan/phase-8-browser-multi-tab.md | 2 +- pnpm-lock.yaml | 412 +++++++++--------- 234 files changed, 608 insertions(+), 608 deletions(-) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/README.md (92%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/e2e/browser-single-tab-persisted-collection.e2e.test.ts (97%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/package.json (76%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/browser-coordinator.ts (99%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/browser-persistence.ts (97%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/index.ts (80%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/opfs-database.ts (99%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/opfs-worker-protocol.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/opfs-worker.ts (99%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/vite-env.d.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/wa-sqlite-driver.ts (97%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/src/wa-sqlite-examples.d.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/browser-coordinator.test.ts (99%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/browser-persistence.test.ts (94%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/browser-single-tab.test.ts (98%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/helpers/wa-sqlite-test-db.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/opfs-database.test.ts (99%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tests/wa-sqlite-driver.test.ts (76%) rename packages/{db-capacitor-sqlite-persisted-collection => browser-db-persistence}/tsconfig.docs.json (57%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/tsconfig.json (83%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/vite.config.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => browser-db-persistence}/vitest.e2e.config.ts (82%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/README.md (89%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/.gitignore (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/capacitor.config.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/index.html (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/package.json (82%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/src/main.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/src/native-capacitor-sqlite-test-db.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/src/node-crypto.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/src/register-capacitor-e2e-suite.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/src/runtime-vitest.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/tsconfig.json (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/app/vite.config.ts (82%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/capacitor-persisted-collection-conformance-suite.ts (97%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/capacitor-persisted-collection.e2e.test.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/run-android-e2e.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/run-ios-e2e.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/shared/capacitor-persisted-collection-harness.ts (98%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/e2e/shared/register-persisted-collection-conformance-suite.ts (92%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/package.json (80%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/src/capacitor-persistence.ts (97%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/src/capacitor-sqlite-driver.ts (98%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/src/capacitor.ts (96%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/src/index.ts (67%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/capacitor-persistence.test.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/capacitor-runtime-persistence-contract.test.ts (94%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/capacitor-sqlite-core-adapter-contract.test.ts (77%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/capacitor-sqlite-driver-contract.test.ts (76%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/capacitor-sqlite-driver.test.ts (99%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tests/helpers/capacitor-sqlite-test-db.ts (100%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => capacitor-db-persistence}/tsconfig.docs.json (57%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/tsconfig.json (83%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/vite.config.ts (100%) rename packages/{db-capacitor-sqlite-persisted-collection => capacitor-db-persistence}/vitest.e2e.config.ts (84%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/README.md (90%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/e2e/cloudflare-do-runtime-bridge.e2e.test.ts (97%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/e2e/fixtures/worker.mjs (100%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/e2e/fixtures/wrangler.toml (100%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/package.json (75%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/src/do-driver.ts (98%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/src/do-persistence.ts (97%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/src/index.ts (67%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tests/do-driver.test.ts (90%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tests/do-persistence.test.ts (94%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tests/do-sqlite-core-adapter-contract.test.ts (78%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tests/helpers/better-sqlite-do-storage.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tsconfig.docs.json (57%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/tsconfig.json (84%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/vite.config.ts (100%) rename packages/{db-cloudflare-do-sqlite-persisted-collection => cloudflare-durable-objects-db-persistence}/vitest.e2e.config.ts (85%) delete mode 100644 packages/db-electron-sqlite-persisted-collection/tsconfig.docs.json delete mode 100644 packages/db-node-sqlite-persisted-collection/tsconfig.docs.json rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/README.md (89%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/package.json (90%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/src/errors.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/src/index.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/src/persisted.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/src/sqlite-core-adapter.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/contracts/persisted-collection-conformance-contract.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/contracts/runtime-bridge-e2e-contract.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/contracts/runtime-persistence-contract.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/contracts/sqlite-core-adapter-contract.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/contracts/sqlite-driver-contract.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/persisted.test-d.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/persisted.test.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/sqlite-core-adapter-cli-runtime.test.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tests/sqlite-core-adapter.test.ts (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tsconfig.docs.json (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/tsconfig.json (100%) rename packages/{db-sqlite-persisted-collection-core => db-persistence-core}/vite.config.ts (100%) delete mode 100644 packages/db-react-native-sqlite-persisted-collection/tsconfig.docs.json delete mode 100644 packages/db-tauri-sqlite-persisted-collection/tsconfig.docs.json rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/README.md (76%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/package.json (68%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/electron-coordinator.ts (99%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/errors.ts (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/index.ts (78%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/main.ts (98%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/protocol.ts (98%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/src/renderer.ts (99%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/e2e/electron-process-client.ts (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/e2e/fixtures/electron-main.mjs (99%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/e2e/fixtures/renderer-page.html (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/e2e/fixtures/renderer-preload.cjs (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/e2e/fixtures/runtime-bridge-types.ts (91%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/electron-ipc.test-d.ts (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/electron-ipc.test.ts (97%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/electron-persisted-collection.e2e.test.ts (94%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/electron-runtime-bridge.e2e.test.ts (92%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tests/electron-sqlite-core-adapter-contract.test.ts (89%) create mode 100644 packages/electron-db-persistence/tsconfig.docs.json rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/tsconfig.json (74%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/vite.config.ts (100%) rename packages/{db-electron-sqlite-persisted-collection => electron-db-persistence}/vitest.e2e.config.ts (75%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/README.md (77%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-emulator-smoke.e2e.test.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-persisted-collection.e2e.test.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/App.tsx (99%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/app.json (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/index.js (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/metro.config.js (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/package.json (72%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/polyfills.js (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/expo-runtime-app/tsconfig.json (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/mobile-persisted-collection-conformance-suite.ts (97%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/e2e/runtime-protocol.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/package.json (63%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/src/expo-sqlite-driver.ts (98%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/src/expo.ts (97%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/src/index.ts (63%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/expo-persistence.test.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/expo-runtime-persistence-contract.test.ts (94%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/expo-sqlite-core-adapter-contract.test.ts (76%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/expo-sqlite-driver-contract.test.ts (76%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/expo-sqlite-driver.test.ts (99%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/helpers/expo-emulator-database-factory.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/helpers/expo-emulator-runtime.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/helpers/expo-sqlite-test-db.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tests/helpers/mobile-runtime-test-setup.ts (100%) rename packages/{db-browser-wa-sqlite-persisted-collection => expo-db-persistence}/tsconfig.docs.json (57%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/tsconfig.json (84%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/vite.config.ts (100%) rename packages/{db-expo-sqlite-persisted-collection => expo-db-persistence}/vitest.e2e.config.ts (86%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/README.md (91%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/e2e/node-persisted-collection.e2e.test.ts (97%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/package.json (76%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/src/index.ts (65%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/src/node-driver.ts (98%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/src/node-persistence.ts (97%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/tests/node-driver.test.ts (72%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/tests/node-persistence.test.ts (95%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/tests/node-sqlite-core-adapter-contract.test.ts (74%) create mode 100644 packages/node-db-persistence/tsconfig.docs.json rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/tsconfig.json (83%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/vite.config.ts (100%) rename packages/{db-node-sqlite-persisted-collection => node-db-persistence}/vitest.e2e.config.ts (82%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/README.md (90%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/e2e/expo-persisted-collection.e2e.test.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/e2e/mobile-persisted-collection-conformance-suite.ts (97%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/e2e/react-native-persisted-collection.e2e.test.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/package.json (73%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/src/index.ts (66%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/src/mobile-persistence.ts (97%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/src/op-sqlite-driver.ts (99%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/src/react-native.ts (95%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/expo-sqlite-core-adapter-contract.test.ts (77%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/helpers/mobile-runtime-test-setup.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/helpers/op-sqlite-test-db.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/mobile-runtime-persistence-contract.test.ts (94%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/op-sqlite-driver.test.ts (99%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/react-native-persistence.test.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tests/react-native-sqlite-core-adapter-contract.test.ts (77%) create mode 100644 packages/react-native-db-persistence/tsconfig.docs.json rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/tsconfig.json (83%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/vite.config.ts (100%) rename packages/{db-react-native-sqlite-persisted-collection => react-native-db-persistence}/vitest.e2e.config.ts (86%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/README.md (87%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/index.html (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/package.json (75%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/.gitignore (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/Cargo.toml (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/build.rs (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/capabilities/default.json (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/icons/icon.png (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/src/main.rs (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src-tauri/tauri.conf.json (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/main.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/native-tauri-sql-test-db.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/node-crypto.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/register-tauri-e2e-suite.ts (96%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/runtime-vitest.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/src/vite-env.d.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/tsconfig.json (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/app/vite.config.ts (84%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/run-tauri-e2e.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/shared/register-persisted-collection-conformance-suite.ts (92%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/shared/tauri-persisted-collection-harness.ts (98%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/e2e/tauri-persisted-collection.e2e.test.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/package.json (79%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/src/index.ts (64%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/src/tauri-persistence.ts (97%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/src/tauri-sql-driver.ts (98%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/src/tauri.ts (95%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/helpers/tauri-sql-test-db.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/tauri-persistence.test.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/tauri-runtime-persistence-contract.test.ts (95%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/tauri-sql-driver-contract.test.ts (76%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/tauri-sql-driver.test.ts (99%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tests/tauri-sqlite-core-adapter-contract.test.ts (77%) create mode 100644 packages/tauri-db-persistence/tsconfig.docs.json rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/tsconfig.json (85%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/vite.config.ts (100%) rename packages/{db-tauri-sqlite-persisted-collection => tauri-db-persistence}/vitest.e2e.config.ts (85%) diff --git a/.changeset/persisted-metadata-followups.md b/.changeset/persisted-metadata-followups.md index 79c48e684..82794009d 100644 --- a/.changeset/persisted-metadata-followups.md +++ b/.changeset/persisted-metadata-followups.md @@ -1,6 +1,6 @@ --- '@tanstack/db': patch -'@tanstack/db-sqlite-persisted-collection-core': patch +'@tanstack/db-persistence-core': patch '@tanstack/electric-db-collection': patch --- diff --git a/.changeset/sqlite-persistence.md b/.changeset/sqlite-persistence.md index ec4085598..a23ab7a87 100644 --- a/.changeset/sqlite-persistence.md +++ b/.changeset/sqlite-persistence.md @@ -1,57 +1,57 @@ --- '@tanstack/db': patch -'@tanstack/db-sqlite-persisted-collection-core': patch -'@tanstack/db-browser-wa-sqlite-persisted-collection': patch -'@tanstack/db-cloudflare-do-sqlite-persisted-collection': patch -'@tanstack/db-node-sqlite-persisted-collection': patch -'@tanstack/db-electron-sqlite-persisted-collection': patch -'@tanstack/db-expo-sqlite-persisted-collection': patch -'@tanstack/db-react-native-sqlite-persisted-collection': patch -'@tanstack/db-capacitor-sqlite-persisted-collection': patch -'@tanstack/db-tauri-sqlite-persisted-collection': patch +'@tanstack/db-persistence-core': patch +'@tanstack/browser-db-persistence': patch +'@tanstack/cloudflare-durable-objects-db-persistence': patch +'@tanstack/node-db-persistence': patch +'@tanstack/electron-db-persistence': patch +'@tanstack/expo-db-persistence': patch +'@tanstack/react-native-db-persistence': patch +'@tanstack/capacitor-db-persistence': patch +'@tanstack/tauri-db-persistence': patch --- feat(persistence): add SQLite-based offline persistence for collections Adds a new persistence layer that durably stores collection data in SQLite, enabling applications to survive page reloads and app restarts across browser, Node, mobile, desktop, and edge runtimes. -**Core persistence (`@tanstack/db-sqlite-persisted-collection-core`)** +**Core persistence (`@tanstack/db-persistence-core`)** - New package providing the shared SQLite persistence runtime: hydration, streaming, transaction tracking, and applied-tx pruning - SQLite core adapter with full query compilation, index management, and schema migration support - Portable conformance test contracts for runtime-specific adapters -**Browser (`@tanstack/db-browser-wa-sqlite-persisted-collection`)** +**Browser (`@tanstack/browser-db-persistence`)** - New package for browser persistence via wa-sqlite backed by OPFS - Single-tab persistence with OPFS-based SQLite storage - `BrowserCollectionCoordinator` for multi-tab leader-election and cross-tab sync -**Cloudflare Durable Objects (`@tanstack/db-cloudflare-do-sqlite-persisted-collection`)** +**Cloudflare Durable Objects (`@tanstack/cloudflare-durable-objects-db-persistence`)** - New package for SQLite persistence in Cloudflare Durable Objects runtimes -**Node (`@tanstack/db-node-sqlite-persisted-collection`)** +**Node (`@tanstack/node-db-persistence`)** - New package for Node persistence via SQLite -**Electron (`@tanstack/db-electron-sqlite-persisted-collection`)** +**Electron (`@tanstack/electron-db-persistence`)** - New package providing Electron main and renderer persistence bridge helpers -**Expo (`@tanstack/db-expo-sqlite-persisted-collection`)** +**Expo (`@tanstack/expo-db-persistence`)** - New package for Expo persistence via `expo-sqlite` -**React Native (`@tanstack/db-react-native-sqlite-persisted-collection`)** +**React Native (`@tanstack/react-native-db-persistence`)** - New package for React Native persistence via op-sqlite - Adapter with transaction deadlock prevention and runtime parity coverage -**Capacitor (`@tanstack/db-capacitor-sqlite-persisted-collection`)** +**Capacitor (`@tanstack/capacitor-db-persistence`)** - New package for Capacitor persistence via `@capacitor-community/sqlite` -**Tauri (`@tanstack/db-tauri-sqlite-persisted-collection`)** +**Tauri (`@tanstack/tauri-db-persistence`)** - New package for Tauri persistence via `@tauri-apps/plugin-sql` diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 1716e94b2..830410e37 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -65,22 +65,22 @@ jobs: - name: Run Node SQLite persisted collection E2E tests run: | - cd packages/db-node-sqlite-persisted-collection + cd packages/node-db-persistence pnpm test:e2e - name: Run Electron SQLite persisted collection E2E tests run: | - cd packages/db-electron-sqlite-persisted-collection + cd packages/electron-db-persistence pnpm test:e2e - name: Run Cloudflare Durable Object persisted collection E2E tests run: | - cd packages/db-cloudflare-do-sqlite-persisted-collection + cd packages/cloudflare-durable-objects-db-persistence pnpm test:e2e - name: Run React Native/Expo persisted collection E2E tests run: | - cd packages/db-react-native-sqlite-persisted-collection + cd packages/react-native-db-persistence pnpm test:e2e - name: Run React Native/Expo runtime E2E lane @@ -108,7 +108,7 @@ jobs: exit 0 fi - cd packages/db-react-native-sqlite-persisted-collection + cd packages/react-native-db-persistence pnpm test:e2e:runtime env: TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE: ${{ vars.TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE }} diff --git a/PERSISTNCE-PLAN-SQLITE-ONLY.md b/PERSISTNCE-PLAN-SQLITE-ONLY.md index e2c264d74..1078fad83 100644 --- a/PERSISTNCE-PLAN-SQLITE-ONLY.md +++ b/PERSISTNCE-PLAN-SQLITE-ONLY.md @@ -1005,12 +1005,12 @@ Driver adaptation note: ## Package Plan -1. `@tanstack/db-sqlite-persisted-collection-core` -2. `@tanstack/db-browser-wa-sqlite-persisted-collection` -3. `@tanstack/db-node-sqlite-persisted-collection` -4. `@tanstack/db-react-native-sqlite-persisted-collection` (RN + Expo) -5. `@tanstack/db-electron-sqlite-persisted-collection` -6. `@tanstack/db-cloudflare-do-sqlite-persisted-collection` +1. `@tanstack/db-persistence-core` +2. `@tanstack/browser-db-persistence` +3. `@tanstack/node-db-persistence` +4. `@tanstack/react-native-db-persistence` (RN + Expo) +5. `@tanstack/electron-db-persistence` +6. `@tanstack/cloudflare-durable-objects-db-persistence` SQLite core package contents (combined): @@ -1403,7 +1403,7 @@ These are mandatory rules for agents implementing this plan. Blocking-before-implementation: -- none (runtime driver choices and package shape are fixed in this plan: Node/Electron `better-sqlite3`, `@tanstack/db-react-native-sqlite-persisted-collection` for RN/Expo via `op-sqlite`) +- none (runtime driver choices and package shape are fixed in this plan: Node/Electron `better-sqlite3`, `@tanstack/react-native-db-persistence` for RN/Expo via `op-sqlite`) Blocking-before-browser phases: diff --git a/eslint.config.js b/eslint.config.js index 934ff92d0..417a3254a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,10 +10,10 @@ export default [ `**/traildepot/**`, `examples/angular/**`, `packages/db-collection-e2e/vite.config.ts`, - `packages/db-capacitor-sqlite-persisted-collection/e2e/app/android/**`, - `packages/db-capacitor-sqlite-persisted-collection/e2e/app/ios/**`, + `packages/capacitor-db-persistence/e2e/app/android/**`, + `packages/capacitor-db-persistence/e2e/app/ios/**`, // Expo expects Metro config in CommonJS format. - `packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/metro.config.js`, + `packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js`, ], }, { diff --git a/examples/electron/offline-first/electron/main.ts b/examples/electron/offline-first/electron/main.ts index b4cc574ca..ee48a84cd 100644 --- a/examples/electron/offline-first/electron/main.ts +++ b/examples/electron/offline-first/electron/main.ts @@ -2,8 +2,8 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import { BrowserWindow, Menu, app, ipcMain } from 'electron' import Database from 'better-sqlite3' -import { createNodeSQLitePersistence } from '@tanstack/db-node-sqlite-persisted-collection' -import { exposeElectronSQLitePersistence } from '@tanstack/db-electron-sqlite-persisted-collection' +import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' +import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-persistence' const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/examples/electron/offline-first/package.json b/examples/electron/offline-first/package.json index 8fdc35c2c..3bce05bff 100644 --- a/examples/electron/offline-first/package.json +++ b/examples/electron/offline-first/package.json @@ -13,8 +13,8 @@ "postinstall": "prebuild-install --runtime electron --target 40.2.1 --arch arm64 || echo 'prebuild-install failed, try: npx @electron/rebuild'" }, "dependencies": { - "@tanstack/db-electron-sqlite-persisted-collection": "workspace:*", - "@tanstack/db-node-sqlite-persisted-collection": "workspace:*", + "@tanstack/electron-db-persistence": "workspace:*", + "@tanstack/node-db-persistence": "workspace:*", "@tanstack/offline-transactions": "workspace:*", "@tanstack/query-db-collection": "workspace:*", "@tanstack/react-db": "workspace:*", diff --git a/examples/electron/offline-first/src/db/todos.ts b/examples/electron/offline-first/src/db/todos.ts index e8cdc6513..56c293066 100644 --- a/examples/electron/offline-first/src/db/todos.ts +++ b/examples/electron/offline-first/src/db/todos.ts @@ -5,7 +5,7 @@ import { ElectronCollectionCoordinator, createElectronSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-electron-sqlite-persisted-collection' +} from '@tanstack/electron-db-persistence' import { z } from 'zod' import { queryClient } from '../utils/queryClient' import type { StorageAdapter } from '@tanstack/offline-transactions' diff --git a/examples/react-native/offline-transactions/package.json b/examples/react-native/offline-transactions/package.json index a378784cd..7096936ba 100644 --- a/examples/react-native/offline-transactions/package.json +++ b/examples/react-native/offline-transactions/package.json @@ -16,7 +16,7 @@ "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", "@tanstack/db": "workspace:*", - "@tanstack/db-react-native-sqlite-persisted-collection": "workspace:*", + "@tanstack/react-native-db-persistence": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", diff --git a/examples/react-native/offline-transactions/src/db/todos.ts b/examples/react-native/offline-transactions/src/db/todos.ts index ff98c13f7..d8ff95244 100644 --- a/examples/react-native/offline-transactions/src/db/todos.ts +++ b/examples/react-native/offline-transactions/src/db/todos.ts @@ -3,7 +3,7 @@ import { createCollection } from '@tanstack/react-db' import { createReactNativeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-react-native-sqlite-persisted-collection' +} from '@tanstack/react-native-db-persistence' import { queryCollectionOptions } from '@tanstack/query-db-collection' import { startOfflineExecutor } from '@tanstack/offline-transactions/react-native' import { queryClient } from '../utils/queryClient' diff --git a/examples/react/offline-transactions/package.json b/examples/react/offline-transactions/package.json index 4af7dbde9..c95a3669b 100644 --- a/examples/react/offline-transactions/package.json +++ b/examples/react/offline-transactions/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@tanstack/db": "workspace:*", - "@tanstack/db-browser-wa-sqlite-persisted-collection": "workspace:*", + "@tanstack/browser-db-persistence": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", diff --git a/examples/react/offline-transactions/src/db/persisted-todos.ts b/examples/react/offline-transactions/src/db/persisted-todos.ts index eae071fe4..52f186887 100644 --- a/examples/react/offline-transactions/src/db/persisted-todos.ts +++ b/examples/react/offline-transactions/src/db/persisted-todos.ts @@ -4,7 +4,7 @@ import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, persistedCollectionOptions, -} from '@tanstack/db-browser-wa-sqlite-persisted-collection' +} from '@tanstack/browser-db-persistence' import type { Collection } from '@tanstack/db' export type PersistedTodo = { diff --git a/examples/react/offline-transactions/vite.config.ts b/examples/react/offline-transactions/vite.config.ts index ad1dcf0fe..7354015a3 100644 --- a/examples/react/offline-transactions/vite.config.ts +++ b/examples/react/offline-transactions/vite.config.ts @@ -16,11 +16,11 @@ function watchWorkspacePackages() { path.resolve(__dirname, `../../../packages/offline-transactions/dist`), path.resolve( __dirname, - `../../../packages/db-browser-wa-sqlite-persisted-collection/src`, + `../../../packages/browser-db-persistence/src`, ), path.resolve( __dirname, - `../../../packages/db-sqlite-persisted-collection-core/dist`, + `../../../packages/db-persistence-core/dist`, ), ] @@ -77,14 +77,14 @@ export default defineConfig({ resolve: { alias: { // Resolve to source so Vite can process the ?worker import natively - '@tanstack/db-browser-wa-sqlite-persisted-collection': path.resolve( + '@tanstack/browser-db-persistence': path.resolve( __dirname, - `../../../packages/db-browser-wa-sqlite-persisted-collection/src/index.ts`, + `../../../packages/browser-db-persistence/src/index.ts`, ), // Required because the browser package's source re-exports from core - '@tanstack/db-sqlite-persisted-collection-core': path.resolve( + '@tanstack/db-persistence-core': path.resolve( __dirname, - `../../../packages/db-sqlite-persisted-collection-core/src/index.ts`, + `../../../packages/db-persistence-core/src/index.ts`, ), }, }, @@ -92,8 +92,8 @@ export default defineConfig({ exclude: [ `@tanstack/db`, `@tanstack/offline-transactions`, - `@tanstack/db-browser-wa-sqlite-persisted-collection`, - `@tanstack/db-sqlite-persisted-collection-core`, + `@tanstack/browser-db-persistence`, + `@tanstack/db-persistence-core`, `@journeyapps/wa-sqlite`, ], }, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/README.md b/packages/browser-db-persistence/README.md similarity index 92% rename from packages/db-browser-wa-sqlite-persisted-collection/README.md rename to packages/browser-db-persistence/README.md index 5b6806525..d179ae5ab 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/README.md +++ b/packages/browser-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-browser-wa-sqlite-persisted-collection +# @tanstack/browser-db-persistence Thin browser SQLite persistence for TanStack DB using `wa-sqlite` + OPFS. @@ -16,7 +16,7 @@ import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, persistedCollectionOptions, -} from '@tanstack/db-browser-wa-sqlite-persisted-collection' +} from '@tanstack/browser-db-persistence' type Todo = { id: string diff --git a/packages/db-browser-wa-sqlite-persisted-collection/e2e/browser-single-tab-persisted-collection.e2e.test.ts b/packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts similarity index 97% rename from packages/db-browser-wa-sqlite-persisted-collection/e2e/browser-single-tab-persisted-collection.e2e.test.ts rename to packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts index d8f2effa3..7f651dd75 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/e2e/browser-single-tab-persisted-collection.e2e.test.ts +++ b/packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts @@ -2,13 +2,13 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import { createBrowserWASQLitePersistence, persistedCollectionOptions, } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createWASQLiteTestDatabase } from '../tests/helpers/wa-sqlite-test-db' import type { Collection } from '@tanstack/db' import type { BrowserWASQLiteDatabase } from '../src' diff --git a/packages/db-browser-wa-sqlite-persisted-collection/package.json b/packages/browser-db-persistence/package.json similarity index 76% rename from packages/db-browser-wa-sqlite-persisted-collection/package.json rename to packages/browser-db-persistence/package.json index f38019d56..d2d364127 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/package.json +++ b/packages/browser-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-browser-wa-sqlite-persisted-collection", + "name": "@tanstack/browser-db-persistence", "version": "0.1.0", "description": "Browser wa-sqlite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-browser-wa-sqlite-persisted-collection" + "directory": "packages/browser-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -23,7 +23,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-browser-wa-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/browser-db-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -48,7 +48,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "@journeyapps/wa-sqlite": "^1.4.1", diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/browser-coordinator.ts b/packages/browser-db-persistence/src/browser-coordinator.ts similarity index 99% rename from packages/db-browser-wa-sqlite-persisted-collection/src/browser-coordinator.ts rename to packages/browser-db-persistence/src/browser-coordinator.ts index 2fdef161a..ef7e24727 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/browser-coordinator.ts +++ b/packages/browser-db-persistence/src/browser-coordinator.ts @@ -6,7 +6,7 @@ import type { PersistenceAdapter, ProtocolEnvelope, PullSinceResponse, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { LoadSubsetOptions } from '@tanstack/db' // --------------------------------------------------------------------------- diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/browser-persistence.ts b/packages/browser-db-persistence/src/browser-persistence.ts similarity index 97% rename from packages/db-browser-wa-sqlite-persisted-collection/src/browser-persistence.ts rename to packages/browser-db-persistence/src/browser-persistence.ts index 616029d1a..17736ffe2 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/browser-persistence.ts +++ b/packages/browser-db-persistence/src/browser-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { BrowserCollectionCoordinator } from './browser-coordinator' import { BrowserWASQLiteDriver } from './wa-sqlite-driver' import type { @@ -10,7 +10,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' export type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/index.ts b/packages/browser-db-persistence/src/index.ts similarity index 80% rename from packages/db-browser-wa-sqlite-persisted-collection/src/index.ts rename to packages/browser-db-persistence/src/index.ts index 243503db6..7920d6f55 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/index.ts +++ b/packages/browser-db-persistence/src/index.ts @@ -8,8 +8,8 @@ export type { } from './browser-persistence' export type { OpenBrowserWASQLiteOPFSDatabaseOptions } from './opfs-database' export type { BrowserCollectionCoordinatorOptions } from './browser-coordinator' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/opfs-database.ts b/packages/browser-db-persistence/src/opfs-database.ts similarity index 99% rename from packages/db-browser-wa-sqlite-persisted-collection/src/opfs-database.ts rename to packages/browser-db-persistence/src/opfs-database.ts index 249da4004..2ad65da96 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/opfs-database.ts +++ b/packages/browser-db-persistence/src/opfs-database.ts @@ -1,7 +1,7 @@ import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import OPFSWorkerConstructor from './opfs-worker?worker' import type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' import type { diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/opfs-worker-protocol.ts b/packages/browser-db-persistence/src/opfs-worker-protocol.ts similarity index 100% rename from packages/db-browser-wa-sqlite-persisted-collection/src/opfs-worker-protocol.ts rename to packages/browser-db-persistence/src/opfs-worker-protocol.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/opfs-worker.ts b/packages/browser-db-persistence/src/opfs-worker.ts similarity index 99% rename from packages/db-browser-wa-sqlite-persisted-collection/src/opfs-worker.ts rename to packages/browser-db-persistence/src/opfs-worker.ts index 5928a9da4..2faf6385d 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/opfs-worker.ts +++ b/packages/browser-db-persistence/src/opfs-worker.ts @@ -4,7 +4,7 @@ import { OPFSCoopSyncVFS } from '@journeyapps/wa-sqlite/src/examples/OPFSCoopSyn import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { BrowserOPFSWorkerErrorCode, BrowserOPFSWorkerRequest, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/vite-env.d.ts b/packages/browser-db-persistence/src/vite-env.d.ts similarity index 100% rename from packages/db-browser-wa-sqlite-persisted-collection/src/vite-env.d.ts rename to packages/browser-db-persistence/src/vite-env.d.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/wa-sqlite-driver.ts b/packages/browser-db-persistence/src/wa-sqlite-driver.ts similarity index 97% rename from packages/db-browser-wa-sqlite-persisted-collection/src/wa-sqlite-driver.ts rename to packages/browser-db-persistence/src/wa-sqlite-driver.ts index 77c341a1e..0ae2d1ae2 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/src/wa-sqlite-driver.ts +++ b/packages/browser-db-persistence/src/wa-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' export type BrowserWASQLiteDatabase = { execute: ( diff --git a/packages/db-browser-wa-sqlite-persisted-collection/src/wa-sqlite-examples.d.ts b/packages/browser-db-persistence/src/wa-sqlite-examples.d.ts similarity index 100% rename from packages/db-browser-wa-sqlite-persisted-collection/src/wa-sqlite-examples.d.ts rename to packages/browser-db-persistence/src/wa-sqlite-examples.d.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-coordinator.test.ts b/packages/browser-db-persistence/tests/browser-coordinator.test.ts similarity index 99% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/browser-coordinator.test.ts rename to packages/browser-db-persistence/tests/browser-coordinator.test.ts index c740ccd62..6feacf7bf 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-coordinator.test.ts +++ b/packages/browser-db-persistence/tests/browser-coordinator.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { BrowserCollectionCoordinator } from '../src/browser-coordinator' import type { BrowserCollectionCoordinatorOptions } from '../src/browser-coordinator' -import type { PersistenceAdapter } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistenceAdapter } from '@tanstack/db-persistence-core' // --------------------------------------------------------------------------- // BroadcastChannel mock diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-persistence.test.ts b/packages/browser-db-persistence/tests/browser-persistence.test.ts similarity index 94% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/browser-persistence.test.ts rename to packages/browser-db-persistence/tests/browser-persistence.test.ts index f5521e9a0..0ca3abd98 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-persistence.test.ts +++ b/packages/browser-db-persistence/tests/browser-persistence.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { BrowserWASQLiteDriver } from '../src/wa-sqlite-driver' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' import { createWASQLiteTestDatabase } from './helpers/wa-sqlite-test-db' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-browser-persistence-`)) diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-single-tab.test.ts b/packages/browser-db-persistence/tests/browser-single-tab.test.ts similarity index 98% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/browser-single-tab.test.ts rename to packages/browser-db-persistence/tests/browser-single-tab.test.ts index 0aaf1f0b3..310dbf8bd 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tests/browser-single-tab.test.ts +++ b/packages/browser-db-persistence/tests/browser-single-tab.test.ts @@ -5,7 +5,7 @@ import { afterEach, expect, it } from 'vitest' import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/helpers/wa-sqlite-test-db.ts b/packages/browser-db-persistence/tests/helpers/wa-sqlite-test-db.ts similarity index 100% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/helpers/wa-sqlite-test-db.ts rename to packages/browser-db-persistence/tests/helpers/wa-sqlite-test-db.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/opfs-database.test.ts b/packages/browser-db-persistence/tests/opfs-database.test.ts similarity index 99% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/opfs-database.test.ts rename to packages/browser-db-persistence/tests/opfs-database.test.ts index 4379a1ea9..49deab36a 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tests/opfs-database.test.ts +++ b/packages/browser-db-persistence/tests/opfs-database.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { openBrowserWASQLiteOPFSDatabase } from '../src/opfs-database' import type { BrowserOPFSWorkerErrorCode, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tests/wa-sqlite-driver.test.ts b/packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts similarity index 76% rename from packages/db-browser-wa-sqlite-persisted-collection/tests/wa-sqlite-driver.test.ts rename to packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts index 0fe28bdb4..dd9650ab6 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tests/wa-sqlite-driver.test.ts +++ b/packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { BrowserWASQLiteDriver } from '../src/wa-sqlite-driver' import { createWASQLiteTestDatabase } from './helpers/wa-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-browser-wa-sqlite-`)) diff --git a/packages/db-capacitor-sqlite-persisted-collection/tsconfig.docs.json b/packages/browser-db-persistence/tsconfig.docs.json similarity index 57% rename from packages/db-capacitor-sqlite-persisted-collection/tsconfig.docs.json rename to packages/browser-db-persistence/tsconfig.docs.json index 5fddb4598..b8d092931 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tsconfig.docs.json +++ b/packages/browser-db-persistence/tsconfig.docs.json @@ -3,8 +3,8 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tsconfig.json b/packages/browser-db-persistence/tsconfig.json similarity index 83% rename from packages/db-browser-wa-sqlite-persisted-collection/tsconfig.json rename to packages/browser-db-persistence/tsconfig.json index 4074d193d..36fd8d5bb 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tsconfig.json +++ b/packages/browser-db-persistence/tsconfig.json @@ -14,8 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-browser-wa-sqlite-persisted-collection/vite.config.ts b/packages/browser-db-persistence/vite.config.ts similarity index 100% rename from packages/db-browser-wa-sqlite-persisted-collection/vite.config.ts rename to packages/browser-db-persistence/vite.config.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/browser-db-persistence/vitest.e2e.config.ts similarity index 82% rename from packages/db-browser-wa-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/browser-db-persistence/vitest.e2e.config.ts index 063029e51..d2c27254a 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/browser-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-capacitor-sqlite-persisted-collection/README.md b/packages/capacitor-db-persistence/README.md similarity index 89% rename from packages/db-capacitor-sqlite-persisted-collection/README.md rename to packages/capacitor-db-persistence/README.md index 1588a664c..c2a58e176 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/README.md +++ b/packages/capacitor-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-capacitor-sqlite-persisted-collection +# @tanstack/capacitor-db-persistence Thin SQLite persistence for Capacitor apps using `@capacitor-community/sqlite`. @@ -11,7 +11,7 @@ Thin SQLite persistence for Capacitor apps using ## Install ```bash -pnpm add @tanstack/db-capacitor-sqlite-persisted-collection @capacitor-community/sqlite +pnpm add @tanstack/capacitor-db-persistence @capacitor-community/sqlite ``` ## Quick start @@ -24,7 +24,7 @@ import { queryCollectionOptions } from '@tanstack/query-db-collection' import { createCapacitorSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-capacitor-sqlite-persisted-collection' +} from '@tanstack/capacitor-db-persistence' type Todo = { id: string @@ -89,13 +89,13 @@ export const todosCollection = createCollection( ## Testing -- `pnpm --filter @tanstack/db-capacitor-sqlite-persisted-collection test:e2e` +- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e` runs the package e2e suite against the default `better-sqlite3` harness. -- `pnpm --filter @tanstack/db-capacitor-sqlite-persisted-collection test:e2e:ios` +- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e:ios` builds the package-local Capacitor harness in `e2e/app`, launches the iOS simulator, and runs the full persisted collection e2e suite inside the real native Capacitor runtime. -- `pnpm --filter @tanstack/db-capacitor-sqlite-persisted-collection test:e2e:android` +- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e:android` builds the same package-local Capacitor harness in `e2e/app`, launches an Android emulator or uses a connected debug target, and runs the full persisted collection e2e suite inside the real native Capacitor runtime. diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/.gitignore b/packages/capacitor-db-persistence/e2e/app/.gitignore similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/.gitignore rename to packages/capacitor-db-persistence/e2e/app/.gitignore diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/capacitor.config.ts b/packages/capacitor-db-persistence/e2e/app/capacitor.config.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/capacitor.config.ts rename to packages/capacitor-db-persistence/e2e/app/capacitor.config.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/index.html b/packages/capacitor-db-persistence/e2e/app/index.html similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/index.html rename to packages/capacitor-db-persistence/e2e/app/index.html diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/package.json b/packages/capacitor-db-persistence/e2e/app/package.json similarity index 82% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/package.json rename to packages/capacitor-db-persistence/e2e/app/package.json index abeb82f79..17b5ed533 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/package.json +++ b/packages/capacitor-db-persistence/e2e/app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-capacitor-sqlite-persisted-collection-e2e-app", + "name": "@tanstack/capacitor-db-persistence-e2e-app", "private": true, "version": "0.0.0", "type": "module", @@ -15,7 +15,7 @@ "@capacitor-community/sqlite": "^8.0.1", "@capacitor/core": "^8.2.0", "@tanstack/db": "workspace:*", - "@tanstack/db-capacitor-sqlite-persisted-collection": "workspace:*" + "@tanstack/capacitor-db-persistence": "workspace:*" }, "devDependencies": { "@capacitor/android": "^8.2.0", diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/main.ts b/packages/capacitor-db-persistence/e2e/app/src/main.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/main.ts rename to packages/capacitor-db-persistence/e2e/app/src/main.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/native-capacitor-sqlite-test-db.ts b/packages/capacitor-db-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/native-capacitor-sqlite-test-db.ts rename to packages/capacitor-db-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/node-crypto.ts b/packages/capacitor-db-persistence/e2e/app/src/node-crypto.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/node-crypto.ts rename to packages/capacitor-db-persistence/e2e/app/src/node-crypto.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/register-capacitor-e2e-suite.ts b/packages/capacitor-db-persistence/e2e/app/src/register-capacitor-e2e-suite.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/register-capacitor-e2e-suite.ts rename to packages/capacitor-db-persistence/e2e/app/src/register-capacitor-e2e-suite.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/runtime-vitest.ts b/packages/capacitor-db-persistence/e2e/app/src/runtime-vitest.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/src/runtime-vitest.ts rename to packages/capacitor-db-persistence/e2e/app/src/runtime-vitest.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/tsconfig.json b/packages/capacitor-db-persistence/e2e/app/tsconfig.json similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/tsconfig.json rename to packages/capacitor-db-persistence/e2e/app/tsconfig.json diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/vite.config.ts b/packages/capacitor-db-persistence/e2e/app/vite.config.ts similarity index 82% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/app/vite.config.ts rename to packages/capacitor-db-persistence/e2e/app/vite.config.ts index 0c004c7e0..3fcefa38d 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/e2e/app/vite.config.ts +++ b/packages/capacitor-db-persistence/e2e/app/vite.config.ts @@ -11,9 +11,9 @@ export default defineConfig({ 'node:crypto': resolve(appDirectory, `src/node-crypto.ts`), '@tanstack/db': resolve(appDirectory, `../../../db/src`), '@tanstack/db-ivm': resolve(appDirectory, `../../../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( appDirectory, - `../../../db-sqlite-persisted-collection-core/src`, + `../../../db-persistence-core/src`, ), }, }, diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/capacitor-persisted-collection-conformance-suite.ts b/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts similarity index 97% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/capacitor-persisted-collection-conformance-suite.ts rename to packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts index 649868c9a..fcdd4ebab 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/e2e/capacitor-persisted-collection-conformance-suite.ts +++ b/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { createCapacitorSQLiteTestDatabase } from '../tests/helpers/capacitor-sqlite-test-db' import { createCapacitorPersistedCollectionHarnessConfig } from './shared/capacitor-persisted-collection-harness' import { registerPersistedCollectionConformanceSuite } from './shared/register-persisted-collection-conformance-suite' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' type CapacitorPersistenceFactory = ( database: ReturnType, diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/capacitor-persisted-collection.e2e.test.ts b/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection.e2e.test.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/capacitor-persisted-collection.e2e.test.ts rename to packages/capacitor-db-persistence/e2e/capacitor-persisted-collection.e2e.test.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/run-android-e2e.ts b/packages/capacitor-db-persistence/e2e/run-android-e2e.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/run-android-e2e.ts rename to packages/capacitor-db-persistence/e2e/run-android-e2e.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/run-ios-e2e.ts b/packages/capacitor-db-persistence/e2e/run-ios-e2e.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/run-ios-e2e.ts rename to packages/capacitor-db-persistence/e2e/run-ios-e2e.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/shared/capacitor-persisted-collection-harness.ts b/packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts similarity index 98% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/shared/capacitor-persisted-collection-harness.ts rename to packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts index aa4def0dd..48751d378 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/e2e/shared/capacitor-persisted-collection-harness.ts +++ b/packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts @@ -1,8 +1,8 @@ -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../../src' import { generateSeedData } from '../../../db-collection-e2e/src/fixtures/seed-data' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/db-capacitor-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts b/packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts similarity index 92% rename from packages/db-capacitor-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts rename to packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts index 661912407..9967f17d2 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts +++ b/packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts @@ -1,5 +1,5 @@ import { afterAll, afterEach, beforeAll } from 'vitest' -import { runPersistedCollectionConformanceSuite } from '../../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { CapacitorPersistedCollectionHarnessConfig } from './capacitor-persisted-collection-harness' type RegisteredHarness = { diff --git a/packages/db-capacitor-sqlite-persisted-collection/package.json b/packages/capacitor-db-persistence/package.json similarity index 80% rename from packages/db-capacitor-sqlite-persisted-collection/package.json rename to packages/capacitor-db-persistence/package.json index bef0fe87a..23b21cda2 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/package.json +++ b/packages/capacitor-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-capacitor-sqlite-persisted-collection", + "name": "@tanstack/capacitor-db-persistence", "version": "0.1.0", "description": "Capacitor SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-capacitor-sqlite-persisted-collection" + "directory": "packages/capacitor-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-capacitor-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run", + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/capacitor-db-persistence build && vitest --config vitest.e2e.config.ts --run", "test:e2e:android": "pnpm exec tsx ./e2e/run-android-e2e.ts", "test:e2e:ios": "pnpm exec tsx ./e2e/run-ios-e2e.ts" }, @@ -59,7 +59,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "@capacitor-community/sqlite": "^8.0.1", diff --git a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor-persistence.ts b/packages/capacitor-db-persistence/src/capacitor-persistence.ts similarity index 97% rename from packages/db-capacitor-sqlite-persisted-collection/src/capacitor-persistence.ts rename to packages/capacitor-db-persistence/src/capacitor-persistence.ts index 8db87985f..a89a2039e 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor-persistence.ts +++ b/packages/capacitor-db-persistence/src/capacitor-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { CapacitorSQLiteDriver } from './capacitor-sqlite-driver' import type { SQLiteDBConnection } from '@capacitor-community/sqlite' import type { @@ -10,7 +10,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' export type { CapacitorSQLiteDatabaseLike } from './capacitor-sqlite-driver' export type { SQLiteDBConnection } from '@capacitor-community/sqlite' diff --git a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor-sqlite-driver.ts b/packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts similarity index 98% rename from packages/db-capacitor-sqlite-persisted-collection/src/capacitor-sqlite-driver.ts rename to packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts index a4b8f86df..07e0ec8b3 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor-sqlite-driver.ts +++ b/packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' import type { capSQLiteValues as CapacitorSQLiteValues, SQLiteDBConnection, diff --git a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor.ts b/packages/capacitor-db-persistence/src/capacitor.ts similarity index 96% rename from packages/db-capacitor-sqlite-persisted-collection/src/capacitor.ts rename to packages/capacitor-db-persistence/src/capacitor.ts index 5f09aca20..b9c361921 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/src/capacitor.ts +++ b/packages/capacitor-db-persistence/src/capacitor.ts @@ -3,7 +3,7 @@ import type { CapacitorSQLitePersistenceOptions as CapacitorSQLitePersistenceOptionsBase, CapacitorSQLiteSchemaMismatchPolicy as CapacitorSQLiteSchemaMismatchPolicyBase, } from './capacitor-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' export type CapacitorSQLitePersistenceOptions = CapacitorSQLitePersistenceOptionsBase diff --git a/packages/db-capacitor-sqlite-persisted-collection/src/index.ts b/packages/capacitor-db-persistence/src/index.ts similarity index 67% rename from packages/db-capacitor-sqlite-persisted-collection/src/index.ts rename to packages/capacitor-db-persistence/src/index.ts index 072b6535b..8b2e147a7 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/src/index.ts +++ b/packages/capacitor-db-persistence/src/index.ts @@ -5,8 +5,8 @@ export type { CapacitorSQLiteSchemaMismatchPolicy, SQLiteDBConnection, } from './capacitor' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-persistence.test.ts b/packages/capacitor-db-persistence/tests/capacitor-persistence.test.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-persistence.test.ts rename to packages/capacitor-db-persistence/tests/capacitor-persistence.test.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-runtime-persistence-contract.test.ts b/packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts similarity index 94% rename from packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-runtime-persistence-contract.test.ts rename to packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts index b8bfc39dd..bd74dff87 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-runtime-persistence-contract.test.ts +++ b/packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts @@ -7,18 +7,18 @@ import { persistedCollectionOptions, } from '../src' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { CapacitorSQLiteDatabaseLike } from '../src/capacitor-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: CapacitorSQLiteDatabaseLike diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-core-adapter-contract.test.ts b/packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts similarity index 77% rename from packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-core-adapter-contract.test.ts rename to packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts index b788d57ff..27e249819 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-core-adapter-contract.test.ts +++ b/packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-core-`)) diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver-contract.test.ts b/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts similarity index 76% rename from packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver-contract.test.ts rename to packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts index 6cd8a0ea4..d92844edc 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver-contract.test.ts +++ b/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-sqlite-`)) diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver.test.ts b/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts similarity index 99% rename from packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver.test.ts rename to packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts index c4fe0e3e9..6f4fb7311 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tests/capacitor-sqlite-driver.test.ts +++ b/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it, vi } from 'vitest' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persisted-collection-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { CapacitorSQLiteDatabaseLike } from '../src/capacitor-sqlite-driver' diff --git a/packages/db-capacitor-sqlite-persisted-collection/tests/helpers/capacitor-sqlite-test-db.ts b/packages/capacitor-db-persistence/tests/helpers/capacitor-sqlite-test-db.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/tests/helpers/capacitor-sqlite-test-db.ts rename to packages/capacitor-db-persistence/tests/helpers/capacitor-sqlite-test-db.ts diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.docs.json b/packages/capacitor-db-persistence/tsconfig.docs.json similarity index 57% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.docs.json rename to packages/capacitor-db-persistence/tsconfig.docs.json index 5fddb4598..b8d092931 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.docs.json +++ b/packages/capacitor-db-persistence/tsconfig.docs.json @@ -3,8 +3,8 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-capacitor-sqlite-persisted-collection/tsconfig.json b/packages/capacitor-db-persistence/tsconfig.json similarity index 83% rename from packages/db-capacitor-sqlite-persisted-collection/tsconfig.json rename to packages/capacitor-db-persistence/tsconfig.json index ccccba1d6..4dad6d1c5 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/tsconfig.json +++ b/packages/capacitor-db-persistence/tsconfig.json @@ -13,8 +13,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-capacitor-sqlite-persisted-collection/vite.config.ts b/packages/capacitor-db-persistence/vite.config.ts similarity index 100% rename from packages/db-capacitor-sqlite-persisted-collection/vite.config.ts rename to packages/capacitor-db-persistence/vite.config.ts diff --git a/packages/db-capacitor-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/capacitor-db-persistence/vitest.e2e.config.ts similarity index 84% rename from packages/db-capacitor-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/capacitor-db-persistence/vitest.e2e.config.ts index ede08cdc4..e70981201 100644 --- a/packages/db-capacitor-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/capacitor-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/README.md b/packages/cloudflare-durable-objects-db-persistence/README.md similarity index 90% rename from packages/db-cloudflare-do-sqlite-persisted-collection/README.md rename to packages/cloudflare-durable-objects-db-persistence/README.md index 2393faea0..3a036ed46 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/README.md +++ b/packages/cloudflare-durable-objects-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-cloudflare-do-sqlite-persisted-collection +# @tanstack/cloudflare-durable-objects-db-persistence Thin SQLite persistence for Cloudflare Durable Objects. @@ -14,7 +14,7 @@ import { createCollection } from '@tanstack/db' import { createCloudflareDOSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-cloudflare-do-sqlite-persisted-collection' +} from '@tanstack/cloudflare-durable-objects-db-persistence' type Todo = { id: string diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/e2e/cloudflare-do-runtime-bridge.e2e.test.ts b/packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts similarity index 97% rename from packages/db-cloudflare-do-sqlite-persisted-collection/e2e/cloudflare-do-runtime-bridge.e2e.test.ts rename to packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts index 0cb1c1435..921f0ed9e 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/e2e/cloudflare-do-runtime-bridge.e2e.test.ts +++ b/packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts @@ -5,13 +5,13 @@ import { setTimeout as delay } from 'node:timers/promises' import { fileURLToPath } from 'node:url' import { spawn } from 'node:child_process' import { describe, expect, it } from 'vitest' -import { runRuntimeBridgeE2EContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract' +import { runRuntimeBridgeE2EContractSuite } from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractHarness, RuntimeBridgeE2EContractHarnessFactory, RuntimeBridgeE2EContractTodo, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract' +} from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' type RuntimeProcessHarness = { baseUrl: string diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/e2e/fixtures/worker.mjs b/packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/worker.mjs similarity index 100% rename from packages/db-cloudflare-do-sqlite-persisted-collection/e2e/fixtures/worker.mjs rename to packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/worker.mjs diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/e2e/fixtures/wrangler.toml b/packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/wrangler.toml similarity index 100% rename from packages/db-cloudflare-do-sqlite-persisted-collection/e2e/fixtures/wrangler.toml rename to packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/wrangler.toml diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/package.json b/packages/cloudflare-durable-objects-db-persistence/package.json similarity index 75% rename from packages/db-cloudflare-do-sqlite-persisted-collection/package.json rename to packages/cloudflare-durable-objects-db-persistence/package.json index 44ed62eda..6a84e4979 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/package.json +++ b/packages/cloudflare-durable-objects-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-cloudflare-do-sqlite-persisted-collection", + "name": "@tanstack/cloudflare-durable-objects-db-persistence", "version": "0.1.0", "description": "Cloudflare Durable Object SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-cloudflare-do-sqlite-persisted-collection" + "directory": "packages/cloudflare-durable-objects-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-cloudflare-do-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/cloudflare-durable-objects-db-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -47,7 +47,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "typescript": ">=4.7" diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/src/do-driver.ts b/packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts similarity index 98% rename from packages/db-cloudflare-do-sqlite-persisted-collection/src/do-driver.ts rename to packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts index 4cd98bdf9..0e8ef02e7 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/src/do-driver.ts +++ b/packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' type DurableObjectSqlRow = Record diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/src/do-persistence.ts b/packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts similarity index 97% rename from packages/db-cloudflare-do-sqlite-persisted-collection/src/do-persistence.ts rename to packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts index d33302847..dc7a36262 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/src/do-persistence.ts +++ b/packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { CloudflareDOSQLiteDriver } from './do-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { DurableObjectStorageLike } from './do-driver' export type { DurableObjectStorageLike } from './do-driver' diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/src/index.ts b/packages/cloudflare-durable-objects-db-persistence/src/index.ts similarity index 67% rename from packages/db-cloudflare-do-sqlite-persisted-collection/src/index.ts rename to packages/cloudflare-durable-objects-db-persistence/src/index.ts index b7c212b0c..48613a4a4 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/src/index.ts +++ b/packages/cloudflare-durable-objects-db-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { CloudflareDOSQLitePersistenceOptions, DurableObjectStorageLike, } from './do-persistence' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-driver.test.ts b/packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts similarity index 90% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-driver.test.ts rename to packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts index e5c47f4f0..b035237e2 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-driver.test.ts +++ b/packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts @@ -2,11 +2,11 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it } from 'vitest' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persisted-collection-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-driver-`)) diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-persistence.test.ts b/packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts similarity index 94% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-persistence.test.ts rename to packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts index 2f2f58712..91e95fd14 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-persistence.test.ts +++ b/packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-persistence-`)) diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-sqlite-core-adapter-contract.test.ts b/packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts similarity index 78% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-sqlite-core-adapter-contract.test.ts rename to packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts index 2e0c866e8..b0f8a3677 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/do-sqlite-core-adapter-contract.test.ts +++ b/packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-sql-core-`)) diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tests/helpers/better-sqlite-do-storage.ts b/packages/cloudflare-durable-objects-db-persistence/tests/helpers/better-sqlite-do-storage.ts similarity index 100% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tests/helpers/better-sqlite-do-storage.ts rename to packages/cloudflare-durable-objects-db-persistence/tests/helpers/better-sqlite-do-storage.ts diff --git a/packages/db-expo-sqlite-persisted-collection/tsconfig.docs.json b/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json similarity index 57% rename from packages/db-expo-sqlite-persisted-collection/tsconfig.docs.json rename to packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json index 5fddb4598..b8d092931 100644 --- a/packages/db-expo-sqlite-persisted-collection/tsconfig.docs.json +++ b/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json @@ -3,8 +3,8 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.json b/packages/cloudflare-durable-objects-db-persistence/tsconfig.json similarity index 84% rename from packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.json rename to packages/cloudflare-durable-objects-db-persistence/tsconfig.json index 97ec70305..1b560f0b5 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/tsconfig.json +++ b/packages/cloudflare-durable-objects-db-persistence/tsconfig.json @@ -14,8 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/vite.config.ts b/packages/cloudflare-durable-objects-db-persistence/vite.config.ts similarity index 100% rename from packages/db-cloudflare-do-sqlite-persisted-collection/vite.config.ts rename to packages/cloudflare-durable-objects-db-persistence/vite.config.ts diff --git a/packages/db-cloudflare-do-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts similarity index 85% rename from packages/db-cloudflare-do-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts index b17779a39..751424a83 100644 --- a/packages/db-cloudflare-do-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-electron-sqlite-persisted-collection/tsconfig.docs.json b/packages/db-electron-sqlite-persisted-collection/tsconfig.docs.json deleted file mode 100644 index 3fd384ad1..000000000 --- a/packages/db-electron-sqlite-persisted-collection/tsconfig.docs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-node-sqlite-persisted-collection": [ - "../db-node-sqlite-persisted-collection/src" - ], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" - ] - } - }, - "include": ["src"] -} diff --git a/packages/db-node-sqlite-persisted-collection/tsconfig.docs.json b/packages/db-node-sqlite-persisted-collection/tsconfig.docs.json deleted file mode 100644 index 5fddb4598..000000000 --- a/packages/db-node-sqlite-persisted-collection/tsconfig.docs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" - ] - } - }, - "include": ["src"] -} diff --git a/packages/db-sqlite-persisted-collection-core/README.md b/packages/db-persistence-core/README.md similarity index 89% rename from packages/db-sqlite-persisted-collection-core/README.md rename to packages/db-persistence-core/README.md index 58da4a36a..b0b665250 100644 --- a/packages/db-sqlite-persisted-collection-core/README.md +++ b/packages/db-persistence-core/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-sqlite-persisted-collection-core +# @tanstack/db-persistence-core Shared SQLite persistence primitives for TanStack DB. Runtime-specific wrappers (Node, Electron, React Native, Cloudflare Durable Objects) build on top of this @@ -86,10 +86,10 @@ while still handling per-collection schema versions correctly. In most applications, use a runtime package directly: -- `@tanstack/db-node-sqlite-persisted-collection` -- `@tanstack/db-browser-wa-sqlite-persisted-collection` -- `@tanstack/db-electron-sqlite-persisted-collection` -- `@tanstack/db-react-native-sqlite-persisted-collection` -- `@tanstack/db-cloudflare-do-sqlite-persisted-collection` +- `@tanstack/node-db-persistence` +- `@tanstack/browser-db-persistence` +- `@tanstack/electron-db-persistence` +- `@tanstack/react-native-db-persistence` +- `@tanstack/cloudflare-durable-objects-db-persistence` Those packages provide concrete drivers and runtime wiring. diff --git a/packages/db-sqlite-persisted-collection-core/package.json b/packages/db-persistence-core/package.json similarity index 90% rename from packages/db-sqlite-persisted-collection-core/package.json rename to packages/db-persistence-core/package.json index 26a550831..f006ecaf9 100644 --- a/packages/db-sqlite-persisted-collection-core/package.json +++ b/packages/db-persistence-core/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-sqlite-persisted-collection-core", + "name": "@tanstack/db-persistence-core", "version": "0.1.0", "description": "SQLite persisted collection core for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-sqlite-persisted-collection-core" + "directory": "packages/db-persistence-core" }, "homepage": "https://tanstack.com/db", "keywords": [ diff --git a/packages/db-sqlite-persisted-collection-core/src/errors.ts b/packages/db-persistence-core/src/errors.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/src/errors.ts rename to packages/db-persistence-core/src/errors.ts diff --git a/packages/db-sqlite-persisted-collection-core/src/index.ts b/packages/db-persistence-core/src/index.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/src/index.ts rename to packages/db-persistence-core/src/index.ts diff --git a/packages/db-sqlite-persisted-collection-core/src/persisted.ts b/packages/db-persistence-core/src/persisted.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/src/persisted.ts rename to packages/db-persistence-core/src/persisted.ts diff --git a/packages/db-sqlite-persisted-collection-core/src/sqlite-core-adapter.ts b/packages/db-persistence-core/src/sqlite-core-adapter.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/src/sqlite-core-adapter.ts rename to packages/db-persistence-core/src/sqlite-core-adapter.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract.ts b/packages/db-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract.ts rename to packages/db-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract.ts b/packages/db-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract.ts rename to packages/db-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract.ts b/packages/db-persistence-core/tests/contracts/runtime-persistence-contract.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract.ts rename to packages/db-persistence-core/tests/contracts/runtime-persistence-contract.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract.ts b/packages/db-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract.ts rename to packages/db-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract.ts b/packages/db-persistence-core/tests/contracts/sqlite-driver-contract.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract.ts rename to packages/db-persistence-core/tests/contracts/sqlite-driver-contract.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/persisted.test-d.ts b/packages/db-persistence-core/tests/persisted.test-d.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/persisted.test-d.ts rename to packages/db-persistence-core/tests/persisted.test-d.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/persisted.test.ts b/packages/db-persistence-core/tests/persisted.test.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/persisted.test.ts rename to packages/db-persistence-core/tests/persisted.test.ts index 1613e0f3c..63af1f5d4 100644 --- a/packages/db-sqlite-persisted-collection-core/tests/persisted.test.ts +++ b/packages/db-persistence-core/tests/persisted.test.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest' import { + BasicIndex, IR, createCollection, createTransaction, - BasicIndex, } from '@tanstack/db' import { InvalidPersistedCollectionCoordinatorError, diff --git a/packages/db-sqlite-persisted-collection-core/tests/sqlite-core-adapter-cli-runtime.test.ts b/packages/db-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/sqlite-core-adapter-cli-runtime.test.ts rename to packages/db-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts diff --git a/packages/db-sqlite-persisted-collection-core/tests/sqlite-core-adapter.test.ts b/packages/db-persistence-core/tests/sqlite-core-adapter.test.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tests/sqlite-core-adapter.test.ts rename to packages/db-persistence-core/tests/sqlite-core-adapter.test.ts diff --git a/packages/db-sqlite-persisted-collection-core/tsconfig.docs.json b/packages/db-persistence-core/tsconfig.docs.json similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tsconfig.docs.json rename to packages/db-persistence-core/tsconfig.docs.json diff --git a/packages/db-sqlite-persisted-collection-core/tsconfig.json b/packages/db-persistence-core/tsconfig.json similarity index 100% rename from packages/db-sqlite-persisted-collection-core/tsconfig.json rename to packages/db-persistence-core/tsconfig.json diff --git a/packages/db-sqlite-persisted-collection-core/vite.config.ts b/packages/db-persistence-core/vite.config.ts similarity index 100% rename from packages/db-sqlite-persisted-collection-core/vite.config.ts rename to packages/db-persistence-core/vite.config.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/tsconfig.docs.json b/packages/db-react-native-sqlite-persisted-collection/tsconfig.docs.json deleted file mode 100644 index 5fddb4598..000000000 --- a/packages/db-react-native-sqlite-persisted-collection/tsconfig.docs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" - ] - } - }, - "include": ["src"] -} diff --git a/packages/db-tauri-sqlite-persisted-collection/tsconfig.docs.json b/packages/db-tauri-sqlite-persisted-collection/tsconfig.docs.json deleted file mode 100644 index 5fddb4598..000000000 --- a/packages/db-tauri-sqlite-persisted-collection/tsconfig.docs.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" - ] - } - }, - "include": ["src"] -} diff --git a/packages/electric-db-collection/tests/electric.test.ts b/packages/electric-db-collection/tests/electric.test.ts index 15bdcb4f2..7e846c6a0 100644 --- a/packages/electric-db-collection/tests/electric.test.ts +++ b/packages/electric-db-collection/tests/electric.test.ts @@ -4,7 +4,7 @@ import { createCollection, createTransaction, } from '@tanstack/db' -import { persistedCollectionOptions } from '../../db-sqlite-persisted-collection-core/src' +import { persistedCollectionOptions } from '../../db-persistence-core/src' import { electricCollectionOptions, isChangeMessage } from '../src/electric' import { stripVirtualProps } from '../../db/tests/utils' import type { ElectricCollectionUtils } from '../src/electric' diff --git a/packages/db-electron-sqlite-persisted-collection/README.md b/packages/electron-db-persistence/README.md similarity index 76% rename from packages/db-electron-sqlite-persisted-collection/README.md rename to packages/electron-db-persistence/README.md index d439d36ec..5c60dfb0c 100644 --- a/packages/db-electron-sqlite-persisted-collection/README.md +++ b/packages/electron-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-electron-sqlite-persisted-collection +# @tanstack/electron-db-persistence Thin Electron bridge for TanStack DB SQLite persistence. @@ -8,16 +8,16 @@ Thin Electron bridge for TanStack DB SQLite persistence. - `createElectronSQLitePersistence(...)` (renderer process) - `persistedCollectionOptions(...)` (re-exported from core) -Use `@tanstack/db-electron-sqlite-persisted-collection/main` and -`@tanstack/db-electron-sqlite-persisted-collection/renderer` if you prefer +Use `@tanstack/electron-db-persistence/main` and +`@tanstack/electron-db-persistence/renderer` if you prefer explicit process-specific entrypoints. ## Main process ```ts import { ipcMain } from 'electron' -import { createNodeSQLitePersistence } from '@tanstack/db-node-sqlite-persisted-collection' -import { exposeElectronSQLitePersistence } from '@tanstack/db-electron-sqlite-persisted-collection/main' +import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' +import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-persistence/main' import Database from 'better-sqlite3' const database = new Database(`./tanstack-db.sqlite`) @@ -42,7 +42,7 @@ import { ipcRenderer } from 'electron' import { createElectronSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-electron-sqlite-persisted-collection' +} from '@tanstack/electron-db-persistence' type Todo = { id: string diff --git a/packages/db-electron-sqlite-persisted-collection/package.json b/packages/electron-db-persistence/package.json similarity index 68% rename from packages/db-electron-sqlite-persisted-collection/package.json rename to packages/electron-db-persistence/package.json index 3e39b25a2..05703f9e7 100644 --- a/packages/db-electron-sqlite-persisted-collection/package.json +++ b/packages/electron-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-electron-sqlite-persisted-collection", + "name": "@tanstack/electron-db-persistence", "version": "0.1.0", "description": "Electron SQLite persisted collection bridge for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-electron-sqlite-persisted-collection" + "directory": "packages/electron-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,8 +22,8 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-node-sqlite-persisted-collection build && pnpm --filter @tanstack/db-electron-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:all": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-node-sqlite-persisted-collection build && pnpm --filter @tanstack/db-electron-sqlite-persisted-collection build && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --run && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && pnpm --filter @tanstack/electron-db-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:all": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && pnpm --filter @tanstack/electron-db-persistence build && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --run && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -68,7 +68,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "typescript": ">=4.7" diff --git a/packages/db-electron-sqlite-persisted-collection/src/electron-coordinator.ts b/packages/electron-db-persistence/src/electron-coordinator.ts similarity index 99% rename from packages/db-electron-sqlite-persisted-collection/src/electron-coordinator.ts rename to packages/electron-db-persistence/src/electron-coordinator.ts index b8e93f3bb..3c6c41f40 100644 --- a/packages/db-electron-sqlite-persisted-collection/src/electron-coordinator.ts +++ b/packages/electron-db-persistence/src/electron-coordinator.ts @@ -6,7 +6,7 @@ import type { PersistenceAdapter, ProtocolEnvelope, PullSinceResponse, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { LoadSubsetOptions } from '@tanstack/db' // --------------------------------------------------------------------------- diff --git a/packages/db-electron-sqlite-persisted-collection/src/errors.ts b/packages/electron-db-persistence/src/errors.ts similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/src/errors.ts rename to packages/electron-db-persistence/src/errors.ts diff --git a/packages/db-electron-sqlite-persisted-collection/src/index.ts b/packages/electron-db-persistence/src/index.ts similarity index 78% rename from packages/db-electron-sqlite-persisted-collection/src/index.ts rename to packages/electron-db-persistence/src/index.ts index d06335511..0ee6c087b 100644 --- a/packages/db-electron-sqlite-persisted-collection/src/index.ts +++ b/packages/electron-db-persistence/src/index.ts @@ -10,8 +10,8 @@ export type { } from './renderer' export { ElectronCollectionCoordinator } from './electron-coordinator' export type { ElectronCollectionCoordinatorOptions } from './electron-coordinator' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-electron-sqlite-persisted-collection/src/main.ts b/packages/electron-db-persistence/src/main.ts similarity index 98% rename from packages/db-electron-sqlite-persisted-collection/src/main.ts rename to packages/electron-db-persistence/src/main.ts index 4d6ca8d49..1daddb661 100644 --- a/packages/db-electron-sqlite-persisted-collection/src/main.ts +++ b/packages/electron-db-persistence/src/main.ts @@ -1,4 +1,4 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' import { DEFAULT_ELECTRON_PERSISTENCE_CHANNEL, ELECTRON_PERSISTENCE_PROTOCOL_VERSION, @@ -7,7 +7,7 @@ import type { PersistedCollectionPersistence, PersistenceAdapter, SQLitePullSinceResult, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { ElectronPersistedKey, ElectronPersistedRow, diff --git a/packages/db-electron-sqlite-persisted-collection/src/protocol.ts b/packages/electron-db-persistence/src/protocol.ts similarity index 98% rename from packages/db-electron-sqlite-persisted-collection/src/protocol.ts rename to packages/electron-db-persistence/src/protocol.ts index 441cd93bc..110134e8a 100644 --- a/packages/db-electron-sqlite-persisted-collection/src/protocol.ts +++ b/packages/electron-db-persistence/src/protocol.ts @@ -4,7 +4,7 @@ import type { PersistedIndexSpec, PersistedTx, SQLitePullSinceResult, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' export const ELECTRON_PERSISTENCE_PROTOCOL_VERSION = 1 as const export const DEFAULT_ELECTRON_PERSISTENCE_CHANNEL = `tanstack-db:sqlite-persistence` diff --git a/packages/db-electron-sqlite-persisted-collection/src/renderer.ts b/packages/electron-db-persistence/src/renderer.ts similarity index 99% rename from packages/db-electron-sqlite-persisted-collection/src/renderer.ts rename to packages/electron-db-persistence/src/renderer.ts index ab2dba887..1a730b18d 100644 --- a/packages/db-electron-sqlite-persisted-collection/src/renderer.ts +++ b/packages/electron-db-persistence/src/renderer.ts @@ -1,7 +1,7 @@ import { InvalidPersistedCollectionConfigError, SingleProcessCoordinator, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { ElectronCollectionCoordinator } from './electron-coordinator' import { DEFAULT_ELECTRON_PERSISTENCE_CHANNEL, @@ -14,7 +14,7 @@ import type { PersistedIndexSpec, PersistedTx, SQLitePullSinceResult, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { ElectronPersistedKey, ElectronPersistedRow, diff --git a/packages/db-electron-sqlite-persisted-collection/tests/e2e/electron-process-client.ts b/packages/electron-db-persistence/tests/e2e/electron-process-client.ts similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/tests/e2e/electron-process-client.ts rename to packages/electron-db-persistence/tests/e2e/electron-process-client.ts diff --git a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/electron-main.mjs b/packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs similarity index 99% rename from packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/electron-main.mjs rename to packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs index 94ff930b9..ce3dccb80 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/electron-main.mjs +++ b/packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs @@ -7,7 +7,7 @@ import { tmpdir } from 'node:os' import { fileURLToPath } from 'node:url' import { serialize } from 'node:v8' import { BrowserWindow, app, ipcMain } from 'electron' -import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-sqlite-persisted-collection-core' +import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-persistence-core' import { exposeElectronSQLitePersistence } from '../../../dist/esm/main.js' const E2E_RESULT_PREFIX = `__TANSTACK_DB_E2E_RESULT__:` diff --git a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/renderer-page.html b/packages/electron-db-persistence/tests/e2e/fixtures/renderer-page.html similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/renderer-page.html rename to packages/electron-db-persistence/tests/e2e/fixtures/renderer-page.html diff --git a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/renderer-preload.cjs b/packages/electron-db-persistence/tests/e2e/fixtures/renderer-preload.cjs similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/renderer-preload.cjs rename to packages/electron-db-persistence/tests/e2e/fixtures/renderer-preload.cjs diff --git a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/runtime-bridge-types.ts b/packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts similarity index 91% rename from packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/runtime-bridge-types.ts rename to packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts index 3ec1283af..33c19410d 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/e2e/fixtures/runtime-bridge-types.ts +++ b/packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts @@ -1,8 +1,8 @@ import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractTodo, -} from '../../../../db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract' -import type { SQLiteCoreAdapterOptions } from '@tanstack/db-sqlite-persisted-collection-core' +} from '../../../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +import type { SQLiteCoreAdapterOptions } from '@tanstack/db-persistence-core' import type { ElectronPersistenceRequestEnvelope, ElectronPersistenceResponseEnvelope, diff --git a/packages/db-electron-sqlite-persisted-collection/tests/electron-ipc.test-d.ts b/packages/electron-db-persistence/tests/electron-ipc.test-d.ts similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/tests/electron-ipc.test-d.ts rename to packages/electron-db-persistence/tests/electron-ipc.test-d.ts diff --git a/packages/db-electron-sqlite-persisted-collection/tests/electron-ipc.test.ts b/packages/electron-db-persistence/tests/electron-ipc.test.ts similarity index 97% rename from packages/db-electron-sqlite-persisted-collection/tests/electron-ipc.test.ts rename to packages/electron-db-persistence/tests/electron-ipc.test.ts index a97131d1b..0651da955 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/electron-ipc.test.ts +++ b/packages/electron-db-persistence/tests/electron-ipc.test.ts @@ -2,9 +2,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import { createNodeSQLitePersistence } from '@tanstack/db-node-sqlite-persisted-collection' -import { BetterSqlite3SQLiteDriver } from '../../db-node-sqlite-persisted-collection/src/node-driver' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' +import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, @@ -17,7 +17,7 @@ import { createElectronRuntimeBridgeInvoke, isElectronFullE2EEnabled, } from './e2e/electron-process-client' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' import type { ElectronPersistenceInvoke, ElectronPersistenceRequestEnvelope, diff --git a/packages/db-electron-sqlite-persisted-collection/tests/electron-persisted-collection.e2e.test.ts b/packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts similarity index 94% rename from packages/db-electron-sqlite-persisted-collection/tests/electron-persisted-collection.e2e.test.ts rename to packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts index 3b4e70f2a..ae4bedd84 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/electron-persisted-collection.e2e.test.ts +++ b/packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts @@ -2,21 +2,21 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' -import { createCollection, BTreeIndex } from '@tanstack/db' -import { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' -import { createNodeSQLitePersistence } from '@tanstack/db-node-sqlite-persisted-collection' -import { BetterSqlite3SQLiteDriver } from '../../db-node-sqlite-persisted-collection/src/node-driver' +import { BTreeIndex, createCollection } from '@tanstack/db' +import { persistedCollectionOptions } from '@tanstack/db-persistence-core' +import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' +import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createElectronRuntimeBridgeInvoke, isElectronFullE2EEnabled, } from './e2e/electron-process-client' -import type { PersistedTx } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedTx } from '@tanstack/db-persistence-core' import type { Collection } from '@tanstack/db' import type { ElectronPersistenceInvoke, diff --git a/packages/db-electron-sqlite-persisted-collection/tests/electron-runtime-bridge.e2e.test.ts b/packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts similarity index 92% rename from packages/db-electron-sqlite-persisted-collection/tests/electron-runtime-bridge.e2e.test.ts rename to packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts index ae163bbd4..079f6ab82 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/electron-runtime-bridge.e2e.test.ts +++ b/packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runRuntimeBridgeE2EContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract' +import { runRuntimeBridgeE2EContractSuite } from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import { runElectronRuntimeBridgeScenario } from './e2e/electron-process-client' import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractHarness, RuntimeBridgeE2EContractHarnessFactory, RuntimeBridgeE2EContractTodo, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-bridge-e2e-contract' +} from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import type { ElectronRuntimeBridgeInput, ElectronRuntimeBridgeScenarioResult, diff --git a/packages/db-electron-sqlite-persisted-collection/tests/electron-sqlite-core-adapter-contract.test.ts b/packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts similarity index 89% rename from packages/db-electron-sqlite-persisted-collection/tests/electron-sqlite-core-adapter-contract.test.ts rename to packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts index 22651f0e3..aad00f05e 100644 --- a/packages/db-electron-sqlite-persisted-collection/tests/electron-sqlite-core-adapter-contract.test.ts +++ b/packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts @@ -1,9 +1,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-sqlite-persisted-collection-core' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' -import { BetterSqlite3SQLiteDriver } from '../../db-node-sqlite-persisted-collection/src/node-driver' +import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-persistence-core' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, @@ -15,7 +15,7 @@ import { import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import type { ElectronPersistenceInvoke, ElectronPersistenceResponseEnvelope, diff --git a/packages/electron-db-persistence/tsconfig.docs.json b/packages/electron-db-persistence/tsconfig.docs.json new file mode 100644 index 000000000..f83e0e4fa --- /dev/null +++ b/packages/electron-db-persistence/tsconfig.docs.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/node-db-persistence": [ + "../node-db-persistence/src" + ], + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/db-electron-sqlite-persisted-collection/tsconfig.json b/packages/electron-db-persistence/tsconfig.json similarity index 74% rename from packages/db-electron-sqlite-persisted-collection/tsconfig.json rename to packages/electron-db-persistence/tsconfig.json index b07723d02..425416b90 100644 --- a/packages/db-electron-sqlite-persisted-collection/tsconfig.json +++ b/packages/electron-db-persistence/tsconfig.json @@ -14,11 +14,11 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-node-sqlite-persisted-collection": [ - "../db-node-sqlite-persisted-collection/src" + "@tanstack/node-db-persistence": [ + "../node-db-persistence/src" ], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-electron-sqlite-persisted-collection/vite.config.ts b/packages/electron-db-persistence/vite.config.ts similarity index 100% rename from packages/db-electron-sqlite-persisted-collection/vite.config.ts rename to packages/electron-db-persistence/vite.config.ts diff --git a/packages/db-electron-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/electron-db-persistence/vitest.e2e.config.ts similarity index 75% rename from packages/db-electron-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/electron-db-persistence/vitest.e2e.config.ts index 70fe559f0..2f91be5a8 100644 --- a/packages/db-electron-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/electron-db-persistence/vitest.e2e.config.ts @@ -9,13 +9,13 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-node-sqlite-persisted-collection': resolve( + '@tanstack/node-db-persistence': resolve( packageDirectory, - `../db-node-sqlite-persisted-collection/src`, + `../node-db-persistence/src`, ), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-expo-sqlite-persisted-collection/README.md b/packages/expo-db-persistence/README.md similarity index 77% rename from packages/db-expo-sqlite-persisted-collection/README.md rename to packages/expo-db-persistence/README.md index 0bfcac5b6..4dc95e8fb 100644 --- a/packages/db-expo-sqlite-persisted-collection/README.md +++ b/packages/expo-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-expo-sqlite-persisted-collection +# @tanstack/expo-db-persistence Thin SQLite persistence for Expo apps using the official `expo-sqlite` adapter. @@ -7,7 +7,7 @@ Thin SQLite persistence for Expo apps using the official `expo-sqlite` adapter. - `createExpoSQLitePersistence(...)` - `persistedCollectionOptions(...)` (re-exported from core) - Advanced driver entrypoint: - `@tanstack/db-expo-sqlite-persisted-collection/expo-sqlite-driver` + `@tanstack/expo-db-persistence/expo-sqlite-driver` ## Quick start @@ -17,7 +17,7 @@ import { createCollection } from '@tanstack/db' import { createExpoSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-expo-sqlite-persisted-collection' +} from '@tanstack/expo-db-persistence' type Todo = { id: string @@ -50,15 +50,15 @@ export const todosCollection = createCollection( - Mode defaults (`sync-present` vs `sync-absent`) are inferred from whether a `sync` config is present in `persistedCollectionOptions`. - The React Native `op-sqlite` wrapper remains available in - `@tanstack/db-react-native-sqlite-persisted-collection`. + `@tanstack/react-native-db-persistence`. - Expo web is not part of the emulator-backed E2E path in this package. Use the browser SQLite package for browser-focused persistence coverage. ## E2E -- `pnpm --filter @tanstack/db-expo-sqlite-persisted-collection test:e2e` +- `pnpm --filter @tanstack/expo-db-persistence test:e2e` runs the shared Node-backed conformance suite. -- `pnpm --filter @tanstack/db-expo-sqlite-persisted-collection test:e2e:expo:ios` +- `pnpm --filter @tanstack/expo-db-persistence test:e2e:expo:ios` runs the real Expo iOS Simulator path. -- `pnpm --filter @tanstack/db-expo-sqlite-persisted-collection test:e2e:expo:android` +- `pnpm --filter @tanstack/expo-db-persistence test:e2e:expo:android` runs the real Expo Android Emulator path. diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-emulator-smoke.e2e.test.ts b/packages/expo-db-persistence/e2e/expo-emulator-smoke.e2e.test.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-emulator-smoke.e2e.test.ts rename to packages/expo-db-persistence/e2e/expo-emulator-smoke.e2e.test.ts diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-persisted-collection.e2e.test.ts b/packages/expo-db-persistence/e2e/expo-persisted-collection.e2e.test.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-persisted-collection.e2e.test.ts rename to packages/expo-db-persistence/e2e/expo-persisted-collection.e2e.test.ts diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/App.tsx b/packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx similarity index 99% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/App.tsx rename to packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx index a1cac71a5..7e2083992 100644 --- a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/App.tsx +++ b/packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx @@ -5,7 +5,7 @@ import { createCollection } from '@tanstack/db' import { createExpoSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-expo-sqlite-persisted-collection' +} from '@tanstack/expo-db-persistence' import type { ExpoRuntimeCommand, ExpoRuntimeCommandResult, diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/app.json b/packages/expo-db-persistence/e2e/expo-runtime-app/app.json similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/app.json rename to packages/expo-db-persistence/e2e/expo-runtime-app/app.json diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/index.js b/packages/expo-db-persistence/e2e/expo-runtime-app/index.js similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/index.js rename to packages/expo-db-persistence/e2e/expo-runtime-app/index.js diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/metro.config.js b/packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/metro.config.js rename to packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/package.json b/packages/expo-db-persistence/e2e/expo-runtime-app/package.json similarity index 72% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/package.json rename to packages/expo-db-persistence/e2e/expo-runtime-app/package.json index 89d937dbb..aabe76345 100644 --- a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/package.json +++ b/packages/expo-db-persistence/e2e/expo-runtime-app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-expo-sqlite-persisted-collection-e2e-app", + "name": "@tanstack/expo-db-persistence-e2e-app", "private": true, "version": "0.0.0", "main": "index.js", @@ -10,7 +10,7 @@ }, "dependencies": { "@tanstack/db": "workspace:*", - "@tanstack/db-expo-sqlite-persisted-collection": "workspace:*", + "@tanstack/expo-db-persistence": "workspace:*", "expo": "~55.0.6", "expo-sqlite": "^55.0.10", "react": "19.2.0", diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/polyfills.js b/packages/expo-db-persistence/e2e/expo-runtime-app/polyfills.js similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/polyfills.js rename to packages/expo-db-persistence/e2e/expo-runtime-app/polyfills.js diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/tsconfig.json b/packages/expo-db-persistence/e2e/expo-runtime-app/tsconfig.json similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app/tsconfig.json rename to packages/expo-db-persistence/e2e/expo-runtime-app/tsconfig.json diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts b/packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts similarity index 97% rename from packages/db-expo-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts rename to packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts index 4d5f66740..cfc457b44 100644 --- a/packages/db-expo-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts +++ b/packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts @@ -2,13 +2,13 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createExpoSQLiteTestDatabase } from '../tests/helpers/expo-sqlite-test-db' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/db-expo-sqlite-persisted-collection/e2e/runtime-protocol.ts b/packages/expo-db-persistence/e2e/runtime-protocol.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/e2e/runtime-protocol.ts rename to packages/expo-db-persistence/e2e/runtime-protocol.ts diff --git a/packages/db-expo-sqlite-persisted-collection/package.json b/packages/expo-db-persistence/package.json similarity index 63% rename from packages/db-expo-sqlite-persisted-collection/package.json rename to packages/expo-db-persistence/package.json index 7054b7b80..ce238db65 100644 --- a/packages/db-expo-sqlite-persisted-collection/package.json +++ b/packages/expo-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-expo-sqlite-persisted-collection", + "name": "@tanstack/expo-db-persistence", "version": "0.1.0", "description": "Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-expo-sqlite-persisted-collection" + "directory": "packages/expo-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,9 +22,9 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-expo-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:expo:ios": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-expo-sqlite-persisted-collection build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=ios vitest --config vitest.e2e.config.ts --run", - "test:e2e:expo:android": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-expo-sqlite-persisted-collection build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=android vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:expo:ios": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=ios vitest --config vitest.e2e.config.ts --run", + "test:e2e:expo:android": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=android vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -59,7 +59,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "expo-sqlite": "^55.0.10", diff --git a/packages/db-expo-sqlite-persisted-collection/src/expo-sqlite-driver.ts b/packages/expo-db-persistence/src/expo-sqlite-driver.ts similarity index 98% rename from packages/db-expo-sqlite-persisted-collection/src/expo-sqlite-driver.ts rename to packages/expo-db-persistence/src/expo-sqlite-driver.ts index ea84d6a28..0c4e17736 100644 --- a/packages/db-expo-sqlite-persisted-collection/src/expo-sqlite-driver.ts +++ b/packages/expo-db-persistence/src/expo-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' export type ExpoSQLiteBindParams = | ReadonlyArray diff --git a/packages/db-expo-sqlite-persisted-collection/src/expo.ts b/packages/expo-db-persistence/src/expo.ts similarity index 97% rename from packages/db-expo-sqlite-persisted-collection/src/expo.ts rename to packages/expo-db-persistence/src/expo.ts index daf4bce39..98b4029b7 100644 --- a/packages/db-expo-sqlite-persisted-collection/src/expo.ts +++ b/packages/expo-db-persistence/src/expo.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { ExpoSQLiteDriver } from './expo-sqlite-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { ExpoSQLiteDatabaseLike } from './expo-sqlite-driver' export type { ExpoSQLiteDatabaseLike } from './expo-sqlite-driver' diff --git a/packages/db-expo-sqlite-persisted-collection/src/index.ts b/packages/expo-db-persistence/src/index.ts similarity index 63% rename from packages/db-expo-sqlite-persisted-collection/src/index.ts rename to packages/expo-db-persistence/src/index.ts index 3e4246d94..a122b7822 100644 --- a/packages/db-expo-sqlite-persisted-collection/src/index.ts +++ b/packages/expo-db-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { ExpoSQLitePersistenceOptions, ExpoSQLiteSchemaMismatchPolicy, } from './expo' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-expo-sqlite-persisted-collection/tests/expo-persistence.test.ts b/packages/expo-db-persistence/tests/expo-persistence.test.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/tests/expo-persistence.test.ts rename to packages/expo-db-persistence/tests/expo-persistence.test.ts diff --git a/packages/db-expo-sqlite-persisted-collection/tests/expo-runtime-persistence-contract.test.ts b/packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts similarity index 94% rename from packages/db-expo-sqlite-persisted-collection/tests/expo-runtime-persistence-contract.test.ts rename to packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts index 22af21d29..4068743af 100644 --- a/packages/db-expo-sqlite-persisted-collection/tests/expo-runtime-persistence-contract.test.ts +++ b/packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts @@ -4,18 +4,18 @@ import { join } from 'node:path' import { describe, expect, it } from 'vitest' import { createExpoSQLitePersistence, persistedCollectionOptions } from '../src' import { createExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { ExpoSQLiteDatabaseLike } from '../src/expo-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: ExpoSQLiteDatabaseLike diff --git a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts b/packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts similarity index 76% rename from packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts rename to packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts index 8aac6fa3f..a9b2431d9 100644 --- a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts +++ b/packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-core-`)) diff --git a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver-contract.test.ts b/packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts similarity index 76% rename from packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver-contract.test.ts rename to packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts index aa9da5164..db3843094 100644 --- a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver-contract.test.ts +++ b/packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-driver-contract-`)) diff --git a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver.test.ts b/packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts similarity index 99% rename from packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver.test.ts rename to packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts index a959a9dfe..cc869cfa7 100644 --- a/packages/db-expo-sqlite-persisted-collection/tests/expo-sqlite-driver.test.ts +++ b/packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persisted-collection-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' const activeCleanupFns: Array<() => void | Promise> = [] diff --git a/packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-emulator-database-factory.ts b/packages/expo-db-persistence/tests/helpers/expo-emulator-database-factory.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-emulator-database-factory.ts rename to packages/expo-db-persistence/tests/helpers/expo-emulator-database-factory.ts diff --git a/packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-emulator-runtime.ts b/packages/expo-db-persistence/tests/helpers/expo-emulator-runtime.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-emulator-runtime.ts rename to packages/expo-db-persistence/tests/helpers/expo-emulator-runtime.ts diff --git a/packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-sqlite-test-db.ts b/packages/expo-db-persistence/tests/helpers/expo-sqlite-test-db.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/tests/helpers/expo-sqlite-test-db.ts rename to packages/expo-db-persistence/tests/helpers/expo-sqlite-test-db.ts diff --git a/packages/db-expo-sqlite-persisted-collection/tests/helpers/mobile-runtime-test-setup.ts b/packages/expo-db-persistence/tests/helpers/mobile-runtime-test-setup.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/tests/helpers/mobile-runtime-test-setup.ts rename to packages/expo-db-persistence/tests/helpers/mobile-runtime-test-setup.ts diff --git a/packages/db-browser-wa-sqlite-persisted-collection/tsconfig.docs.json b/packages/expo-db-persistence/tsconfig.docs.json similarity index 57% rename from packages/db-browser-wa-sqlite-persisted-collection/tsconfig.docs.json rename to packages/expo-db-persistence/tsconfig.docs.json index 5fddb4598..b8d092931 100644 --- a/packages/db-browser-wa-sqlite-persisted-collection/tsconfig.docs.json +++ b/packages/expo-db-persistence/tsconfig.docs.json @@ -3,8 +3,8 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-expo-sqlite-persisted-collection/tsconfig.json b/packages/expo-db-persistence/tsconfig.json similarity index 84% rename from packages/db-expo-sqlite-persisted-collection/tsconfig.json rename to packages/expo-db-persistence/tsconfig.json index c51df7306..e8d0b5a63 100644 --- a/packages/db-expo-sqlite-persisted-collection/tsconfig.json +++ b/packages/expo-db-persistence/tsconfig.json @@ -14,8 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-expo-sqlite-persisted-collection/vite.config.ts b/packages/expo-db-persistence/vite.config.ts similarity index 100% rename from packages/db-expo-sqlite-persisted-collection/vite.config.ts rename to packages/expo-db-persistence/vite.config.ts diff --git a/packages/db-expo-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/expo-db-persistence/vitest.e2e.config.ts similarity index 86% rename from packages/db-expo-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/expo-db-persistence/vitest.e2e.config.ts index cc5e6d535..92ea04b95 100644 --- a/packages/db-expo-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/expo-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-node-sqlite-persisted-collection/README.md b/packages/node-db-persistence/README.md similarity index 91% rename from packages/db-node-sqlite-persisted-collection/README.md rename to packages/node-db-persistence/README.md index d13b9224b..5752caf46 100644 --- a/packages/db-node-sqlite-persisted-collection/README.md +++ b/packages/node-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-node-sqlite-persisted-collection +# @tanstack/node-db-persistence Thin Node SQLite persistence for TanStack DB. @@ -14,7 +14,7 @@ import { createCollection } from '@tanstack/db' import { createNodeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-node-sqlite-persisted-collection' +} from '@tanstack/node-db-persistence' import Database from 'better-sqlite3' type Todo = { diff --git a/packages/db-node-sqlite-persisted-collection/e2e/node-persisted-collection.e2e.test.ts b/packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts similarity index 97% rename from packages/db-node-sqlite-persisted-collection/e2e/node-persisted-collection.e2e.test.ts rename to packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts index 393291434..e9e12af3c 100644 --- a/packages/db-node-sqlite-persisted-collection/e2e/node-persisted-collection.e2e.test.ts +++ b/packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts @@ -2,11 +2,11 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import BetterSqlite3 from 'better-sqlite3' import { createNodeSQLitePersistence, persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { Collection } from '@tanstack/db' import type { Comment, diff --git a/packages/db-node-sqlite-persisted-collection/package.json b/packages/node-db-persistence/package.json similarity index 76% rename from packages/db-node-sqlite-persisted-collection/package.json rename to packages/node-db-persistence/package.json index 727b95159..c5be51374 100644 --- a/packages/db-node-sqlite-persisted-collection/package.json +++ b/packages/node-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-node-sqlite-persisted-collection", + "name": "@tanstack/node-db-persistence", "version": "0.1.0", "description": "Node SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-node-sqlite-persisted-collection" + "directory": "packages/node-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-node-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -47,7 +47,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*", + "@tanstack/db-persistence-core": "workspace:*", "better-sqlite3": "^12.6.2" }, "peerDependencies": { diff --git a/packages/db-node-sqlite-persisted-collection/src/index.ts b/packages/node-db-persistence/src/index.ts similarity index 65% rename from packages/db-node-sqlite-persisted-collection/src/index.ts rename to packages/node-db-persistence/src/index.ts index 0e649333f..1d1c33faf 100644 --- a/packages/db-node-sqlite-persisted-collection/src/index.ts +++ b/packages/node-db-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { NodeSQLitePersistenceOptions, NodeSQLiteSchemaMismatchPolicy, } from './node-persistence' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-node-sqlite-persisted-collection/src/node-driver.ts b/packages/node-db-persistence/src/node-driver.ts similarity index 98% rename from packages/db-node-sqlite-persisted-collection/src/node-driver.ts rename to packages/node-db-persistence/src/node-driver.ts index b849a9f3d..8681e9870 100644 --- a/packages/db-node-sqlite-persisted-collection/src/node-driver.ts +++ b/packages/node-db-persistence/src/node-driver.ts @@ -1,7 +1,7 @@ import { AsyncLocalStorage } from 'node:async_hooks' import BetterSqlite3 from 'better-sqlite3' -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' const DEFAULT_PRAGMAS = [ `journal_mode = WAL`, diff --git a/packages/db-node-sqlite-persisted-collection/src/node-persistence.ts b/packages/node-db-persistence/src/node-persistence.ts similarity index 97% rename from packages/db-node-sqlite-persisted-collection/src/node-persistence.ts rename to packages/node-db-persistence/src/node-persistence.ts index 993a1418a..7b37c1949 100644 --- a/packages/db-node-sqlite-persisted-collection/src/node-persistence.ts +++ b/packages/node-db-persistence/src/node-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { BetterSqlite3SQLiteDriver } from './node-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { BetterSqlite3Database } from './node-driver' export type { BetterSqlite3Database } from './node-driver' diff --git a/packages/db-node-sqlite-persisted-collection/tests/node-driver.test.ts b/packages/node-db-persistence/tests/node-driver.test.ts similarity index 72% rename from packages/db-node-sqlite-persisted-collection/tests/node-driver.test.ts rename to packages/node-db-persistence/tests/node-driver.test.ts index 2979b9983..2128f4e1c 100644 --- a/packages/db-node-sqlite-persisted-collection/tests/node-driver.test.ts +++ b/packages/node-db-persistence/tests/node-driver.test.ts @@ -1,9 +1,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-sqlite-`)) diff --git a/packages/db-node-sqlite-persisted-collection/tests/node-persistence.test.ts b/packages/node-db-persistence/tests/node-persistence.test.ts similarity index 95% rename from packages/db-node-sqlite-persisted-collection/tests/node-persistence.test.ts rename to packages/node-db-persistence/tests/node-persistence.test.ts index c4f3a5f17..82d1ca821 100644 --- a/packages/db-node-sqlite-persisted-collection/tests/node-persistence.test.ts +++ b/packages/node-db-persistence/tests/node-persistence.test.ts @@ -5,12 +5,12 @@ import BetterSqlite3 from 'better-sqlite3' import { describe, expect, it } from 'vitest' import { createNodeSQLitePersistence, persistedCollectionOptions } from '../src' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-persistence-`)) diff --git a/packages/db-node-sqlite-persisted-collection/tests/node-sqlite-core-adapter-contract.test.ts b/packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts similarity index 74% rename from packages/db-node-sqlite-persisted-collection/tests/node-sqlite-core-adapter-contract.test.ts rename to packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts index eb37c05d9..450262f9f 100644 --- a/packages/db-node-sqlite-persisted-collection/tests/node-sqlite-core-adapter-contract.test.ts +++ b/packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts @@ -1,13 +1,13 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-sqlite-core-`)) diff --git a/packages/node-db-persistence/tsconfig.docs.json b/packages/node-db-persistence/tsconfig.docs.json new file mode 100644 index 000000000..b8d092931 --- /dev/null +++ b/packages/node-db-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/db-node-sqlite-persisted-collection/tsconfig.json b/packages/node-db-persistence/tsconfig.json similarity index 83% rename from packages/db-node-sqlite-persisted-collection/tsconfig.json rename to packages/node-db-persistence/tsconfig.json index 4074d193d..36fd8d5bb 100644 --- a/packages/db-node-sqlite-persisted-collection/tsconfig.json +++ b/packages/node-db-persistence/tsconfig.json @@ -14,8 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-node-sqlite-persisted-collection/vite.config.ts b/packages/node-db-persistence/vite.config.ts similarity index 100% rename from packages/db-node-sqlite-persisted-collection/vite.config.ts rename to packages/node-db-persistence/vite.config.ts diff --git a/packages/db-node-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/node-db-persistence/vitest.e2e.config.ts similarity index 82% rename from packages/db-node-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/node-db-persistence/vitest.e2e.config.ts index 063029e51..d2c27254a 100644 --- a/packages/db-node-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/node-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/query-db-collection/tests/query.test.ts b/packages/query-db-collection/tests/query.test.ts index c2d4fe857..c9b231f50 100644 --- a/packages/query-db-collection/tests/query.test.ts +++ b/packages/query-db-collection/tests/query.test.ts @@ -1,16 +1,16 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { QueryClient, hashKey } from '@tanstack/query-core' import { + BTreeIndex, createCollection, createLiveQueryCollection, eq, ilike, inArray, or, - BTreeIndex, } from '@tanstack/db' import { stripVirtualProps } from '../../db/tests/utils' -import { persistedCollectionOptions } from '../../db-sqlite-persisted-collection-core/src' +import { persistedCollectionOptions } from '../../db-persistence-core/src' import { queryCollectionOptions } from '../src/query' import type { QueryFunctionContext } from '@tanstack/query-core' import type { diff --git a/packages/db-react-native-sqlite-persisted-collection/README.md b/packages/react-native-db-persistence/README.md similarity index 90% rename from packages/db-react-native-sqlite-persisted-collection/README.md rename to packages/react-native-db-persistence/README.md index 7c944bc30..07cf4e90f 100644 --- a/packages/db-react-native-sqlite-persisted-collection/README.md +++ b/packages/react-native-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-react-native-sqlite-persisted-collection +# @tanstack/react-native-db-persistence Thin SQLite persistence for React Native apps (including Expo runtime). @@ -15,7 +15,7 @@ import { createCollection } from '@tanstack/db' import { createReactNativeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-react-native-sqlite-persisted-collection' +} from '@tanstack/react-native-db-persistence' type Todo = { id: string diff --git a/packages/db-react-native-sqlite-persisted-collection/e2e/expo-persisted-collection.e2e.test.ts b/packages/react-native-db-persistence/e2e/expo-persisted-collection.e2e.test.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/e2e/expo-persisted-collection.e2e.test.ts rename to packages/react-native-db-persistence/e2e/expo-persisted-collection.e2e.test.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts b/packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts similarity index 97% rename from packages/db-react-native-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts rename to packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts index bf7080319..fee78f397 100644 --- a/packages/db-react-native-sqlite-persisted-collection/e2e/mobile-persisted-collection-conformance-suite.ts +++ b/packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts @@ -2,13 +2,13 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createOpSQLiteTestDatabase } from '../tests/helpers/op-sqlite-test-db' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/db-react-native-sqlite-persisted-collection/e2e/react-native-persisted-collection.e2e.test.ts b/packages/react-native-db-persistence/e2e/react-native-persisted-collection.e2e.test.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/e2e/react-native-persisted-collection.e2e.test.ts rename to packages/react-native-db-persistence/e2e/react-native-persisted-collection.e2e.test.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/package.json b/packages/react-native-db-persistence/package.json similarity index 73% rename from packages/db-react-native-sqlite-persisted-collection/package.json rename to packages/react-native-db-persistence/package.json index 5cecaade5..529c9da3e 100644 --- a/packages/db-react-native-sqlite-persisted-collection/package.json +++ b/packages/react-native-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-react-native-sqlite-persisted-collection", + "name": "@tanstack/react-native-db-persistence", "version": "0.1.0", "description": "React Native and Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-react-native-sqlite-persisted-collection" + "directory": "packages/react-native-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,8 +22,8 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-react-native-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:runtime": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-react-native-sqlite-persisted-collection build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/react-native-db-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:runtime": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/react-native-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -58,7 +58,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "@op-engineering/op-sqlite": "^15.2.5", diff --git a/packages/db-react-native-sqlite-persisted-collection/src/index.ts b/packages/react-native-db-persistence/src/index.ts similarity index 66% rename from packages/db-react-native-sqlite-persisted-collection/src/index.ts rename to packages/react-native-db-persistence/src/index.ts index cbd46b6a2..fd9aa63a5 100644 --- a/packages/db-react-native-sqlite-persisted-collection/src/index.ts +++ b/packages/react-native-db-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { ReactNativeSQLitePersistenceOptions, ReactNativeSQLiteSchemaMismatchPolicy, } from './react-native' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-react-native-sqlite-persisted-collection/src/mobile-persistence.ts b/packages/react-native-db-persistence/src/mobile-persistence.ts similarity index 97% rename from packages/db-react-native-sqlite-persisted-collection/src/mobile-persistence.ts rename to packages/react-native-db-persistence/src/mobile-persistence.ts index e8416b2bf..7948f8272 100644 --- a/packages/db-react-native-sqlite-persisted-collection/src/mobile-persistence.ts +++ b/packages/react-native-db-persistence/src/mobile-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { OpSQLiteDriver } from './op-sqlite-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { OpSQLiteDatabaseLike } from './op-sqlite-driver' export type { OpSQLiteDatabaseLike } from './op-sqlite-driver' diff --git a/packages/db-react-native-sqlite-persisted-collection/src/op-sqlite-driver.ts b/packages/react-native-db-persistence/src/op-sqlite-driver.ts similarity index 99% rename from packages/db-react-native-sqlite-persisted-collection/src/op-sqlite-driver.ts rename to packages/react-native-db-persistence/src/op-sqlite-driver.ts index 432d80630..61eccd2eb 100644 --- a/packages/db-react-native-sqlite-persisted-collection/src/op-sqlite-driver.ts +++ b/packages/react-native-db-persistence/src/op-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' type OpSQLiteExecuteFn = ( sql: string, diff --git a/packages/db-react-native-sqlite-persisted-collection/src/react-native.ts b/packages/react-native-db-persistence/src/react-native.ts similarity index 95% rename from packages/db-react-native-sqlite-persisted-collection/src/react-native.ts rename to packages/react-native-db-persistence/src/react-native.ts index a862cac4a..049dbb4d7 100644 --- a/packages/db-react-native-sqlite-persisted-collection/src/react-native.ts +++ b/packages/react-native-db-persistence/src/react-native.ts @@ -3,7 +3,7 @@ import type { MobileSQLitePersistenceOptions, MobileSQLiteSchemaMismatchPolicy, } from './mobile-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' export type ReactNativeSQLitePersistenceOptions = MobileSQLitePersistenceOptions export type ReactNativeSQLiteSchemaMismatchPolicy = diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts b/packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts similarity index 77% rename from packages/db-react-native-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts rename to packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts index a1f89f00a..c6bf1e5b8 100644 --- a/packages/db-react-native-sqlite-persisted-collection/tests/expo-sqlite-core-adapter-contract.test.ts +++ b/packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-sqlite-core-`)) diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/helpers/mobile-runtime-test-setup.ts b/packages/react-native-db-persistence/tests/helpers/mobile-runtime-test-setup.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/tests/helpers/mobile-runtime-test-setup.ts rename to packages/react-native-db-persistence/tests/helpers/mobile-runtime-test-setup.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/helpers/op-sqlite-test-db.ts b/packages/react-native-db-persistence/tests/helpers/op-sqlite-test-db.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/tests/helpers/op-sqlite-test-db.ts rename to packages/react-native-db-persistence/tests/helpers/op-sqlite-test-db.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/mobile-runtime-persistence-contract.test.ts b/packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts similarity index 94% rename from packages/db-react-native-sqlite-persisted-collection/tests/mobile-runtime-persistence-contract.test.ts rename to packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts index 2c33cce60..4f1b67953 100644 --- a/packages/db-react-native-sqlite-persisted-collection/tests/mobile-runtime-persistence-contract.test.ts +++ b/packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts @@ -7,18 +7,18 @@ import { persistedCollectionOptions, } from '../src' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { OpSQLiteDatabaseLike } from '../src/op-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: OpSQLiteDatabaseLike diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/op-sqlite-driver.test.ts b/packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts similarity index 99% rename from packages/db-react-native-sqlite-persisted-collection/tests/op-sqlite-driver.test.ts rename to packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts index ca34a80c0..f30a38562 100644 --- a/packages/db-react-native-sqlite-persisted-collection/tests/op-sqlite-driver.test.ts +++ b/packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persisted-collection-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' const activeCleanupFns: Array<() => void | Promise> = [] diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/react-native-persistence.test.ts b/packages/react-native-db-persistence/tests/react-native-persistence.test.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/tests/react-native-persistence.test.ts rename to packages/react-native-db-persistence/tests/react-native-persistence.test.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/tests/react-native-sqlite-core-adapter-contract.test.ts b/packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts similarity index 77% rename from packages/db-react-native-sqlite-persisted-collection/tests/react-native-sqlite-core-adapter-contract.test.ts rename to packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts index 548f3fdd5..5ff440caf 100644 --- a/packages/db-react-native-sqlite-persisted-collection/tests/react-native-sqlite-core-adapter-contract.test.ts +++ b/packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-rn-sqlite-core-`)) diff --git a/packages/react-native-db-persistence/tsconfig.docs.json b/packages/react-native-db-persistence/tsconfig.docs.json new file mode 100644 index 000000000..b8d092931 --- /dev/null +++ b/packages/react-native-db-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/db-react-native-sqlite-persisted-collection/tsconfig.json b/packages/react-native-db-persistence/tsconfig.json similarity index 83% rename from packages/db-react-native-sqlite-persisted-collection/tsconfig.json rename to packages/react-native-db-persistence/tsconfig.json index 4074d193d..36fd8d5bb 100644 --- a/packages/db-react-native-sqlite-persisted-collection/tsconfig.json +++ b/packages/react-native-db-persistence/tsconfig.json @@ -14,8 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-react-native-sqlite-persisted-collection/vite.config.ts b/packages/react-native-db-persistence/vite.config.ts similarity index 100% rename from packages/db-react-native-sqlite-persisted-collection/vite.config.ts rename to packages/react-native-db-persistence/vite.config.ts diff --git a/packages/db-react-native-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/react-native-db-persistence/vitest.e2e.config.ts similarity index 86% rename from packages/db-react-native-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/react-native-db-persistence/vitest.e2e.config.ts index daac5ed6d..0c69dc62e 100644 --- a/packages/db-react-native-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/react-native-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/packages/db-tauri-sqlite-persisted-collection/README.md b/packages/tauri-db-persistence/README.md similarity index 87% rename from packages/db-tauri-sqlite-persisted-collection/README.md rename to packages/tauri-db-persistence/README.md index 3c2c6b32f..51011e569 100644 --- a/packages/db-tauri-sqlite-persisted-collection/README.md +++ b/packages/tauri-db-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-tauri-sqlite-persisted-collection +# @tanstack/tauri-db-persistence Thin SQLite persistence for Tauri apps using `@tauri-apps/plugin-sql`. @@ -10,7 +10,7 @@ Thin SQLite persistence for Tauri apps using `@tauri-apps/plugin-sql`. ## Install ```bash -pnpm add @tanstack/db-tauri-sqlite-persisted-collection @tauri-apps/plugin-sql +pnpm add @tanstack/tauri-db-persistence @tauri-apps/plugin-sql ``` ## Consumer-side Tauri setup @@ -49,7 +49,7 @@ import { createCollection } from '@tanstack/db' import { createTauriSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-tauri-sqlite-persisted-collection' +} from '@tanstack/tauri-db-persistence' type Todo = { id: string @@ -89,8 +89,8 @@ export const todosCollection = createCollection( ## Testing -- `pnpm --filter @tanstack/db-tauri-sqlite-persisted-collection test` +- `pnpm --filter @tanstack/tauri-db-persistence test` runs the driver and shared adapter contract tests. -- `pnpm --filter @tanstack/db-tauri-sqlite-persisted-collection test:e2e` +- `pnpm --filter @tanstack/tauri-db-persistence test:e2e` builds the repo-local Tauri harness and runs the persisted collection conformance suite inside a real Tauri runtime. diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/index.html b/packages/tauri-db-persistence/e2e/app/index.html similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/index.html rename to packages/tauri-db-persistence/e2e/app/index.html diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/package.json b/packages/tauri-db-persistence/e2e/app/package.json similarity index 75% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/package.json rename to packages/tauri-db-persistence/e2e/app/package.json index 053802d95..2e8414519 100644 --- a/packages/db-tauri-sqlite-persisted-collection/e2e/app/package.json +++ b/packages/tauri-db-persistence/e2e/app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-tauri-sqlite-persisted-collection-e2e-app", + "name": "@tanstack/tauri-db-persistence-e2e-app", "private": true, "version": "0.0.0", "type": "module", @@ -12,7 +12,7 @@ "@tauri-apps/api": "^2.10.1", "@tauri-apps/plugin-sql": "^2.3.2", "@tanstack/db": "workspace:*", - "@tanstack/db-tauri-sqlite-persisted-collection": "workspace:*" + "@tanstack/tauri-db-persistence": "workspace:*" }, "devDependencies": { "@tauri-apps/cli": "^2.10.1", diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/.gitignore b/packages/tauri-db-persistence/e2e/app/src-tauri/.gitignore similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/.gitignore rename to packages/tauri-db-persistence/e2e/app/src-tauri/.gitignore diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/Cargo.toml b/packages/tauri-db-persistence/e2e/app/src-tauri/Cargo.toml similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/Cargo.toml rename to packages/tauri-db-persistence/e2e/app/src-tauri/Cargo.toml diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/build.rs b/packages/tauri-db-persistence/e2e/app/src-tauri/build.rs similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/build.rs rename to packages/tauri-db-persistence/e2e/app/src-tauri/build.rs diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/capabilities/default.json b/packages/tauri-db-persistence/e2e/app/src-tauri/capabilities/default.json similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/capabilities/default.json rename to packages/tauri-db-persistence/e2e/app/src-tauri/capabilities/default.json diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/icons/icon.png b/packages/tauri-db-persistence/e2e/app/src-tauri/icons/icon.png similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/icons/icon.png rename to packages/tauri-db-persistence/e2e/app/src-tauri/icons/icon.png diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/src/main.rs b/packages/tauri-db-persistence/e2e/app/src-tauri/src/main.rs similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/src/main.rs rename to packages/tauri-db-persistence/e2e/app/src-tauri/src/main.rs diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/tauri.conf.json b/packages/tauri-db-persistence/e2e/app/src-tauri/tauri.conf.json similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src-tauri/tauri.conf.json rename to packages/tauri-db-persistence/e2e/app/src-tauri/tauri.conf.json diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/main.ts b/packages/tauri-db-persistence/e2e/app/src/main.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/main.ts rename to packages/tauri-db-persistence/e2e/app/src/main.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/native-tauri-sql-test-db.ts b/packages/tauri-db-persistence/e2e/app/src/native-tauri-sql-test-db.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/native-tauri-sql-test-db.ts rename to packages/tauri-db-persistence/e2e/app/src/native-tauri-sql-test-db.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/node-crypto.ts b/packages/tauri-db-persistence/e2e/app/src/node-crypto.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/node-crypto.ts rename to packages/tauri-db-persistence/e2e/app/src/node-crypto.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/register-tauri-e2e-suite.ts b/packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts similarity index 96% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/register-tauri-e2e-suite.ts rename to packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts index 7a14029d6..8fbb87b7f 100644 --- a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/register-tauri-e2e-suite.ts +++ b/packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts @@ -1,7 +1,7 @@ import { createTauriSQLitePersistence } from '../../../src' import { createTauriPersistedCollectionHarnessConfig } from '../../shared/tauri-persisted-collection-harness' import { registerPersistedCollectionConformanceSuite } from '../../shared/register-persisted-collection-conformance-suite' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' import type { TauriSQLiteDatabaseLike } from '../../../src' type PersistableRow = { diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/runtime-vitest.ts b/packages/tauri-db-persistence/e2e/app/src/runtime-vitest.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/runtime-vitest.ts rename to packages/tauri-db-persistence/e2e/app/src/runtime-vitest.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/src/vite-env.d.ts b/packages/tauri-db-persistence/e2e/app/src/vite-env.d.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/src/vite-env.d.ts rename to packages/tauri-db-persistence/e2e/app/src/vite-env.d.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/tsconfig.json b/packages/tauri-db-persistence/e2e/app/tsconfig.json similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/tsconfig.json rename to packages/tauri-db-persistence/e2e/app/tsconfig.json diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/app/vite.config.ts b/packages/tauri-db-persistence/e2e/app/vite.config.ts similarity index 84% rename from packages/db-tauri-sqlite-persisted-collection/e2e/app/vite.config.ts rename to packages/tauri-db-persistence/e2e/app/vite.config.ts index fb33e888a..4ae38e225 100644 --- a/packages/db-tauri-sqlite-persisted-collection/e2e/app/vite.config.ts +++ b/packages/tauri-db-persistence/e2e/app/vite.config.ts @@ -11,9 +11,9 @@ export default defineConfig({ 'node:crypto': resolve(appDirectory, `src/node-crypto.ts`), '@tanstack/db': resolve(appDirectory, `../../../db/src`), '@tanstack/db-ivm': resolve(appDirectory, `../../../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( appDirectory, - `../../../db-sqlite-persisted-collection-core/src`, + `../../../db-persistence-core/src`, ), }, }, diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/run-tauri-e2e.ts b/packages/tauri-db-persistence/e2e/run-tauri-e2e.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/run-tauri-e2e.ts rename to packages/tauri-db-persistence/e2e/run-tauri-e2e.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts b/packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts similarity index 92% rename from packages/db-tauri-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts rename to packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts index 413485c4e..c880e747c 100644 --- a/packages/db-tauri-sqlite-persisted-collection/e2e/shared/register-persisted-collection-conformance-suite.ts +++ b/packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts @@ -1,5 +1,5 @@ import { afterAll, afterEach, beforeAll } from 'vitest' -import { runPersistedCollectionConformanceSuite } from '../../../db-sqlite-persisted-collection-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { TauriPersistedCollectionHarnessConfig } from './tauri-persisted-collection-harness' type RegisteredHarness = { diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/shared/tauri-persisted-collection-harness.ts b/packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts similarity index 98% rename from packages/db-tauri-sqlite-persisted-collection/e2e/shared/tauri-persisted-collection-harness.ts rename to packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts index a4fcb3c0e..397723ece 100644 --- a/packages/db-tauri-sqlite-persisted-collection/e2e/shared/tauri-persisted-collection-harness.ts +++ b/packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts @@ -1,4 +1,4 @@ -import { createCollection, BTreeIndex } from '@tanstack/db' +import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../../src' import { generateSeedData } from '../../../db-collection-e2e/src/fixtures/seed-data' import type { Collection } from '@tanstack/db' @@ -8,7 +8,7 @@ import type { Post, User, } from '../../../db-collection-e2e/src/types' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' type PersistableRow = { id: string diff --git a/packages/db-tauri-sqlite-persisted-collection/e2e/tauri-persisted-collection.e2e.test.ts b/packages/tauri-db-persistence/e2e/tauri-persisted-collection.e2e.test.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/e2e/tauri-persisted-collection.e2e.test.ts rename to packages/tauri-db-persistence/e2e/tauri-persisted-collection.e2e.test.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/package.json b/packages/tauri-db-persistence/package.json similarity index 79% rename from packages/db-tauri-sqlite-persisted-collection/package.json rename to packages/tauri-db-persistence/package.json index 6ccbe5f65..e874d023d 100644 --- a/packages/db-tauri-sqlite-persisted-collection/package.json +++ b/packages/tauri-db-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-tauri-sqlite-persisted-collection", + "name": "@tanstack/tauri-db-persistence", "version": "0.1.0", "description": "Tauri SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-tauri-sqlite-persisted-collection" + "directory": "packages/tauri-db-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -21,7 +21,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persisted-collection-core build && pnpm --filter @tanstack/db-tauri-sqlite-persisted-collection build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/tauri-db-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -56,7 +56,7 @@ "src" ], "dependencies": { - "@tanstack/db-sqlite-persisted-collection-core": "workspace:*" + "@tanstack/db-persistence-core": "workspace:*" }, "peerDependencies": { "@tauri-apps/plugin-sql": "^2.3.2", diff --git a/packages/db-tauri-sqlite-persisted-collection/src/index.ts b/packages/tauri-db-persistence/src/index.ts similarity index 64% rename from packages/db-tauri-sqlite-persisted-collection/src/index.ts rename to packages/tauri-db-persistence/src/index.ts index 5e2642ca4..75efd794f 100644 --- a/packages/db-tauri-sqlite-persisted-collection/src/index.ts +++ b/packages/tauri-db-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { TauriSQLitePersistenceOptions, TauriSQLiteSchemaMismatchPolicy, } from './tauri' -export { persistedCollectionOptions } from '@tanstack/db-sqlite-persisted-collection-core' +export { persistedCollectionOptions } from '@tanstack/db-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' diff --git a/packages/db-tauri-sqlite-persisted-collection/src/tauri-persistence.ts b/packages/tauri-db-persistence/src/tauri-persistence.ts similarity index 97% rename from packages/db-tauri-sqlite-persisted-collection/src/tauri-persistence.ts rename to packages/tauri-db-persistence/src/tauri-persistence.ts index 2d7f011c3..9e7e7fe2b 100644 --- a/packages/db-tauri-sqlite-persisted-collection/src/tauri-persistence.ts +++ b/packages/tauri-db-persistence/src/tauri-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import { TauriSQLiteDriver } from './tauri-sql-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-sqlite-persisted-collection-core' +} from '@tanstack/db-persistence-core' import type { TauriSQLiteDatabaseLike } from './tauri-sql-driver' export type { TauriSQLiteDatabaseLike } from './tauri-sql-driver' diff --git a/packages/db-tauri-sqlite-persisted-collection/src/tauri-sql-driver.ts b/packages/tauri-db-persistence/src/tauri-sql-driver.ts similarity index 98% rename from packages/db-tauri-sqlite-persisted-collection/src/tauri-sql-driver.ts rename to packages/tauri-db-persistence/src/tauri-sql-driver.ts index 6738680d9..f3aa72058 100644 --- a/packages/db-tauri-sqlite-persisted-collection/src/tauri-sql-driver.ts +++ b/packages/tauri-db-persistence/src/tauri-sql-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persisted-collection-core' -import type { SQLiteDriver } from '@tanstack/db-sqlite-persisted-collection-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-persistence-core' import type Database from '@tauri-apps/plugin-sql' export type TauriSQLiteDatabaseLike = Pick< diff --git a/packages/db-tauri-sqlite-persisted-collection/src/tauri.ts b/packages/tauri-db-persistence/src/tauri.ts similarity index 95% rename from packages/db-tauri-sqlite-persisted-collection/src/tauri.ts rename to packages/tauri-db-persistence/src/tauri.ts index 69e98095c..cb250f0a6 100644 --- a/packages/db-tauri-sqlite-persisted-collection/src/tauri.ts +++ b/packages/tauri-db-persistence/src/tauri.ts @@ -3,7 +3,7 @@ import type { TauriSQLitePersistenceOptions as TauriSQLitePersistenceOptionsBase, TauriSQLiteSchemaMismatchPolicy as TauriSQLiteSchemaMismatchPolicyBase, } from './tauri-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persisted-collection-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' export type TauriSQLitePersistenceOptions = TauriSQLitePersistenceOptionsBase export type TauriSQLiteSchemaMismatchPolicy = diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/helpers/tauri-sql-test-db.ts b/packages/tauri-db-persistence/tests/helpers/tauri-sql-test-db.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/tests/helpers/tauri-sql-test-db.ts rename to packages/tauri-db-persistence/tests/helpers/tauri-sql-test-db.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-persistence.test.ts b/packages/tauri-db-persistence/tests/tauri-persistence.test.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/tests/tauri-persistence.test.ts rename to packages/tauri-db-persistence/tests/tauri-persistence.test.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-runtime-persistence-contract.test.ts b/packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts similarity index 95% rename from packages/db-tauri-sqlite-persisted-collection/tests/tauri-runtime-persistence-contract.test.ts rename to packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts index 55c6096a3..832d02c65 100644 --- a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-runtime-persistence-contract.test.ts +++ b/packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' -import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-sqlite-persisted-collection-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-persistence-core/src' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/runtime-persistence-contract' +} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-persistence-`)) diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver-contract.test.ts b/packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts similarity index 76% rename from packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver-contract.test.ts rename to packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts index 343e4f1bf..af6c5af1f 100644 --- a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver-contract.test.ts +++ b/packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' -import type { SQLiteDriverContractHarness } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-sqlite-`)) diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver.test.ts b/packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts similarity index 99% rename from packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver.test.ts rename to packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts index 36f667042..0a3ed4503 100644 --- a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sql-driver.test.ts +++ b/packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' -import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persisted-collection-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' diff --git a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sqlite-core-adapter-contract.test.ts b/packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts similarity index 77% rename from packages/db-tauri-sqlite-persisted-collection/tests/tauri-sqlite-core-adapter-contract.test.ts rename to packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts index 572d8db39..323aec53b 100644 --- a/packages/db-tauri-sqlite-persisted-collection/tests/tauri-sqlite-core-adapter-contract.test.ts +++ b/packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persisted-collection-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-sqlite-persisted-collection-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-core-`)) diff --git a/packages/tauri-db-persistence/tsconfig.docs.json b/packages/tauri-db-persistence/tsconfig.docs.json new file mode 100644 index 000000000..b8d092931 --- /dev/null +++ b/packages/tauri-db-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/db-tauri-sqlite-persisted-collection/tsconfig.json b/packages/tauri-db-persistence/tsconfig.json similarity index 85% rename from packages/db-tauri-sqlite-persisted-collection/tsconfig.json rename to packages/tauri-db-persistence/tsconfig.json index 4c52e365d..6a677ef06 100644 --- a/packages/db-tauri-sqlite-persisted-collection/tsconfig.json +++ b/packages/tauri-db-persistence/tsconfig.json @@ -13,8 +13,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-sqlite-persisted-collection-core": [ - "../db-sqlite-persisted-collection-core/src" + "@tanstack/db-persistence-core": [ + "../db-persistence-core/src" ] } }, diff --git a/packages/db-tauri-sqlite-persisted-collection/vite.config.ts b/packages/tauri-db-persistence/vite.config.ts similarity index 100% rename from packages/db-tauri-sqlite-persisted-collection/vite.config.ts rename to packages/tauri-db-persistence/vite.config.ts diff --git a/packages/db-tauri-sqlite-persisted-collection/vitest.e2e.config.ts b/packages/tauri-db-persistence/vitest.e2e.config.ts similarity index 85% rename from packages/db-tauri-sqlite-persisted-collection/vitest.e2e.config.ts rename to packages/tauri-db-persistence/vitest.e2e.config.ts index 64236583c..7d71ccb7c 100644 --- a/packages/db-tauri-sqlite-persisted-collection/vitest.e2e.config.ts +++ b/packages/tauri-db-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-sqlite-persisted-collection-core': resolve( + '@tanstack/db-persistence-core': resolve( packageDirectory, - `../db-sqlite-persisted-collection-core/src`, + `../db-persistence-core/src`, ), }, }, diff --git a/persistance-plan/phase-4-node-electron.md b/persistance-plan/phase-4-node-electron.md index deaabfda0..57f28e221 100644 --- a/persistance-plan/phase-4-node-electron.md +++ b/persistance-plan/phase-4-node-electron.md @@ -58,8 +58,8 @@ Ship production-ready Node and Electron adapters on top of the shared SQLite cor ## Deliverables -1. `@tanstack/db-node-sqlite-persisted-collection` -2. `@tanstack/db-electron-sqlite-persisted-collection` +1. `@tanstack/node-db-persistence` +2. `@tanstack/electron-db-persistence` 3. Electron IPC bridge docs and example integration ## Test Plan diff --git a/persistance-plan/phase-5-react-native-expo.md b/persistance-plan/phase-5-react-native-expo.md index b145b1813..adea15567 100644 --- a/persistance-plan/phase-5-react-native-expo.md +++ b/persistance-plan/phase-5-react-native-expo.md @@ -56,7 +56,7 @@ Provide a unified mobile SQLite persistence package for both React Native and Ex ## Deliverables -1. `@tanstack/db-react-native-sqlite-persisted-collection` +1. `@tanstack/react-native-db-persistence` 2. RN and Expo entrypoint docs/examples 3. Mobile-focused integration tests diff --git a/persistance-plan/phase-6-cloudflare-durable-objects.md b/persistance-plan/phase-6-cloudflare-durable-objects.md index e29d6a903..827c66dbc 100644 --- a/persistance-plan/phase-6-cloudflare-durable-objects.md +++ b/persistance-plan/phase-6-cloudflare-durable-objects.md @@ -57,7 +57,7 @@ Implement Durable Object-native SQLite persistence using in-process execution (n ## Deliverables -1. `@tanstack/db-cloudflare-do-sqlite-persisted-collection` +1. `@tanstack/cloudflare-durable-objects-db-persistence` 2. DO initialization helpers and usage docs 3. DO integration test suite diff --git a/persistance-plan/phase-8-browser-multi-tab.md b/persistance-plan/phase-8-browser-multi-tab.md index 7ee8ee497..6d1ae2eeb 100644 --- a/persistance-plan/phase-8-browser-multi-tab.md +++ b/persistance-plan/phase-8-browser-multi-tab.md @@ -26,7 +26,7 @@ Implement robust multi-tab coordination using Web Locks, Visibility API, and Bro ## Implementation Status > **Overall: IMPLEMENTED** — `BrowserCollectionCoordinator` class implemented in -> `packages/db-browser-wa-sqlite-persisted-collection/src/browser-coordinator.ts`. +> `packages/browser-db-persistence/src/browser-coordinator.ts`. > Exported from package index. Unit tests with Web Locks and BroadcastChannel > mocks pass (15 tests). Remaining: hidden-tab stepdown, heartbeat timeout > detection, and Playwright multi-tab integration tests. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 534d4163c..7331c83fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,12 +208,12 @@ importers: examples/electron/offline-first: dependencies: - '@tanstack/db-electron-sqlite-persisted-collection': + '@tanstack/electron-db-persistence': specifier: workspace:* - version: link:../../../packages/db-electron-sqlite-persisted-collection - '@tanstack/db-node-sqlite-persisted-collection': + version: link:../../../packages/electron-db-persistence + '@tanstack/node-db-persistence': specifier: workspace:* - version: link:../../../packages/db-node-sqlite-persisted-collection + version: link:../../../packages/node-db-persistence '@tanstack/offline-transactions': specifier: workspace:* version: link:../../../packages/offline-transactions @@ -302,9 +302,6 @@ importers: '@tanstack/db': specifier: workspace:* version: link:../../../packages/db - '@tanstack/db-react-native-sqlite-persisted-collection': - specifier: workspace:* - version: link:../../../packages/db-react-native-sqlite-persisted-collection '@tanstack/offline-transactions': specifier: ^1.0.24 version: link:../../../packages/offline-transactions @@ -314,6 +311,9 @@ importers: '@tanstack/react-db': specifier: ^0.1.77 version: link:../../../packages/react-db + '@tanstack/react-native-db-persistence': + specifier: workspace:* + version: link:../../../packages/react-native-db-persistence '@tanstack/react-query': specifier: ^5.90.20 version: 5.90.21(react@19.0.0) @@ -475,12 +475,12 @@ importers: examples/react/offline-transactions: dependencies: + '@tanstack/browser-db-persistence': + specifier: workspace:* + version: link:../../../packages/browser-db-persistence '@tanstack/db': specifier: workspace:* version: link:../../../packages/db - '@tanstack/db-browser-wa-sqlite-persisted-collection': - specifier: workspace:* - version: link:../../../packages/db-browser-wa-sqlite-persisted-collection '@tanstack/offline-transactions': specifier: ^1.0.24 version: link:../../../packages/offline-transactions @@ -977,45 +977,11 @@ importers: specifier: ~0.15.0 version: 0.15.1 - packages/db: - dependencies: - '@standard-schema/spec': - specifier: ^1.1.0 - version: 1.1.0 - '@tanstack/db-ivm': - specifier: workspace:* - version: link:../db-ivm - '@tanstack/pacer-lite': - specifier: ^0.2.1 - version: 0.2.1 - typescript: - specifier: '>=4.7' - version: 5.9.3 - devDependencies: - '@tanstack/config': - specifier: ^0.22.2 - version: 0.22.2(@types/node@25.2.2)(@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) - '@vitest/coverage-istanbul': - specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4) - arktype: - specifier: ^2.1.29 - version: 2.1.29 - mitt: - specifier: ^3.0.1 - version: 3.0.1 - superjson: - specifier: ^2.2.6 - version: 2.2.6 - temporal-polyfill: - specifier: ^0.3.0 - version: 0.3.0 - - packages/db-browser-wa-sqlite-persisted-collection: + packages/browser-db-persistence: dependencies: - '@tanstack/db-sqlite-persisted-collection-core': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core + version: link:../db-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1033,14 +999,14 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/db-capacitor-sqlite-persisted-collection: + packages/capacitor-db-persistence: dependencies: '@capacitor-community/sqlite': specifier: ^8.0.1 version: 8.0.1(@capacitor/core@8.2.0) - '@tanstack/db-sqlite-persisted-collection-core': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core + version: link:../db-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1055,7 +1021,7 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/db-capacitor-sqlite-persisted-collection/e2e/app: + packages/capacitor-db-persistence/e2e/app: dependencies: '@capacitor-community/sqlite': specifier: ^8.0.1 @@ -1063,12 +1029,12 @@ importers: '@capacitor/core': specifier: ^8.2.0 version: 8.2.0 + '@tanstack/capacitor-db-persistence': + specifier: workspace:* + version: link:../.. '@tanstack/db': specifier: workspace:* version: link:../../../db - '@tanstack/db-capacitor-sqlite-persisted-collection': - specifier: workspace:* - version: link:../.. devDependencies: '@capacitor/android': specifier: ^8.2.0 @@ -1089,11 +1055,11 @@ importers: specifier: ^7.3.1 version: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - packages/db-cloudflare-do-sqlite-persisted-collection: + packages/cloudflare-durable-objects-db-persistence: dependencies: - '@tanstack/db-sqlite-persisted-collection-core': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core + version: link:../db-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1111,6 +1077,40 @@ importers: specifier: ^4.64.0 version: 4.75.0 + packages/db: + dependencies: + '@standard-schema/spec': + specifier: ^1.1.0 + version: 1.1.0 + '@tanstack/db-ivm': + specifier: workspace:* + version: link:../db-ivm + '@tanstack/pacer-lite': + specifier: ^0.2.1 + version: 0.2.1 + typescript: + specifier: '>=4.7' + version: 5.9.3 + devDependencies: + '@tanstack/config': + specifier: ^0.22.2 + version: 0.22.2(@types/node@25.2.2)(@typescript-eslint/utils@8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.3(jiti@2.6.1))(rollup@4.59.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1)) + '@vitest/coverage-istanbul': + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4) + arktype: + specifier: ^2.1.29 + version: 2.1.29 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + superjson: + specifier: ^2.2.6 + version: 2.2.6 + temporal-polyfill: + specifier: ^0.3.0 + version: 0.3.0 + packages/db-collection-e2e: dependencies: '@tanstack/db': @@ -1144,65 +1144,6 @@ importers: packages/db-collections: {} - packages/db-electron-sqlite-persisted-collection: - dependencies: - '@tanstack/db-sqlite-persisted-collection-core': - specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core - typescript: - specifier: '>=4.7' - version: 5.9.3 - devDependencies: - '@vitest/coverage-istanbul': - specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4) - electron: - specifier: ^40.2.1 - version: 40.8.0 - - packages/db-expo-sqlite-persisted-collection: - dependencies: - '@tanstack/db-sqlite-persisted-collection-core': - specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core - expo-sqlite: - specifier: ^55.0.10 - version: 55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - typescript: - specifier: '>=4.7' - version: 5.9.3 - devDependencies: - '@types/better-sqlite3': - specifier: ^7.6.13 - version: 7.6.13 - '@vitest/coverage-istanbul': - specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4) - better-sqlite3: - specifier: ^12.6.2 - version: 12.8.0 - - packages/db-expo-sqlite-persisted-collection/e2e/expo-runtime-app: - dependencies: - '@tanstack/db': - specifier: workspace:* - version: link:../../../db - '@tanstack/db-expo-sqlite-persisted-collection': - specifier: workspace:* - version: link:../.. - expo: - specifier: ~55.0.6 - version: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) - expo-sqlite: - specifier: ^55.0.10 - version: 55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) - react: - specifier: 19.2.0 - version: 19.2.0 - react-native: - specifier: 0.83.2 - version: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - packages/db-ivm: dependencies: fractional-indexing: @@ -1225,55 +1166,58 @@ importers: specifier: ^0.3.0 version: 0.3.0 - packages/db-node-sqlite-persisted-collection: + packages/db-persistence-core: dependencies: - '@tanstack/db-sqlite-persisted-collection-core': + '@standard-schema/spec': + specifier: ^1.1.0 + version: 1.1.0 + '@tanstack/db': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core - better-sqlite3: - specifier: ^12.6.2 - version: 12.8.0 + version: link:../db typescript: specifier: '>=4.7' version: 5.9.3 devDependencies: - '@types/better-sqlite3': - specifier: ^7.6.13 - version: 7.6.13 '@vitest/coverage-istanbul': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) - packages/db-react-native-sqlite-persisted-collection: + packages/electric-db-collection: dependencies: - '@op-engineering/op-sqlite': - specifier: ^15.2.5 - version: 15.2.7(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@tanstack/db-sqlite-persisted-collection-core': + '@electric-sql/client': + specifier: ^1.5.13 + version: 1.5.13 + '@standard-schema/spec': + specifier: ^1.1.0 + version: 1.1.0 + '@tanstack/db': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core - typescript: - specifier: '>=4.7' - version: 5.9.3 + version: link:../db + '@tanstack/store': + specifier: ^0.9.2 + version: 0.9.2 + debug: + specifier: ^4.4.3 + version: 4.4.3 devDependencies: - '@types/better-sqlite3': - specifier: ^7.6.13 - version: 7.6.13 + '@types/debug': + specifier: ^4.1.12 + version: 4.1.12 + '@types/pg': + specifier: ^8.16.0 + version: 8.18.0 '@vitest/coverage-istanbul': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) - better-sqlite3: - specifier: ^12.6.2 - version: 12.8.0 + pg: + specifier: ^8.20.0 + version: 8.20.0 - packages/db-sqlite-persisted-collection-core: + packages/electron-db-persistence: dependencies: - '@standard-schema/spec': - specifier: ^1.1.0 - version: 1.1.0 - '@tanstack/db': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db + version: link:../db-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1281,19 +1225,22 @@ importers: '@vitest/coverage-istanbul': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) + electron: + specifier: ^40.2.1 + version: 40.8.0 - packages/db-tauri-sqlite-persisted-collection: + packages/expo-db-persistence: dependencies: - '@tanstack/db-sqlite-persisted-collection-core': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db-sqlite-persisted-collection-core + version: link:../db-persistence-core + expo-sqlite: + specifier: ^55.0.10 + version: 55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) typescript: specifier: '>=4.7' version: 5.9.3 devDependencies: - '@tauri-apps/plugin-sql': - specifier: ^2.3.2 - version: 2.3.2 '@types/better-sqlite3': specifier: ^7.6.13 version: 7.6.13 @@ -1304,64 +1251,45 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/db-tauri-sqlite-persisted-collection/e2e/app: + packages/expo-db-persistence/e2e/expo-runtime-app: dependencies: '@tanstack/db': specifier: workspace:* version: link:../../../db - '@tanstack/db-tauri-sqlite-persisted-collection': + '@tanstack/expo-db-persistence': specifier: workspace:* version: link:../.. - '@tauri-apps/api': - specifier: ^2.10.1 - version: 2.10.1 - '@tauri-apps/plugin-sql': - specifier: ^2.3.2 - version: 2.3.2 - devDependencies: - '@tauri-apps/cli': - specifier: ^2.10.1 - version: 2.10.1 - '@types/node': - specifier: ^25.2.2 - version: 25.2.2 - typescript: - specifier: ^5.9.3 - version: 5.9.3 - vite: - specifier: ^7.3.1 - version: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + expo: + specifier: ~55.0.6 + version: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + expo-sqlite: + specifier: ^55.0.10 + version: 55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0) + react: + specifier: 19.2.0 + version: 19.2.0 + react-native: + specifier: 0.83.2 + version: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - packages/electric-db-collection: + packages/node-db-persistence: dependencies: - '@electric-sql/client': - specifier: ^1.5.13 - version: 1.5.13 - '@standard-schema/spec': - specifier: ^1.1.0 - version: 1.1.0 - '@tanstack/db': + '@tanstack/db-persistence-core': specifier: workspace:* - version: link:../db - '@tanstack/store': - specifier: ^0.9.2 - version: 0.9.2 - debug: - specifier: ^4.4.3 - version: 4.4.3 + version: link:../db-persistence-core + better-sqlite3: + specifier: ^12.6.2 + version: 12.8.0 + typescript: + specifier: '>=4.7' + version: 5.9.3 devDependencies: - '@types/debug': - specifier: ^4.1.12 - version: 4.1.12 - '@types/pg': - specifier: ^8.16.0 - version: 8.18.0 + '@types/better-sqlite3': + specifier: ^7.6.13 + version: 7.6.13 '@vitest/coverage-istanbul': specifier: ^3.2.4 version: 3.2.4(vitest@3.2.4) - pg: - specifier: ^8.20.0 - version: 8.20.0 packages/offline-transactions: dependencies: @@ -1478,6 +1406,28 @@ importers: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) + packages/react-native-db-persistence: + dependencies: + '@op-engineering/op-sqlite': + specifier: ^15.2.5 + version: 15.2.7(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@tanstack/db-persistence-core': + specifier: workspace:* + version: link:../db-persistence-core + typescript: + specifier: '>=4.7' + version: 5.9.3 + devDependencies: + '@types/better-sqlite3': + specifier: ^7.6.13 + version: 7.6.13 + '@vitest/coverage-istanbul': + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4) + better-sqlite3: + specifier: ^12.6.2 + version: 12.8.0 + packages/rxdb-db-collection: dependencies: '@standard-schema/spec': @@ -1565,6 +1515,56 @@ importers: specifier: ^4.3.6 version: 4.4.4(picomatch@4.0.3)(svelte@5.53.6)(typescript@5.9.3) + packages/tauri-db-persistence: + dependencies: + '@tanstack/db-persistence-core': + specifier: workspace:* + version: link:../db-persistence-core + typescript: + specifier: '>=4.7' + version: 5.9.3 + devDependencies: + '@tauri-apps/plugin-sql': + specifier: ^2.3.2 + version: 2.3.2 + '@types/better-sqlite3': + specifier: ^7.6.13 + version: 7.6.13 + '@vitest/coverage-istanbul': + specifier: ^3.2.4 + version: 3.2.4(vitest@3.2.4) + better-sqlite3: + specifier: ^12.6.2 + version: 12.8.0 + + packages/tauri-db-persistence/e2e/app: + dependencies: + '@tanstack/db': + specifier: workspace:* + version: link:../../../db + '@tanstack/tauri-db-persistence': + specifier: workspace:* + version: link:../.. + '@tauri-apps/api': + specifier: ^2.10.1 + version: 2.10.1 + '@tauri-apps/plugin-sql': + specifier: ^2.3.2 + version: 2.3.2 + devDependencies: + '@tauri-apps/cli': + specifier: ^2.10.1 + version: 2.10.1 + '@types/node': + specifier: ^25.2.2 + version: 25.2.2 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^7.3.1 + version: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) + packages/trailbase-db-collection: dependencies: '@standard-schema/spec': @@ -15478,7 +15478,7 @@ snapshots: '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@isaacs/ttlcache@1.4.1': {} @@ -18952,7 +18952,7 @@ snapshots: parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 7.21.0 + undici: 7.24.4 whatwg-mimetype: 4.0.0 chokidar@3.6.0: @@ -20858,7 +20858,7 @@ snapshots: foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 - minipass: 7.1.2 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -22085,7 +22085,7 @@ snapshots: '@npmcli/agent': 4.0.0 cacache: 20.0.3 http-cache-semantics: 4.2.0 - minipass: 7.1.2 + minipass: 7.1.3 minipass-fetch: 5.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -22405,7 +22405,7 @@ snapshots: minipass-collect@2.0.1: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 minipass-fetch@2.1.2: dependencies: @@ -22417,7 +22417,7 @@ snapshots: minipass-fetch@5.0.1: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 minipass-sized: 2.0.0 minizlib: 3.1.0 optionalDependencies: @@ -22456,7 +22456,7 @@ snapshots: minizlib@3.1.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mitt@3.0.1: {} @@ -22999,7 +22999,7 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 path-scurry@2.0.2: dependencies: @@ -24681,7 +24681,7 @@ snapshots: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 From 859c3667e4be9b85432fe3eeefe782b071bad1c3 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 15:31:08 +0000 Subject: [PATCH 2/7] ci: apply automated fixes --- examples/react/offline-transactions/vite.config.ts | 10 ++-------- packages/browser-db-persistence/tsconfig.docs.json | 4 +--- packages/browser-db-persistence/tsconfig.json | 4 +--- packages/capacitor-db-persistence/tsconfig.docs.json | 4 +--- packages/capacitor-db-persistence/tsconfig.json | 4 +--- .../tsconfig.docs.json | 4 +--- .../tsconfig.json | 4 +--- packages/electron-db-persistence/tsconfig.docs.json | 8 ++------ packages/electron-db-persistence/tsconfig.json | 8 ++------ packages/expo-db-persistence/tsconfig.docs.json | 4 +--- packages/expo-db-persistence/tsconfig.json | 4 +--- packages/node-db-persistence/tsconfig.docs.json | 4 +--- packages/node-db-persistence/tsconfig.json | 4 +--- .../react-native-db-persistence/tsconfig.docs.json | 4 +--- packages/react-native-db-persistence/tsconfig.json | 4 +--- packages/tauri-db-persistence/tsconfig.docs.json | 4 +--- packages/tauri-db-persistence/tsconfig.json | 4 +--- 17 files changed, 20 insertions(+), 62 deletions(-) diff --git a/examples/react/offline-transactions/vite.config.ts b/examples/react/offline-transactions/vite.config.ts index 7354015a3..28c3beb77 100644 --- a/examples/react/offline-transactions/vite.config.ts +++ b/examples/react/offline-transactions/vite.config.ts @@ -14,14 +14,8 @@ function watchWorkspacePackages() { const watchPaths = [ path.resolve(__dirname, `../../../packages/db/dist`), path.resolve(__dirname, `../../../packages/offline-transactions/dist`), - path.resolve( - __dirname, - `../../../packages/browser-db-persistence/src`, - ), - path.resolve( - __dirname, - `../../../packages/db-persistence-core/dist`, - ), + path.resolve(__dirname, `../../../packages/browser-db-persistence/src`), + path.resolve(__dirname, `../../../packages/db-persistence-core/dist`), ] console.log(`[watch-workspace] Starting to watch paths:`) diff --git a/packages/browser-db-persistence/tsconfig.docs.json b/packages/browser-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/browser-db-persistence/tsconfig.docs.json +++ b/packages/browser-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/browser-db-persistence/tsconfig.json b/packages/browser-db-persistence/tsconfig.json index 36fd8d5bb..394cc9135 100644 --- a/packages/browser-db-persistence/tsconfig.json +++ b/packages/browser-db-persistence/tsconfig.json @@ -14,9 +14,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/capacitor-db-persistence/tsconfig.docs.json b/packages/capacitor-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/capacitor-db-persistence/tsconfig.docs.json +++ b/packages/capacitor-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/capacitor-db-persistence/tsconfig.json b/packages/capacitor-db-persistence/tsconfig.json index 4dad6d1c5..4154dd106 100644 --- a/packages/capacitor-db-persistence/tsconfig.json +++ b/packages/capacitor-db-persistence/tsconfig.json @@ -13,9 +13,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json b/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json +++ b/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/cloudflare-durable-objects-db-persistence/tsconfig.json b/packages/cloudflare-durable-objects-db-persistence/tsconfig.json index 1b560f0b5..37fb91781 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tsconfig.json +++ b/packages/cloudflare-durable-objects-db-persistence/tsconfig.json @@ -14,9 +14,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": [ diff --git a/packages/electron-db-persistence/tsconfig.docs.json b/packages/electron-db-persistence/tsconfig.docs.json index f83e0e4fa..45f3ae6a7 100644 --- a/packages/electron-db-persistence/tsconfig.docs.json +++ b/packages/electron-db-persistence/tsconfig.docs.json @@ -3,12 +3,8 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/node-db-persistence": [ - "../node-db-persistence/src" - ], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/node-db-persistence": ["../node-db-persistence/src"], + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/electron-db-persistence/tsconfig.json b/packages/electron-db-persistence/tsconfig.json index 425416b90..692d3168a 100644 --- a/packages/electron-db-persistence/tsconfig.json +++ b/packages/electron-db-persistence/tsconfig.json @@ -14,12 +14,8 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/node-db-persistence": [ - "../node-db-persistence/src" - ], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/node-db-persistence": ["../node-db-persistence/src"], + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": [ diff --git a/packages/expo-db-persistence/tsconfig.docs.json b/packages/expo-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/expo-db-persistence/tsconfig.docs.json +++ b/packages/expo-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/expo-db-persistence/tsconfig.json b/packages/expo-db-persistence/tsconfig.json index e8d0b5a63..ec5043ffa 100644 --- a/packages/expo-db-persistence/tsconfig.json +++ b/packages/expo-db-persistence/tsconfig.json @@ -14,9 +14,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/node-db-persistence/tsconfig.docs.json b/packages/node-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/node-db-persistence/tsconfig.docs.json +++ b/packages/node-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/node-db-persistence/tsconfig.json b/packages/node-db-persistence/tsconfig.json index 36fd8d5bb..394cc9135 100644 --- a/packages/node-db-persistence/tsconfig.json +++ b/packages/node-db-persistence/tsconfig.json @@ -14,9 +14,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/react-native-db-persistence/tsconfig.docs.json b/packages/react-native-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/react-native-db-persistence/tsconfig.docs.json +++ b/packages/react-native-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/react-native-db-persistence/tsconfig.json b/packages/react-native-db-persistence/tsconfig.json index 36fd8d5bb..394cc9135 100644 --- a/packages/react-native-db-persistence/tsconfig.json +++ b/packages/react-native-db-persistence/tsconfig.json @@ -14,9 +14,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/tauri-db-persistence/tsconfig.docs.json b/packages/tauri-db-persistence/tsconfig.docs.json index b8d092931..09dd4443a 100644 --- a/packages/tauri-db-persistence/tsconfig.docs.json +++ b/packages/tauri-db-persistence/tsconfig.docs.json @@ -3,9 +3,7 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": ["src"] diff --git a/packages/tauri-db-persistence/tsconfig.json b/packages/tauri-db-persistence/tsconfig.json index 6a677ef06..a100cdb9d 100644 --- a/packages/tauri-db-persistence/tsconfig.json +++ b/packages/tauri-db-persistence/tsconfig.json @@ -13,9 +13,7 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": [ - "../db-persistence-core/src" - ] + "@tanstack/db-persistence-core": ["../db-persistence-core/src"] } }, "include": [ From 2638f9c4c4aca7185a7b9530a348f16ae8e7d080 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 25 Mar 2026 10:27:14 -0600 Subject: [PATCH 3/7] refactor: rename persistence packages to sqlite-persistence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Update all persistence package names to include sqlite qualifier, e.g. @tanstack/tauri-db-persistence → @tanstack/tauri-db-sqlite-persistence Co-Authored-By: Claude Opus 4.6 --- .changeset/persisted-metadata-followups.md | 2 +- .changeset/sqlite-persistence.md | 36 +++++++++--------- .github/workflows/e2e-tests.yml | 10 ++--- PERSISTNCE-PLAN-SQLITE-ONLY.md | 14 +++---- eslint.config.js | 6 +-- .../electron/offline-first/electron/main.ts | 4 +- examples/electron/offline-first/package.json | 4 +- .../electron/offline-first/src/db/todos.ts | 2 +- .../offline-transactions/package.json | 2 +- .../offline-transactions/src/db/todos.ts | 2 +- .../react/offline-transactions/package.json | 2 +- .../src/db/persisted-todos.ts | 2 +- .../react/offline-transactions/vite.config.ts | 22 +++++++---- .../README.md | 4 +- ...ingle-tab-persisted-collection.e2e.test.ts | 2 +- .../package.json | 8 ++-- .../src/browser-coordinator.ts | 2 +- .../src/browser-persistence.ts | 4 +- .../src/index.ts | 4 +- .../src/opfs-database.ts | 2 +- .../src/opfs-worker-protocol.ts | 0 .../src/opfs-worker.ts | 2 +- .../src/vite-env.d.ts | 0 .../src/wa-sqlite-driver.ts | 4 +- .../src/wa-sqlite-examples.d.ts | 0 .../tests/browser-coordinator.test.ts | 2 +- .../tests/browser-persistence.test.ts | 6 +-- .../tests/browser-single-tab.test.ts | 2 +- .../tests/helpers/wa-sqlite-test-db.ts | 0 .../tests/opfs-database.test.ts | 2 +- .../tests/wa-sqlite-driver.test.ts | 4 +- .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 12 +++--- .../e2e/app/.gitignore | 0 .../e2e/app/capacitor.config.ts | 0 .../e2e/app/index.html | 0 .../e2e/app/package.json | 4 +- .../e2e/app/src/main.ts | 0 .../src/native-capacitor-sqlite-test-db.ts | 0 .../e2e/app/src/node-crypto.ts | 0 .../app/src/register-capacitor-e2e-suite.ts | 0 .../e2e/app/src/runtime-vitest.ts | 0 .../e2e/app/tsconfig.json | 0 .../e2e/app/vite.config.ts | 4 +- ...-persisted-collection-conformance-suite.ts | 2 +- ...capacitor-persisted-collection.e2e.test.ts | 0 .../e2e/run-android-e2e.ts | 0 .../e2e/run-ios-e2e.ts | 0 .../capacitor-persisted-collection-harness.ts | 2 +- ...-persisted-collection-conformance-suite.ts | 2 +- .../package.json | 8 ++-- .../src/capacitor-persistence.ts | 4 +- .../src/capacitor-sqlite-driver.ts | 4 +- .../src/capacitor.ts | 2 +- .../src/index.ts | 4 +- .../tests/capacitor-persistence.test.ts | 0 ...citor-runtime-persistence-contract.test.ts | 8 ++-- ...citor-sqlite-core-adapter-contract.test.ts | 6 +-- .../capacitor-sqlite-driver-contract.test.ts | 4 +- .../tests/capacitor-sqlite-driver.test.ts | 2 +- .../tests/helpers/capacitor-sqlite-test-db.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 4 +- .../cloudflare-do-runtime-bridge.e2e.test.ts | 4 +- .../e2e/fixtures/worker.mjs | 0 .../e2e/fixtures/wrangler.toml | 0 .../package.json | 8 ++-- .../src/do-driver.ts | 4 +- .../src/do-persistence.ts | 4 +- .../src/index.ts | 4 +- .../tests/do-driver.test.ts | 6 +-- .../tests/do-persistence.test.ts | 6 +-- .../do-sqlite-core-adapter-contract.test.ts | 6 +-- .../tests/helpers/better-sqlite-do-storage.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../README.md | 12 +++--- .../package.json | 4 +- .../src/errors.ts | 0 .../src/index.ts | 0 .../src/persisted.ts | 0 .../src/sqlite-core-adapter.ts | 0 ...rsisted-collection-conformance-contract.ts | 0 .../contracts/runtime-bridge-e2e-contract.ts | 0 .../contracts/runtime-persistence-contract.ts | 0 .../contracts/sqlite-core-adapter-contract.ts | 0 .../tests/contracts/sqlite-driver-contract.ts | 0 .../tests/persisted.test-d.ts | 0 .../tests/persisted.test.ts | 0 .../sqlite-core-adapter-cli-runtime.test.ts | 0 .../tests/sqlite-core-adapter.test.ts | 0 .../tsconfig.docs.json | 0 .../tsconfig.json | 0 .../vite.config.ts | 0 .../tests/electric.test.ts | 2 +- .../tsconfig.docs.json | 11 ------ .../README.md | 12 +++--- .../package.json | 10 ++--- .../src/electron-coordinator.ts | 2 +- .../src/errors.ts | 0 .../src/index.ts | 4 +- .../src/main.ts | 4 +- .../src/protocol.ts | 2 +- .../src/renderer.ts | 4 +- .../tests/e2e/electron-process-client.ts | 0 .../tests/e2e/fixtures/electron-main.mjs | 2 +- .../tests/e2e/fixtures/renderer-page.html | 0 .../tests/e2e/fixtures/renderer-preload.cjs | 0 .../e2e/fixtures/runtime-bridge-types.ts | 4 +- .../tests/electron-ipc.test-d.ts | 0 .../tests/electron-ipc.test.ts | 8 ++-- .../electron-persisted-collection.e2e.test.ts | 10 ++--- .../tests/electron-runtime-bridge.e2e.test.ts | 4 +- ...ctron-sqlite-core-adapter-contract.test.ts | 8 ++-- .../tsconfig.docs.json | 15 ++++++++ .../tsconfig.json | 8 +++- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 8 ++-- .../README.md | 14 +++---- .../e2e/expo-emulator-smoke.e2e.test.ts | 0 .../e2e/expo-persisted-collection.e2e.test.ts | 0 .../e2e/expo-runtime-app/App.tsx | 2 +- .../e2e/expo-runtime-app/app.json | 0 .../e2e/expo-runtime-app/index.js | 0 .../e2e/expo-runtime-app/metro.config.js | 0 .../e2e/expo-runtime-app/package.json | 4 +- .../e2e/expo-runtime-app/polyfills.js | 0 .../e2e/expo-runtime-app/tsconfig.json | 0 ...-persisted-collection-conformance-suite.ts | 4 +- .../e2e/runtime-protocol.ts | 0 .../package.json | 12 +++--- .../src/expo-sqlite-driver.ts | 4 +- .../src/expo.ts | 4 +- .../src/index.ts | 4 +- .../tests/expo-persistence.test.ts | 0 .../expo-runtime-persistence-contract.test.ts | 8 ++-- .../expo-sqlite-core-adapter-contract.test.ts | 6 +-- .../tests/expo-sqlite-driver-contract.test.ts | 4 +- .../tests/expo-sqlite-driver.test.ts | 2 +- .../helpers/expo-emulator-database-factory.ts | 0 .../tests/helpers/expo-emulator-runtime.ts | 0 .../tests/helpers/expo-sqlite-test-db.ts | 0 .../helpers/mobile-runtime-test-setup.ts | 0 .../tsconfig.docs.json | 4 +- .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../node-db-persistence/tsconfig.docs.json | 10 ----- .../README.md | 4 +- .../e2e/node-persisted-collection.e2e.test.ts | 2 +- .../package.json | 8 ++-- .../src/index.ts | 4 +- .../src/node-driver.ts | 4 +- .../src/node-persistence.ts | 4 +- .../tests/node-driver.test.ts | 4 +- .../tests/node-persistence.test.ts | 6 +-- .../node-sqlite-core-adapter-contract.test.ts | 6 +-- .../tsconfig.docs.json | 12 ++++++ .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../query-db-collection/tests/query.test.ts | 2 +- .../tsconfig.docs.json | 10 ----- .../README.md | 4 +- .../e2e/expo-persisted-collection.e2e.test.ts | 0 ...-persisted-collection-conformance-suite.ts | 4 +- ...ct-native-persisted-collection.e2e.test.ts | 0 .../package.json | 10 ++--- .../src/index.ts | 4 +- .../src/mobile-persistence.ts | 4 +- .../src/op-sqlite-driver.ts | 4 +- .../src/react-native.ts | 2 +- .../expo-sqlite-core-adapter-contract.test.ts | 6 +-- .../helpers/mobile-runtime-test-setup.ts | 0 .../tests/helpers/op-sqlite-test-db.ts | 0 ...obile-runtime-persistence-contract.test.ts | 8 ++-- .../tests/op-sqlite-driver.test.ts | 2 +- .../tests/react-native-persistence.test.ts | 0 ...ative-sqlite-core-adapter-contract.test.ts | 6 +-- .../tsconfig.docs.json | 12 ++++++ .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- .../tauri-db-persistence/tsconfig.docs.json | 10 ----- .../README.md | 10 ++--- .../e2e/app/index.html | 0 .../e2e/app/package.json | 4 +- .../e2e/app/src-tauri/.gitignore | 0 .../e2e/app/src-tauri/Cargo.toml | 0 .../e2e/app/src-tauri/build.rs | 0 .../app/src-tauri/capabilities/default.json | 0 .../e2e/app/src-tauri/icons/icon.png | Bin .../e2e/app/src-tauri/src/main.rs | 0 .../e2e/app/src-tauri/tauri.conf.json | 0 .../e2e/app/src/main.ts | 0 .../e2e/app/src/native-tauri-sql-test-db.ts | 0 .../e2e/app/src/node-crypto.ts | 0 .../e2e/app/src/register-tauri-e2e-suite.ts | 2 +- .../e2e/app/src/runtime-vitest.ts | 0 .../e2e/app/src/vite-env.d.ts | 0 .../e2e/app/tsconfig.json | 0 .../e2e/app/vite.config.ts | 4 +- .../e2e/run-tauri-e2e.ts | 0 ...-persisted-collection-conformance-suite.ts | 2 +- .../tauri-persisted-collection-harness.ts | 2 +- .../tauri-persisted-collection.e2e.test.ts | 0 .../package.json | 8 ++-- .../src/index.ts | 4 +- .../src/tauri-persistence.ts | 4 +- .../src/tauri-sql-driver.ts | 4 +- .../src/tauri.ts | 2 +- .../tests/helpers/tauri-sql-test-db.ts | 0 .../tests/tauri-persistence.test.ts | 0 ...tauri-runtime-persistence-contract.test.ts | 6 +-- .../tests/tauri-sql-driver-contract.test.ts | 4 +- .../tests/tauri-sql-driver.test.ts | 2 +- ...tauri-sqlite-core-adapter-contract.test.ts | 6 +-- .../tsconfig.docs.json | 12 ++++++ .../tsconfig.json | 4 +- .../vite.config.ts | 0 .../vitest.e2e.config.ts | 4 +- persistance-plan/phase-4-node-electron.md | 4 +- persistance-plan/phase-5-react-native-expo.md | 2 +- .../phase-6-cloudflare-durable-objects.md | 2 +- persistance-plan/phase-8-browser-multi-tab.md | 2 +- 233 files changed, 412 insertions(+), 370 deletions(-) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/README.md (93%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/e2e/browser-single-tab-persisted-collection.e2e.test.ts (98%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/package.json (79%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/browser-coordinator.ts (99%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/browser-persistence.ts (98%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/index.ts (82%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/opfs-database.ts (99%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/opfs-worker-protocol.ts (100%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/opfs-worker.ts (99%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/vite-env.d.ts (100%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/wa-sqlite-driver.ts (97%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/src/wa-sqlite-examples.d.ts (100%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/browser-coordinator.test.ts (99%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/browser-persistence.test.ts (94%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/browser-single-tab.test.ts (98%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/helpers/wa-sqlite-test-db.ts (100%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/opfs-database.test.ts (99%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tests/wa-sqlite-driver.test.ts (77%) rename packages/{capacitor-db-persistence => browser-db-sqlite-persistence}/tsconfig.docs.json (58%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/tsconfig.json (84%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{browser-db-persistence => browser-db-sqlite-persistence}/vitest.e2e.config.ts (85%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/README.md (90%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/.gitignore (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/capacitor.config.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/index.html (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/package.json (84%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/src/main.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/src/native-capacitor-sqlite-test-db.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/src/node-crypto.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/src/register-capacitor-e2e-suite.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/src/runtime-vitest.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/tsconfig.json (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/app/vite.config.ts (84%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/capacitor-persisted-collection-conformance-suite.ts (98%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/capacitor-persisted-collection.e2e.test.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/run-android-e2e.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/run-ios-e2e.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/shared/capacitor-persisted-collection-harness.ts (99%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/e2e/shared/register-persisted-collection-conformance-suite.ts (93%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/package.json (82%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/src/capacitor-persistence.ts (98%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/src/capacitor-sqlite-driver.ts (98%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/src/capacitor.ts (97%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/src/index.ts (70%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/capacitor-persistence.test.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/capacitor-runtime-persistence-contract.test.ts (94%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/capacitor-sqlite-core-adapter-contract.test.ts (78%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/capacitor-sqlite-driver-contract.test.ts (78%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/capacitor-sqlite-driver.test.ts (99%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tests/helpers/capacitor-sqlite-test-db.ts (100%) rename packages/{cloudflare-durable-objects-db-persistence => capacitor-db-sqlite-persistence}/tsconfig.docs.json (58%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/tsconfig.json (84%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{capacitor-db-persistence => capacitor-db-sqlite-persistence}/vitest.e2e.config.ts (86%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/README.md (89%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/e2e/cloudflare-do-runtime-bridge.e2e.test.ts (98%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/e2e/fixtures/worker.mjs (100%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/e2e/fixtures/wrangler.toml (100%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/package.json (76%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/src/do-driver.ts (98%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/src/do-persistence.ts (98%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/src/index.ts (69%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tests/do-driver.test.ts (91%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tests/do-persistence.test.ts (94%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tests/do-sqlite-core-adapter-contract.test.ts (79%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tests/helpers/better-sqlite-do-storage.ts (100%) rename packages/{expo-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tsconfig.docs.json (58%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/tsconfig.json (85%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{cloudflare-durable-objects-db-persistence => cloudflare-durable-objects-db-sqlite-persistence}/vitest.e2e.config.ts (87%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/README.md (90%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/package.json (92%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/src/errors.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/src/index.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/src/persisted.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/src/sqlite-core-adapter.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/contracts/persisted-collection-conformance-contract.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/contracts/runtime-bridge-e2e-contract.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/contracts/runtime-persistence-contract.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/contracts/sqlite-core-adapter-contract.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/contracts/sqlite-driver-contract.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/persisted.test-d.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/persisted.test.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/sqlite-core-adapter-cli-runtime.test.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tests/sqlite-core-adapter.test.ts (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tsconfig.docs.json (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/tsconfig.json (100%) rename packages/{db-persistence-core => db-sqlite-persistence-core}/vite.config.ts (100%) delete mode 100644 packages/electron-db-persistence/tsconfig.docs.json rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/README.md (82%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/package.json (70%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/electron-coordinator.ts (99%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/errors.ts (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/index.ts (80%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/main.ts (99%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/protocol.ts (98%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/src/renderer.ts (99%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/e2e/electron-process-client.ts (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/e2e/fixtures/electron-main.mjs (99%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/e2e/fixtures/renderer-page.html (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/e2e/fixtures/renderer-preload.cjs (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/e2e/fixtures/runtime-bridge-types.ts (91%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/electron-ipc.test-d.ts (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/electron-ipc.test.ts (97%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/electron-persisted-collection.e2e.test.ts (95%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/electron-runtime-bridge.e2e.test.ts (92%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tests/electron-sqlite-core-adapter-contract.test.ts (90%) create mode 100644 packages/electron-db-sqlite-persistence/tsconfig.docs.json rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/tsconfig.json (75%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{electron-db-persistence => electron-db-sqlite-persistence}/vitest.e2e.config.ts (78%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/README.md (79%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-emulator-smoke.e2e.test.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-persisted-collection.e2e.test.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/App.tsx (99%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/app.json (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/index.js (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/metro.config.js (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/package.json (74%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/polyfills.js (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/expo-runtime-app/tsconfig.json (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/mobile-persisted-collection-conformance-suite.ts (98%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/e2e/runtime-protocol.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/package.json (65%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/src/expo-sqlite-driver.ts (98%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/src/expo.ts (97%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/src/index.ts (66%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/expo-persistence.test.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/expo-runtime-persistence-contract.test.ts (94%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/expo-sqlite-core-adapter-contract.test.ts (78%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/expo-sqlite-driver-contract.test.ts (77%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/expo-sqlite-driver.test.ts (99%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/helpers/expo-emulator-database-factory.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/helpers/expo-emulator-runtime.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/helpers/expo-sqlite-test-db.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tests/helpers/mobile-runtime-test-setup.ts (100%) rename packages/{browser-db-persistence => expo-db-sqlite-persistence}/tsconfig.docs.json (58%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/tsconfig.json (85%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{expo-db-persistence => expo-db-sqlite-persistence}/vitest.e2e.config.ts (88%) delete mode 100644 packages/node-db-persistence/tsconfig.docs.json rename packages/{node-db-persistence => node-db-sqlite-persistence}/README.md (93%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/e2e/node-persisted-collection.e2e.test.ts (98%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/package.json (78%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/src/index.ts (68%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/src/node-driver.ts (98%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/src/node-persistence.ts (98%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/tests/node-driver.test.ts (74%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/tests/node-persistence.test.ts (95%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/tests/node-sqlite-core-adapter-contract.test.ts (76%) create mode 100644 packages/node-db-sqlite-persistence/tsconfig.docs.json rename packages/{node-db-persistence => node-db-sqlite-persistence}/tsconfig.json (84%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{node-db-persistence => node-db-sqlite-persistence}/vitest.e2e.config.ts (85%) delete mode 100644 packages/react-native-db-persistence/tsconfig.docs.json rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/README.md (92%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/e2e/expo-persisted-collection.e2e.test.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/e2e/mobile-persisted-collection-conformance-suite.ts (98%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/e2e/react-native-persisted-collection.e2e.test.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/package.json (75%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/src/index.ts (69%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/src/mobile-persistence.ts (98%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/src/op-sqlite-driver.ts (99%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/src/react-native.ts (96%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/expo-sqlite-core-adapter-contract.test.ts (78%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/helpers/mobile-runtime-test-setup.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/helpers/op-sqlite-test-db.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/mobile-runtime-persistence-contract.test.ts (95%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/op-sqlite-driver.test.ts (99%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/react-native-persistence.test.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tests/react-native-sqlite-core-adapter-contract.test.ts (79%) create mode 100644 packages/react-native-db-sqlite-persistence/tsconfig.docs.json rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/tsconfig.json (84%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{react-native-db-persistence => react-native-db-sqlite-persistence}/vitest.e2e.config.ts (87%) delete mode 100644 packages/tauri-db-persistence/tsconfig.docs.json rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/README.md (89%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/index.html (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/package.json (78%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/.gitignore (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/Cargo.toml (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/build.rs (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/capabilities/default.json (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/icons/icon.png (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/src/main.rs (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src-tauri/tauri.conf.json (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/main.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/native-tauri-sql-test-db.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/node-crypto.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/register-tauri-e2e-suite.ts (97%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/runtime-vitest.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/src/vite-env.d.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/tsconfig.json (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/app/vite.config.ts (86%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/run-tauri-e2e.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/shared/register-persisted-collection-conformance-suite.ts (93%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/shared/tauri-persisted-collection-harness.ts (99%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/e2e/tauri-persisted-collection.e2e.test.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/package.json (81%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/src/index.ts (67%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/src/tauri-persistence.ts (98%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/src/tauri-sql-driver.ts (98%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/src/tauri.ts (96%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/helpers/tauri-sql-test-db.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/tauri-persistence.test.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/tauri-runtime-persistence-contract.test.ts (96%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/tauri-sql-driver-contract.test.ts (77%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/tauri-sql-driver.test.ts (99%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tests/tauri-sqlite-core-adapter-contract.test.ts (78%) create mode 100644 packages/tauri-db-sqlite-persistence/tsconfig.docs.json rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/tsconfig.json (86%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/vite.config.ts (100%) rename packages/{tauri-db-persistence => tauri-db-sqlite-persistence}/vitest.e2e.config.ts (87%) diff --git a/.changeset/persisted-metadata-followups.md b/.changeset/persisted-metadata-followups.md index 82794009d..f48f322a5 100644 --- a/.changeset/persisted-metadata-followups.md +++ b/.changeset/persisted-metadata-followups.md @@ -1,6 +1,6 @@ --- '@tanstack/db': patch -'@tanstack/db-persistence-core': patch +'@tanstack/db-sqlite-persistence-core': patch '@tanstack/electric-db-collection': patch --- diff --git a/.changeset/sqlite-persistence.md b/.changeset/sqlite-persistence.md index a23ab7a87..e3fb13cb2 100644 --- a/.changeset/sqlite-persistence.md +++ b/.changeset/sqlite-persistence.md @@ -1,57 +1,57 @@ --- '@tanstack/db': patch -'@tanstack/db-persistence-core': patch -'@tanstack/browser-db-persistence': patch -'@tanstack/cloudflare-durable-objects-db-persistence': patch -'@tanstack/node-db-persistence': patch -'@tanstack/electron-db-persistence': patch -'@tanstack/expo-db-persistence': patch -'@tanstack/react-native-db-persistence': patch -'@tanstack/capacitor-db-persistence': patch -'@tanstack/tauri-db-persistence': patch +'@tanstack/db-sqlite-persistence-core': patch +'@tanstack/browser-db-sqlite-persistence': patch +'@tanstack/cloudflare-durable-objects-db-sqlite-persistence': patch +'@tanstack/node-db-sqlite-persistence': patch +'@tanstack/electron-db-sqlite-persistence': patch +'@tanstack/expo-db-sqlite-persistence': patch +'@tanstack/react-native-db-sqlite-persistence': patch +'@tanstack/capacitor-db-sqlite-persistence': patch +'@tanstack/tauri-db-sqlite-persistence': patch --- feat(persistence): add SQLite-based offline persistence for collections Adds a new persistence layer that durably stores collection data in SQLite, enabling applications to survive page reloads and app restarts across browser, Node, mobile, desktop, and edge runtimes. -**Core persistence (`@tanstack/db-persistence-core`)** +**Core persistence (`@tanstack/db-sqlite-persistence-core`)** - New package providing the shared SQLite persistence runtime: hydration, streaming, transaction tracking, and applied-tx pruning - SQLite core adapter with full query compilation, index management, and schema migration support - Portable conformance test contracts for runtime-specific adapters -**Browser (`@tanstack/browser-db-persistence`)** +**Browser (`@tanstack/browser-db-sqlite-persistence`)** - New package for browser persistence via wa-sqlite backed by OPFS - Single-tab persistence with OPFS-based SQLite storage - `BrowserCollectionCoordinator` for multi-tab leader-election and cross-tab sync -**Cloudflare Durable Objects (`@tanstack/cloudflare-durable-objects-db-persistence`)** +**Cloudflare Durable Objects (`@tanstack/cloudflare-durable-objects-db-sqlite-persistence`)** - New package for SQLite persistence in Cloudflare Durable Objects runtimes -**Node (`@tanstack/node-db-persistence`)** +**Node (`@tanstack/node-db-sqlite-persistence`)** - New package for Node persistence via SQLite -**Electron (`@tanstack/electron-db-persistence`)** +**Electron (`@tanstack/electron-db-sqlite-persistence`)** - New package providing Electron main and renderer persistence bridge helpers -**Expo (`@tanstack/expo-db-persistence`)** +**Expo (`@tanstack/expo-db-sqlite-persistence`)** - New package for Expo persistence via `expo-sqlite` -**React Native (`@tanstack/react-native-db-persistence`)** +**React Native (`@tanstack/react-native-db-sqlite-persistence`)** - New package for React Native persistence via op-sqlite - Adapter with transaction deadlock prevention and runtime parity coverage -**Capacitor (`@tanstack/capacitor-db-persistence`)** +**Capacitor (`@tanstack/capacitor-db-sqlite-persistence`)** - New package for Capacitor persistence via `@capacitor-community/sqlite` -**Tauri (`@tanstack/tauri-db-persistence`)** +**Tauri (`@tanstack/tauri-db-sqlite-persistence`)** - New package for Tauri persistence via `@tauri-apps/plugin-sql` diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 830410e37..6f3d6b54a 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -65,22 +65,22 @@ jobs: - name: Run Node SQLite persisted collection E2E tests run: | - cd packages/node-db-persistence + cd packages/node-db-sqlite-persistence pnpm test:e2e - name: Run Electron SQLite persisted collection E2E tests run: | - cd packages/electron-db-persistence + cd packages/electron-db-sqlite-persistence pnpm test:e2e - name: Run Cloudflare Durable Object persisted collection E2E tests run: | - cd packages/cloudflare-durable-objects-db-persistence + cd packages/cloudflare-durable-objects-db-sqlite-persistence pnpm test:e2e - name: Run React Native/Expo persisted collection E2E tests run: | - cd packages/react-native-db-persistence + cd packages/react-native-db-sqlite-persistence pnpm test:e2e - name: Run React Native/Expo runtime E2E lane @@ -108,7 +108,7 @@ jobs: exit 0 fi - cd packages/react-native-db-persistence + cd packages/react-native-db-sqlite-persistence pnpm test:e2e:runtime env: TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE: ${{ vars.TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE }} diff --git a/PERSISTNCE-PLAN-SQLITE-ONLY.md b/PERSISTNCE-PLAN-SQLITE-ONLY.md index 1078fad83..2567a8acb 100644 --- a/PERSISTNCE-PLAN-SQLITE-ONLY.md +++ b/PERSISTNCE-PLAN-SQLITE-ONLY.md @@ -1005,12 +1005,12 @@ Driver adaptation note: ## Package Plan -1. `@tanstack/db-persistence-core` -2. `@tanstack/browser-db-persistence` -3. `@tanstack/node-db-persistence` -4. `@tanstack/react-native-db-persistence` (RN + Expo) -5. `@tanstack/electron-db-persistence` -6. `@tanstack/cloudflare-durable-objects-db-persistence` +1. `@tanstack/db-sqlite-persistence-core` +2. `@tanstack/browser-db-sqlite-persistence` +3. `@tanstack/node-db-sqlite-persistence` +4. `@tanstack/react-native-db-sqlite-persistence` (RN + Expo) +5. `@tanstack/electron-db-sqlite-persistence` +6. `@tanstack/cloudflare-durable-objects-db-sqlite-persistence` SQLite core package contents (combined): @@ -1403,7 +1403,7 @@ These are mandatory rules for agents implementing this plan. Blocking-before-implementation: -- none (runtime driver choices and package shape are fixed in this plan: Node/Electron `better-sqlite3`, `@tanstack/react-native-db-persistence` for RN/Expo via `op-sqlite`) +- none (runtime driver choices and package shape are fixed in this plan: Node/Electron `better-sqlite3`, `@tanstack/react-native-db-sqlite-persistence` for RN/Expo via `op-sqlite`) Blocking-before-browser phases: diff --git a/eslint.config.js b/eslint.config.js index 417a3254a..34cfc4c5e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -10,10 +10,10 @@ export default [ `**/traildepot/**`, `examples/angular/**`, `packages/db-collection-e2e/vite.config.ts`, - `packages/capacitor-db-persistence/e2e/app/android/**`, - `packages/capacitor-db-persistence/e2e/app/ios/**`, + `packages/capacitor-db-sqlite-persistence/e2e/app/android/**`, + `packages/capacitor-db-sqlite-persistence/e2e/app/ios/**`, // Expo expects Metro config in CommonJS format. - `packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js`, + `packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/metro.config.js`, ], }, { diff --git a/examples/electron/offline-first/electron/main.ts b/examples/electron/offline-first/electron/main.ts index ee48a84cd..f397934d2 100644 --- a/examples/electron/offline-first/electron/main.ts +++ b/examples/electron/offline-first/electron/main.ts @@ -2,8 +2,8 @@ import path from 'node:path' import { fileURLToPath } from 'node:url' import { BrowserWindow, Menu, app, ipcMain } from 'electron' import Database from 'better-sqlite3' -import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' -import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-persistence' +import { createNodeSQLitePersistence } from '@tanstack/node-db-sqlite-persistence' +import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-sqlite-persistence' const __dirname = path.dirname(fileURLToPath(import.meta.url)) diff --git a/examples/electron/offline-first/package.json b/examples/electron/offline-first/package.json index 3bce05bff..57d66a055 100644 --- a/examples/electron/offline-first/package.json +++ b/examples/electron/offline-first/package.json @@ -13,8 +13,8 @@ "postinstall": "prebuild-install --runtime electron --target 40.2.1 --arch arm64 || echo 'prebuild-install failed, try: npx @electron/rebuild'" }, "dependencies": { - "@tanstack/electron-db-persistence": "workspace:*", - "@tanstack/node-db-persistence": "workspace:*", + "@tanstack/electron-db-sqlite-persistence": "workspace:*", + "@tanstack/node-db-sqlite-persistence": "workspace:*", "@tanstack/offline-transactions": "workspace:*", "@tanstack/query-db-collection": "workspace:*", "@tanstack/react-db": "workspace:*", diff --git a/examples/electron/offline-first/src/db/todos.ts b/examples/electron/offline-first/src/db/todos.ts index 56c293066..4a9aa3eb5 100644 --- a/examples/electron/offline-first/src/db/todos.ts +++ b/examples/electron/offline-first/src/db/todos.ts @@ -5,7 +5,7 @@ import { ElectronCollectionCoordinator, createElectronSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/electron-db-persistence' +} from '@tanstack/electron-db-sqlite-persistence' import { z } from 'zod' import { queryClient } from '../utils/queryClient' import type { StorageAdapter } from '@tanstack/offline-transactions' diff --git a/examples/react-native/offline-transactions/package.json b/examples/react-native/offline-transactions/package.json index 7096936ba..bf39aa50d 100644 --- a/examples/react-native/offline-transactions/package.json +++ b/examples/react-native/offline-transactions/package.json @@ -16,7 +16,7 @@ "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", "@tanstack/db": "workspace:*", - "@tanstack/react-native-db-persistence": "workspace:*", + "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", diff --git a/examples/react-native/offline-transactions/src/db/todos.ts b/examples/react-native/offline-transactions/src/db/todos.ts index d8ff95244..ebd47ea84 100644 --- a/examples/react-native/offline-transactions/src/db/todos.ts +++ b/examples/react-native/offline-transactions/src/db/todos.ts @@ -3,7 +3,7 @@ import { createCollection } from '@tanstack/react-db' import { createReactNativeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/react-native-db-persistence' +} from '@tanstack/react-native-db-sqlite-persistence' import { queryCollectionOptions } from '@tanstack/query-db-collection' import { startOfflineExecutor } from '@tanstack/offline-transactions/react-native' import { queryClient } from '../utils/queryClient' diff --git a/examples/react/offline-transactions/package.json b/examples/react/offline-transactions/package.json index c95a3669b..a1657186b 100644 --- a/examples/react/offline-transactions/package.json +++ b/examples/react/offline-transactions/package.json @@ -10,7 +10,7 @@ }, "dependencies": { "@tanstack/db": "workspace:*", - "@tanstack/browser-db-persistence": "workspace:*", + "@tanstack/browser-db-sqlite-persistence": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", diff --git a/examples/react/offline-transactions/src/db/persisted-todos.ts b/examples/react/offline-transactions/src/db/persisted-todos.ts index 52f186887..18537b98d 100644 --- a/examples/react/offline-transactions/src/db/persisted-todos.ts +++ b/examples/react/offline-transactions/src/db/persisted-todos.ts @@ -4,7 +4,7 @@ import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, persistedCollectionOptions, -} from '@tanstack/browser-db-persistence' +} from '@tanstack/browser-db-sqlite-persistence' import type { Collection } from '@tanstack/db' export type PersistedTodo = { diff --git a/examples/react/offline-transactions/vite.config.ts b/examples/react/offline-transactions/vite.config.ts index 28c3beb77..28ef3c3bd 100644 --- a/examples/react/offline-transactions/vite.config.ts +++ b/examples/react/offline-transactions/vite.config.ts @@ -14,8 +14,14 @@ function watchWorkspacePackages() { const watchPaths = [ path.resolve(__dirname, `../../../packages/db/dist`), path.resolve(__dirname, `../../../packages/offline-transactions/dist`), - path.resolve(__dirname, `../../../packages/browser-db-persistence/src`), - path.resolve(__dirname, `../../../packages/db-persistence-core/dist`), + path.resolve( + __dirname, + `../../../packages/browser-db-sqlite-persistence/src`, + ), + path.resolve( + __dirname, + `../../../packages/db-sqlite-persistence-core/dist`, + ), ] console.log(`[watch-workspace] Starting to watch paths:`) @@ -71,14 +77,14 @@ export default defineConfig({ resolve: { alias: { // Resolve to source so Vite can process the ?worker import natively - '@tanstack/browser-db-persistence': path.resolve( + '@tanstack/browser-db-sqlite-persistence': path.resolve( __dirname, - `../../../packages/browser-db-persistence/src/index.ts`, + `../../../packages/browser-db-sqlite-persistence/src/index.ts`, ), // Required because the browser package's source re-exports from core - '@tanstack/db-persistence-core': path.resolve( + '@tanstack/db-sqlite-persistence-core': path.resolve( __dirname, - `../../../packages/db-persistence-core/src/index.ts`, + `../../../packages/db-sqlite-persistence-core/src/index.ts`, ), }, }, @@ -86,8 +92,8 @@ export default defineConfig({ exclude: [ `@tanstack/db`, `@tanstack/offline-transactions`, - `@tanstack/browser-db-persistence`, - `@tanstack/db-persistence-core`, + `@tanstack/browser-db-sqlite-persistence`, + `@tanstack/db-sqlite-persistence-core`, `@journeyapps/wa-sqlite`, ], }, diff --git a/packages/browser-db-persistence/README.md b/packages/browser-db-sqlite-persistence/README.md similarity index 93% rename from packages/browser-db-persistence/README.md rename to packages/browser-db-sqlite-persistence/README.md index d179ae5ab..b14c83b32 100644 --- a/packages/browser-db-persistence/README.md +++ b/packages/browser-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/browser-db-persistence +# @tanstack/browser-db-sqlite-persistence Thin browser SQLite persistence for TanStack DB using `wa-sqlite` + OPFS. @@ -16,7 +16,7 @@ import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, persistedCollectionOptions, -} from '@tanstack/browser-db-persistence' +} from '@tanstack/browser-db-sqlite-persistence' type Todo = { id: string diff --git a/packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts b/packages/browser-db-sqlite-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts similarity index 98% rename from packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts rename to packages/browser-db-sqlite-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts index 7f651dd75..ae3dfe6e9 100644 --- a/packages/browser-db-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts +++ b/packages/browser-db-sqlite-persistence/e2e/browser-single-tab-persisted-collection.e2e.test.ts @@ -8,7 +8,7 @@ import { persistedCollectionOptions, } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createWASQLiteTestDatabase } from '../tests/helpers/wa-sqlite-test-db' import type { Collection } from '@tanstack/db' import type { BrowserWASQLiteDatabase } from '../src' diff --git a/packages/browser-db-persistence/package.json b/packages/browser-db-sqlite-persistence/package.json similarity index 79% rename from packages/browser-db-persistence/package.json rename to packages/browser-db-sqlite-persistence/package.json index d2d364127..f4e43700c 100644 --- a/packages/browser-db-persistence/package.json +++ b/packages/browser-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/browser-db-persistence", + "name": "@tanstack/browser-db-sqlite-persistence", "version": "0.1.0", "description": "Browser wa-sqlite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/browser-db-persistence" + "directory": "packages/browser-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -23,7 +23,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/browser-db-persistence build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/browser-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -48,7 +48,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "@journeyapps/wa-sqlite": "^1.4.1", diff --git a/packages/browser-db-persistence/src/browser-coordinator.ts b/packages/browser-db-sqlite-persistence/src/browser-coordinator.ts similarity index 99% rename from packages/browser-db-persistence/src/browser-coordinator.ts rename to packages/browser-db-sqlite-persistence/src/browser-coordinator.ts index ef7e24727..272cf56f5 100644 --- a/packages/browser-db-persistence/src/browser-coordinator.ts +++ b/packages/browser-db-sqlite-persistence/src/browser-coordinator.ts @@ -6,7 +6,7 @@ import type { PersistenceAdapter, ProtocolEnvelope, PullSinceResponse, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { LoadSubsetOptions } from '@tanstack/db' // --------------------------------------------------------------------------- diff --git a/packages/browser-db-persistence/src/browser-persistence.ts b/packages/browser-db-sqlite-persistence/src/browser-persistence.ts similarity index 98% rename from packages/browser-db-persistence/src/browser-persistence.ts rename to packages/browser-db-sqlite-persistence/src/browser-persistence.ts index 17736ffe2..2d69bc160 100644 --- a/packages/browser-db-persistence/src/browser-persistence.ts +++ b/packages/browser-db-sqlite-persistence/src/browser-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { BrowserCollectionCoordinator } from './browser-coordinator' import { BrowserWASQLiteDriver } from './wa-sqlite-driver' import type { @@ -10,7 +10,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' export type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' diff --git a/packages/browser-db-persistence/src/index.ts b/packages/browser-db-sqlite-persistence/src/index.ts similarity index 82% rename from packages/browser-db-persistence/src/index.ts rename to packages/browser-db-sqlite-persistence/src/index.ts index 7920d6f55..5931b8ade 100644 --- a/packages/browser-db-persistence/src/index.ts +++ b/packages/browser-db-sqlite-persistence/src/index.ts @@ -8,8 +8,8 @@ export type { } from './browser-persistence' export type { OpenBrowserWASQLiteOPFSDatabaseOptions } from './opfs-database' export type { BrowserCollectionCoordinatorOptions } from './browser-coordinator' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/browser-db-persistence/src/opfs-database.ts b/packages/browser-db-sqlite-persistence/src/opfs-database.ts similarity index 99% rename from packages/browser-db-persistence/src/opfs-database.ts rename to packages/browser-db-sqlite-persistence/src/opfs-database.ts index 2ad65da96..81a5f7d2f 100644 --- a/packages/browser-db-persistence/src/opfs-database.ts +++ b/packages/browser-db-sqlite-persistence/src/opfs-database.ts @@ -1,7 +1,7 @@ import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import OPFSWorkerConstructor from './opfs-worker?worker' import type { BrowserWASQLiteDatabase } from './wa-sqlite-driver' import type { diff --git a/packages/browser-db-persistence/src/opfs-worker-protocol.ts b/packages/browser-db-sqlite-persistence/src/opfs-worker-protocol.ts similarity index 100% rename from packages/browser-db-persistence/src/opfs-worker-protocol.ts rename to packages/browser-db-sqlite-persistence/src/opfs-worker-protocol.ts diff --git a/packages/browser-db-persistence/src/opfs-worker.ts b/packages/browser-db-sqlite-persistence/src/opfs-worker.ts similarity index 99% rename from packages/browser-db-persistence/src/opfs-worker.ts rename to packages/browser-db-sqlite-persistence/src/opfs-worker.ts index 2faf6385d..8be4f1afd 100644 --- a/packages/browser-db-persistence/src/opfs-worker.ts +++ b/packages/browser-db-sqlite-persistence/src/opfs-worker.ts @@ -4,7 +4,7 @@ import { OPFSCoopSyncVFS } from '@journeyapps/wa-sqlite/src/examples/OPFSCoopSyn import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { BrowserOPFSWorkerErrorCode, BrowserOPFSWorkerRequest, diff --git a/packages/browser-db-persistence/src/vite-env.d.ts b/packages/browser-db-sqlite-persistence/src/vite-env.d.ts similarity index 100% rename from packages/browser-db-persistence/src/vite-env.d.ts rename to packages/browser-db-sqlite-persistence/src/vite-env.d.ts diff --git a/packages/browser-db-persistence/src/wa-sqlite-driver.ts b/packages/browser-db-sqlite-persistence/src/wa-sqlite-driver.ts similarity index 97% rename from packages/browser-db-persistence/src/wa-sqlite-driver.ts rename to packages/browser-db-sqlite-persistence/src/wa-sqlite-driver.ts index 0ae2d1ae2..c1ae91b9e 100644 --- a/packages/browser-db-persistence/src/wa-sqlite-driver.ts +++ b/packages/browser-db-sqlite-persistence/src/wa-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' export type BrowserWASQLiteDatabase = { execute: ( diff --git a/packages/browser-db-persistence/src/wa-sqlite-examples.d.ts b/packages/browser-db-sqlite-persistence/src/wa-sqlite-examples.d.ts similarity index 100% rename from packages/browser-db-persistence/src/wa-sqlite-examples.d.ts rename to packages/browser-db-sqlite-persistence/src/wa-sqlite-examples.d.ts diff --git a/packages/browser-db-persistence/tests/browser-coordinator.test.ts b/packages/browser-db-sqlite-persistence/tests/browser-coordinator.test.ts similarity index 99% rename from packages/browser-db-persistence/tests/browser-coordinator.test.ts rename to packages/browser-db-sqlite-persistence/tests/browser-coordinator.test.ts index 6feacf7bf..f7a8f78f4 100644 --- a/packages/browser-db-persistence/tests/browser-coordinator.test.ts +++ b/packages/browser-db-sqlite-persistence/tests/browser-coordinator.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { BrowserCollectionCoordinator } from '../src/browser-coordinator' import type { BrowserCollectionCoordinatorOptions } from '../src/browser-coordinator' -import type { PersistenceAdapter } from '@tanstack/db-persistence-core' +import type { PersistenceAdapter } from '@tanstack/db-sqlite-persistence-core' // --------------------------------------------------------------------------- // BroadcastChannel mock diff --git a/packages/browser-db-persistence/tests/browser-persistence.test.ts b/packages/browser-db-sqlite-persistence/tests/browser-persistence.test.ts similarity index 94% rename from packages/browser-db-persistence/tests/browser-persistence.test.ts rename to packages/browser-db-sqlite-persistence/tests/browser-persistence.test.ts index 0ca3abd98..1e1db719c 100644 --- a/packages/browser-db-persistence/tests/browser-persistence.test.ts +++ b/packages/browser-db-sqlite-persistence/tests/browser-persistence.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { BrowserWASQLiteDriver } from '../src/wa-sqlite-driver' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' import { createWASQLiteTestDatabase } from './helpers/wa-sqlite-test-db' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-browser-persistence-`)) diff --git a/packages/browser-db-persistence/tests/browser-single-tab.test.ts b/packages/browser-db-sqlite-persistence/tests/browser-single-tab.test.ts similarity index 98% rename from packages/browser-db-persistence/tests/browser-single-tab.test.ts rename to packages/browser-db-sqlite-persistence/tests/browser-single-tab.test.ts index 310dbf8bd..73443876c 100644 --- a/packages/browser-db-persistence/tests/browser-single-tab.test.ts +++ b/packages/browser-db-sqlite-persistence/tests/browser-single-tab.test.ts @@ -5,7 +5,7 @@ import { afterEach, expect, it } from 'vitest' import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { createBrowserWASQLitePersistence, openBrowserWASQLiteOPFSDatabase, diff --git a/packages/browser-db-persistence/tests/helpers/wa-sqlite-test-db.ts b/packages/browser-db-sqlite-persistence/tests/helpers/wa-sqlite-test-db.ts similarity index 100% rename from packages/browser-db-persistence/tests/helpers/wa-sqlite-test-db.ts rename to packages/browser-db-sqlite-persistence/tests/helpers/wa-sqlite-test-db.ts diff --git a/packages/browser-db-persistence/tests/opfs-database.test.ts b/packages/browser-db-sqlite-persistence/tests/opfs-database.test.ts similarity index 99% rename from packages/browser-db-persistence/tests/opfs-database.test.ts rename to packages/browser-db-sqlite-persistence/tests/opfs-database.test.ts index 49deab36a..24e60b199 100644 --- a/packages/browser-db-persistence/tests/opfs-database.test.ts +++ b/packages/browser-db-sqlite-persistence/tests/opfs-database.test.ts @@ -2,7 +2,7 @@ import { afterEach, describe, expect, it } from 'vitest' import { InvalidPersistedCollectionConfigError, PersistenceUnavailableError, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { openBrowserWASQLiteOPFSDatabase } from '../src/opfs-database' import type { BrowserOPFSWorkerErrorCode, diff --git a/packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts b/packages/browser-db-sqlite-persistence/tests/wa-sqlite-driver.test.ts similarity index 77% rename from packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts rename to packages/browser-db-sqlite-persistence/tests/wa-sqlite-driver.test.ts index dd9650ab6..03f7086e2 100644 --- a/packages/browser-db-persistence/tests/wa-sqlite-driver.test.ts +++ b/packages/browser-db-sqlite-persistence/tests/wa-sqlite-driver.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { BrowserWASQLiteDriver } from '../src/wa-sqlite-driver' import { createWASQLiteTestDatabase } from './helpers/wa-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-browser-wa-sqlite-`)) diff --git a/packages/capacitor-db-persistence/tsconfig.docs.json b/packages/browser-db-sqlite-persistence/tsconfig.docs.json similarity index 58% rename from packages/capacitor-db-persistence/tsconfig.docs.json rename to packages/browser-db-sqlite-persistence/tsconfig.docs.json index 09dd4443a..dec9e98d1 100644 --- a/packages/capacitor-db-persistence/tsconfig.docs.json +++ b/packages/browser-db-sqlite-persistence/tsconfig.docs.json @@ -3,7 +3,9 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src"] diff --git a/packages/browser-db-persistence/tsconfig.json b/packages/browser-db-sqlite-persistence/tsconfig.json similarity index 84% rename from packages/browser-db-persistence/tsconfig.json rename to packages/browser-db-sqlite-persistence/tsconfig.json index 394cc9135..5b14f299c 100644 --- a/packages/browser-db-persistence/tsconfig.json +++ b/packages/browser-db-sqlite-persistence/tsconfig.json @@ -14,7 +14,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/browser-db-persistence/vite.config.ts b/packages/browser-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/browser-db-persistence/vite.config.ts rename to packages/browser-db-sqlite-persistence/vite.config.ts diff --git a/packages/browser-db-persistence/vitest.e2e.config.ts b/packages/browser-db-sqlite-persistence/vitest.e2e.config.ts similarity index 85% rename from packages/browser-db-persistence/vitest.e2e.config.ts rename to packages/browser-db-sqlite-persistence/vitest.e2e.config.ts index d2c27254a..a72f12feb 100644 --- a/packages/browser-db-persistence/vitest.e2e.config.ts +++ b/packages/browser-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/capacitor-db-persistence/README.md b/packages/capacitor-db-sqlite-persistence/README.md similarity index 90% rename from packages/capacitor-db-persistence/README.md rename to packages/capacitor-db-sqlite-persistence/README.md index c2a58e176..afa9b6418 100644 --- a/packages/capacitor-db-persistence/README.md +++ b/packages/capacitor-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/capacitor-db-persistence +# @tanstack/capacitor-db-sqlite-persistence Thin SQLite persistence for Capacitor apps using `@capacitor-community/sqlite`. @@ -11,7 +11,7 @@ Thin SQLite persistence for Capacitor apps using ## Install ```bash -pnpm add @tanstack/capacitor-db-persistence @capacitor-community/sqlite +pnpm add @tanstack/capacitor-db-sqlite-persistence @capacitor-community/sqlite ``` ## Quick start @@ -24,7 +24,7 @@ import { queryCollectionOptions } from '@tanstack/query-db-collection' import { createCapacitorSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/capacitor-db-persistence' +} from '@tanstack/capacitor-db-sqlite-persistence' type Todo = { id: string @@ -89,13 +89,13 @@ export const todosCollection = createCollection( ## Testing -- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e` +- `pnpm --filter @tanstack/capacitor-db-sqlite-persistence test:e2e` runs the package e2e suite against the default `better-sqlite3` harness. -- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e:ios` +- `pnpm --filter @tanstack/capacitor-db-sqlite-persistence test:e2e:ios` builds the package-local Capacitor harness in `e2e/app`, launches the iOS simulator, and runs the full persisted collection e2e suite inside the real native Capacitor runtime. -- `pnpm --filter @tanstack/capacitor-db-persistence test:e2e:android` +- `pnpm --filter @tanstack/capacitor-db-sqlite-persistence test:e2e:android` builds the same package-local Capacitor harness in `e2e/app`, launches an Android emulator or uses a connected debug target, and runs the full persisted collection e2e suite inside the real native Capacitor runtime. diff --git a/packages/capacitor-db-persistence/e2e/app/.gitignore b/packages/capacitor-db-sqlite-persistence/e2e/app/.gitignore similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/.gitignore rename to packages/capacitor-db-sqlite-persistence/e2e/app/.gitignore diff --git a/packages/capacitor-db-persistence/e2e/app/capacitor.config.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/capacitor.config.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/capacitor.config.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/capacitor.config.ts diff --git a/packages/capacitor-db-persistence/e2e/app/index.html b/packages/capacitor-db-sqlite-persistence/e2e/app/index.html similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/index.html rename to packages/capacitor-db-sqlite-persistence/e2e/app/index.html diff --git a/packages/capacitor-db-persistence/e2e/app/package.json b/packages/capacitor-db-sqlite-persistence/e2e/app/package.json similarity index 84% rename from packages/capacitor-db-persistence/e2e/app/package.json rename to packages/capacitor-db-sqlite-persistence/e2e/app/package.json index 17b5ed533..cb76d7f5d 100644 --- a/packages/capacitor-db-persistence/e2e/app/package.json +++ b/packages/capacitor-db-sqlite-persistence/e2e/app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/capacitor-db-persistence-e2e-app", + "name": "@tanstack/capacitor-db-sqlite-persistence-e2e-app", "private": true, "version": "0.0.0", "type": "module", @@ -15,7 +15,7 @@ "@capacitor-community/sqlite": "^8.0.1", "@capacitor/core": "^8.2.0", "@tanstack/db": "workspace:*", - "@tanstack/capacitor-db-persistence": "workspace:*" + "@tanstack/capacitor-db-sqlite-persistence": "workspace:*" }, "devDependencies": { "@capacitor/android": "^8.2.0", diff --git a/packages/capacitor-db-persistence/e2e/app/src/main.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/src/main.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/src/main.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/src/main.ts diff --git a/packages/capacitor-db-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/src/native-capacitor-sqlite-test-db.ts diff --git a/packages/capacitor-db-persistence/e2e/app/src/node-crypto.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/src/node-crypto.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/src/node-crypto.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/src/node-crypto.ts diff --git a/packages/capacitor-db-persistence/e2e/app/src/register-capacitor-e2e-suite.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/src/register-capacitor-e2e-suite.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/src/register-capacitor-e2e-suite.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/src/register-capacitor-e2e-suite.ts diff --git a/packages/capacitor-db-persistence/e2e/app/src/runtime-vitest.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/src/runtime-vitest.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/src/runtime-vitest.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/src/runtime-vitest.ts diff --git a/packages/capacitor-db-persistence/e2e/app/tsconfig.json b/packages/capacitor-db-sqlite-persistence/e2e/app/tsconfig.json similarity index 100% rename from packages/capacitor-db-persistence/e2e/app/tsconfig.json rename to packages/capacitor-db-sqlite-persistence/e2e/app/tsconfig.json diff --git a/packages/capacitor-db-persistence/e2e/app/vite.config.ts b/packages/capacitor-db-sqlite-persistence/e2e/app/vite.config.ts similarity index 84% rename from packages/capacitor-db-persistence/e2e/app/vite.config.ts rename to packages/capacitor-db-sqlite-persistence/e2e/app/vite.config.ts index 3fcefa38d..c87d89f28 100644 --- a/packages/capacitor-db-persistence/e2e/app/vite.config.ts +++ b/packages/capacitor-db-sqlite-persistence/e2e/app/vite.config.ts @@ -11,9 +11,9 @@ export default defineConfig({ 'node:crypto': resolve(appDirectory, `src/node-crypto.ts`), '@tanstack/db': resolve(appDirectory, `../../../db/src`), '@tanstack/db-ivm': resolve(appDirectory, `../../../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( appDirectory, - `../../../db-persistence-core/src`, + `../../../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts b/packages/capacitor-db-sqlite-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts similarity index 98% rename from packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts rename to packages/capacitor-db-sqlite-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts index fcdd4ebab..031c4bc51 100644 --- a/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts +++ b/packages/capacitor-db-sqlite-persistence/e2e/capacitor-persisted-collection-conformance-suite.ts @@ -4,7 +4,7 @@ import { join } from 'node:path' import { createCapacitorSQLiteTestDatabase } from '../tests/helpers/capacitor-sqlite-test-db' import { createCapacitorPersistedCollectionHarnessConfig } from './shared/capacitor-persisted-collection-harness' import { registerPersistedCollectionConformanceSuite } from './shared/register-persisted-collection-conformance-suite' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' type CapacitorPersistenceFactory = ( database: ReturnType, diff --git a/packages/capacitor-db-persistence/e2e/capacitor-persisted-collection.e2e.test.ts b/packages/capacitor-db-sqlite-persistence/e2e/capacitor-persisted-collection.e2e.test.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/capacitor-persisted-collection.e2e.test.ts rename to packages/capacitor-db-sqlite-persistence/e2e/capacitor-persisted-collection.e2e.test.ts diff --git a/packages/capacitor-db-persistence/e2e/run-android-e2e.ts b/packages/capacitor-db-sqlite-persistence/e2e/run-android-e2e.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/run-android-e2e.ts rename to packages/capacitor-db-sqlite-persistence/e2e/run-android-e2e.ts diff --git a/packages/capacitor-db-persistence/e2e/run-ios-e2e.ts b/packages/capacitor-db-sqlite-persistence/e2e/run-ios-e2e.ts similarity index 100% rename from packages/capacitor-db-persistence/e2e/run-ios-e2e.ts rename to packages/capacitor-db-sqlite-persistence/e2e/run-ios-e2e.ts diff --git a/packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts b/packages/capacitor-db-sqlite-persistence/e2e/shared/capacitor-persisted-collection-harness.ts similarity index 99% rename from packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts rename to packages/capacitor-db-sqlite-persistence/e2e/shared/capacitor-persisted-collection-harness.ts index 48751d378..054fee4e0 100644 --- a/packages/capacitor-db-persistence/e2e/shared/capacitor-persisted-collection-harness.ts +++ b/packages/capacitor-db-sqlite-persistence/e2e/shared/capacitor-persisted-collection-harness.ts @@ -2,7 +2,7 @@ import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../../src' import { generateSeedData } from '../../../db-collection-e2e/src/fixtures/seed-data' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts b/packages/capacitor-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts similarity index 93% rename from packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts rename to packages/capacitor-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts index 9967f17d2..f4f656118 100644 --- a/packages/capacitor-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts +++ b/packages/capacitor-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts @@ -1,5 +1,5 @@ import { afterAll, afterEach, beforeAll } from 'vitest' -import { runPersistedCollectionConformanceSuite } from '../../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { CapacitorPersistedCollectionHarnessConfig } from './capacitor-persisted-collection-harness' type RegisteredHarness = { diff --git a/packages/capacitor-db-persistence/package.json b/packages/capacitor-db-sqlite-persistence/package.json similarity index 82% rename from packages/capacitor-db-persistence/package.json rename to packages/capacitor-db-sqlite-persistence/package.json index 23b21cda2..094b39e4c 100644 --- a/packages/capacitor-db-persistence/package.json +++ b/packages/capacitor-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/capacitor-db-persistence", + "name": "@tanstack/capacitor-db-sqlite-persistence", "version": "0.1.0", "description": "Capacitor SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/capacitor-db-persistence" + "directory": "packages/capacitor-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/capacitor-db-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/capacitor-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run", "test:e2e:android": "pnpm exec tsx ./e2e/run-android-e2e.ts", "test:e2e:ios": "pnpm exec tsx ./e2e/run-ios-e2e.ts" }, @@ -59,7 +59,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "@capacitor-community/sqlite": "^8.0.1", diff --git a/packages/capacitor-db-persistence/src/capacitor-persistence.ts b/packages/capacitor-db-sqlite-persistence/src/capacitor-persistence.ts similarity index 98% rename from packages/capacitor-db-persistence/src/capacitor-persistence.ts rename to packages/capacitor-db-sqlite-persistence/src/capacitor-persistence.ts index a89a2039e..785f07a50 100644 --- a/packages/capacitor-db-persistence/src/capacitor-persistence.ts +++ b/packages/capacitor-db-sqlite-persistence/src/capacitor-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { CapacitorSQLiteDriver } from './capacitor-sqlite-driver' import type { SQLiteDBConnection } from '@capacitor-community/sqlite' import type { @@ -10,7 +10,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' export type { CapacitorSQLiteDatabaseLike } from './capacitor-sqlite-driver' export type { SQLiteDBConnection } from '@capacitor-community/sqlite' diff --git a/packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts b/packages/capacitor-db-sqlite-persistence/src/capacitor-sqlite-driver.ts similarity index 98% rename from packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts rename to packages/capacitor-db-sqlite-persistence/src/capacitor-sqlite-driver.ts index 07e0ec8b3..1bc788e47 100644 --- a/packages/capacitor-db-persistence/src/capacitor-sqlite-driver.ts +++ b/packages/capacitor-db-sqlite-persistence/src/capacitor-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' import type { capSQLiteValues as CapacitorSQLiteValues, SQLiteDBConnection, diff --git a/packages/capacitor-db-persistence/src/capacitor.ts b/packages/capacitor-db-sqlite-persistence/src/capacitor.ts similarity index 97% rename from packages/capacitor-db-persistence/src/capacitor.ts rename to packages/capacitor-db-sqlite-persistence/src/capacitor.ts index b9c361921..fcf7d8eef 100644 --- a/packages/capacitor-db-persistence/src/capacitor.ts +++ b/packages/capacitor-db-sqlite-persistence/src/capacitor.ts @@ -3,7 +3,7 @@ import type { CapacitorSQLitePersistenceOptions as CapacitorSQLitePersistenceOptionsBase, CapacitorSQLiteSchemaMismatchPolicy as CapacitorSQLiteSchemaMismatchPolicyBase, } from './capacitor-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' export type CapacitorSQLitePersistenceOptions = CapacitorSQLitePersistenceOptionsBase diff --git a/packages/capacitor-db-persistence/src/index.ts b/packages/capacitor-db-sqlite-persistence/src/index.ts similarity index 70% rename from packages/capacitor-db-persistence/src/index.ts rename to packages/capacitor-db-sqlite-persistence/src/index.ts index 8b2e147a7..81f8b6c40 100644 --- a/packages/capacitor-db-persistence/src/index.ts +++ b/packages/capacitor-db-sqlite-persistence/src/index.ts @@ -5,8 +5,8 @@ export type { CapacitorSQLiteSchemaMismatchPolicy, SQLiteDBConnection, } from './capacitor' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/capacitor-db-persistence/tests/capacitor-persistence.test.ts b/packages/capacitor-db-sqlite-persistence/tests/capacitor-persistence.test.ts similarity index 100% rename from packages/capacitor-db-persistence/tests/capacitor-persistence.test.ts rename to packages/capacitor-db-sqlite-persistence/tests/capacitor-persistence.test.ts diff --git a/packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts b/packages/capacitor-db-sqlite-persistence/tests/capacitor-runtime-persistence-contract.test.ts similarity index 94% rename from packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts rename to packages/capacitor-db-sqlite-persistence/tests/capacitor-runtime-persistence-contract.test.ts index bd74dff87..82da3c0ad 100644 --- a/packages/capacitor-db-persistence/tests/capacitor-runtime-persistence-contract.test.ts +++ b/packages/capacitor-db-sqlite-persistence/tests/capacitor-runtime-persistence-contract.test.ts @@ -7,18 +7,18 @@ import { persistedCollectionOptions, } from '../src' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { CapacitorSQLiteDatabaseLike } from '../src/capacitor-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: CapacitorSQLiteDatabaseLike diff --git a/packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts similarity index 78% rename from packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts rename to packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts index 27e249819..8ebc45566 100644 --- a/packages/capacitor-db-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts +++ b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-core-`)) diff --git a/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver-contract.test.ts similarity index 78% rename from packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts rename to packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver-contract.test.ts index d92844edc..9aba0a1e0 100644 --- a/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver-contract.test.ts +++ b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-capacitor-sqlite-`)) diff --git a/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver.test.ts similarity index 99% rename from packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts rename to packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver.test.ts index 6f4fb7311..9be089418 100644 --- a/packages/capacitor-db-persistence/tests/capacitor-sqlite-driver.test.ts +++ b/packages/capacitor-db-sqlite-persistence/tests/capacitor-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it, vi } from 'vitest' import { CapacitorSQLiteDriver } from '../src/capacitor-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persistence-core/src' import { createCapacitorSQLiteTestDatabase } from './helpers/capacitor-sqlite-test-db' import type { CapacitorSQLiteDatabaseLike } from '../src/capacitor-sqlite-driver' diff --git a/packages/capacitor-db-persistence/tests/helpers/capacitor-sqlite-test-db.ts b/packages/capacitor-db-sqlite-persistence/tests/helpers/capacitor-sqlite-test-db.ts similarity index 100% rename from packages/capacitor-db-persistence/tests/helpers/capacitor-sqlite-test-db.ts rename to packages/capacitor-db-sqlite-persistence/tests/helpers/capacitor-sqlite-test-db.ts diff --git a/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json b/packages/capacitor-db-sqlite-persistence/tsconfig.docs.json similarity index 58% rename from packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json rename to packages/capacitor-db-sqlite-persistence/tsconfig.docs.json index 09dd4443a..dec9e98d1 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tsconfig.docs.json +++ b/packages/capacitor-db-sqlite-persistence/tsconfig.docs.json @@ -3,7 +3,9 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src"] diff --git a/packages/capacitor-db-persistence/tsconfig.json b/packages/capacitor-db-sqlite-persistence/tsconfig.json similarity index 84% rename from packages/capacitor-db-persistence/tsconfig.json rename to packages/capacitor-db-sqlite-persistence/tsconfig.json index 4154dd106..280b57af7 100644 --- a/packages/capacitor-db-persistence/tsconfig.json +++ b/packages/capacitor-db-sqlite-persistence/tsconfig.json @@ -13,7 +13,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/capacitor-db-persistence/vite.config.ts b/packages/capacitor-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/capacitor-db-persistence/vite.config.ts rename to packages/capacitor-db-sqlite-persistence/vite.config.ts diff --git a/packages/capacitor-db-persistence/vitest.e2e.config.ts b/packages/capacitor-db-sqlite-persistence/vitest.e2e.config.ts similarity index 86% rename from packages/capacitor-db-persistence/vitest.e2e.config.ts rename to packages/capacitor-db-sqlite-persistence/vitest.e2e.config.ts index e70981201..7cc82a2b5 100644 --- a/packages/capacitor-db-persistence/vitest.e2e.config.ts +++ b/packages/capacitor-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/cloudflare-durable-objects-db-persistence/README.md b/packages/cloudflare-durable-objects-db-sqlite-persistence/README.md similarity index 89% rename from packages/cloudflare-durable-objects-db-persistence/README.md rename to packages/cloudflare-durable-objects-db-sqlite-persistence/README.md index 3a036ed46..3473d7ce8 100644 --- a/packages/cloudflare-durable-objects-db-persistence/README.md +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/cloudflare-durable-objects-db-persistence +# @tanstack/cloudflare-durable-objects-db-sqlite-persistence Thin SQLite persistence for Cloudflare Durable Objects. @@ -14,7 +14,7 @@ import { createCollection } from '@tanstack/db' import { createCloudflareDOSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/cloudflare-durable-objects-db-persistence' +} from '@tanstack/cloudflare-durable-objects-db-sqlite-persistence' type Todo = { id: string diff --git a/packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts similarity index 98% rename from packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts index 921f0ed9e..ef31396cb 100644 --- a/packages/cloudflare-durable-objects-db-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/cloudflare-do-runtime-bridge.e2e.test.ts @@ -5,13 +5,13 @@ import { setTimeout as delay } from 'node:timers/promises' import { fileURLToPath } from 'node:url' import { spawn } from 'node:child_process' import { describe, expect, it } from 'vitest' -import { runRuntimeBridgeE2EContractSuite } from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +import { runRuntimeBridgeE2EContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractHarness, RuntimeBridgeE2EContractHarnessFactory, RuntimeBridgeE2EContractTodo, -} from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract' type RuntimeProcessHarness = { baseUrl: string diff --git a/packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/worker.mjs b/packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/fixtures/worker.mjs similarity index 100% rename from packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/worker.mjs rename to packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/fixtures/worker.mjs diff --git a/packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/wrangler.toml b/packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/fixtures/wrangler.toml similarity index 100% rename from packages/cloudflare-durable-objects-db-persistence/e2e/fixtures/wrangler.toml rename to packages/cloudflare-durable-objects-db-sqlite-persistence/e2e/fixtures/wrangler.toml diff --git a/packages/cloudflare-durable-objects-db-persistence/package.json b/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json similarity index 76% rename from packages/cloudflare-durable-objects-db-persistence/package.json rename to packages/cloudflare-durable-objects-db-sqlite-persistence/package.json index 6a84e4979..cf14bec8c 100644 --- a/packages/cloudflare-durable-objects-db-persistence/package.json +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/cloudflare-durable-objects-db-persistence", + "name": "@tanstack/cloudflare-durable-objects-db-sqlite-persistence", "version": "0.1.0", "description": "Cloudflare Durable Object SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/cloudflare-durable-objects-db-persistence" + "directory": "packages/cloudflare-durable-objects-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/cloudflare-durable-objects-db-persistence build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/cloudflare-durable-objects-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -47,7 +47,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "typescript": ">=4.7" diff --git a/packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-driver.ts similarity index 98% rename from packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-driver.ts index 0e8ef02e7..35e7313f8 100644 --- a/packages/cloudflare-durable-objects-db-persistence/src/do-driver.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' type DurableObjectSqlRow = Record diff --git a/packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-persistence.ts similarity index 98% rename from packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-persistence.ts index dc7a36262..c9043c5d4 100644 --- a/packages/cloudflare-durable-objects-db-persistence/src/do-persistence.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/do-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { CloudflareDOSQLiteDriver } from './do-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { DurableObjectStorageLike } from './do-driver' export type { DurableObjectStorageLike } from './do-driver' diff --git a/packages/cloudflare-durable-objects-db-persistence/src/index.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/index.ts similarity index 69% rename from packages/cloudflare-durable-objects-db-persistence/src/index.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/src/index.ts index 48613a4a4..5740c803b 100644 --- a/packages/cloudflare-durable-objects-db-persistence/src/index.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { CloudflareDOSQLitePersistenceOptions, DurableObjectStorageLike, } from './do-persistence' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-driver.test.ts similarity index 91% rename from packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-driver.test.ts index b035237e2..f45c27d07 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tests/do-driver.test.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-driver.test.ts @@ -2,11 +2,11 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it } from 'vitest' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persistence-core/src' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-driver-`)) diff --git a/packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-persistence.test.ts similarity index 94% rename from packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-persistence.test.ts index 91e95fd14..805c6dff4 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tests/do-persistence.test.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-persistence.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-persistence-`)) diff --git a/packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-sqlite-core-adapter-contract.test.ts similarity index 79% rename from packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-sqlite-core-adapter-contract.test.ts index b0f8a3677..7a056deae 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tests/do-sqlite-core-adapter-contract.test.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/do-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { CloudflareDOSQLiteDriver } from '../src/do-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createBetterSqliteDoStorageHarness } from './helpers/better-sqlite-do-storage' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-cf-do-sql-core-`)) diff --git a/packages/cloudflare-durable-objects-db-persistence/tests/helpers/better-sqlite-do-storage.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/tests/helpers/better-sqlite-do-storage.ts similarity index 100% rename from packages/cloudflare-durable-objects-db-persistence/tests/helpers/better-sqlite-do-storage.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tests/helpers/better-sqlite-do-storage.ts diff --git a/packages/expo-db-persistence/tsconfig.docs.json b/packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.docs.json similarity index 58% rename from packages/expo-db-persistence/tsconfig.docs.json rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.docs.json index 09dd4443a..dec9e98d1 100644 --- a/packages/expo-db-persistence/tsconfig.docs.json +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.docs.json @@ -3,7 +3,9 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src"] diff --git a/packages/cloudflare-durable-objects-db-persistence/tsconfig.json b/packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.json similarity index 85% rename from packages/cloudflare-durable-objects-db-persistence/tsconfig.json rename to packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.json index 37fb91781..722e23f3d 100644 --- a/packages/cloudflare-durable-objects-db-persistence/tsconfig.json +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/tsconfig.json @@ -14,7 +14,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": [ diff --git a/packages/cloudflare-durable-objects-db-persistence/vite.config.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/cloudflare-durable-objects-db-persistence/vite.config.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/vite.config.ts diff --git a/packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts b/packages/cloudflare-durable-objects-db-sqlite-persistence/vitest.e2e.config.ts similarity index 87% rename from packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts rename to packages/cloudflare-durable-objects-db-sqlite-persistence/vitest.e2e.config.ts index 751424a83..d36a509e3 100644 --- a/packages/cloudflare-durable-objects-db-persistence/vitest.e2e.config.ts +++ b/packages/cloudflare-durable-objects-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/db-persistence-core/README.md b/packages/db-sqlite-persistence-core/README.md similarity index 90% rename from packages/db-persistence-core/README.md rename to packages/db-sqlite-persistence-core/README.md index b0b665250..1ed225957 100644 --- a/packages/db-persistence-core/README.md +++ b/packages/db-sqlite-persistence-core/README.md @@ -1,4 +1,4 @@ -# @tanstack/db-persistence-core +# @tanstack/db-sqlite-persistence-core Shared SQLite persistence primitives for TanStack DB. Runtime-specific wrappers (Node, Electron, React Native, Cloudflare Durable Objects) build on top of this @@ -86,10 +86,10 @@ while still handling per-collection schema versions correctly. In most applications, use a runtime package directly: -- `@tanstack/node-db-persistence` -- `@tanstack/browser-db-persistence` -- `@tanstack/electron-db-persistence` -- `@tanstack/react-native-db-persistence` -- `@tanstack/cloudflare-durable-objects-db-persistence` +- `@tanstack/node-db-sqlite-persistence` +- `@tanstack/browser-db-sqlite-persistence` +- `@tanstack/electron-db-sqlite-persistence` +- `@tanstack/react-native-db-sqlite-persistence` +- `@tanstack/cloudflare-durable-objects-db-sqlite-persistence` Those packages provide concrete drivers and runtime wiring. diff --git a/packages/db-persistence-core/package.json b/packages/db-sqlite-persistence-core/package.json similarity index 92% rename from packages/db-persistence-core/package.json rename to packages/db-sqlite-persistence-core/package.json index f006ecaf9..a23786df3 100644 --- a/packages/db-persistence-core/package.json +++ b/packages/db-sqlite-persistence-core/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/db-persistence-core", + "name": "@tanstack/db-sqlite-persistence-core", "version": "0.1.0", "description": "SQLite persisted collection core for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/db-persistence-core" + "directory": "packages/db-sqlite-persistence-core" }, "homepage": "https://tanstack.com/db", "keywords": [ diff --git a/packages/db-persistence-core/src/errors.ts b/packages/db-sqlite-persistence-core/src/errors.ts similarity index 100% rename from packages/db-persistence-core/src/errors.ts rename to packages/db-sqlite-persistence-core/src/errors.ts diff --git a/packages/db-persistence-core/src/index.ts b/packages/db-sqlite-persistence-core/src/index.ts similarity index 100% rename from packages/db-persistence-core/src/index.ts rename to packages/db-sqlite-persistence-core/src/index.ts diff --git a/packages/db-persistence-core/src/persisted.ts b/packages/db-sqlite-persistence-core/src/persisted.ts similarity index 100% rename from packages/db-persistence-core/src/persisted.ts rename to packages/db-sqlite-persistence-core/src/persisted.ts diff --git a/packages/db-persistence-core/src/sqlite-core-adapter.ts b/packages/db-sqlite-persistence-core/src/sqlite-core-adapter.ts similarity index 100% rename from packages/db-persistence-core/src/sqlite-core-adapter.ts rename to packages/db-sqlite-persistence-core/src/sqlite-core-adapter.ts diff --git a/packages/db-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts b/packages/db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts similarity index 100% rename from packages/db-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts rename to packages/db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract.ts diff --git a/packages/db-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts b/packages/db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts similarity index 100% rename from packages/db-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts rename to packages/db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract.ts diff --git a/packages/db-persistence-core/tests/contracts/runtime-persistence-contract.ts b/packages/db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract.ts similarity index 100% rename from packages/db-persistence-core/tests/contracts/runtime-persistence-contract.ts rename to packages/db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract.ts diff --git a/packages/db-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts b/packages/db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts similarity index 100% rename from packages/db-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts rename to packages/db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract.ts diff --git a/packages/db-persistence-core/tests/contracts/sqlite-driver-contract.ts b/packages/db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract.ts similarity index 100% rename from packages/db-persistence-core/tests/contracts/sqlite-driver-contract.ts rename to packages/db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract.ts diff --git a/packages/db-persistence-core/tests/persisted.test-d.ts b/packages/db-sqlite-persistence-core/tests/persisted.test-d.ts similarity index 100% rename from packages/db-persistence-core/tests/persisted.test-d.ts rename to packages/db-sqlite-persistence-core/tests/persisted.test-d.ts diff --git a/packages/db-persistence-core/tests/persisted.test.ts b/packages/db-sqlite-persistence-core/tests/persisted.test.ts similarity index 100% rename from packages/db-persistence-core/tests/persisted.test.ts rename to packages/db-sqlite-persistence-core/tests/persisted.test.ts diff --git a/packages/db-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts b/packages/db-sqlite-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts similarity index 100% rename from packages/db-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts rename to packages/db-sqlite-persistence-core/tests/sqlite-core-adapter-cli-runtime.test.ts diff --git a/packages/db-persistence-core/tests/sqlite-core-adapter.test.ts b/packages/db-sqlite-persistence-core/tests/sqlite-core-adapter.test.ts similarity index 100% rename from packages/db-persistence-core/tests/sqlite-core-adapter.test.ts rename to packages/db-sqlite-persistence-core/tests/sqlite-core-adapter.test.ts diff --git a/packages/db-persistence-core/tsconfig.docs.json b/packages/db-sqlite-persistence-core/tsconfig.docs.json similarity index 100% rename from packages/db-persistence-core/tsconfig.docs.json rename to packages/db-sqlite-persistence-core/tsconfig.docs.json diff --git a/packages/db-persistence-core/tsconfig.json b/packages/db-sqlite-persistence-core/tsconfig.json similarity index 100% rename from packages/db-persistence-core/tsconfig.json rename to packages/db-sqlite-persistence-core/tsconfig.json diff --git a/packages/db-persistence-core/vite.config.ts b/packages/db-sqlite-persistence-core/vite.config.ts similarity index 100% rename from packages/db-persistence-core/vite.config.ts rename to packages/db-sqlite-persistence-core/vite.config.ts diff --git a/packages/electric-db-collection/tests/electric.test.ts b/packages/electric-db-collection/tests/electric.test.ts index 7e846c6a0..30b15887b 100644 --- a/packages/electric-db-collection/tests/electric.test.ts +++ b/packages/electric-db-collection/tests/electric.test.ts @@ -4,7 +4,7 @@ import { createCollection, createTransaction, } from '@tanstack/db' -import { persistedCollectionOptions } from '../../db-persistence-core/src' +import { persistedCollectionOptions } from '../../db-sqlite-persistence-core/src' import { electricCollectionOptions, isChangeMessage } from '../src/electric' import { stripVirtualProps } from '../../db/tests/utils' import type { ElectricCollectionUtils } from '../src/electric' diff --git a/packages/electron-db-persistence/tsconfig.docs.json b/packages/electron-db-persistence/tsconfig.docs.json deleted file mode 100644 index 45f3ae6a7..000000000 --- a/packages/electron-db-persistence/tsconfig.docs.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/node-db-persistence": ["../node-db-persistence/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] - } - }, - "include": ["src"] -} diff --git a/packages/electron-db-persistence/README.md b/packages/electron-db-sqlite-persistence/README.md similarity index 82% rename from packages/electron-db-persistence/README.md rename to packages/electron-db-sqlite-persistence/README.md index 5c60dfb0c..8f288dab3 100644 --- a/packages/electron-db-persistence/README.md +++ b/packages/electron-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/electron-db-persistence +# @tanstack/electron-db-sqlite-persistence Thin Electron bridge for TanStack DB SQLite persistence. @@ -8,16 +8,16 @@ Thin Electron bridge for TanStack DB SQLite persistence. - `createElectronSQLitePersistence(...)` (renderer process) - `persistedCollectionOptions(...)` (re-exported from core) -Use `@tanstack/electron-db-persistence/main` and -`@tanstack/electron-db-persistence/renderer` if you prefer +Use `@tanstack/electron-db-sqlite-persistence/main` and +`@tanstack/electron-db-sqlite-persistence/renderer` if you prefer explicit process-specific entrypoints. ## Main process ```ts import { ipcMain } from 'electron' -import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' -import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-persistence/main' +import { createNodeSQLitePersistence } from '@tanstack/node-db-sqlite-persistence' +import { exposeElectronSQLitePersistence } from '@tanstack/electron-db-sqlite-persistence/main' import Database from 'better-sqlite3' const database = new Database(`./tanstack-db.sqlite`) @@ -42,7 +42,7 @@ import { ipcRenderer } from 'electron' import { createElectronSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/electron-db-persistence' +} from '@tanstack/electron-db-sqlite-persistence' type Todo = { id: string diff --git a/packages/electron-db-persistence/package.json b/packages/electron-db-sqlite-persistence/package.json similarity index 70% rename from packages/electron-db-persistence/package.json rename to packages/electron-db-sqlite-persistence/package.json index 05703f9e7..7864e9483 100644 --- a/packages/electron-db-persistence/package.json +++ b/packages/electron-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/electron-db-persistence", + "name": "@tanstack/electron-db-sqlite-persistence", "version": "0.1.0", "description": "Electron SQLite persisted collection bridge for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/electron-db-persistence" + "directory": "packages/electron-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,8 +22,8 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && pnpm --filter @tanstack/electron-db-persistence build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:all": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && pnpm --filter @tanstack/electron-db-persistence build && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --run && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/node-db-sqlite-persistence build && pnpm --filter @tanstack/electron-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:all": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/node-db-sqlite-persistence build && pnpm --filter @tanstack/electron-db-sqlite-persistence build && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --run && TANSTACK_DB_ELECTRON_E2E_ALL=1 vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -68,7 +68,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "typescript": ">=4.7" diff --git a/packages/electron-db-persistence/src/electron-coordinator.ts b/packages/electron-db-sqlite-persistence/src/electron-coordinator.ts similarity index 99% rename from packages/electron-db-persistence/src/electron-coordinator.ts rename to packages/electron-db-sqlite-persistence/src/electron-coordinator.ts index 3c6c41f40..c7d48d17a 100644 --- a/packages/electron-db-persistence/src/electron-coordinator.ts +++ b/packages/electron-db-sqlite-persistence/src/electron-coordinator.ts @@ -6,7 +6,7 @@ import type { PersistenceAdapter, ProtocolEnvelope, PullSinceResponse, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { LoadSubsetOptions } from '@tanstack/db' // --------------------------------------------------------------------------- diff --git a/packages/electron-db-persistence/src/errors.ts b/packages/electron-db-sqlite-persistence/src/errors.ts similarity index 100% rename from packages/electron-db-persistence/src/errors.ts rename to packages/electron-db-sqlite-persistence/src/errors.ts diff --git a/packages/electron-db-persistence/src/index.ts b/packages/electron-db-sqlite-persistence/src/index.ts similarity index 80% rename from packages/electron-db-persistence/src/index.ts rename to packages/electron-db-sqlite-persistence/src/index.ts index 0ee6c087b..65c571726 100644 --- a/packages/electron-db-persistence/src/index.ts +++ b/packages/electron-db-sqlite-persistence/src/index.ts @@ -10,8 +10,8 @@ export type { } from './renderer' export { ElectronCollectionCoordinator } from './electron-coordinator' export type { ElectronCollectionCoordinatorOptions } from './electron-coordinator' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/electron-db-persistence/src/main.ts b/packages/electron-db-sqlite-persistence/src/main.ts similarity index 99% rename from packages/electron-db-persistence/src/main.ts rename to packages/electron-db-sqlite-persistence/src/main.ts index 1daddb661..609a6c1c7 100644 --- a/packages/electron-db-persistence/src/main.ts +++ b/packages/electron-db-sqlite-persistence/src/main.ts @@ -1,4 +1,4 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' import { DEFAULT_ELECTRON_PERSISTENCE_CHANNEL, ELECTRON_PERSISTENCE_PROTOCOL_VERSION, @@ -7,7 +7,7 @@ import type { PersistedCollectionPersistence, PersistenceAdapter, SQLitePullSinceResult, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { ElectronPersistedKey, ElectronPersistedRow, diff --git a/packages/electron-db-persistence/src/protocol.ts b/packages/electron-db-sqlite-persistence/src/protocol.ts similarity index 98% rename from packages/electron-db-persistence/src/protocol.ts rename to packages/electron-db-sqlite-persistence/src/protocol.ts index 110134e8a..7dcdc8dec 100644 --- a/packages/electron-db-persistence/src/protocol.ts +++ b/packages/electron-db-sqlite-persistence/src/protocol.ts @@ -4,7 +4,7 @@ import type { PersistedIndexSpec, PersistedTx, SQLitePullSinceResult, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' export const ELECTRON_PERSISTENCE_PROTOCOL_VERSION = 1 as const export const DEFAULT_ELECTRON_PERSISTENCE_CHANNEL = `tanstack-db:sqlite-persistence` diff --git a/packages/electron-db-persistence/src/renderer.ts b/packages/electron-db-sqlite-persistence/src/renderer.ts similarity index 99% rename from packages/electron-db-persistence/src/renderer.ts rename to packages/electron-db-sqlite-persistence/src/renderer.ts index 1a730b18d..fe0f97aed 100644 --- a/packages/electron-db-persistence/src/renderer.ts +++ b/packages/electron-db-sqlite-persistence/src/renderer.ts @@ -1,7 +1,7 @@ import { InvalidPersistedCollectionConfigError, SingleProcessCoordinator, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { ElectronCollectionCoordinator } from './electron-coordinator' import { DEFAULT_ELECTRON_PERSISTENCE_CHANNEL, @@ -14,7 +14,7 @@ import type { PersistedIndexSpec, PersistedTx, SQLitePullSinceResult, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { ElectronPersistedKey, ElectronPersistedRow, diff --git a/packages/electron-db-persistence/tests/e2e/electron-process-client.ts b/packages/electron-db-sqlite-persistence/tests/e2e/electron-process-client.ts similarity index 100% rename from packages/electron-db-persistence/tests/e2e/electron-process-client.ts rename to packages/electron-db-sqlite-persistence/tests/e2e/electron-process-client.ts diff --git a/packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/electron-main.mjs similarity index 99% rename from packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs rename to packages/electron-db-sqlite-persistence/tests/e2e/fixtures/electron-main.mjs index ce3dccb80..048483e93 100644 --- a/packages/electron-db-persistence/tests/e2e/fixtures/electron-main.mjs +++ b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/electron-main.mjs @@ -7,7 +7,7 @@ import { tmpdir } from 'node:os' import { fileURLToPath } from 'node:url' import { serialize } from 'node:v8' import { BrowserWindow, app, ipcMain } from 'electron' -import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-persistence-core' +import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-sqlite-persistence-core' import { exposeElectronSQLitePersistence } from '../../../dist/esm/main.js' const E2E_RESULT_PREFIX = `__TANSTACK_DB_E2E_RESULT__:` diff --git a/packages/electron-db-persistence/tests/e2e/fixtures/renderer-page.html b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/renderer-page.html similarity index 100% rename from packages/electron-db-persistence/tests/e2e/fixtures/renderer-page.html rename to packages/electron-db-sqlite-persistence/tests/e2e/fixtures/renderer-page.html diff --git a/packages/electron-db-persistence/tests/e2e/fixtures/renderer-preload.cjs b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/renderer-preload.cjs similarity index 100% rename from packages/electron-db-persistence/tests/e2e/fixtures/renderer-preload.cjs rename to packages/electron-db-sqlite-persistence/tests/e2e/fixtures/renderer-preload.cjs diff --git a/packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/runtime-bridge-types.ts similarity index 91% rename from packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts rename to packages/electron-db-sqlite-persistence/tests/e2e/fixtures/runtime-bridge-types.ts index 33c19410d..39be75ce0 100644 --- a/packages/electron-db-persistence/tests/e2e/fixtures/runtime-bridge-types.ts +++ b/packages/electron-db-sqlite-persistence/tests/e2e/fixtures/runtime-bridge-types.ts @@ -1,8 +1,8 @@ import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractTodo, -} from '../../../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' -import type { SQLiteCoreAdapterOptions } from '@tanstack/db-persistence-core' +} from '../../../../db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +import type { SQLiteCoreAdapterOptions } from '@tanstack/db-sqlite-persistence-core' import type { ElectronPersistenceRequestEnvelope, ElectronPersistenceResponseEnvelope, diff --git a/packages/electron-db-persistence/tests/electron-ipc.test-d.ts b/packages/electron-db-sqlite-persistence/tests/electron-ipc.test-d.ts similarity index 100% rename from packages/electron-db-persistence/tests/electron-ipc.test-d.ts rename to packages/electron-db-sqlite-persistence/tests/electron-ipc.test-d.ts diff --git a/packages/electron-db-persistence/tests/electron-ipc.test.ts b/packages/electron-db-sqlite-persistence/tests/electron-ipc.test.ts similarity index 97% rename from packages/electron-db-persistence/tests/electron-ipc.test.ts rename to packages/electron-db-sqlite-persistence/tests/electron-ipc.test.ts index 0651da955..6754539f3 100644 --- a/packages/electron-db-persistence/tests/electron-ipc.test.ts +++ b/packages/electron-db-sqlite-persistence/tests/electron-ipc.test.ts @@ -2,9 +2,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' -import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import { createNodeSQLitePersistence } from '@tanstack/node-db-sqlite-persistence' +import { BetterSqlite3SQLiteDriver } from '../../node-db-sqlite-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, @@ -17,7 +17,7 @@ import { createElectronRuntimeBridgeInvoke, isElectronFullE2EEnabled, } from './e2e/electron-process-client' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' import type { ElectronPersistenceInvoke, ElectronPersistenceRequestEnvelope, diff --git a/packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts b/packages/electron-db-sqlite-persistence/tests/electron-persisted-collection.e2e.test.ts similarity index 95% rename from packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts rename to packages/electron-db-sqlite-persistence/tests/electron-persisted-collection.e2e.test.ts index ae4bedd84..23976a234 100644 --- a/packages/electron-db-persistence/tests/electron-persisted-collection.e2e.test.ts +++ b/packages/electron-db-sqlite-persistence/tests/electron-persisted-collection.e2e.test.ts @@ -3,20 +3,20 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterAll, afterEach, beforeAll } from 'vitest' import { BTreeIndex, createCollection } from '@tanstack/db' -import { persistedCollectionOptions } from '@tanstack/db-persistence-core' -import { createNodeSQLitePersistence } from '@tanstack/node-db-persistence' -import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' +import { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' +import { createNodeSQLitePersistence } from '@tanstack/node-db-sqlite-persistence' +import { BetterSqlite3SQLiteDriver } from '../../node-db-sqlite-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createElectronRuntimeBridgeInvoke, isElectronFullE2EEnabled, } from './e2e/electron-process-client' -import type { PersistedTx } from '@tanstack/db-persistence-core' +import type { PersistedTx } from '@tanstack/db-sqlite-persistence-core' import type { Collection } from '@tanstack/db' import type { ElectronPersistenceInvoke, diff --git a/packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts b/packages/electron-db-sqlite-persistence/tests/electron-runtime-bridge.e2e.test.ts similarity index 92% rename from packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts rename to packages/electron-db-sqlite-persistence/tests/electron-runtime-bridge.e2e.test.ts index 079f6ab82..f514c6650 100644 --- a/packages/electron-db-persistence/tests/electron-runtime-bridge.e2e.test.ts +++ b/packages/electron-db-sqlite-persistence/tests/electron-runtime-bridge.e2e.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runRuntimeBridgeE2EContractSuite } from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +import { runRuntimeBridgeE2EContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import { runElectronRuntimeBridgeScenario } from './e2e/electron-process-client' import type { RuntimeBridgeE2EContractError, RuntimeBridgeE2EContractHarness, RuntimeBridgeE2EContractHarnessFactory, RuntimeBridgeE2EContractTodo, -} from '../../db-persistence-core/tests/contracts/runtime-bridge-e2e-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-bridge-e2e-contract' import type { ElectronRuntimeBridgeInput, ElectronRuntimeBridgeScenarioResult, diff --git a/packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts b/packages/electron-db-sqlite-persistence/tests/electron-sqlite-core-adapter-contract.test.ts similarity index 90% rename from packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts rename to packages/electron-db-sqlite-persistence/tests/electron-sqlite-core-adapter-contract.test.ts index aad00f05e..663bae336 100644 --- a/packages/electron-db-persistence/tests/electron-sqlite-core-adapter-contract.test.ts +++ b/packages/electron-db-sqlite-persistence/tests/electron-sqlite-core-adapter-contract.test.ts @@ -1,9 +1,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-persistence-core' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' -import { BetterSqlite3SQLiteDriver } from '../../node-db-persistence/src/node-driver' +import { createSQLiteCorePersistenceAdapter } from '@tanstack/db-sqlite-persistence-core' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { BetterSqlite3SQLiteDriver } from '../../node-db-sqlite-persistence/src/node-driver' import { createElectronSQLitePersistence, exposeElectronSQLitePersistence, @@ -15,7 +15,7 @@ import { import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import type { ElectronPersistenceInvoke, ElectronPersistenceResponseEnvelope, diff --git a/packages/electron-db-sqlite-persistence/tsconfig.docs.json b/packages/electron-db-sqlite-persistence/tsconfig.docs.json new file mode 100644 index 000000000..7131ed70a --- /dev/null +++ b/packages/electron-db-sqlite-persistence/tsconfig.docs.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/node-db-sqlite-persistence": [ + "../node-db-sqlite-persistence/src" + ], + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/electron-db-persistence/tsconfig.json b/packages/electron-db-sqlite-persistence/tsconfig.json similarity index 75% rename from packages/electron-db-persistence/tsconfig.json rename to packages/electron-db-sqlite-persistence/tsconfig.json index 692d3168a..d2f1d836a 100644 --- a/packages/electron-db-persistence/tsconfig.json +++ b/packages/electron-db-sqlite-persistence/tsconfig.json @@ -14,8 +14,12 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/node-db-persistence": ["../node-db-persistence/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/node-db-sqlite-persistence": [ + "../node-db-sqlite-persistence/src" + ], + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": [ diff --git a/packages/electron-db-persistence/vite.config.ts b/packages/electron-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/electron-db-persistence/vite.config.ts rename to packages/electron-db-sqlite-persistence/vite.config.ts diff --git a/packages/electron-db-persistence/vitest.e2e.config.ts b/packages/electron-db-sqlite-persistence/vitest.e2e.config.ts similarity index 78% rename from packages/electron-db-persistence/vitest.e2e.config.ts rename to packages/electron-db-sqlite-persistence/vitest.e2e.config.ts index 2f91be5a8..a4390eb59 100644 --- a/packages/electron-db-persistence/vitest.e2e.config.ts +++ b/packages/electron-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,13 +9,13 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/node-db-persistence': resolve( + '@tanstack/node-db-sqlite-persistence': resolve( packageDirectory, - `../node-db-persistence/src`, + `../node-db-sqlite-persistence/src`, ), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/expo-db-persistence/README.md b/packages/expo-db-sqlite-persistence/README.md similarity index 79% rename from packages/expo-db-persistence/README.md rename to packages/expo-db-sqlite-persistence/README.md index 4dc95e8fb..8798a2b99 100644 --- a/packages/expo-db-persistence/README.md +++ b/packages/expo-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/expo-db-persistence +# @tanstack/expo-db-sqlite-persistence Thin SQLite persistence for Expo apps using the official `expo-sqlite` adapter. @@ -7,7 +7,7 @@ Thin SQLite persistence for Expo apps using the official `expo-sqlite` adapter. - `createExpoSQLitePersistence(...)` - `persistedCollectionOptions(...)` (re-exported from core) - Advanced driver entrypoint: - `@tanstack/expo-db-persistence/expo-sqlite-driver` + `@tanstack/expo-db-sqlite-persistence/expo-sqlite-driver` ## Quick start @@ -17,7 +17,7 @@ import { createCollection } from '@tanstack/db' import { createExpoSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/expo-db-persistence' +} from '@tanstack/expo-db-sqlite-persistence' type Todo = { id: string @@ -50,15 +50,15 @@ export const todosCollection = createCollection( - Mode defaults (`sync-present` vs `sync-absent`) are inferred from whether a `sync` config is present in `persistedCollectionOptions`. - The React Native `op-sqlite` wrapper remains available in - `@tanstack/react-native-db-persistence`. + `@tanstack/react-native-db-sqlite-persistence`. - Expo web is not part of the emulator-backed E2E path in this package. Use the browser SQLite package for browser-focused persistence coverage. ## E2E -- `pnpm --filter @tanstack/expo-db-persistence test:e2e` +- `pnpm --filter @tanstack/expo-db-sqlite-persistence test:e2e` runs the shared Node-backed conformance suite. -- `pnpm --filter @tanstack/expo-db-persistence test:e2e:expo:ios` +- `pnpm --filter @tanstack/expo-db-sqlite-persistence test:e2e:expo:ios` runs the real Expo iOS Simulator path. -- `pnpm --filter @tanstack/expo-db-persistence test:e2e:expo:android` +- `pnpm --filter @tanstack/expo-db-sqlite-persistence test:e2e:expo:android` runs the real Expo Android Emulator path. diff --git a/packages/expo-db-persistence/e2e/expo-emulator-smoke.e2e.test.ts b/packages/expo-db-sqlite-persistence/e2e/expo-emulator-smoke.e2e.test.ts similarity index 100% rename from packages/expo-db-persistence/e2e/expo-emulator-smoke.e2e.test.ts rename to packages/expo-db-sqlite-persistence/e2e/expo-emulator-smoke.e2e.test.ts diff --git a/packages/expo-db-persistence/e2e/expo-persisted-collection.e2e.test.ts b/packages/expo-db-sqlite-persistence/e2e/expo-persisted-collection.e2e.test.ts similarity index 100% rename from packages/expo-db-persistence/e2e/expo-persisted-collection.e2e.test.ts rename to packages/expo-db-sqlite-persistence/e2e/expo-persisted-collection.e2e.test.ts diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/App.tsx similarity index 99% rename from packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/App.tsx index 7e2083992..616b733f7 100644 --- a/packages/expo-db-persistence/e2e/expo-runtime-app/App.tsx +++ b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/App.tsx @@ -5,7 +5,7 @@ import { createCollection } from '@tanstack/db' import { createExpoSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/expo-db-persistence' +} from '@tanstack/expo-db-sqlite-persistence' import type { ExpoRuntimeCommand, ExpoRuntimeCommandResult, diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/app.json b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/app.json similarity index 100% rename from packages/expo-db-persistence/e2e/expo-runtime-app/app.json rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/app.json diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/index.js b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/index.js similarity index 100% rename from packages/expo-db-persistence/e2e/expo-runtime-app/index.js rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/index.js diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/metro.config.js similarity index 100% rename from packages/expo-db-persistence/e2e/expo-runtime-app/metro.config.js rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/metro.config.js diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/package.json b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/package.json similarity index 74% rename from packages/expo-db-persistence/e2e/expo-runtime-app/package.json rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/package.json index aabe76345..971cc13b2 100644 --- a/packages/expo-db-persistence/e2e/expo-runtime-app/package.json +++ b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/expo-db-persistence-e2e-app", + "name": "@tanstack/expo-db-sqlite-persistence-e2e-app", "private": true, "version": "0.0.0", "main": "index.js", @@ -10,7 +10,7 @@ }, "dependencies": { "@tanstack/db": "workspace:*", - "@tanstack/expo-db-persistence": "workspace:*", + "@tanstack/expo-db-sqlite-persistence": "workspace:*", "expo": "~55.0.6", "expo-sqlite": "^55.0.10", "react": "19.2.0", diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/polyfills.js b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/polyfills.js similarity index 100% rename from packages/expo-db-persistence/e2e/expo-runtime-app/polyfills.js rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/polyfills.js diff --git a/packages/expo-db-persistence/e2e/expo-runtime-app/tsconfig.json b/packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/tsconfig.json similarity index 100% rename from packages/expo-db-persistence/e2e/expo-runtime-app/tsconfig.json rename to packages/expo-db-sqlite-persistence/e2e/expo-runtime-app/tsconfig.json diff --git a/packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts b/packages/expo-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts similarity index 98% rename from packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts rename to packages/expo-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts index cfc457b44..fd5e1ff39 100644 --- a/packages/expo-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts +++ b/packages/expo-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts @@ -5,10 +5,10 @@ import { afterAll, afterEach, beforeAll } from 'vitest' import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createExpoSQLiteTestDatabase } from '../tests/helpers/expo-sqlite-test-db' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/expo-db-persistence/e2e/runtime-protocol.ts b/packages/expo-db-sqlite-persistence/e2e/runtime-protocol.ts similarity index 100% rename from packages/expo-db-persistence/e2e/runtime-protocol.ts rename to packages/expo-db-sqlite-persistence/e2e/runtime-protocol.ts diff --git a/packages/expo-db-persistence/package.json b/packages/expo-db-sqlite-persistence/package.json similarity index 65% rename from packages/expo-db-persistence/package.json rename to packages/expo-db-sqlite-persistence/package.json index ce238db65..9f1b03396 100644 --- a/packages/expo-db-persistence/package.json +++ b/packages/expo-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/expo-db-persistence", + "name": "@tanstack/expo-db-sqlite-persistence", "version": "0.1.0", "description": "Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/expo-db-persistence" + "directory": "packages/expo-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,9 +22,9 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:expo:ios": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=ios vitest --config vitest.e2e.config.ts --run", - "test:e2e:expo:android": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/expo-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=android vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/expo-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:expo:ios": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/expo-db-sqlite-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=ios vitest --config vitest.e2e.config.ts --run", + "test:e2e:expo:android": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/expo-db-sqlite-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 TANSTACK_DB_MOBILE_SQLITE_FACTORY_MODULE=./tests/helpers/expo-emulator-database-factory.ts TANSTACK_DB_EXPO_RUNTIME_PLATFORM=android vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -59,7 +59,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "expo-sqlite": "^55.0.10", diff --git a/packages/expo-db-persistence/src/expo-sqlite-driver.ts b/packages/expo-db-sqlite-persistence/src/expo-sqlite-driver.ts similarity index 98% rename from packages/expo-db-persistence/src/expo-sqlite-driver.ts rename to packages/expo-db-sqlite-persistence/src/expo-sqlite-driver.ts index 0c4e17736..e85df20aa 100644 --- a/packages/expo-db-persistence/src/expo-sqlite-driver.ts +++ b/packages/expo-db-sqlite-persistence/src/expo-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' export type ExpoSQLiteBindParams = | ReadonlyArray diff --git a/packages/expo-db-persistence/src/expo.ts b/packages/expo-db-sqlite-persistence/src/expo.ts similarity index 97% rename from packages/expo-db-persistence/src/expo.ts rename to packages/expo-db-sqlite-persistence/src/expo.ts index 98b4029b7..fda560d97 100644 --- a/packages/expo-db-persistence/src/expo.ts +++ b/packages/expo-db-sqlite-persistence/src/expo.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { ExpoSQLiteDriver } from './expo-sqlite-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { ExpoSQLiteDatabaseLike } from './expo-sqlite-driver' export type { ExpoSQLiteDatabaseLike } from './expo-sqlite-driver' diff --git a/packages/expo-db-persistence/src/index.ts b/packages/expo-db-sqlite-persistence/src/index.ts similarity index 66% rename from packages/expo-db-persistence/src/index.ts rename to packages/expo-db-sqlite-persistence/src/index.ts index a122b7822..6b6968dca 100644 --- a/packages/expo-db-persistence/src/index.ts +++ b/packages/expo-db-sqlite-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { ExpoSQLitePersistenceOptions, ExpoSQLiteSchemaMismatchPolicy, } from './expo' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/expo-db-persistence/tests/expo-persistence.test.ts b/packages/expo-db-sqlite-persistence/tests/expo-persistence.test.ts similarity index 100% rename from packages/expo-db-persistence/tests/expo-persistence.test.ts rename to packages/expo-db-sqlite-persistence/tests/expo-persistence.test.ts diff --git a/packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts b/packages/expo-db-sqlite-persistence/tests/expo-runtime-persistence-contract.test.ts similarity index 94% rename from packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts rename to packages/expo-db-sqlite-persistence/tests/expo-runtime-persistence-contract.test.ts index 4068743af..8e88a3f1d 100644 --- a/packages/expo-db-persistence/tests/expo-runtime-persistence-contract.test.ts +++ b/packages/expo-db-sqlite-persistence/tests/expo-runtime-persistence-contract.test.ts @@ -4,18 +4,18 @@ import { join } from 'node:path' import { describe, expect, it } from 'vitest' import { createExpoSQLitePersistence, persistedCollectionOptions } from '../src' import { createExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { ExpoSQLiteDatabaseLike } from '../src/expo-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: ExpoSQLiteDatabaseLike diff --git a/packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts similarity index 78% rename from packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts rename to packages/expo-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts index a9b2431d9..c6cfdf816 100644 --- a/packages/expo-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts +++ b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-core-`)) diff --git a/packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver-contract.test.ts similarity index 77% rename from packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts rename to packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver-contract.test.ts index db3843094..8860b6805 100644 --- a/packages/expo-db-persistence/tests/expo-sqlite-driver-contract.test.ts +++ b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-driver-contract-`)) diff --git a/packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver.test.ts similarity index 99% rename from packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts rename to packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver.test.ts index cc869cfa7..cff37d7c5 100644 --- a/packages/expo-db-persistence/tests/expo-sqlite-driver.test.ts +++ b/packages/expo-db-sqlite-persistence/tests/expo-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' import { ExpoSQLiteDriver } from '../src/expo-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persistence-core/src' import { createExpoSQLiteTestDatabase } from './helpers/expo-sqlite-test-db' const activeCleanupFns: Array<() => void | Promise> = [] diff --git a/packages/expo-db-persistence/tests/helpers/expo-emulator-database-factory.ts b/packages/expo-db-sqlite-persistence/tests/helpers/expo-emulator-database-factory.ts similarity index 100% rename from packages/expo-db-persistence/tests/helpers/expo-emulator-database-factory.ts rename to packages/expo-db-sqlite-persistence/tests/helpers/expo-emulator-database-factory.ts diff --git a/packages/expo-db-persistence/tests/helpers/expo-emulator-runtime.ts b/packages/expo-db-sqlite-persistence/tests/helpers/expo-emulator-runtime.ts similarity index 100% rename from packages/expo-db-persistence/tests/helpers/expo-emulator-runtime.ts rename to packages/expo-db-sqlite-persistence/tests/helpers/expo-emulator-runtime.ts diff --git a/packages/expo-db-persistence/tests/helpers/expo-sqlite-test-db.ts b/packages/expo-db-sqlite-persistence/tests/helpers/expo-sqlite-test-db.ts similarity index 100% rename from packages/expo-db-persistence/tests/helpers/expo-sqlite-test-db.ts rename to packages/expo-db-sqlite-persistence/tests/helpers/expo-sqlite-test-db.ts diff --git a/packages/expo-db-persistence/tests/helpers/mobile-runtime-test-setup.ts b/packages/expo-db-sqlite-persistence/tests/helpers/mobile-runtime-test-setup.ts similarity index 100% rename from packages/expo-db-persistence/tests/helpers/mobile-runtime-test-setup.ts rename to packages/expo-db-sqlite-persistence/tests/helpers/mobile-runtime-test-setup.ts diff --git a/packages/browser-db-persistence/tsconfig.docs.json b/packages/expo-db-sqlite-persistence/tsconfig.docs.json similarity index 58% rename from packages/browser-db-persistence/tsconfig.docs.json rename to packages/expo-db-sqlite-persistence/tsconfig.docs.json index 09dd4443a..dec9e98d1 100644 --- a/packages/browser-db-persistence/tsconfig.docs.json +++ b/packages/expo-db-sqlite-persistence/tsconfig.docs.json @@ -3,7 +3,9 @@ "compilerOptions": { "paths": { "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src"] diff --git a/packages/expo-db-persistence/tsconfig.json b/packages/expo-db-sqlite-persistence/tsconfig.json similarity index 85% rename from packages/expo-db-persistence/tsconfig.json rename to packages/expo-db-sqlite-persistence/tsconfig.json index ec5043ffa..2f95646ec 100644 --- a/packages/expo-db-persistence/tsconfig.json +++ b/packages/expo-db-sqlite-persistence/tsconfig.json @@ -14,7 +14,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/expo-db-persistence/vite.config.ts b/packages/expo-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/expo-db-persistence/vite.config.ts rename to packages/expo-db-sqlite-persistence/vite.config.ts diff --git a/packages/expo-db-persistence/vitest.e2e.config.ts b/packages/expo-db-sqlite-persistence/vitest.e2e.config.ts similarity index 88% rename from packages/expo-db-persistence/vitest.e2e.config.ts rename to packages/expo-db-sqlite-persistence/vitest.e2e.config.ts index 92ea04b95..8a7fff173 100644 --- a/packages/expo-db-persistence/vitest.e2e.config.ts +++ b/packages/expo-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/node-db-persistence/tsconfig.docs.json b/packages/node-db-persistence/tsconfig.docs.json deleted file mode 100644 index 09dd4443a..000000000 --- a/packages/node-db-persistence/tsconfig.docs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] - } - }, - "include": ["src"] -} diff --git a/packages/node-db-persistence/README.md b/packages/node-db-sqlite-persistence/README.md similarity index 93% rename from packages/node-db-persistence/README.md rename to packages/node-db-sqlite-persistence/README.md index 5752caf46..fc2fdb2f6 100644 --- a/packages/node-db-persistence/README.md +++ b/packages/node-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/node-db-persistence +# @tanstack/node-db-sqlite-persistence Thin Node SQLite persistence for TanStack DB. @@ -14,7 +14,7 @@ import { createCollection } from '@tanstack/db' import { createNodeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/node-db-persistence' +} from '@tanstack/node-db-sqlite-persistence' import Database from 'better-sqlite3' type Todo = { diff --git a/packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts b/packages/node-db-sqlite-persistence/e2e/node-persisted-collection.e2e.test.ts similarity index 98% rename from packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts rename to packages/node-db-sqlite-persistence/e2e/node-persisted-collection.e2e.test.ts index e9e12af3c..221fdd950 100644 --- a/packages/node-db-persistence/e2e/node-persisted-collection.e2e.test.ts +++ b/packages/node-db-sqlite-persistence/e2e/node-persisted-collection.e2e.test.ts @@ -6,7 +6,7 @@ import { BTreeIndex, createCollection } from '@tanstack/db' import BetterSqlite3 from 'better-sqlite3' import { createNodeSQLitePersistence, persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { Collection } from '@tanstack/db' import type { Comment, diff --git a/packages/node-db-persistence/package.json b/packages/node-db-sqlite-persistence/package.json similarity index 78% rename from packages/node-db-persistence/package.json rename to packages/node-db-sqlite-persistence/package.json index c5be51374..aaec289d8 100644 --- a/packages/node-db-persistence/package.json +++ b/packages/node-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/node-db-persistence", + "name": "@tanstack/node-db-sqlite-persistence", "version": "0.1.0", "description": "Node SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/node-db-persistence" + "directory": "packages/node-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,7 +22,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/node-db-persistence build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/node-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -47,7 +47,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*", + "@tanstack/db-sqlite-persistence-core": "workspace:*", "better-sqlite3": "^12.6.2" }, "peerDependencies": { diff --git a/packages/node-db-persistence/src/index.ts b/packages/node-db-sqlite-persistence/src/index.ts similarity index 68% rename from packages/node-db-persistence/src/index.ts rename to packages/node-db-sqlite-persistence/src/index.ts index 1d1c33faf..52c936c1d 100644 --- a/packages/node-db-persistence/src/index.ts +++ b/packages/node-db-sqlite-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { NodeSQLitePersistenceOptions, NodeSQLiteSchemaMismatchPolicy, } from './node-persistence' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/node-db-persistence/src/node-driver.ts b/packages/node-db-sqlite-persistence/src/node-driver.ts similarity index 98% rename from packages/node-db-persistence/src/node-driver.ts rename to packages/node-db-sqlite-persistence/src/node-driver.ts index 8681e9870..eb42ee135 100644 --- a/packages/node-db-persistence/src/node-driver.ts +++ b/packages/node-db-sqlite-persistence/src/node-driver.ts @@ -1,7 +1,7 @@ import { AsyncLocalStorage } from 'node:async_hooks' import BetterSqlite3 from 'better-sqlite3' -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' const DEFAULT_PRAGMAS = [ `journal_mode = WAL`, diff --git a/packages/node-db-persistence/src/node-persistence.ts b/packages/node-db-sqlite-persistence/src/node-persistence.ts similarity index 98% rename from packages/node-db-persistence/src/node-persistence.ts rename to packages/node-db-sqlite-persistence/src/node-persistence.ts index 7b37c1949..f63031e81 100644 --- a/packages/node-db-persistence/src/node-persistence.ts +++ b/packages/node-db-sqlite-persistence/src/node-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { BetterSqlite3SQLiteDriver } from './node-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { BetterSqlite3Database } from './node-driver' export type { BetterSqlite3Database } from './node-driver' diff --git a/packages/node-db-persistence/tests/node-driver.test.ts b/packages/node-db-sqlite-persistence/tests/node-driver.test.ts similarity index 74% rename from packages/node-db-persistence/tests/node-driver.test.ts rename to packages/node-db-sqlite-persistence/tests/node-driver.test.ts index 2128f4e1c..fa356622c 100644 --- a/packages/node-db-persistence/tests/node-driver.test.ts +++ b/packages/node-db-sqlite-persistence/tests/node-driver.test.ts @@ -1,9 +1,9 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-sqlite-`)) diff --git a/packages/node-db-persistence/tests/node-persistence.test.ts b/packages/node-db-sqlite-persistence/tests/node-persistence.test.ts similarity index 95% rename from packages/node-db-persistence/tests/node-persistence.test.ts rename to packages/node-db-sqlite-persistence/tests/node-persistence.test.ts index 82d1ca821..4cf036c13 100644 --- a/packages/node-db-persistence/tests/node-persistence.test.ts +++ b/packages/node-db-sqlite-persistence/tests/node-persistence.test.ts @@ -5,12 +5,12 @@ import BetterSqlite3 from 'better-sqlite3' import { describe, expect, it } from 'vitest' import { createNodeSQLitePersistence, persistedCollectionOptions } from '../src' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-persistence-`)) diff --git a/packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts b/packages/node-db-sqlite-persistence/tests/node-sqlite-core-adapter-contract.test.ts similarity index 76% rename from packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts rename to packages/node-db-sqlite-persistence/tests/node-sqlite-core-adapter-contract.test.ts index 450262f9f..77035b6df 100644 --- a/packages/node-db-persistence/tests/node-sqlite-core-adapter-contract.test.ts +++ b/packages/node-db-sqlite-persistence/tests/node-sqlite-core-adapter-contract.test.ts @@ -1,13 +1,13 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { BetterSqlite3SQLiteDriver } from '../src/node-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-node-sqlite-core-`)) diff --git a/packages/node-db-sqlite-persistence/tsconfig.docs.json b/packages/node-db-sqlite-persistence/tsconfig.docs.json new file mode 100644 index 000000000..dec9e98d1 --- /dev/null +++ b/packages/node-db-sqlite-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/node-db-persistence/tsconfig.json b/packages/node-db-sqlite-persistence/tsconfig.json similarity index 84% rename from packages/node-db-persistence/tsconfig.json rename to packages/node-db-sqlite-persistence/tsconfig.json index 394cc9135..5b14f299c 100644 --- a/packages/node-db-persistence/tsconfig.json +++ b/packages/node-db-sqlite-persistence/tsconfig.json @@ -14,7 +14,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/node-db-persistence/vite.config.ts b/packages/node-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/node-db-persistence/vite.config.ts rename to packages/node-db-sqlite-persistence/vite.config.ts diff --git a/packages/node-db-persistence/vitest.e2e.config.ts b/packages/node-db-sqlite-persistence/vitest.e2e.config.ts similarity index 85% rename from packages/node-db-persistence/vitest.e2e.config.ts rename to packages/node-db-sqlite-persistence/vitest.e2e.config.ts index d2c27254a..a72f12feb 100644 --- a/packages/node-db-persistence/vitest.e2e.config.ts +++ b/packages/node-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/query-db-collection/tests/query.test.ts b/packages/query-db-collection/tests/query.test.ts index c9b231f50..113fc0e1e 100644 --- a/packages/query-db-collection/tests/query.test.ts +++ b/packages/query-db-collection/tests/query.test.ts @@ -10,7 +10,7 @@ import { or, } from '@tanstack/db' import { stripVirtualProps } from '../../db/tests/utils' -import { persistedCollectionOptions } from '../../db-persistence-core/src' +import { persistedCollectionOptions } from '../../db-sqlite-persistence-core/src' import { queryCollectionOptions } from '../src/query' import type { QueryFunctionContext } from '@tanstack/query-core' import type { diff --git a/packages/react-native-db-persistence/tsconfig.docs.json b/packages/react-native-db-persistence/tsconfig.docs.json deleted file mode 100644 index 09dd4443a..000000000 --- a/packages/react-native-db-persistence/tsconfig.docs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] - } - }, - "include": ["src"] -} diff --git a/packages/react-native-db-persistence/README.md b/packages/react-native-db-sqlite-persistence/README.md similarity index 92% rename from packages/react-native-db-persistence/README.md rename to packages/react-native-db-sqlite-persistence/README.md index 07cf4e90f..84f5597e3 100644 --- a/packages/react-native-db-persistence/README.md +++ b/packages/react-native-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/react-native-db-persistence +# @tanstack/react-native-db-sqlite-persistence Thin SQLite persistence for React Native apps (including Expo runtime). @@ -15,7 +15,7 @@ import { createCollection } from '@tanstack/db' import { createReactNativeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/react-native-db-persistence' +} from '@tanstack/react-native-db-sqlite-persistence' type Todo = { id: string diff --git a/packages/react-native-db-persistence/e2e/expo-persisted-collection.e2e.test.ts b/packages/react-native-db-sqlite-persistence/e2e/expo-persisted-collection.e2e.test.ts similarity index 100% rename from packages/react-native-db-persistence/e2e/expo-persisted-collection.e2e.test.ts rename to packages/react-native-db-sqlite-persistence/e2e/expo-persisted-collection.e2e.test.ts diff --git a/packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts b/packages/react-native-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts similarity index 98% rename from packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts rename to packages/react-native-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts index fee78f397..a85b9cd41 100644 --- a/packages/react-native-db-persistence/e2e/mobile-persisted-collection-conformance-suite.ts +++ b/packages/react-native-db-sqlite-persistence/e2e/mobile-persisted-collection-conformance-suite.ts @@ -5,10 +5,10 @@ import { afterAll, afterEach, beforeAll } from 'vitest' import { BTreeIndex, createCollection } from '@tanstack/db' import { persistedCollectionOptions } from '../src' import { generateSeedData } from '../../db-collection-e2e/src/fixtures/seed-data' -import { runPersistedCollectionConformanceSuite } from '../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import { createOpSQLiteTestDatabase } from '../tests/helpers/op-sqlite-test-db' import type { Collection } from '@tanstack/db' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' import type { Comment, E2ETestConfig, diff --git a/packages/react-native-db-persistence/e2e/react-native-persisted-collection.e2e.test.ts b/packages/react-native-db-sqlite-persistence/e2e/react-native-persisted-collection.e2e.test.ts similarity index 100% rename from packages/react-native-db-persistence/e2e/react-native-persisted-collection.e2e.test.ts rename to packages/react-native-db-sqlite-persistence/e2e/react-native-persisted-collection.e2e.test.ts diff --git a/packages/react-native-db-persistence/package.json b/packages/react-native-db-sqlite-persistence/package.json similarity index 75% rename from packages/react-native-db-persistence/package.json rename to packages/react-native-db-sqlite-persistence/package.json index 529c9da3e..ed84a3ee1 100644 --- a/packages/react-native-db-persistence/package.json +++ b/packages/react-native-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/react-native-db-persistence", + "name": "@tanstack/react-native-db-sqlite-persistence", "version": "0.1.0", "description": "React Native and Expo SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/react-native-db-persistence" + "directory": "packages/react-native-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -22,8 +22,8 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/react-native-db-persistence build && vitest --config vitest.e2e.config.ts --run", - "test:e2e:runtime": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/react-native-db-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/react-native-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run", + "test:e2e:runtime": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/react-native-db-sqlite-persistence build && TANSTACK_DB_MOBILE_REQUIRE_RUNTIME_FACTORY=1 vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -58,7 +58,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "@op-engineering/op-sqlite": "^15.2.5", diff --git a/packages/react-native-db-persistence/src/index.ts b/packages/react-native-db-sqlite-persistence/src/index.ts similarity index 69% rename from packages/react-native-db-persistence/src/index.ts rename to packages/react-native-db-sqlite-persistence/src/index.ts index fd9aa63a5..842298336 100644 --- a/packages/react-native-db-persistence/src/index.ts +++ b/packages/react-native-db-sqlite-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { ReactNativeSQLitePersistenceOptions, ReactNativeSQLiteSchemaMismatchPolicy, } from './react-native' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/react-native-db-persistence/src/mobile-persistence.ts b/packages/react-native-db-sqlite-persistence/src/mobile-persistence.ts similarity index 98% rename from packages/react-native-db-persistence/src/mobile-persistence.ts rename to packages/react-native-db-sqlite-persistence/src/mobile-persistence.ts index 7948f8272..099a51c17 100644 --- a/packages/react-native-db-persistence/src/mobile-persistence.ts +++ b/packages/react-native-db-sqlite-persistence/src/mobile-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { OpSQLiteDriver } from './op-sqlite-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { OpSQLiteDatabaseLike } from './op-sqlite-driver' export type { OpSQLiteDatabaseLike } from './op-sqlite-driver' diff --git a/packages/react-native-db-persistence/src/op-sqlite-driver.ts b/packages/react-native-db-sqlite-persistence/src/op-sqlite-driver.ts similarity index 99% rename from packages/react-native-db-persistence/src/op-sqlite-driver.ts rename to packages/react-native-db-sqlite-persistence/src/op-sqlite-driver.ts index 61eccd2eb..3fae4aaf8 100644 --- a/packages/react-native-db-persistence/src/op-sqlite-driver.ts +++ b/packages/react-native-db-sqlite-persistence/src/op-sqlite-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' type OpSQLiteExecuteFn = ( sql: string, diff --git a/packages/react-native-db-persistence/src/react-native.ts b/packages/react-native-db-sqlite-persistence/src/react-native.ts similarity index 96% rename from packages/react-native-db-persistence/src/react-native.ts rename to packages/react-native-db-sqlite-persistence/src/react-native.ts index 049dbb4d7..354855d30 100644 --- a/packages/react-native-db-persistence/src/react-native.ts +++ b/packages/react-native-db-sqlite-persistence/src/react-native.ts @@ -3,7 +3,7 @@ import type { MobileSQLitePersistenceOptions, MobileSQLiteSchemaMismatchPolicy, } from './mobile-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' export type ReactNativeSQLitePersistenceOptions = MobileSQLitePersistenceOptions export type ReactNativeSQLiteSchemaMismatchPolicy = diff --git a/packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts b/packages/react-native-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts similarity index 78% rename from packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts rename to packages/react-native-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts index c6bf1e5b8..d2f741a6e 100644 --- a/packages/react-native-db-persistence/tests/expo-sqlite-core-adapter-contract.test.ts +++ b/packages/react-native-db-sqlite-persistence/tests/expo-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-expo-sqlite-core-`)) diff --git a/packages/react-native-db-persistence/tests/helpers/mobile-runtime-test-setup.ts b/packages/react-native-db-sqlite-persistence/tests/helpers/mobile-runtime-test-setup.ts similarity index 100% rename from packages/react-native-db-persistence/tests/helpers/mobile-runtime-test-setup.ts rename to packages/react-native-db-sqlite-persistence/tests/helpers/mobile-runtime-test-setup.ts diff --git a/packages/react-native-db-persistence/tests/helpers/op-sqlite-test-db.ts b/packages/react-native-db-sqlite-persistence/tests/helpers/op-sqlite-test-db.ts similarity index 100% rename from packages/react-native-db-persistence/tests/helpers/op-sqlite-test-db.ts rename to packages/react-native-db-sqlite-persistence/tests/helpers/op-sqlite-test-db.ts diff --git a/packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts b/packages/react-native-db-sqlite-persistence/tests/mobile-runtime-persistence-contract.test.ts similarity index 95% rename from packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts rename to packages/react-native-db-sqlite-persistence/tests/mobile-runtime-persistence-contract.test.ts index 4f1b67953..94194a538 100644 --- a/packages/react-native-db-persistence/tests/mobile-runtime-persistence-contract.test.ts +++ b/packages/react-native-db-sqlite-persistence/tests/mobile-runtime-persistence-contract.test.ts @@ -7,18 +7,18 @@ import { persistedCollectionOptions, } from '../src' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { OpSQLiteDatabaseLike } from '../src/op-sqlite-driver' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' type RuntimePersistenceFactory = (options: { database: OpSQLiteDatabaseLike diff --git a/packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts b/packages/react-native-db-sqlite-persistence/tests/op-sqlite-driver.test.ts similarity index 99% rename from packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts rename to packages/react-native-db-sqlite-persistence/tests/op-sqlite-driver.test.ts index f30a38562..8c482af1c 100644 --- a/packages/react-native-db-persistence/tests/op-sqlite-driver.test.ts +++ b/packages/react-native-db-sqlite-persistence/tests/op-sqlite-driver.test.ts @@ -3,7 +3,7 @@ import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' const activeCleanupFns: Array<() => void | Promise> = [] diff --git a/packages/react-native-db-persistence/tests/react-native-persistence.test.ts b/packages/react-native-db-sqlite-persistence/tests/react-native-persistence.test.ts similarity index 100% rename from packages/react-native-db-persistence/tests/react-native-persistence.test.ts rename to packages/react-native-db-sqlite-persistence/tests/react-native-persistence.test.ts diff --git a/packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts b/packages/react-native-db-sqlite-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts similarity index 79% rename from packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts rename to packages/react-native-db-sqlite-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts index 5ff440caf..03e34dcf0 100644 --- a/packages/react-native-db-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts +++ b/packages/react-native-db-sqlite-persistence/tests/react-native-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { OpSQLiteDriver } from '../src/op-sqlite-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createOpSQLiteTestDatabase } from './helpers/op-sqlite-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-rn-sqlite-core-`)) diff --git a/packages/react-native-db-sqlite-persistence/tsconfig.docs.json b/packages/react-native-db-sqlite-persistence/tsconfig.docs.json new file mode 100644 index 000000000..dec9e98d1 --- /dev/null +++ b/packages/react-native-db-sqlite-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/react-native-db-persistence/tsconfig.json b/packages/react-native-db-sqlite-persistence/tsconfig.json similarity index 84% rename from packages/react-native-db-persistence/tsconfig.json rename to packages/react-native-db-sqlite-persistence/tsconfig.json index 394cc9135..5b14f299c 100644 --- a/packages/react-native-db-persistence/tsconfig.json +++ b/packages/react-native-db-sqlite-persistence/tsconfig.json @@ -14,7 +14,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": ["src", "tests", "e2e", "vite.config.ts", "vitest.e2e.config.ts"], diff --git a/packages/react-native-db-persistence/vite.config.ts b/packages/react-native-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/react-native-db-persistence/vite.config.ts rename to packages/react-native-db-sqlite-persistence/vite.config.ts diff --git a/packages/react-native-db-persistence/vitest.e2e.config.ts b/packages/react-native-db-sqlite-persistence/vitest.e2e.config.ts similarity index 87% rename from packages/react-native-db-persistence/vitest.e2e.config.ts rename to packages/react-native-db-sqlite-persistence/vitest.e2e.config.ts index 0c69dc62e..318a68d07 100644 --- a/packages/react-native-db-persistence/vitest.e2e.config.ts +++ b/packages/react-native-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/tauri-db-persistence/tsconfig.docs.json b/packages/tauri-db-persistence/tsconfig.docs.json deleted file mode 100644 index 09dd4443a..000000000 --- a/packages/tauri-db-persistence/tsconfig.docs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "paths": { - "@tanstack/db": ["../db/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] - } - }, - "include": ["src"] -} diff --git a/packages/tauri-db-persistence/README.md b/packages/tauri-db-sqlite-persistence/README.md similarity index 89% rename from packages/tauri-db-persistence/README.md rename to packages/tauri-db-sqlite-persistence/README.md index 51011e569..99b4e0423 100644 --- a/packages/tauri-db-persistence/README.md +++ b/packages/tauri-db-sqlite-persistence/README.md @@ -1,4 +1,4 @@ -# @tanstack/tauri-db-persistence +# @tanstack/tauri-db-sqlite-persistence Thin SQLite persistence for Tauri apps using `@tauri-apps/plugin-sql`. @@ -10,7 +10,7 @@ Thin SQLite persistence for Tauri apps using `@tauri-apps/plugin-sql`. ## Install ```bash -pnpm add @tanstack/tauri-db-persistence @tauri-apps/plugin-sql +pnpm add @tanstack/tauri-db-sqlite-persistence @tauri-apps/plugin-sql ``` ## Consumer-side Tauri setup @@ -49,7 +49,7 @@ import { createCollection } from '@tanstack/db' import { createTauriSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/tauri-db-persistence' +} from '@tanstack/tauri-db-sqlite-persistence' type Todo = { id: string @@ -89,8 +89,8 @@ export const todosCollection = createCollection( ## Testing -- `pnpm --filter @tanstack/tauri-db-persistence test` +- `pnpm --filter @tanstack/tauri-db-sqlite-persistence test` runs the driver and shared adapter contract tests. -- `pnpm --filter @tanstack/tauri-db-persistence test:e2e` +- `pnpm --filter @tanstack/tauri-db-sqlite-persistence test:e2e` builds the repo-local Tauri harness and runs the persisted collection conformance suite inside a real Tauri runtime. diff --git a/packages/tauri-db-persistence/e2e/app/index.html b/packages/tauri-db-sqlite-persistence/e2e/app/index.html similarity index 100% rename from packages/tauri-db-persistence/e2e/app/index.html rename to packages/tauri-db-sqlite-persistence/e2e/app/index.html diff --git a/packages/tauri-db-persistence/e2e/app/package.json b/packages/tauri-db-sqlite-persistence/e2e/app/package.json similarity index 78% rename from packages/tauri-db-persistence/e2e/app/package.json rename to packages/tauri-db-sqlite-persistence/e2e/app/package.json index 2e8414519..879842345 100644 --- a/packages/tauri-db-persistence/e2e/app/package.json +++ b/packages/tauri-db-sqlite-persistence/e2e/app/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/tauri-db-persistence-e2e-app", + "name": "@tanstack/tauri-db-sqlite-persistence-e2e-app", "private": true, "version": "0.0.0", "type": "module", @@ -12,7 +12,7 @@ "@tauri-apps/api": "^2.10.1", "@tauri-apps/plugin-sql": "^2.3.2", "@tanstack/db": "workspace:*", - "@tanstack/tauri-db-persistence": "workspace:*" + "@tanstack/tauri-db-sqlite-persistence": "workspace:*" }, "devDependencies": { "@tauri-apps/cli": "^2.10.1", diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/.gitignore b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/.gitignore similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/.gitignore rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/.gitignore diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/Cargo.toml b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/Cargo.toml rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/build.rs b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/build.rs similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/build.rs rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/build.rs diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/capabilities/default.json b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/capabilities/default.json similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/capabilities/default.json rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/capabilities/default.json diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/icons/icon.png b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/icons/icon.png similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/icons/icon.png rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/icons/icon.png diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/src/main.rs b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/src/main.rs similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/src/main.rs rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/src/main.rs diff --git a/packages/tauri-db-persistence/e2e/app/src-tauri/tauri.conf.json b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/tauri.conf.json similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src-tauri/tauri.conf.json rename to packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/tauri.conf.json diff --git a/packages/tauri-db-persistence/e2e/app/src/main.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/main.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src/main.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/main.ts diff --git a/packages/tauri-db-persistence/e2e/app/src/native-tauri-sql-test-db.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/native-tauri-sql-test-db.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src/native-tauri-sql-test-db.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/native-tauri-sql-test-db.ts diff --git a/packages/tauri-db-persistence/e2e/app/src/node-crypto.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/node-crypto.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src/node-crypto.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/node-crypto.ts diff --git a/packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/register-tauri-e2e-suite.ts similarity index 97% rename from packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/register-tauri-e2e-suite.ts index 8fbb87b7f..594c7abd3 100644 --- a/packages/tauri-db-persistence/e2e/app/src/register-tauri-e2e-suite.ts +++ b/packages/tauri-db-sqlite-persistence/e2e/app/src/register-tauri-e2e-suite.ts @@ -1,7 +1,7 @@ import { createTauriSQLitePersistence } from '../../../src' import { createTauriPersistedCollectionHarnessConfig } from '../../shared/tauri-persisted-collection-harness' import { registerPersistedCollectionConformanceSuite } from '../../shared/register-persisted-collection-conformance-suite' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' import type { TauriSQLiteDatabaseLike } from '../../../src' type PersistableRow = { diff --git a/packages/tauri-db-persistence/e2e/app/src/runtime-vitest.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/runtime-vitest.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src/runtime-vitest.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/runtime-vitest.ts diff --git a/packages/tauri-db-persistence/e2e/app/src/vite-env.d.ts b/packages/tauri-db-sqlite-persistence/e2e/app/src/vite-env.d.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/app/src/vite-env.d.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/src/vite-env.d.ts diff --git a/packages/tauri-db-persistence/e2e/app/tsconfig.json b/packages/tauri-db-sqlite-persistence/e2e/app/tsconfig.json similarity index 100% rename from packages/tauri-db-persistence/e2e/app/tsconfig.json rename to packages/tauri-db-sqlite-persistence/e2e/app/tsconfig.json diff --git a/packages/tauri-db-persistence/e2e/app/vite.config.ts b/packages/tauri-db-sqlite-persistence/e2e/app/vite.config.ts similarity index 86% rename from packages/tauri-db-persistence/e2e/app/vite.config.ts rename to packages/tauri-db-sqlite-persistence/e2e/app/vite.config.ts index 4ae38e225..4f6b95646 100644 --- a/packages/tauri-db-persistence/e2e/app/vite.config.ts +++ b/packages/tauri-db-sqlite-persistence/e2e/app/vite.config.ts @@ -11,9 +11,9 @@ export default defineConfig({ 'node:crypto': resolve(appDirectory, `src/node-crypto.ts`), '@tanstack/db': resolve(appDirectory, `../../../db/src`), '@tanstack/db-ivm': resolve(appDirectory, `../../../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( appDirectory, - `../../../db-persistence-core/src`, + `../../../db-sqlite-persistence-core/src`, ), }, }, diff --git a/packages/tauri-db-persistence/e2e/run-tauri-e2e.ts b/packages/tauri-db-sqlite-persistence/e2e/run-tauri-e2e.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/run-tauri-e2e.ts rename to packages/tauri-db-sqlite-persistence/e2e/run-tauri-e2e.ts diff --git a/packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts b/packages/tauri-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts similarity index 93% rename from packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts rename to packages/tauri-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts index c880e747c..07bb4d1f6 100644 --- a/packages/tauri-db-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts +++ b/packages/tauri-db-sqlite-persistence/e2e/shared/register-persisted-collection-conformance-suite.ts @@ -1,5 +1,5 @@ import { afterAll, afterEach, beforeAll } from 'vitest' -import { runPersistedCollectionConformanceSuite } from '../../../db-persistence-core/tests/contracts/persisted-collection-conformance-contract' +import { runPersistedCollectionConformanceSuite } from '../../../db-sqlite-persistence-core/tests/contracts/persisted-collection-conformance-contract' import type { TauriPersistedCollectionHarnessConfig } from './tauri-persisted-collection-harness' type RegisteredHarness = { diff --git a/packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts b/packages/tauri-db-sqlite-persistence/e2e/shared/tauri-persisted-collection-harness.ts similarity index 99% rename from packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts rename to packages/tauri-db-sqlite-persistence/e2e/shared/tauri-persisted-collection-harness.ts index 397723ece..ca64f141e 100644 --- a/packages/tauri-db-persistence/e2e/shared/tauri-persisted-collection-harness.ts +++ b/packages/tauri-db-sqlite-persistence/e2e/shared/tauri-persisted-collection-harness.ts @@ -8,7 +8,7 @@ import type { Post, User, } from '../../../db-collection-e2e/src/types' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' type PersistableRow = { id: string diff --git a/packages/tauri-db-persistence/e2e/tauri-persisted-collection.e2e.test.ts b/packages/tauri-db-sqlite-persistence/e2e/tauri-persisted-collection.e2e.test.ts similarity index 100% rename from packages/tauri-db-persistence/e2e/tauri-persisted-collection.e2e.test.ts rename to packages/tauri-db-sqlite-persistence/e2e/tauri-persisted-collection.e2e.test.ts diff --git a/packages/tauri-db-persistence/package.json b/packages/tauri-db-sqlite-persistence/package.json similarity index 81% rename from packages/tauri-db-persistence/package.json rename to packages/tauri-db-sqlite-persistence/package.json index e874d023d..9774ebab8 100644 --- a/packages/tauri-db-persistence/package.json +++ b/packages/tauri-db-sqlite-persistence/package.json @@ -1,5 +1,5 @@ { - "name": "@tanstack/tauri-db-persistence", + "name": "@tanstack/tauri-db-sqlite-persistence", "version": "0.1.0", "description": "Tauri SQLite persisted collection adapter for TanStack DB", "author": "TanStack Team", @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git+https://github.com/TanStack/db.git", - "directory": "packages/tauri-db-persistence" + "directory": "packages/tauri-db-sqlite-persistence" }, "homepage": "https://tanstack.com/db", "keywords": [ @@ -21,7 +21,7 @@ "dev": "vite build --watch", "lint": "eslint . --fix", "test": "vitest --run", - "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-persistence-core build && pnpm --filter @tanstack/tauri-db-persistence build && vitest --config vitest.e2e.config.ts --run" + "test:e2e": "pnpm --filter @tanstack/db-ivm build && pnpm --filter @tanstack/db build && pnpm --filter @tanstack/db-sqlite-persistence-core build && pnpm --filter @tanstack/tauri-db-sqlite-persistence build && vitest --config vitest.e2e.config.ts --run" }, "type": "module", "main": "dist/cjs/index.cjs", @@ -56,7 +56,7 @@ "src" ], "dependencies": { - "@tanstack/db-persistence-core": "workspace:*" + "@tanstack/db-sqlite-persistence-core": "workspace:*" }, "peerDependencies": { "@tauri-apps/plugin-sql": "^2.3.2", diff --git a/packages/tauri-db-persistence/src/index.ts b/packages/tauri-db-sqlite-persistence/src/index.ts similarity index 67% rename from packages/tauri-db-persistence/src/index.ts rename to packages/tauri-db-sqlite-persistence/src/index.ts index 75efd794f..7a750708d 100644 --- a/packages/tauri-db-persistence/src/index.ts +++ b/packages/tauri-db-sqlite-persistence/src/index.ts @@ -4,8 +4,8 @@ export type { TauriSQLitePersistenceOptions, TauriSQLiteSchemaMismatchPolicy, } from './tauri' -export { persistedCollectionOptions } from '@tanstack/db-persistence-core' +export { persistedCollectionOptions } from '@tanstack/db-sqlite-persistence-core' export type { PersistedCollectionCoordinator, PersistedCollectionPersistence, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' diff --git a/packages/tauri-db-persistence/src/tauri-persistence.ts b/packages/tauri-db-sqlite-persistence/src/tauri-persistence.ts similarity index 98% rename from packages/tauri-db-persistence/src/tauri-persistence.ts rename to packages/tauri-db-sqlite-persistence/src/tauri-persistence.ts index 9e7e7fe2b..e21f1718d 100644 --- a/packages/tauri-db-persistence/src/tauri-persistence.ts +++ b/packages/tauri-db-sqlite-persistence/src/tauri-persistence.ts @@ -1,7 +1,7 @@ import { SingleProcessCoordinator, createSQLiteCorePersistenceAdapter, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import { TauriSQLiteDriver } from './tauri-sql-driver' import type { PersistedCollectionCoordinator, @@ -9,7 +9,7 @@ import type { PersistedCollectionPersistence, SQLiteCoreAdapterOptions, SQLiteDriver, -} from '@tanstack/db-persistence-core' +} from '@tanstack/db-sqlite-persistence-core' import type { TauriSQLiteDatabaseLike } from './tauri-sql-driver' export type { TauriSQLiteDatabaseLike } from './tauri-sql-driver' diff --git a/packages/tauri-db-persistence/src/tauri-sql-driver.ts b/packages/tauri-db-sqlite-persistence/src/tauri-sql-driver.ts similarity index 98% rename from packages/tauri-db-persistence/src/tauri-sql-driver.ts rename to packages/tauri-db-sqlite-persistence/src/tauri-sql-driver.ts index f3aa72058..916ddc6a5 100644 --- a/packages/tauri-db-persistence/src/tauri-sql-driver.ts +++ b/packages/tauri-db-sqlite-persistence/src/tauri-sql-driver.ts @@ -1,5 +1,5 @@ -import { InvalidPersistedCollectionConfigError } from '@tanstack/db-persistence-core' -import type { SQLiteDriver } from '@tanstack/db-persistence-core' +import { InvalidPersistedCollectionConfigError } from '@tanstack/db-sqlite-persistence-core' +import type { SQLiteDriver } from '@tanstack/db-sqlite-persistence-core' import type Database from '@tauri-apps/plugin-sql' export type TauriSQLiteDatabaseLike = Pick< diff --git a/packages/tauri-db-persistence/src/tauri.ts b/packages/tauri-db-sqlite-persistence/src/tauri.ts similarity index 96% rename from packages/tauri-db-persistence/src/tauri.ts rename to packages/tauri-db-sqlite-persistence/src/tauri.ts index cb250f0a6..73d954962 100644 --- a/packages/tauri-db-persistence/src/tauri.ts +++ b/packages/tauri-db-sqlite-persistence/src/tauri.ts @@ -3,7 +3,7 @@ import type { TauriSQLitePersistenceOptions as TauriSQLitePersistenceOptionsBase, TauriSQLiteSchemaMismatchPolicy as TauriSQLiteSchemaMismatchPolicyBase, } from './tauri-persistence' -import type { PersistedCollectionPersistence } from '@tanstack/db-persistence-core' +import type { PersistedCollectionPersistence } from '@tanstack/db-sqlite-persistence-core' export type TauriSQLitePersistenceOptions = TauriSQLitePersistenceOptionsBase export type TauriSQLiteSchemaMismatchPolicy = diff --git a/packages/tauri-db-persistence/tests/helpers/tauri-sql-test-db.ts b/packages/tauri-db-sqlite-persistence/tests/helpers/tauri-sql-test-db.ts similarity index 100% rename from packages/tauri-db-persistence/tests/helpers/tauri-sql-test-db.ts rename to packages/tauri-db-sqlite-persistence/tests/helpers/tauri-sql-test-db.ts diff --git a/packages/tauri-db-persistence/tests/tauri-persistence.test.ts b/packages/tauri-db-sqlite-persistence/tests/tauri-persistence.test.ts similarity index 100% rename from packages/tauri-db-persistence/tests/tauri-persistence.test.ts rename to packages/tauri-db-sqlite-persistence/tests/tauri-persistence.test.ts diff --git a/packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts b/packages/tauri-db-sqlite-persistence/tests/tauri-runtime-persistence-contract.test.ts similarity index 96% rename from packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts rename to packages/tauri-db-sqlite-persistence/tests/tauri-runtime-persistence-contract.test.ts index 832d02c65..c77486d53 100644 --- a/packages/tauri-db-persistence/tests/tauri-runtime-persistence-contract.test.ts +++ b/packages/tauri-db-sqlite-persistence/tests/tauri-runtime-persistence-contract.test.ts @@ -7,13 +7,13 @@ import { persistedCollectionOptions, } from '../src' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' -import { runRuntimePersistenceContractSuite } from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' -import { SingleProcessCoordinator } from '../../db-persistence-core/src' +import { runRuntimePersistenceContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' +import { SingleProcessCoordinator } from '../../db-sqlite-persistence-core/src' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' import type { RuntimePersistenceContractTodo, RuntimePersistenceDatabaseHarness, -} from '../../db-persistence-core/tests/contracts/runtime-persistence-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/runtime-persistence-contract' function createRuntimeDatabaseHarness(): RuntimePersistenceDatabaseHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-persistence-`)) diff --git a/packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts b/packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver-contract.test.ts similarity index 77% rename from packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts rename to packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver-contract.test.ts index af6c5af1f..dd5d6296d 100644 --- a/packages/tauri-db-persistence/tests/tauri-sql-driver-contract.test.ts +++ b/packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver-contract.test.ts @@ -1,10 +1,10 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteDriverContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import { runSQLiteDriverContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' -import type { SQLiteDriverContractHarness } from '../../db-persistence-core/tests/contracts/sqlite-driver-contract' +import type { SQLiteDriverContractHarness } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-driver-contract' function createDriverHarness(): SQLiteDriverContractHarness { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-sqlite-`)) diff --git a/packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts b/packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver.test.ts similarity index 99% rename from packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts rename to packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver.test.ts index 0a3ed4503..15c872305 100644 --- a/packages/tauri-db-persistence/tests/tauri-sql-driver.test.ts +++ b/packages/tauri-db-sqlite-persistence/tests/tauri-sql-driver.test.ts @@ -2,7 +2,7 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { afterEach, expect, it } from 'vitest' -import { InvalidPersistedCollectionConfigError } from '../../db-persistence-core/src' +import { InvalidPersistedCollectionConfigError } from '../../db-sqlite-persistence-core/src' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' diff --git a/packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts b/packages/tauri-db-sqlite-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts similarity index 78% rename from packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts rename to packages/tauri-db-sqlite-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts index 323aec53b..ea1561984 100644 --- a/packages/tauri-db-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts +++ b/packages/tauri-db-sqlite-persistence/tests/tauri-sqlite-core-adapter-contract.test.ts @@ -1,14 +1,14 @@ import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { runSQLiteCoreAdapterContractSuite } from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +import { runSQLiteCoreAdapterContractSuite } from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' import { TauriSQLiteDriver } from '../src/tauri-sql-driver' -import { SQLiteCorePersistenceAdapter } from '../../db-persistence-core/src' +import { SQLiteCorePersistenceAdapter } from '../../db-sqlite-persistence-core/src' import { createTauriSQLiteTestDatabase } from './helpers/tauri-sql-test-db' import type { SQLiteCoreAdapterContractTodo, SQLiteCoreAdapterHarnessFactory, -} from '../../db-persistence-core/tests/contracts/sqlite-core-adapter-contract' +} from '../../db-sqlite-persistence-core/tests/contracts/sqlite-core-adapter-contract' const createHarness: SQLiteCoreAdapterHarnessFactory = (options) => { const tempDirectory = mkdtempSync(join(tmpdir(), `db-tauri-core-`)) diff --git a/packages/tauri-db-sqlite-persistence/tsconfig.docs.json b/packages/tauri-db-sqlite-persistence/tsconfig.docs.json new file mode 100644 index 000000000..dec9e98d1 --- /dev/null +++ b/packages/tauri-db-sqlite-persistence/tsconfig.docs.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "paths": { + "@tanstack/db": ["../db/src"], + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] + } + }, + "include": ["src"] +} diff --git a/packages/tauri-db-persistence/tsconfig.json b/packages/tauri-db-sqlite-persistence/tsconfig.json similarity index 86% rename from packages/tauri-db-persistence/tsconfig.json rename to packages/tauri-db-sqlite-persistence/tsconfig.json index a100cdb9d..e874082b6 100644 --- a/packages/tauri-db-persistence/tsconfig.json +++ b/packages/tauri-db-sqlite-persistence/tsconfig.json @@ -13,7 +13,9 @@ "paths": { "@tanstack/db": ["../db/src"], "@tanstack/db-ivm": ["../db-ivm/src"], - "@tanstack/db-persistence-core": ["../db-persistence-core/src"] + "@tanstack/db-sqlite-persistence-core": [ + "../db-sqlite-persistence-core/src" + ] } }, "include": [ diff --git a/packages/tauri-db-persistence/vite.config.ts b/packages/tauri-db-sqlite-persistence/vite.config.ts similarity index 100% rename from packages/tauri-db-persistence/vite.config.ts rename to packages/tauri-db-sqlite-persistence/vite.config.ts diff --git a/packages/tauri-db-persistence/vitest.e2e.config.ts b/packages/tauri-db-sqlite-persistence/vitest.e2e.config.ts similarity index 87% rename from packages/tauri-db-persistence/vitest.e2e.config.ts rename to packages/tauri-db-sqlite-persistence/vitest.e2e.config.ts index 7d71ccb7c..2e782ab6b 100644 --- a/packages/tauri-db-persistence/vitest.e2e.config.ts +++ b/packages/tauri-db-sqlite-persistence/vitest.e2e.config.ts @@ -9,9 +9,9 @@ export default defineConfig({ alias: { '@tanstack/db': resolve(packageDirectory, `../db/src`), '@tanstack/db-ivm': resolve(packageDirectory, `../db-ivm/src`), - '@tanstack/db-persistence-core': resolve( + '@tanstack/db-sqlite-persistence-core': resolve( packageDirectory, - `../db-persistence-core/src`, + `../db-sqlite-persistence-core/src`, ), }, }, diff --git a/persistance-plan/phase-4-node-electron.md b/persistance-plan/phase-4-node-electron.md index 57f28e221..974ff8f68 100644 --- a/persistance-plan/phase-4-node-electron.md +++ b/persistance-plan/phase-4-node-electron.md @@ -58,8 +58,8 @@ Ship production-ready Node and Electron adapters on top of the shared SQLite cor ## Deliverables -1. `@tanstack/node-db-persistence` -2. `@tanstack/electron-db-persistence` +1. `@tanstack/node-db-sqlite-persistence` +2. `@tanstack/electron-db-sqlite-persistence` 3. Electron IPC bridge docs and example integration ## Test Plan diff --git a/persistance-plan/phase-5-react-native-expo.md b/persistance-plan/phase-5-react-native-expo.md index adea15567..02bc34c6c 100644 --- a/persistance-plan/phase-5-react-native-expo.md +++ b/persistance-plan/phase-5-react-native-expo.md @@ -56,7 +56,7 @@ Provide a unified mobile SQLite persistence package for both React Native and Ex ## Deliverables -1. `@tanstack/react-native-db-persistence` +1. `@tanstack/react-native-db-sqlite-persistence` 2. RN and Expo entrypoint docs/examples 3. Mobile-focused integration tests diff --git a/persistance-plan/phase-6-cloudflare-durable-objects.md b/persistance-plan/phase-6-cloudflare-durable-objects.md index 827c66dbc..87cd3a1ed 100644 --- a/persistance-plan/phase-6-cloudflare-durable-objects.md +++ b/persistance-plan/phase-6-cloudflare-durable-objects.md @@ -57,7 +57,7 @@ Implement Durable Object-native SQLite persistence using in-process execution (n ## Deliverables -1. `@tanstack/cloudflare-durable-objects-db-persistence` +1. `@tanstack/cloudflare-durable-objects-db-sqlite-persistence` 2. DO initialization helpers and usage docs 3. DO integration test suite diff --git a/persistance-plan/phase-8-browser-multi-tab.md b/persistance-plan/phase-8-browser-multi-tab.md index 6d1ae2eeb..4ffab579a 100644 --- a/persistance-plan/phase-8-browser-multi-tab.md +++ b/persistance-plan/phase-8-browser-multi-tab.md @@ -26,7 +26,7 @@ Implement robust multi-tab coordination using Web Locks, Visibility API, and Bro ## Implementation Status > **Overall: IMPLEMENTED** — `BrowserCollectionCoordinator` class implemented in -> `packages/browser-db-persistence/src/browser-coordinator.ts`. +> `packages/browser-db-sqlite-persistence/src/browser-coordinator.ts`. > Exported from package index. Unit tests with Web Locks and BroadcastChannel > mocks pass (15 tests). Remaining: hidden-tab stepdown, heartbeat timeout > detection, and Playwright multi-tab integration tests. From ce0789916abdbea43c4c143c2580ee1c814baf28 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 25 Mar 2026 10:38:21 -0600 Subject: [PATCH 4/7] refactor: update remaining old persisted-collection package names to sqlite-persistence Co-Authored-By: Claude Opus 4.6 --- .../react-native/shopping-list/package.json | 2 +- .../shopping-list/src/db/collections.ts | 4 +- .../e2e/app/src-tauri/Cargo.toml | 2 +- pnpm-lock.yaml | 84 +++++++++---------- 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/examples/react-native/shopping-list/package.json b/examples/react-native/shopping-list/package.json index ad2dd8b42..196b605bb 100644 --- a/examples/react-native/shopping-list/package.json +++ b/examples/react-native/shopping-list/package.json @@ -19,7 +19,7 @@ "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", "@tanstack/db": "workspace:*", - "@tanstack/db-react-native-sqlite-persisted-collection": "workspace:*", + "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/electric-db-collection": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/react-db": "^0.1.77", diff --git a/examples/react-native/shopping-list/src/db/collections.ts b/examples/react-native/shopping-list/src/db/collections.ts index 5ae0ca49f..0e9d944dc 100644 --- a/examples/react-native/shopping-list/src/db/collections.ts +++ b/examples/react-native/shopping-list/src/db/collections.ts @@ -4,14 +4,14 @@ import { electricCollectionOptions } from '@tanstack/electric-db-collection' import { createReactNativeSQLitePersistence, persistedCollectionOptions, -} from '@tanstack/db-react-native-sqlite-persisted-collection' +} from '@tanstack/react-native-db-sqlite-persistence' import { startOfflineExecutor } from '@tanstack/offline-transactions/react-native' import { API_URL, itemsApi, listsApi } from '../utils/api' import { createOfflineAwareFetch } from '../network/simulatedOffline' import { simulatedOnlineDetector } from '../network/SimulatedOnlineDetector' import { AsyncStorageAdapter } from './AsyncStorageAdapter' import type { PendingMutation } from '@tanstack/db' -import type { OpSQLiteDatabaseLike } from '@tanstack/db-react-native-sqlite-persisted-collection' +import type { OpSQLiteDatabaseLike } from '@tanstack/react-native-db-sqlite-persistence' import type { ElectricCollectionUtils } from '@tanstack/electric-db-collection' export type ShoppingList = { diff --git a/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml index 719913622..e32e56e99 100644 --- a/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml +++ b/packages/tauri-db-sqlite-persistence/e2e/app/src-tauri/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "db-tauri-sqlite-persisted-collection-e2e-app" +name = "tauri-db-sqlite-persistence-e2e-app" version = "0.0.0" description = "Repo-local Tauri e2e harness for TanStack DB SQLite persistence" authors = ["TanStack Team"] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7331c83fa..baaeab0d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,12 +208,12 @@ importers: examples/electron/offline-first: dependencies: - '@tanstack/electron-db-persistence': + '@tanstack/electron-db-sqlite-persistence': specifier: workspace:* - version: link:../../../packages/electron-db-persistence - '@tanstack/node-db-persistence': + version: link:../../../packages/electron-db-sqlite-persistence + '@tanstack/node-db-sqlite-persistence': specifier: workspace:* - version: link:../../../packages/node-db-persistence + version: link:../../../packages/node-db-sqlite-persistence '@tanstack/offline-transactions': specifier: workspace:* version: link:../../../packages/offline-transactions @@ -311,9 +311,9 @@ importers: '@tanstack/react-db': specifier: ^0.1.77 version: link:../../../packages/react-db - '@tanstack/react-native-db-persistence': + '@tanstack/react-native-db-sqlite-persistence': specifier: workspace:* - version: link:../../../packages/react-native-db-persistence + version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 version: 5.90.21(react@19.0.0) @@ -396,9 +396,6 @@ importers: '@tanstack/db': specifier: workspace:* version: link:../../../packages/db - '@tanstack/db-react-native-sqlite-persisted-collection': - specifier: workspace:* - version: link:../../../packages/db-react-native-sqlite-persisted-collection '@tanstack/electric-db-collection': specifier: workspace:* version: link:../../../packages/electric-db-collection @@ -408,6 +405,9 @@ importers: '@tanstack/react-db': specifier: ^0.1.77 version: link:../../../packages/react-db + '@tanstack/react-native-db-sqlite-persistence': + specifier: workspace:* + version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 version: 5.90.21(react@19.0.0) @@ -475,9 +475,9 @@ importers: examples/react/offline-transactions: dependencies: - '@tanstack/browser-db-persistence': + '@tanstack/browser-db-sqlite-persistence': specifier: workspace:* - version: link:../../../packages/browser-db-persistence + version: link:../../../packages/browser-db-sqlite-persistence '@tanstack/db': specifier: workspace:* version: link:../../../packages/db @@ -977,11 +977,11 @@ importers: specifier: ~0.15.0 version: 0.15.1 - packages/browser-db-persistence: + packages/browser-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -999,14 +999,14 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/capacitor-db-persistence: + packages/capacitor-db-sqlite-persistence: dependencies: '@capacitor-community/sqlite': specifier: ^8.0.1 version: 8.0.1(@capacitor/core@8.2.0) - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1021,7 +1021,7 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/capacitor-db-persistence/e2e/app: + packages/capacitor-db-sqlite-persistence/e2e/app: dependencies: '@capacitor-community/sqlite': specifier: ^8.0.1 @@ -1029,7 +1029,7 @@ importers: '@capacitor/core': specifier: ^8.2.0 version: 8.2.0 - '@tanstack/capacitor-db-persistence': + '@tanstack/capacitor-db-sqlite-persistence': specifier: workspace:* version: link:../.. '@tanstack/db': @@ -1055,11 +1055,11 @@ importers: specifier: ^7.3.1 version: 7.3.1(@types/node@25.2.2)(jiti@2.6.1)(lightningcss@1.31.1)(sass@1.90.0)(terser@5.44.0)(tsx@4.21.0)(yaml@2.8.1) - packages/cloudflare-durable-objects-db-persistence: + packages/cloudflare-durable-objects-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1166,7 +1166,7 @@ importers: specifier: ^0.3.0 version: 0.3.0 - packages/db-persistence-core: + packages/db-sqlite-persistence-core: dependencies: '@standard-schema/spec': specifier: ^1.1.0 @@ -1213,11 +1213,11 @@ importers: specifier: ^8.20.0 version: 8.20.0 - packages/electron-db-persistence: + packages/electron-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1229,11 +1229,11 @@ importers: specifier: ^40.2.1 version: 40.8.0 - packages/expo-db-persistence: + packages/expo-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core expo-sqlite: specifier: ^55.0.10 version: 55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) @@ -1251,12 +1251,12 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/expo-db-persistence/e2e/expo-runtime-app: + packages/expo-db-sqlite-persistence/e2e/expo-runtime-app: dependencies: '@tanstack/db': specifier: workspace:* version: link:../../../db - '@tanstack/expo-db-persistence': + '@tanstack/expo-db-sqlite-persistence': specifier: workspace:* version: link:../.. expo: @@ -1272,11 +1272,11 @@ importers: specifier: 0.83.2 version: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0) - packages/node-db-persistence: + packages/node-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core better-sqlite3: specifier: ^12.6.2 version: 12.8.0 @@ -1406,14 +1406,14 @@ importers: specifier: ^19.2.4 version: 19.2.4(react@19.2.4) - packages/react-native-db-persistence: + packages/react-native-db-sqlite-persistence: dependencies: '@op-engineering/op-sqlite': specifier: ^15.2.5 version: 15.2.7(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1515,11 +1515,11 @@ importers: specifier: ^4.3.6 version: 4.4.4(picomatch@4.0.3)(svelte@5.53.6)(typescript@5.9.3) - packages/tauri-db-persistence: + packages/tauri-db-sqlite-persistence: dependencies: - '@tanstack/db-persistence-core': + '@tanstack/db-sqlite-persistence-core': specifier: workspace:* - version: link:../db-persistence-core + version: link:../db-sqlite-persistence-core typescript: specifier: '>=4.7' version: 5.9.3 @@ -1537,12 +1537,12 @@ importers: specifier: ^12.6.2 version: 12.8.0 - packages/tauri-db-persistence/e2e/app: + packages/tauri-db-sqlite-persistence/e2e/app: dependencies: '@tanstack/db': specifier: workspace:* version: link:../../../db - '@tanstack/tauri-db-persistence': + '@tanstack/tauri-db-sqlite-persistence': specifier: workspace:* version: link:../.. '@tauri-apps/api': From ec54fea22530b5ffd53594062de976dd559132cf Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 25 Mar 2026 10:49:42 -0600 Subject: [PATCH 5/7] fix deps --- .../offline-transactions/package.json | 4 +- .../react-native/shopping-list/package.json | 4 +- .../react/offline-transactions/package.json | 2 +- pnpm-lock.yaml | 384 ++++++------------ 4 files changed, 140 insertions(+), 254 deletions(-) diff --git a/examples/react-native/offline-transactions/package.json b/examples/react-native/offline-transactions/package.json index bf39aa50d..0a427f734 100644 --- a/examples/react-native/offline-transactions/package.json +++ b/examples/react-native/offline-transactions/package.json @@ -16,10 +16,10 @@ "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", "@tanstack/db": "workspace:*", - "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", + "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/react-query": "^5.90.20", "expo": "~53.0.26", "expo-constants": "~17.1.0", @@ -27,7 +27,7 @@ "expo-router": "~5.1.11", "expo-status-bar": "~2.2.0", "metro": "0.82.5", - "react": "19.0.0", + "react": "^19.2.4", "react-native": "0.79.6", "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.11.1", diff --git a/examples/react-native/shopping-list/package.json b/examples/react-native/shopping-list/package.json index 196b605bb..018315168 100644 --- a/examples/react-native/shopping-list/package.json +++ b/examples/react-native/shopping-list/package.json @@ -19,10 +19,10 @@ "@react-native-async-storage/async-storage": "2.1.2", "@react-native-community/netinfo": "11.4.1", "@tanstack/db": "workspace:*", - "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/electric-db-collection": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/react-db": "^0.1.77", + "@tanstack/react-native-db-sqlite-persistence": "workspace:*", "@tanstack/react-query": "^5.90.20", "expo": "~53.0.26", "expo-constants": "~17.1.0", @@ -31,7 +31,7 @@ "expo-status-bar": "~2.2.0", "metro": "0.82.5", "metro-cache": "0.82.5", - "react": "19.0.0", + "react": "^19.2.4", "react-native": "0.79.6", "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.11.1" diff --git a/examples/react/offline-transactions/package.json b/examples/react/offline-transactions/package.json index a1657186b..434a4fab6 100644 --- a/examples/react/offline-transactions/package.json +++ b/examples/react/offline-transactions/package.json @@ -9,8 +9,8 @@ "start": "node .output/server/index.mjs" }, "dependencies": { - "@tanstack/db": "workspace:*", "@tanstack/browser-db-sqlite-persistence": "workspace:*", + "@tanstack/db": "workspace:*", "@tanstack/offline-transactions": "^1.0.24", "@tanstack/query-db-collection": "^1.0.30", "@tanstack/react-db": "^0.1.77", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index baaeab0d1..a28499a9f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -289,16 +289,16 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~5.0.5 - version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@op-engineering/op-sqlite': specifier: ^15.2.5 - version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) '@react-native-async-storage/async-storage': specifier: 2.1.2 - version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@react-native-community/netinfo': specifier: 11.4.1 - version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@tanstack/db': specifier: workspace:* version: link:../../../packages/db @@ -316,37 +316,37 @@ importers: version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 - version: 5.90.21(react@19.0.0) + version: 5.90.21(react@19.2.4) expo: specifier: ~53.0.26 - version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-constants: specifier: ~17.1.0 - version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) expo-linking: specifier: ~7.1.0 - version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-router: specifier: ~5.1.11 - version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-status-bar: specifier: ~2.2.0 - version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) metro: specifier: 0.82.5 version: 0.82.5 react: - specifier: 19.0.0 - version: 19.0.0 + specifier: ^19.2.4 + version: 19.2.4 react-native: specifier: 0.79.6 - version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) react-native-safe-area-context: specifier: 5.4.0 - version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) react-native-screens: specifier: ~4.11.1 - version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) zod: specifier: ^3.25.76 version: 3.25.76 @@ -383,16 +383,16 @@ importers: version: 1.5.13 '@expo/metro-runtime': specifier: ~5.0.5 - version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@op-engineering/op-sqlite': specifier: ^15.2.5 - version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) '@react-native-async-storage/async-storage': specifier: 2.1.2 - version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@react-native-community/netinfo': specifier: 11.4.1 - version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@tanstack/db': specifier: workspace:* version: link:../../../packages/db @@ -410,22 +410,22 @@ importers: version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 - version: 5.90.21(react@19.0.0) + version: 5.90.21(react@19.2.4) expo: specifier: ~53.0.26 - version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-constants: specifier: ~17.1.0 - version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) expo-linking: specifier: ~7.1.0 - version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-router: specifier: ~5.1.11 - version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) expo-status-bar: specifier: ~2.2.0 - version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) metro: specifier: 0.82.5 version: 0.82.5 @@ -433,17 +433,17 @@ importers: specifier: 0.82.5 version: 0.82.5 react: - specifier: 19.0.0 - version: 19.0.0 + specifier: ^19.2.4 + version: 19.2.4 react-native: specifier: 0.79.6 - version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) react-native-safe-area-context: specifier: 5.4.0 - version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) react-native-screens: specifier: ~4.11.1 - version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) devDependencies: '@babel/core': specifier: ^7.29.0 @@ -10628,10 +10628,6 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react@19.0.0: - resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} - engines: {node: '>=0.10.0'} - react@19.2.0: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} @@ -14412,11 +14408,11 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - '@expo/dom-webview@55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@expo/dom-webview@55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) optional: true '@expo/dom-webview@55.0.3(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': @@ -14598,9 +14594,9 @@ snapshots: - typescript - utf-8-validate - '@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': + '@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': dependencies: - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) '@expo/metro-runtime@5.0.5(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))': dependencies: @@ -14763,11 +14759,11 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@expo/vector-icons@14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - expo-font: 13.3.2(expo@53.0.27)(react@19.0.0) - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + expo-font: 13.3.2(expo@53.0.27)(react@19.2.4) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) '@expo/vector-icons@15.1.1(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -15904,10 +15900,10 @@ snapshots: '@oozcitak/util@10.0.0': {} - '@op-engineering/op-sqlite@15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@op-engineering/op-sqlite@15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) '@op-engineering/op-sqlite@15.2.7(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: @@ -16102,12 +16098,6 @@ snapshots: '@publint/pack@0.1.4': {} - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.0.0)': - dependencies: - react: 19.0.0 - optionalDependencies: - '@types/react': 19.2.14 - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.0)': dependencies: react: 19.2.0 @@ -16120,14 +16110,6 @@ snapshots: react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - optional: true - - '@radix-ui/react-slot@1.2.0(@types/react@19.2.14)(react@19.0.0)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.0.0) - react: 19.0.0 - optionalDependencies: - '@types/react': 19.2.14 '@radix-ui/react-slot@1.2.0(@types/react@19.2.14)(react@19.2.0)': dependencies: @@ -16143,16 +16125,11 @@ snapshots: react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 - optional: true - '@react-native-async-storage/async-storage@2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': + '@react-native-async-storage/async-storage@2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': dependencies: merge-options: 3.0.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - - '@react-native-community/netinfo@11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': - dependencies: - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) '@react-native-community/netinfo@11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': dependencies: @@ -16385,15 +16362,6 @@ snapshots: '@react-native/normalize-colors@0.83.2': {} - '@react-native/virtualized-lists@0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': - dependencies: - invariant: 2.2.4 - nullthrows: 1.1.1 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - optionalDependencies: - '@types/react': 19.2.14 - '@react-native/virtualized-lists@0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: invariant: 2.2.4 @@ -16421,15 +16389,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@react-navigation/bottom-tabs@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@react-navigation/bottom-tabs@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) color: 4.2.3 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -16462,18 +16430,6 @@ snapshots: - '@react-native-masked-view/masked-view' optional: true - '@react-navigation/core@7.13.7(react@19.0.0)': - dependencies: - '@react-navigation/routers': 7.5.3 - escape-string-regexp: 4.0.0 - fast-deep-equal: 3.1.3 - nanoid: 3.3.11 - query-string: 7.1.3 - react: 19.0.0 - react-is: 19.2.3 - use-latest-callback: 0.2.6(react@19.0.0) - use-sync-external-store: 1.6.0(react@19.0.0) - '@react-navigation/core@7.13.7(react@19.2.0)': dependencies: '@react-navigation/routers': 7.5.3 @@ -16498,17 +16454,16 @@ snapshots: react-is: 19.2.3 use-latest-callback: 0.2.6(react@19.2.4) use-sync-external-store: 1.6.0(react@19.2.4) - optional: true - '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) color: 4.2.3 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - use-latest-callback: 0.2.6(react@19.0.0) - use-sync-external-store: 1.6.0(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + use-latest-callback: 0.2.6(react@19.2.4) + use-sync-external-store: 1.6.0(react@19.2.4) '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.4.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -16532,15 +16487,15 @@ snapshots: use-sync-external-store: 1.6.0(react@19.2.4) optional: true - '@react-navigation/native-stack@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@react-navigation/native-stack@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) color: 4.2.3 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: @@ -16576,15 +16531,15 @@ snapshots: - '@react-native-masked-view/masked-view' optional: true - '@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + '@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: - '@react-navigation/core': 7.13.7(react@19.0.0) + '@react-navigation/core': 7.13.7(react@19.2.4) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - use-latest-callback: 0.2.6(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + use-latest-callback: 0.2.6(react@19.2.4) '@react-navigation/native@7.1.27(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -17164,11 +17119,6 @@ snapshots: '@tanstack/query-core@5.90.20': {} - '@tanstack/react-query@5.90.21(react@19.0.0)': - dependencies: - '@tanstack/query-core': 5.90.20 - react: 19.0.0 - '@tanstack/react-query@5.90.21(react@19.2.4)': dependencies: '@tanstack/query-core': 5.90.20 @@ -20053,13 +20003,13 @@ snapshots: expect-type@1.2.2: {} - expo-asset@11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + expo-asset@11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: '@expo/image-utils': 0.7.6 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) transitivePeerDependencies: - supports-color @@ -20085,12 +20035,12 @@ snapshots: - supports-color - typescript - expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)): + expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)): dependencies: '@expo/config': 11.0.13 '@expo/env': 1.0.7 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) transitivePeerDependencies: - supports-color @@ -20134,10 +20084,10 @@ snapshots: - supports-color - typescript - expo-file-system@18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)): + expo-file-system@18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) expo-file-system@55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): dependencies: @@ -20149,11 +20099,11 @@ snapshots: expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-font@13.3.2(expo@53.0.27)(react@19.0.0): + expo-font@13.3.2(expo@53.0.27)(react@19.2.4): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) fontfaceobserver: 2.3.0 - react: 19.0.0 + react: 19.2.4 expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -20169,10 +20119,10 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-keep-awake@14.1.4(expo@53.0.27)(react@19.0.0): + expo-keep-awake@14.1.4(expo@53.0.27)(react@19.2.4): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react: 19.0.0 + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.2.4 expo-keep-awake@55.0.4(expo@55.0.8)(react@19.2.0): dependencies: @@ -20184,12 +20134,12 @@ snapshots: expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 - expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) invariant: 2.2.4 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) transitivePeerDependencies: - expo - supports-color @@ -20252,24 +20202,24 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-router@5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + expo-router@5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) '@expo/schema-utils': 0.1.8 '@expo/server': 0.6.3 - '@radix-ui/react-slot': 1.2.0(@types/react@19.2.14)(react@19.0.0) - '@react-navigation/bottom-tabs': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - '@react-navigation/native-stack': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@radix-ui/react-slot': 1.2.0(@types/react@19.2.14)(react@19.2.4) + '@react-navigation/bottom-tabs': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/native-stack': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) client-only: 0.0.1 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) - expo-linking: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + expo-linking: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) invariant: 2.2.4 react-fast-compare: 3.2.2 - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) semver: 7.6.3 server-only: 0.0.1 shallowequal: 1.1.0 @@ -20354,14 +20304,14 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-status-bar@2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + expo-status-bar@2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - expo@53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + expo@53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: '@babel/runtime': 7.28.4 '@expo/cli': 0.24.24(graphql@16.12.0) @@ -20369,22 +20319,22 @@ snapshots: '@expo/config-plugins': 10.1.2 '@expo/fingerprint': 0.13.4 '@expo/metro-config': 0.20.18 - '@expo/vector-icons': 14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@expo/vector-icons': 14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) babel-preset-expo: 13.2.5(@babel/core@7.29.0) - expo-asset: 11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) - expo-file-system: 18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) - expo-font: 13.3.2(expo@53.0.27)(react@19.0.0) - expo-keep-awake: 14.1.4(expo@53.0.27)(react@19.0.0) + expo-asset: 11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + expo-file-system: 18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + expo-font: 13.3.2(expo@53.0.27)(react@19.2.4) + expo-keep-awake: 14.1.4(expo@53.0.27)(react@19.2.4) expo-modules-autolinking: 2.1.15 expo-modules-core: 2.5.0 - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/dom-webview': 55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + '@expo/dom-webview': 55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) transitivePeerDependencies: - '@babel/core' - babel-plugin-react-compiler @@ -23309,10 +23259,6 @@ snapshots: react-fast-compare@3.2.2: {} - react-freeze@1.0.4(react@19.0.0): - dependencies: - react: 19.0.0 - react-freeze@1.0.4(react@19.2.0): dependencies: react: 19.2.0 @@ -23321,7 +23267,6 @@ snapshots: react-freeze@1.0.4(react@19.2.4): dependencies: react: 19.2.4 - optional: true react-is@16.13.1: {} @@ -23331,15 +23276,15 @@ snapshots: react-is@19.2.3: {} - react-native-edge-to-edge@1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + react-native-edge-to-edge@1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-is-edge-to-edge@1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + react-native-is-edge-to-edge@1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) react-native-is-edge-to-edge@1.2.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -23353,10 +23298,10 @@ snapshots: react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) optional: true - react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - react: 19.0.0 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react: 19.2.4 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) react-native-safe-area-context@5.4.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -23370,12 +23315,12 @@ snapshots: react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) optional: true - react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): + react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): dependencies: - react: 19.0.0 - react-freeze: 1.0.4(react@19.0.0) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.2.4 + react-freeze: 1.0.4(react@19.2.4) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) warn-once: 0.1.1 react-native-screens@4.11.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): @@ -23396,54 +23341,6 @@ snapshots: warn-once: 0.1.1 optional: true - react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0): - dependencies: - '@jest/create-cache-key-function': 29.7.0 - '@react-native/assets-registry': 0.79.6 - '@react-native/codegen': 0.79.6(@babel/core@7.29.0) - '@react-native/community-cli-plugin': 0.79.6 - '@react-native/gradle-plugin': 0.79.6 - '@react-native/js-polyfills': 0.79.6 - '@react-native/normalize-colors': 0.79.6 - '@react-native/virtualized-lists': 0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - abort-controller: 3.0.0 - anser: 1.4.10 - ansi-regex: 5.0.1 - babel-jest: 29.7.0(@babel/core@7.29.0) - babel-plugin-syntax-hermes-parser: 0.25.1 - base64-js: 1.5.1 - chalk: 4.1.2 - commander: 12.1.0 - event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.6 - glob: 7.2.3 - invariant: 2.2.4 - jest-environment-node: 29.7.0 - memoize-one: 5.2.1 - metro-runtime: 0.82.5 - metro-source-map: 0.82.5 - nullthrows: 1.1.1 - pretty-format: 29.7.0 - promise: 8.3.0 - react: 19.0.0 - react-devtools-core: 6.1.5 - react-refresh: 0.14.2 - regenerator-runtime: 0.13.11 - scheduler: 0.25.0 - semver: 7.7.4 - stacktrace-parser: 0.1.11 - whatwg-fetch: 3.6.20 - ws: 6.2.3 - yargs: 17.7.2 - optionalDependencies: - '@types/react': 19.2.14 - transitivePeerDependencies: - - '@babel/core' - - '@react-native-community/cli' - - bufferutil - - supports-color - - utf-8-validate - react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -23592,8 +23489,6 @@ snapshots: react-refresh@0.18.0: {} - react@19.0.0: {} - react@19.2.0: {} react@19.2.4: {} @@ -25040,10 +24935,6 @@ snapshots: dependencies: punycode: 2.3.1 - use-latest-callback@0.2.6(react@19.0.0): - dependencies: - react: 19.0.0 - use-latest-callback@0.2.6(react@19.2.0): dependencies: react: 19.2.0 @@ -25052,11 +24943,6 @@ snapshots: use-latest-callback@0.2.6(react@19.2.4): dependencies: react: 19.2.4 - optional: true - - use-sync-external-store@1.6.0(react@19.0.0): - dependencies: - react: 19.0.0 use-sync-external-store@1.6.0(react@19.2.0): dependencies: From dd100a8b00741152374652dcaae0de88cabeddf2 Mon Sep 17 00:00:00 2001 From: Sam Willis Date: Wed, 25 Mar 2026 17:27:27 +0000 Subject: [PATCH 6/7] fix: restore RN example runtime compatibility Pin the Expo React Native examples back to React 19.0.0, keep the missing expo-router runtime dependency explicit, and retain the Metro singleton resolution fix so the mobile apps boot cleanly again after the package renames. Made-with: Cursor --- .../offline-transactions/metro.config.js | 12 +- .../offline-transactions/package.json | 3 +- .../shopping-list/metro.config.js | 12 +- .../react-native/shopping-list/package.json | 5 +- pnpm-lock.yaml | 399 ++++++++++++------ 5 files changed, 275 insertions(+), 156 deletions(-) diff --git a/examples/react-native/offline-transactions/metro.config.js b/examples/react-native/offline-transactions/metro.config.js index 18b7c545c..c3c403143 100644 --- a/examples/react-native/offline-transactions/metro.config.js +++ b/examples/react-native/offline-transactions/metro.config.js @@ -51,15 +51,9 @@ config.resolver.resolveRequest = (context, moduleName, platform) => { ) } -// Force singleton packages to resolve from the app's local node_modules -config.resolver.extraNodeModules = new Proxy(singletonPaths, { - get: (target, name) => { - if (target[name]) { - return target[name] - } - return path.resolve(localNodeModules, name) - }, -}) +// Only singleton packages need explicit remapping. Let Metro resolve all other +// transitive dependencies from the package that requested them. +config.resolver.extraNodeModules = singletonPaths // Block react-native 0.83 from root node_modules const escMonorepoRoot = monorepoRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') diff --git a/examples/react-native/offline-transactions/package.json b/examples/react-native/offline-transactions/package.json index 0a427f734..aace07ae9 100644 --- a/examples/react-native/offline-transactions/package.json +++ b/examples/react-native/offline-transactions/package.json @@ -27,10 +27,11 @@ "expo-router": "~5.1.11", "expo-status-bar": "~2.2.0", "metro": "0.82.5", - "react": "^19.2.4", + "react": "19.0.0", "react-native": "0.79.6", "react-native-safe-area-context": "5.4.0", "react-native-screens": "~4.11.1", + "use-latest-callback": "^0.3.3", "zod": "^3.25.76" }, "devDependencies": { diff --git a/examples/react-native/shopping-list/metro.config.js b/examples/react-native/shopping-list/metro.config.js index 02d1935d6..5bc3d1466 100644 --- a/examples/react-native/shopping-list/metro.config.js +++ b/examples/react-native/shopping-list/metro.config.js @@ -52,15 +52,9 @@ config.resolver.resolveRequest = (context, moduleName, platform) => { ) } -// Force singleton packages to resolve from the app's local node_modules -config.resolver.extraNodeModules = new Proxy(singletonPaths, { - get: (target, name) => { - if (target[name]) { - return target[name] - } - return path.resolve(localNodeModules, name) - }, -}) +// Only singleton packages need explicit remapping. Let Metro resolve all other +// transitive dependencies from the package that requested them. +config.resolver.extraNodeModules = singletonPaths // Block react-native 0.83 from root node_modules const escMonorepoRoot = monorepoRoot.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') diff --git a/examples/react-native/shopping-list/package.json b/examples/react-native/shopping-list/package.json index 018315168..b13490d40 100644 --- a/examples/react-native/shopping-list/package.json +++ b/examples/react-native/shopping-list/package.json @@ -31,10 +31,11 @@ "expo-status-bar": "~2.2.0", "metro": "0.82.5", "metro-cache": "0.82.5", - "react": "^19.2.4", + "react": "19.0.0", "react-native": "0.79.6", "react-native-safe-area-context": "5.4.0", - "react-native-screens": "~4.11.1" + "react-native-screens": "~4.11.1", + "use-latest-callback": "^0.3.3" }, "devDependencies": { "@babel/core": "^7.29.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a28499a9f..10318ff19 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -289,16 +289,16 @@ importers: dependencies: '@expo/metro-runtime': specifier: ~5.0.5 - version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@op-engineering/op-sqlite': specifier: ^15.2.5 - version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) '@react-native-async-storage/async-storage': specifier: 2.1.2 - version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@react-native-community/netinfo': specifier: 11.4.1 - version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@tanstack/db': specifier: workspace:* version: link:../../../packages/db @@ -316,37 +316,40 @@ importers: version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 - version: 5.90.21(react@19.2.4) + version: 5.90.21(react@19.0.0) expo: specifier: ~53.0.26 - version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-constants: specifier: ~17.1.0 - version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) expo-linking: specifier: ~7.1.0 - version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-router: specifier: ~5.1.11 - version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-status-bar: specifier: ~2.2.0 - version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) metro: specifier: 0.82.5 version: 0.82.5 react: - specifier: ^19.2.4 - version: 19.2.4 + specifier: 19.0.0 + version: 19.0.0 react-native: specifier: 0.79.6 - version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) react-native-safe-area-context: specifier: 5.4.0 - version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) react-native-screens: specifier: ~4.11.1 - version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + use-latest-callback: + specifier: ^0.3.3 + version: 0.3.3(react@19.0.0) zod: specifier: ^3.25.76 version: 3.25.76 @@ -383,16 +386,16 @@ importers: version: 1.5.13 '@expo/metro-runtime': specifier: ~5.0.5 - version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@op-engineering/op-sqlite': specifier: ^15.2.5 - version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) '@react-native-async-storage/async-storage': specifier: 2.1.2 - version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@react-native-community/netinfo': specifier: 11.4.1 - version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@tanstack/db': specifier: workspace:* version: link:../../../packages/db @@ -410,22 +413,22 @@ importers: version: link:../../../packages/react-native-db-sqlite-persistence '@tanstack/react-query': specifier: ^5.90.20 - version: 5.90.21(react@19.2.4) + version: 5.90.21(react@19.0.0) expo: specifier: ~53.0.26 - version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-constants: specifier: ~17.1.0 - version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + version: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) expo-linking: specifier: ~7.1.0 - version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-router: specifier: ~5.1.11 - version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) expo-status-bar: specifier: ~2.2.0 - version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) metro: specifier: 0.82.5 version: 0.82.5 @@ -433,17 +436,20 @@ importers: specifier: 0.82.5 version: 0.82.5 react: - specifier: ^19.2.4 - version: 19.2.4 + specifier: 19.0.0 + version: 19.0.0 react-native: specifier: 0.79.6 - version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + version: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) react-native-safe-area-context: specifier: 5.4.0 - version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) react-native-screens: specifier: ~4.11.1 - version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + version: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + use-latest-callback: + specifier: ^0.3.3 + version: 0.3.3(react@19.0.0) devDependencies: '@babel/core': specifier: ^7.29.0 @@ -10628,6 +10634,10 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} + engines: {node: '>=0.10.0'} + react@19.2.0: resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} @@ -11840,6 +11850,11 @@ packages: peerDependencies: react: '>=16.8' + use-latest-callback@0.3.3: + resolution: {integrity: sha512-G9A/EL7okx4wzBfATt8bdGg0v1K0Gp0IClTzljffM63gtPisgDKCaLCLUb4g2M4CoXDg5yyHjOU+g3SUPbXwrA==} + peerDependencies: + react: '>=16.8' + use-sync-external-store@1.6.0: resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: @@ -14408,11 +14423,11 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - '@expo/dom-webview@55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@expo/dom-webview@55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) optional: true '@expo/dom-webview@55.0.3(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': @@ -14594,9 +14609,9 @@ snapshots: - typescript - utf-8-validate - '@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': + '@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': dependencies: - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) '@expo/metro-runtime@5.0.5(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))': dependencies: @@ -14759,11 +14774,11 @@ snapshots: '@expo/sudo-prompt@9.3.2': {} - '@expo/vector-icons@14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@expo/vector-icons@14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - expo-font: 13.3.2(expo@53.0.27)(react@19.2.4) - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + expo-font: 13.3.2(expo@53.0.27)(react@19.0.0) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) '@expo/vector-icons@15.1.1(expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -15900,10 +15915,10 @@ snapshots: '@oozcitak/util@10.0.0': {} - '@op-engineering/op-sqlite@15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@op-engineering/op-sqlite@15.2.7(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) '@op-engineering/op-sqlite@15.2.7(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: @@ -16098,6 +16113,12 @@ snapshots: '@publint/pack@0.1.4': {} + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.0.0)': + dependencies: + react: 19.0.0 + optionalDependencies: + '@types/react': 19.2.14 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.0)': dependencies: react: 19.2.0 @@ -16110,6 +16131,14 @@ snapshots: react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 + optional: true + + '@radix-ui/react-slot@1.2.0(@types/react@19.2.14)(react@19.0.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.0.0) + react: 19.0.0 + optionalDependencies: + '@types/react': 19.2.14 '@radix-ui/react-slot@1.2.0(@types/react@19.2.14)(react@19.2.0)': dependencies: @@ -16125,11 +16154,16 @@ snapshots: react: 19.2.4 optionalDependencies: '@types/react': 19.2.14 + optional: true - '@react-native-async-storage/async-storage@2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': + '@react-native-async-storage/async-storage@2.1.2(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': dependencies: merge-options: 3.0.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + + '@react-native-community/netinfo@11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))': + dependencies: + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) '@react-native-community/netinfo@11.4.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))': dependencies: @@ -16362,6 +16396,15 @@ snapshots: '@react-native/normalize-colors@0.83.2': {} + '@react-native/virtualized-lists@0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + optionalDependencies: + '@types/react': 19.2.14 + '@react-native/virtualized-lists@0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': dependencies: invariant: 2.2.4 @@ -16389,15 +16432,15 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 - '@react-navigation/bottom-tabs@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@react-navigation/bottom-tabs@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) color: 4.2.3 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -16430,6 +16473,18 @@ snapshots: - '@react-native-masked-view/masked-view' optional: true + '@react-navigation/core@7.13.7(react@19.0.0)': + dependencies: + '@react-navigation/routers': 7.5.3 + escape-string-regexp: 4.0.0 + fast-deep-equal: 3.1.3 + nanoid: 3.3.11 + query-string: 7.1.3 + react: 19.0.0 + react-is: 19.2.3 + use-latest-callback: 0.2.6(react@19.0.0) + use-sync-external-store: 1.6.0(react@19.0.0) + '@react-navigation/core@7.13.7(react@19.2.0)': dependencies: '@react-navigation/routers': 7.5.3 @@ -16454,16 +16509,17 @@ snapshots: react-is: 19.2.3 use-latest-callback: 0.2.6(react@19.2.4) use-sync-external-store: 1.6.0(react@19.2.4) + optional: true - '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) color: 4.2.3 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - use-latest-callback: 0.2.6(react@19.2.4) - use-sync-external-store: 1.6.0(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + use-latest-callback: 0.2.6(react@19.0.0) + use-sync-external-store: 1.6.0(react@19.0.0) '@react-navigation/elements@2.9.4(@react-navigation/native@7.1.27(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native-safe-area-context@5.4.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -16487,15 +16543,15 @@ snapshots: use-sync-external-store: 1.6.0(react@19.2.4) optional: true - '@react-navigation/native-stack@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@react-navigation/native-stack@7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@react-navigation/elements': 2.9.4(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) color: 4.2.3 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) sf-symbols-typescript: 2.2.0 warn-once: 0.1.1 transitivePeerDependencies: @@ -16531,15 +16587,15 @@ snapshots: - '@react-native-masked-view/masked-view' optional: true - '@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)': + '@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0)': dependencies: - '@react-navigation/core': 7.13.7(react@19.2.4) + '@react-navigation/core': 7.13.7(react@19.0.0) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.11 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - use-latest-callback: 0.2.6(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + use-latest-callback: 0.2.6(react@19.0.0) '@react-navigation/native@7.1.27(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0)': dependencies: @@ -17119,6 +17175,11 @@ snapshots: '@tanstack/query-core@5.90.20': {} + '@tanstack/react-query@5.90.21(react@19.0.0)': + dependencies: + '@tanstack/query-core': 5.90.20 + react: 19.0.0 + '@tanstack/react-query@5.90.21(react@19.2.4)': dependencies: '@tanstack/query-core': 5.90.20 @@ -20003,13 +20064,13 @@ snapshots: expect-type@1.2.2: {} - expo-asset@11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + expo-asset@11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: '@expo/image-utils': 0.7.6 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) transitivePeerDependencies: - supports-color @@ -20035,12 +20096,12 @@ snapshots: - supports-color - typescript - expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)): + expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)): dependencies: '@expo/config': 11.0.13 '@expo/env': 1.0.7 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) transitivePeerDependencies: - supports-color @@ -20084,10 +20145,10 @@ snapshots: - supports-color - typescript - expo-file-system@18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)): + expo-file-system@18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) expo-file-system@55.0.11(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0)): dependencies: @@ -20099,11 +20160,11 @@ snapshots: expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-font@13.3.2(expo@53.0.27)(react@19.2.4): + expo-font@13.3.2(expo@53.0.27)(react@19.0.0): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) fontfaceobserver: 2.3.0 - react: 19.2.4 + react: 19.0.0 expo-font@55.0.4(expo@55.0.8)(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -20119,10 +20180,10 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-keep-awake@14.1.4(expo@53.0.27)(react@19.2.4): + expo-keep-awake@14.1.4(expo@53.0.27)(react@19.0.0): dependencies: - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react: 19.2.4 + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react: 19.0.0 expo-keep-awake@55.0.4(expo@55.0.8)(react@19.2.0): dependencies: @@ -20134,12 +20195,12 @@ snapshots: expo: 55.0.8(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(expo-router@5.1.11)(react-dom@19.2.4(react@19.2.4))(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4)(typescript@5.9.3) react: 19.2.4 - expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) invariant: 2.2.4 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) transitivePeerDependencies: - expo - supports-color @@ -20202,24 +20263,24 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-router@5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + expo-router@5.1.11(@types/react@19.2.14)(expo-constants@17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(expo-linking@7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(expo@53.0.27)(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) '@expo/schema-utils': 0.1.8 '@expo/server': 0.6.3 - '@radix-ui/react-slot': 1.2.0(@types/react@19.2.14)(react@19.2.4) - '@react-navigation/bottom-tabs': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@react-navigation/native-stack': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@radix-ui/react-slot': 1.2.0(@types/react@19.2.14)(react@19.0.0) + '@react-navigation/bottom-tabs': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/native': 7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@react-navigation/native-stack': 7.9.1(@react-navigation/native@7.1.27(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) client-only: 0.0.1 - expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) - expo-linking: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + expo: 53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + expo-linking: 7.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) invariant: 2.2.4 react-fast-compare: 3.2.2 - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-safe-area-context: 5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-screens: 4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) semver: 7.6.3 server-only: 0.0.1 shallowequal: 1.1.0 @@ -20304,14 +20365,14 @@ snapshots: react: 19.2.4 react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - expo-status-bar@2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + expo-status-bar@2.2.3(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) - expo@53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + expo@53.0.27(@babel/core@7.29.0)(@expo/dom-webview@55.0.3)(@expo/metro-runtime@5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)))(graphql@16.12.0)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: '@babel/runtime': 7.28.4 '@expo/cli': 0.24.24(graphql@16.12.0) @@ -20319,22 +20380,22 @@ snapshots: '@expo/config-plugins': 10.1.2 '@expo/fingerprint': 0.13.4 '@expo/metro-config': 0.20.18 - '@expo/vector-icons': 14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.2.4))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + '@expo/vector-icons': 14.1.0(expo-font@13.3.2(expo@53.0.27)(react@19.0.0))(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) babel-preset-expo: 13.2.5(@babel/core@7.29.0) - expo-asset: 11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) - expo-file-system: 18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) - expo-font: 13.3.2(expo@53.0.27)(react@19.2.4) - expo-keep-awake: 14.1.4(expo@53.0.27)(react@19.2.4) + expo-asset: 11.1.7(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + expo-constants: 17.1.8(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + expo-file-system: 18.1.11(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) + expo-font: 13.3.2(expo@53.0.27)(react@19.0.0) + expo-keep-awake: 14.1.4(expo@53.0.27)(react@19.0.0) expo-modules-autolinking: 2.1.15 expo-modules-core: 2.5.0 - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-edge-to-edge: 1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/dom-webview': 55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) - '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4)) + '@expo/dom-webview': 55.0.3(expo@53.0.27)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + '@expo/metro-runtime': 5.0.5(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0)) transitivePeerDependencies: - '@babel/core' - babel-plugin-react-compiler @@ -23259,6 +23320,10 @@ snapshots: react-fast-compare@3.2.2: {} + react-freeze@1.0.4(react@19.0.0): + dependencies: + react: 19.0.0 + react-freeze@1.0.4(react@19.2.0): dependencies: react: 19.2.0 @@ -23267,6 +23332,7 @@ snapshots: react-freeze@1.0.4(react@19.2.4): dependencies: react: 19.2.4 + optional: true react-is@16.13.1: {} @@ -23276,15 +23342,15 @@ snapshots: react-is@19.2.3: {} - react-native-edge-to-edge@1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-native-edge-to-edge@1.6.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) - react-native-is-edge-to-edge@1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-native-is-edge-to-edge@1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) react-native-is-edge-to-edge@1.2.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -23298,10 +23364,10 @@ snapshots: react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) optional: true - react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-native-safe-area-context@5.4.0(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - react: 19.2.4 - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) + react: 19.0.0 + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) react-native-safe-area-context@5.4.0(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): dependencies: @@ -23315,12 +23381,12 @@ snapshots: react-native: 0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) optional: true - react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4): + react-native-screens@4.11.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0): dependencies: - react: 19.2.4 - react-freeze: 1.0.4(react@19.2.4) - react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4) - react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4))(react@19.2.4) + react: 19.0.0 + react-freeze: 1.0.4(react@19.0.0) + react-native: 0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0) + react-native-is-edge-to-edge: 1.2.1(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) warn-once: 0.1.1 react-native-screens@4.11.1(react-native@0.83.2(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.0))(react@19.2.0): @@ -23341,6 +23407,54 @@ snapshots: warn-once: 0.1.1 optional: true + react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0): + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native/assets-registry': 0.79.6 + '@react-native/codegen': 0.79.6(@babel/core@7.29.0) + '@react-native/community-cli-plugin': 0.79.6 + '@react-native/gradle-plugin': 0.79.6 + '@react-native/js-polyfills': 0.79.6 + '@react-native/normalize-colors': 0.79.6 + '@react-native/virtualized-lists': 0.79.6(@types/react@19.2.14)(react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.0.0))(react@19.0.0) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + babel-jest: 29.7.0(@babel/core@7.29.0) + babel-plugin-syntax-hermes-parser: 0.25.1 + base64-js: 1.5.1 + chalk: 4.1.2 + commander: 12.1.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + glob: 7.2.3 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + memoize-one: 5.2.1 + metro-runtime: 0.82.5 + metro-source-map: 0.82.5 + nullthrows: 1.1.1 + pretty-format: 29.7.0 + promise: 8.3.0 + react: 19.0.0 + react-devtools-core: 6.1.5 + react-refresh: 0.14.2 + regenerator-runtime: 0.13.11 + scheduler: 0.25.0 + semver: 7.7.4 + stacktrace-parser: 0.1.11 + whatwg-fetch: 3.6.20 + ws: 6.2.3 + yargs: 17.7.2 + optionalDependencies: + '@types/react': 19.2.14 + transitivePeerDependencies: + - '@babel/core' + - '@react-native-community/cli' + - bufferutil + - supports-color + - utf-8-validate + react-native@0.79.6(@babel/core@7.29.0)(@types/react@19.2.14)(react@19.2.4): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -23489,6 +23603,8 @@ snapshots: react-refresh@0.18.0: {} + react@19.0.0: {} + react@19.2.0: {} react@19.2.4: {} @@ -24935,6 +25051,10 @@ snapshots: dependencies: punycode: 2.3.1 + use-latest-callback@0.2.6(react@19.0.0): + dependencies: + react: 19.0.0 + use-latest-callback@0.2.6(react@19.2.0): dependencies: react: 19.2.0 @@ -24943,6 +25063,15 @@ snapshots: use-latest-callback@0.2.6(react@19.2.4): dependencies: react: 19.2.4 + optional: true + + use-latest-callback@0.3.3(react@19.0.0): + dependencies: + react: 19.0.0 + + use-sync-external-store@1.6.0(react@19.0.0): + dependencies: + react: 19.0.0 use-sync-external-store@1.6.0(react@19.2.0): dependencies: From d7dc086bc09049294af4b0bbc22adc28dbeff0f9 Mon Sep 17 00:00:00 2001 From: Sam Willis Date: Wed, 25 Mar 2026 17:27:34 +0000 Subject: [PATCH 7/7] chore: remove old persistence planning docs Drop the outdated persistence plan documents that were deleted on this branch so the repo history matches the current package direction. Made-with: Cursor --- PERSISTNCE-PLAN-SQLITE-ONLY.md | 1424 ----------------- persistance-plan/README.md | 49 - .../phase-0-api-runtime-feasibility.md | 124 -- .../phase-1-index-lifecycle-events.md | 88 - .../phase-2-core-persisted-wrapper.md | 130 -- .../phase-3-sqlite-core-adapter.md | 145 -- persistance-plan/phase-4-node-electron.md | 87 - persistance-plan/phase-5-react-native-expo.md | 85 - .../phase-6-cloudflare-durable-objects.md | 86 - .../phase-7-browser-single-tab.md | 85 - persistance-plan/phase-8-browser-multi-tab.md | 157 -- 11 files changed, 2460 deletions(-) delete mode 100644 PERSISTNCE-PLAN-SQLITE-ONLY.md delete mode 100644 persistance-plan/README.md delete mode 100644 persistance-plan/phase-0-api-runtime-feasibility.md delete mode 100644 persistance-plan/phase-1-index-lifecycle-events.md delete mode 100644 persistance-plan/phase-2-core-persisted-wrapper.md delete mode 100644 persistance-plan/phase-3-sqlite-core-adapter.md delete mode 100644 persistance-plan/phase-4-node-electron.md delete mode 100644 persistance-plan/phase-5-react-native-expo.md delete mode 100644 persistance-plan/phase-6-cloudflare-durable-objects.md delete mode 100644 persistance-plan/phase-7-browser-single-tab.md delete mode 100644 persistance-plan/phase-8-browser-multi-tab.md diff --git a/PERSISTNCE-PLAN-SQLITE-ONLY.md b/PERSISTNCE-PLAN-SQLITE-ONLY.md deleted file mode 100644 index 2567a8acb..000000000 --- a/PERSISTNCE-PLAN-SQLITE-ONLY.md +++ /dev/null @@ -1,1424 +0,0 @@ -# Persisted Collections + Multi-Tab Query-Driven Sync (SQLite-Only) - -## Summary - -This plan standardizes persistence on SQLite across runtimes and removes raw IndexedDB as a first-class persistence adapter. - -In the browser, persistence is OPFS-only via `wa-sqlite` + `OPFSCoopSyncVFS`, with no SharedWorker requirement. Multi-tab coordination uses Web Locks, Visibility API, and BroadcastChannel. - -Leadership is **per collection** (per table), not global per database. - -`persistedCollectionOptions(...)` infers behavior from the wrapped options: - -1. if wrapped options include `sync`, persistence augments that sync path -2. if wrapped options do not include `sync`, persistence runs sync-absent with SQLite as source of truth - -## Background - -TanStack DB on-demand sync uses `loadSubset(options)` as the choke point for query-driven loading and pagination. Persistence should plug into this same mechanism so: - -- any tab can load from local persistence immediately -- leader tabs handle remote coverage checks when sync is enabled -- tabs receive ordered updates and remain coherent -- persisted indexes mirror collection index creation in user space - -## Locked Decisions - -1. SQLite-only persistence architecture. -2. Browser storage is OPFS-only (`wa-sqlite` + `OPFSCoopSyncVFS`). -3. No SharedWorker requirement in the browser architecture. -4. Leadership is collection-scoped: single writer per collection/table. -5. `persistedCollectionOptions(...)` infers sync-present vs sync-absent behavior from presence of `sync`. -6. Cloudflare Durable Objects SQLite is a supported runtime target. -7. Delete tracking uses per-key tombstone state (one row per deleted key) with monotonic `row_version`. - -## Goals - -1. Local-first `loadSubset` in every runtime. -2. Correct multi-tab behavior with collection-scoped leadership. -3. Fast local reads from SQLite in every tab. -4. Reliable replay ordering via `(term, seq)`. -5. Persisted index parity with TanStack DB index lifecycle. -6. Sync-absent persisted collections with automatic mutation persistence. -7. Runtime coverage for browser, node, RN, Expo, Electron, and Cloudflare Durable Objects. - -## Non-Goals - -1. Raw IndexedDB persistence adapter. -2. SharedWorker-based mandatory architecture. -3. Full SQL pushdown for arbitrary unsupported expressions in v1. -4. Global single-writer guarantee for all tables in one DB file. -5. Perfect index GC/eviction policy in v1. - -## Runtime Scope - -| Runtime | Engine | Notes | -| -------------------------- | -------------------------------- | ------------------------------------------------- | -| Browser | `wa-sqlite` | OPFS + `OPFSCoopSyncVFS`, leader per collection | -| Node | `better-sqlite3` | Reference runtime + CI contract tests | -| React Native | `op-sqlite` | Thin driver over shared core | -| Expo | `op-sqlite` | Thin driver over shared core | -| Electron | `better-sqlite3` in main process | Renderer via IPC | -| Cloudflare Durable Objects | SQLite-backed DO storage | DB executes in-process inside DO; no tab election | - -## High-Level Design - -### 1) `persistedCollectionOptions(...)` Infers Behavior from Wrapped Options - -#### A) `sync` Present in Wrapped Options - -Wrap an existing sync collection and add local SQLite persistence. - -```ts -const tasks = createCollection( - persistedCollectionOptions({ - ...queryCollectionOptions({ - /* existing remote sync */ - }), - persistence: { - adapter: BrowserWASQLiteStorage({ dbName: 'app' }), - coordinator: BrowserCollectionCoordinator({ dbName: 'app' }), - }, - }), -) -``` - -#### B) No `sync` in Wrapped Options - -No wrapped remote sync is required. SQLite persistence is source of truth. - -```ts -const drafts = createCollection( - persistedCollectionOptions({ - id: 'drafts', - getKey: (row) => row.id, - persistence: { - adapter: BrowserWASQLiteStorage({ dbName: 'app' }), - coordinator: BrowserCollectionCoordinator({ dbName: 'app' }), - }, - }), -) -``` - -When `sync` is absent, mutations are automatically persisted (like `localStorageCollectionOptions`) and do not require remote sync. - -### 1.1) TypeScript API Sketch (Inferred Overloads) - -The API should use overloads so mode is inferred at compile-time from whether `sync` exists on wrapped options. - -```ts -type PersistedCollectionPersistence< - T extends object, - TKey extends string | number, -> = { - adapter: PersistenceAdapter - coordinator?: PersistedCollectionCoordinator -} - -type PersistedSyncWrappedOptions< - T extends object, - TKey extends string | number, - TSchema extends StandardSchemaV1 = never, - TUtils extends UtilsRecord = UtilsRecord, -> = CollectionConfig & { - sync: SyncConfig - persistence: PersistedCollectionPersistence -} - -type PersistedLocalOnlyOptions< - T extends object, - TKey extends string | number, - TSchema extends StandardSchemaV1 = never, - TUtils extends UtilsRecord = UtilsRecord, -> = Omit, 'sync'> & { - persistence: PersistedCollectionPersistence -} - -export function persistedCollectionOptions< - T extends object, - TKey extends string | number, - TSchema extends StandardSchemaV1 = never, - TUtils extends UtilsRecord = UtilsRecord, ->( - options: PersistedSyncWrappedOptions, -): CollectionConfig - -export function persistedCollectionOptions< - T extends object, - TKey extends string | number, - TSchema extends StandardSchemaV1 = never, - TUtils extends UtilsRecord = UtilsRecord, ->( - options: PersistedLocalOnlyOptions, -): CollectionConfig -``` - -Runtime rule: - -- `if (options.sync != null)` => sync-present path -- else => sync-absent path -- if `persistence.coordinator` is omitted, use `SingleProcessCoordinator` (intended for DO/node single-process execution) - -Inference edge-case rules (fixed): - -- sync-present requires `options.sync` with callable `sync` function. -- `sync` key present but invalid (`null`, non-object, missing `sync` function) throws `InvalidSyncConfigError`. -- sync-absent path is selected only when `sync` key is not present. -- user-provided `onInsert/onUpdate/onDelete` remain supported in both paths; sync-absent wrappers compose and then persist. - -`PersistedCollectionUtils` should include: - -- `acceptMutations(transaction)` for manual transactions -- optional debug helpers (`getLeadershipState`, `forceReloadSubset`) for tests/devtools - -### 2) Index Lifecycle Mirrors Main-Thread Indexing - -Persisted indexes are created from the same collection index lifecycle as user-space query indexes: - -- manual `collection.createIndex(...)` -- auto indexing (`autoIndex`) - -Required events in `@tanstack/db`: - -- `index:added` -- `index:removed` - -Persistence listens and ensures/removes matching persisted indexes. - -### 3) Storage Backend Options (All SQLite) - -Every backend uses the same logical persistence model (table-per-collection + JSON payloads + expression indexes), but runtime wiring differs. - -#### Browser: `wa-sqlite` + `OPFSCoopSyncVFS` - -- storage: OPFS-only -- coordinator: `BrowserCollectionCoordinator` (Web Locks + Visibility + BroadcastChannel) -- leadership: collection-scoped in-tab election - -Browser capability baseline: - -- Phase 7 (single-tab) requires OPFS with `FileSystemSyncAccessHandle`. -- Phase 8 (multi-tab coordinator) additionally requires Web Locks. -- Target support is evergreen browsers from roughly the last 3 years that satisfy those capabilities. - -##### Browser Coordination (No SharedWorker) - -Election and preference: - -- Web Locks key per collection: - - `tsdb:leader::` -- Web Locks key for SQLite write serialization: - - `tsdb:writer:` -- Visibility API is a preference hint: - - visible tabs should be preferred leaders - - hidden leaders can step down cooperatively - -Visibility handoff protocol: - -- a leader entering hidden state starts `HIDDEN_STEPDOWN_DELAY_MS` (default 5000ms) -- while hidden, it listens for `leader:candidate` announcements from visible tabs -- if a visible contender is observed and delay elapses, current leader releases collection lock -- after handoff, apply `LEADER_HANDOFF_COOLDOWN_MS` (default 3000ms) before trying to re-acquire to prevent thrash - -Messaging: - -- BroadcastChannel namespace per collection: - - `tx` messages with `(term, seq)` and commit metadata - - `rpc` messages for `ensureRemoteSubset`, `ensurePersistedIndex`, `applyLocalMutations` - - `leader` heartbeat/announcement - -Ordering and recovery: - -- each collection stream has ordered `(term, seq)` -- followers track latest `(term, seq)` seen -- followers: - - ignore old terms - - ignore duplicate seq - - trigger catch-up on seq gap via `rpc:pullSince` - - if catch-up fails, fallback to stale-mark + subset reload - -Leadership lifecycle algorithm: - -1. Tab starts collection interest: - -- subscribe to collection channel -- attempt Web Lock acquisition for `tsdb:leader::` - -2. If lock acquired: - -- increment and persist `term` in SQLite metadata (transactional) -- become leader for that collection -- start heartbeat timer - -3. If tab becomes hidden and another visible contender exists: - -- leader may step down cooperatively and release lock - -4. On lock loss or unload: - -- stop sync tasks for that collection -- stop heartbeat -- continue follower read path - -5. Followers watch heartbeat timeout: - -- on timeout, attempt lock acquisition and leadership takeover - -`term` monotonicity requirement: - -- `term` must survive reload/restart and never decrement for a collection. -- leaders read+increment `leader_term` inside a SQLite transaction before emitting heartbeat. - -#### Node - -- storage: local sqlite via `better-sqlite3` -- coordinator: `SingleProcessCoordinator` by default -- common use: tests, server-side execution, tooling - -#### React Native / Expo - -- storage: `op-sqlite` wrappers for RN and Expo -- coordinator: typically `SingleProcessCoordinator` (single process), can be overridden if host adds cross-process sync -- packaging: one shared mobile package with RN/Expo-specific entrypoints only where needed - -#### Electron - -- storage: sqlite in main process -- coordinator: `SingleProcessCoordinator` in main process -- renderer interaction: via IPC bridge only -- packaging: separate electron package that wraps node adapter semantics with IPC transport - -#### Cloudflare Durable Objects (In-Process) - -Cloudflare Durable Objects run as single-threaded stateful actors with attached SQLite-backed storage. For a DO instance: - -- no browser-style leader election is needed -- the DO instance is authoritative writer for its storage -- `loadSubset` and mutation persistence execute directly in-object -- optional upstream sync can still be layered if needed, but sync-absent local persistence is a natural default -- this is an in-runtime execution model (DB + persistence in the same DO process), not a remote persistence adapter pattern - -Example shape inside a DO: - -```ts -export class AppDurableObject extends DurableObject { - private tasks = createCollection( - persistedCollectionOptions({ - id: 'tasks', - getKey: (row) => row.id, - persistence: { - adapter: durableObjectSQLiteAdapter(this.ctx.storage.sql), - // coordinator omitted -> SingleProcessCoordinator - }, - }), - ) -} -``` - -### 4) Collection-Scoped Coordinator - -Coordinator responsibilities per collection: - -- election: one leader per `collectionId` -- ordered broadcast of committed tx (`term`, `seq`) -- RPC: - - `ensureRemoteSubset(collectionId, options)` when `sync` is present - - `ensurePersistedIndex(collectionId, signature, spec)` - - `applyLocalMutations(collectionId, mutations)` when `sync` is absent and follower is not leader - -Tabs do not proxy reads through leaders; each tab reads SQLite directly. - -Runtime note: - -- browser uses `BrowserCollectionCoordinator` (election + BroadcastChannel RPC) -- DO/node single-process execution uses `SingleProcessCoordinator` (no election, no cross-tab RPC) - -Coordinator contract (minimum surface): - -```ts -interface PersistedCollectionCoordinator { - getNodeId(): string - subscribe( - collectionId: string, - onMessage: (message: ProtocolEnvelope) => void, - ): () => void - publish(collectionId: string, message: ProtocolEnvelope): void - isLeader(collectionId: string): boolean - ensureLeadership(collectionId: string): Promise - requestEnsureRemoteSubset?( - collectionId: string, - options: LoadSubsetOptions, - ): Promise - requestEnsurePersistedIndex( - collectionId: string, - signature: string, - spec: PersistedIndexSpec, - ): Promise - requestApplyLocalMutations?( - collectionId: string, - mutations: Array, - ): Promise - pullSince?( - collectionId: string, - fromRowVersion: number, - ): Promise -} -``` - -Coordinator validation rule: - -- wrapper validates required coordinator methods at initialization based on runtime mode. -- browser multi-tab mode requires `requestEnsureRemoteSubset`, `requestApplyLocalMutations`, and `pullSince`. -- single-process coordinators (node/electron/do and browser single-tab) may omit cross-tab RPC helpers. - -### 4.1) Coordinator Protocol (Implementation Draft) - -Message envelope: - -```ts -type ProtocolEnvelope = { - v: 1 - dbName: string - collectionId: string - senderId: string - ts: number - payload: TPayload -} -``` - -Message payloads: - -```ts -type LeaderHeartbeat = { - type: 'leader:heartbeat' - term: number - leaderId: string - latestSeq: number - latestRowVersion: number -} - -type TxCommitted = { - type: 'tx:committed' - term: number - seq: number - txId: string - latestRowVersion: number -} & ( - | { - requiresFullReload: true - } - | { - requiresFullReload: false - changedKeys: Array - deletedKeys: Array - } -) - -type EnsureRemoteSubsetRequest = { - type: 'rpc:ensureRemoteSubset:req' - rpcId: string - options: LoadSubsetOptions -} - -type EnsureRemoteSubsetResponse = - | { - type: 'rpc:ensureRemoteSubset:res' - rpcId: string - ok: true - } - | { - type: 'rpc:ensureRemoteSubset:res' - rpcId: string - ok: false - error: string - } - -type ApplyLocalMutationsRequest = { - type: 'rpc:applyLocalMutations:req' - rpcId: string - envelopeId: string - mutations: Array -} - -type ApplyLocalMutationsResponse = - | { - type: 'rpc:applyLocalMutations:res' - rpcId: string - ok: true - term: number - seq: number - latestRowVersion: number - acceptedMutationIds: Array - } - | { - type: 'rpc:applyLocalMutations:res' - rpcId: string - ok: false - code: 'NOT_LEADER' | 'VALIDATION_ERROR' | 'CONFLICT' | 'TIMEOUT' - error: string - } - -type PullSinceRequest = { - type: 'rpc:pullSince:req' - rpcId: string - fromRowVersion: number -} - -type PullSinceResponse = - | { - type: 'rpc:pullSince:res' - rpcId: string - ok: true - latestTerm: number - latestSeq: number - latestRowVersion: number - requiresFullReload: true - } - | { - type: 'rpc:pullSince:res' - rpcId: string - ok: true - latestTerm: number - latestSeq: number - latestRowVersion: number - requiresFullReload: false - changedKeys: Array - deletedKeys: Array - } - | { - type: 'rpc:pullSince:res' - rpcId: string - ok: false - error: string - } - -type CollectionReset = { - type: 'collection:reset' - schemaVersion: number - resetEpoch: number -} -``` - -Idempotency rules: - -- `tx:committed` idempotency key: `(collectionId, term, seq)` -- local mutation idempotency key: `envelopeId` -- mutation acknowledgment/correlation key: `mutationId` (per mutation inside an envelope) -- RPC response correlation key: `rpcId` -- `applyLocalMutations` is at-least-once delivery; leader must dedupe by `envelopeId` -- catch-up cursor key: `latestRowVersion` (monotonic per collection) -- followers persist `lastSeenRowVersion` from applied `tx:committed` messages and successful `pullSince` responses - -Recommended browser defaults: - -- heartbeat interval: 2000ms -- leader timeout: 6000ms -- RPC timeout: 5000ms -- local mutation retry backoff: 100ms → 2000ms capped exponential -- all timing knobs should be configurable per collection (advanced option) - -## Key Mechanics - -### A) Writer Ownership - -- logical single writer per collection/table at a time -- different tabs can lead different collections simultaneously -- followers do not write that collection directly in browser mode -- follower writes are routed to current leader for serialization - -SQLite write-lock note: - -- SQLite still permits one write transaction at a time per database file. -- collection leaders therefore coordinate through `tsdb:writer:` before write transactions. -- this keeps per-collection leadership for ownership, while serializing physical DB writes to avoid `SQLITE_BUSY` thrash. - -### A.1) Commit + Broadcast Ordering - -Leader commit pipeline for a collection change: - -1. acquire DB writer lock (`tsdb:writer:`) -2. begin SQLite transaction -3. increment collection `latest_row_version` and stamp touched rows with that version -4. apply row and index changes -5. for deletes, insert/update tombstone records with same `row_version` -6. insert idempotency marker in `applied_tx(collection_id, term, seq, applied_at)` -7. read updated `latest_row_version` for broadcast -8. commit SQLite transaction -9. release DB writer lock -10. broadcast `tx:committed(term, seq, latestRowVersion, ...)` - -Delete tracking note: - -- tombstones are the delete source for `pullSince` key-level catch-up. -- tombstones are stateful per key (latest delete only), not append-only history. - -Recovery rule: - -- if commit succeeds but broadcast is missed, followers detect stale `latestSeq` via heartbeat and call `pullSince`. - -### A.2) Subset Invalidation Contract - -Followers maintain an in-memory registry of active loaded subsets per collection. - -Default: - -- `TARGETED_INVALIDATION_KEY_LIMIT = 128` - -On `tx:committed`: - -1. if `requiresFullReload` is true: - -- mark all active subsets for that collection dirty -- schedule debounced reload from local SQLite - -2. else if `changedKeys`/`deletedKeys` present and combined count <= `TARGETED_INVALIDATION_KEY_LIMIT`: - -- refresh only subsets that may contain those keys - -3. else: - -- mark all active subsets for that collection dirty -- schedule debounced reload from local SQLite - -This removes ambiguity around follower refresh behavior while keeping correctness first. - -### B) `loadSubset` Flow by Inferred Behavior - -#### When `sync` Is Present - -1. query local SQLite immediately -2. apply local rows -3. request leader `ensureRemoteSubset(...)` (online path) -4. leader syncs/writes/broadcasts commits -5. tabs refresh from SQLite on broadcast - -#### When `sync` Is Absent - -1. query local SQLite immediately -2. apply local rows -3. no remote ensure call -4. tab refresh remains local/broadcast-driven only - -### C) Hydrate Barrier (Both Modes) - -Problem: updates can arrive during local hydrate. - -Wrapper state per collection: - -- `isHydrating: boolean` -- `queuedTx: PersistedTx[]` -- `applyMutex` serializing write/apply - -Scope: - -- hydrate barrier is collection-scoped (not per-subset) because transactions can affect any active subset in that collection. - -Algorithm: - -1. `loadSubset` sets `isHydrating = true` -2. query cached rows from SQLite -3. apply local rows via `write({ type: 'update', ... })` -4. set `isHydrating = false` -5. flush queued tx in order - -### D) Duplicate-Key Safety (Sync-Present Path) - -To avoid `DuplicateKeySyncError` when cache overlaps remote snapshot: - -- local hydrate uses `update` only (never `insert`) -- remote `insert` payloads are normalized to `update` before DB `write` - -### E) Sync-Absent Mutation Persistence - -When `sync` is absent, mutation changes persist automatically, aligned with `localStorageCollectionOptions` behavior. - -`PersistedMutationEnvelope` shape: - -```ts -type PersistedMutationEnvelope = - | { - mutationId: string - type: 'insert' - key: string | number - value: Record - } - | { - mutationId: string - type: 'update' - key: string | number - value: Record - } - | { - mutationId: string - type: 'delete' - key: string | number - value: Record - } -``` - -- wrap `onInsert`, `onUpdate`, `onDelete` to persist SQLite changes automatically -- confirm optimistic operations through sync-confirm path after persistence -- for manual transactions, expose and use `utils.acceptMutations(transaction)` -- in browser multi-tab, non-leader tabs send local mutations to leader via `applyLocalMutations` -- leader must reply with `applyLocalMutations:res` so follower can confirm or rollback optimistic entries - -### F) Offline/Online Behavior - -- when `sync` is present: - - offline `loadSubset` resolves locally - - queued `ensureRemoteSubset` replays when online -- when `sync` is absent: - - unaffected by network state - -### G) Seq Gap Recovery - -On missing `(term, seq)`: - -1. use follower-tracked `lastSeenRowVersion` (from last applied commit or pull response) and request `pullSince(lastSeenRowVersion)` from current leader -2. if pull succeeds and `requiresFullReload` is true, mark collection subsets dirty -3. if pull succeeds with `changedKeys`/`deletedKeys`, run targeted subset invalidation -4. reload affected subsets from local SQLite (or all active subsets when required) -5. if pull fails, mark view stale and truncate/reload affected in-memory view -6. re-request loaded subsets -7. re-run remote ensure only when `sync` is present - -`pullSince` implementation rule: - -- `changedKeys` are derived from `c_` rows where `row_version > fromRowVersion` -- `deletedKeys` are derived from tombstones `t_` where `row_version > fromRowVersion` -- this computes a delta to latest state (not a full linear event history) -- if either result set exceeds invalidation limits, set `requiresFullReload: true` - -## SQLite Storage + Index Plan - -### Schema (Per Collection) - -Single table per collection: - -- `key` stored as canonical encoded text key (`s:` or `n:`) to preserve `1` vs `'1'` distinction -- `key` TEXT PRIMARY KEY -- `value` JSON string in `TEXT` -- `row_version` INTEGER NOT NULL (monotonic change version stamped by leader; per-transaction watermark shared by all rows touched in one committed tx) -- tombstone table per collection tracks latest delete state per key with row versions (`t_`) -- tombstone `deleted_at` stores deletion timestamp for diagnostics/observability; catch-up logic uses `row_version` - -Key encoding helpers (required): - -```ts -function encodeStorageKey(key: string | number): string { - if (typeof key === 'number') { - if (!Number.isFinite(key)) { - throw new Error('Invalid numeric key: key must be finite') - } - if (Object.is(key, -0)) { - return 'n:-0' - } - return `n:${key}` - } - return `s:${key}` -} - -function decodeStorageKey(encoded: string): string | number { - if (encoded === 'n:-0') { - return -0 - } - return encoded.startsWith('n:') ? Number(encoded.slice(2)) : encoded.slice(2) -} -``` - -Metadata tables: - -- `persisted_index_registry(collection_id, signature, sql, state, last_built_at, last_used_at)` -- `applied_tx(collection_id, term, seq, applied_at)` -- `collection_version(collection_id, latest_row_version)` for catch-up cursor -- `leader_term(collection_id, term, leader_id, updated_at)` for durable term monotonicity -- `schema_version(collection_id, version)` for clear-on-version-change behavior -- `collection_reset_epoch(collection_id, epoch)` for coordinated clear/reload signaling -- `collection_registry(collection_id, table_name)` for safe identifier mapping - -Identifier safety requirement: - -- never interpolate raw `collectionId` into SQL identifiers -- map `collectionId` to safe physical table names using hashed names (for example `c_`) -- store mapping in `collection_registry` - -Reference DDL: - -```sql -CREATE TABLE IF NOT EXISTS c_ ( - key TEXT PRIMARY KEY NOT NULL, - value TEXT NOT NULL, - row_version INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS t_ ( - key TEXT PRIMARY KEY NOT NULL, - row_version INTEGER NOT NULL, - deleted_at INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS collection_registry ( - collection_id TEXT PRIMARY KEY NOT NULL, - table_name TEXT UNIQUE NOT NULL -); - -CREATE TABLE IF NOT EXISTS persisted_index_registry ( - collection_id TEXT NOT NULL, - signature TEXT NOT NULL, - sql TEXT NOT NULL, - state TEXT NOT NULL, - last_built_at INTEGER, - last_used_at INTEGER, - PRIMARY KEY (collection_id, signature) -); - -CREATE TABLE IF NOT EXISTS applied_tx ( - collection_id TEXT NOT NULL, - term INTEGER NOT NULL, - seq INTEGER NOT NULL, - applied_at INTEGER NOT NULL, - PRIMARY KEY (collection_id, term, seq) -); - -CREATE TABLE IF NOT EXISTS collection_version ( - collection_id TEXT PRIMARY KEY NOT NULL, - latest_row_version INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS leader_term ( - collection_id TEXT PRIMARY KEY NOT NULL, - term INTEGER NOT NULL, - leader_id TEXT NOT NULL, - updated_at INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS schema_version ( - collection_id TEXT PRIMARY KEY NOT NULL, - version INTEGER NOT NULL -); - -CREATE TABLE IF NOT EXISTS collection_reset_epoch ( - collection_id TEXT PRIMARY KEY NOT NULL, - epoch INTEGER NOT NULL -); -``` - -### Persisted Index Signatures - -Main-thread `indexId` is not stable across tabs. Use stable signature: - -- `signature = hash(stableStringify({ expression, compareOptions, direction, nulls, stringSort, locale, ... }))` - -### Expression Indexes - -Indexes are created on demand from mirrored index specs, for example: - -- `CREATE INDEX IF NOT EXISTS idx__ ON c_(json_extract(value,'$.path'))` -- compound indexes use multiple expressions -- date/datetime predicates can use expression indexes over canonical extracted values (for example `datetime(json_extract(value,'$.dueAt'))`) - -`ensureIndex(...)` compiles index IR/spec to canonical SQL expression text for reliable planner usage. - -Reference query templates: - -```sql --- Increment and read collection row version (inside txn) -INSERT INTO collection_version(collection_id, latest_row_version) -VALUES (?, 1) -ON CONFLICT(collection_id) DO UPDATE SET latest_row_version = latest_row_version + 1; - -SELECT latest_row_version FROM collection_version WHERE collection_id = ?; - --- Upsert row -INSERT INTO c_(key, value, row_version) -VALUES (?, ?, ?) -ON CONFLICT(key) DO UPDATE SET - value = excluded.value, - row_version = excluded.row_version; - --- Clear tombstone on re-insert/update -DELETE FROM t_ WHERE key = ?; - --- Delete row -DELETE FROM c_ WHERE key = ?; - --- Upsert tombstone for delete tracking -INSERT INTO t_(key, row_version, deleted_at) -VALUES (?, ?, ?) -ON CONFLICT(key) DO UPDATE SET - row_version = excluded.row_version, - deleted_at = excluded.deleted_at; - --- Mark tx applied -INSERT OR IGNORE INTO applied_tx(collection_id, term, seq, applied_at) -VALUES (?, ?, ?, ?); -``` - -### Metadata Retention / Cleanup - -To prevent unbounded metadata growth: - -- `applied_tx`: keep sliding window per collection by seq/time. -- tombstones (`t_`) are per-key latest-delete state and are not version-pruned. -- tombstones are removed when the key is re-inserted/updated (same transaction as row upsert). - -Defaults: - -- `APPLIED_TX_SEQ_RETENTION = 10000` -- `APPLIED_TX_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000` - -### Partial Updates and Index Maintenance - -Updates may be partial (`rowUpdateMode: 'partial'` default). - -Adapters must: - -- read current row -- merge partial update before persist -- compute index old/new values from pre-merge and post-merge rows - -If `rowUpdateMode: 'full'` is configured, adapters can skip read/merge and write replacement rows. - -### Schema Version Policy (No Migrations) - -This plan does not implement structural schema migrations. - -Collection options include `persistence.schemaVersion: number`. - -Behavior on version mismatch: - -- sync-present path: - - default action: coordinated clear persisted state for that collection (rows + indexes + metadata), then rehydrate from remote sync -- sync-absent path: - - default action: throw `PersistenceSchemaVersionMismatchError` - - optional opt-in: allow clear and restart with empty local state - -Coordinated clear sequence (sync-present path): - -1. acquire `tsdb:writer:` - -- note: this serializes writes across the DB file, so schema reset briefly blocks writes for all collections - -2. begin SQLite transaction -3. clear collection rows/tombstones/index metadata -4. reset collection cursor in `collection_version` (delete row or set `latest_row_version = 0`) -5. update `schema_version` -6. increment `reset_epoch` -7. commit transaction -8. broadcast `collection:reset(schemaVersion, resetEpoch)` - -Follower behavior on `collection:reset`: - -- reset tracked `lastSeenRowVersion` for that collection to `0` -- drop in-memory rows for that collection -- clear active subset cache -- re-request loaded subsets - -Guidance for sync-absent collections: - -- prefer additive/backward-compatible schema changes with value-level fallbacks -- because values are JSON payloads, additive evolution is expected to be the common safe path - -### `loadSubset` Query Planning - -v1 pushdown support: - -- `eq`, `in`, `gt/gte/lt/lte`, `like` -- logical composition with both `AND` and `OR` (push down when each branch is pushdown-safe; otherwise fallback) -- `IN` is required in v1 because query-engine incremental join loading depends on it - - handle empty, single, and large `IN` lists correctly - - chunk very large lists to respect SQLite parameter limits when needed -- date/datetime comparisons on JSON fields serialized as canonical ISO-8601 UTC strings - - planner may use canonical string comparison where valid - - planner may compile to SQLite date functions (`datetime`, `strftime`) when normalization is required -- index-aligned `orderBy` - -Unsupported predicate fragments load a superset; query engine filters remainder. - -## Adapter Interfaces - -`PersistedTx` (used by `applyCommittedTx`) shape: - -```ts -type PersistedTx = { - txId: string - term: number - seq: number - rowVersion: number - mutations: Array< - | { type: 'insert'; key: TKey; value: T } - | { type: 'update'; key: TKey; value: T } - | { type: 'delete'; key: TKey; value: T } - > -} -``` - -### Persistence Adapter - -```ts -export interface PersistenceAdapter< - T extends object, - TKey extends string | number, -> { - // Read path (all tabs / all runtimes) - loadSubset( - collectionId: string, - options: LoadSubsetOptions, - ctx?: { requiredIndexSignatures?: string[] }, - ): Promise> - - // Write path (leader for this collection, or DO instance) - applyCommittedTx( - collectionId: string, - tx: PersistedTx, - ): Promise - - // Index management - ensureIndex( - collectionId: string, - signature: string, - spec: PersistedIndexSpec, - ): Promise - - // Optional: some adapters handle index cleanup lazily or via collection reset flows. - markIndexRemoved?(collectionId: string, signature: string): Promise -} -``` - -`PersistedIndexSpec` must be serializable and derived from index lifecycle events. - -### SQLite Driver Interface - -```ts -export interface SQLiteDriver { - exec(sql: string): Promise - query(sql: string, params?: readonly unknown[]): Promise - run(sql: string, params?: readonly unknown[]): Promise - transaction(fn: () => Promise): Promise -} -``` - -Driver adaptation note: - -- sync drivers (for example `better-sqlite3`) are adapted via thin `Promise.resolve(...)` wrappers. -- this keeps one core async adapter path across runtimes; sync overhead is accepted for API consistency in v1. - -## Package Plan - -1. `@tanstack/db-sqlite-persistence-core` -2. `@tanstack/browser-db-sqlite-persistence` -3. `@tanstack/node-db-sqlite-persistence` -4. `@tanstack/react-native-db-sqlite-persistence` (RN + Expo) -5. `@tanstack/electron-db-sqlite-persistence` -6. `@tanstack/cloudflare-durable-objects-db-sqlite-persistence` - -SQLite core package contents (combined): - -- `persistedCollectionOptions(...)` with inferred behavior based on presence of `sync` -- stable signature/hash utilities -- coordinator protocol types -- sync-absent mutation persistence helpers (`acceptMutations` flow) -- shared `SQLiteCoreAdapter(driver)` -- SQL expression compiler for index/query pushdown -- index registry management -- in-memory adapter + in-memory coordinator for unit tests - -Future packaging note: - -- if a non-SQLite backend is introduced later, split backend-agnostic surface out of this package at that time. - -Cloudflare DO package contents: - -- adapter binding to DO SQLite-backed storage APIs (for code executing inside DO) -- DO-friendly wrapper that defaults to `SingleProcessCoordinator` and omits browser election paths -- optional helper for mapping `collectionId` to table naming and schema-version handling - -Electron package contents: - -- thin wrapper over node sqlite package semantics -- IPC transport between renderer calls and main-process persistence execution -- does not duplicate node adapter/core logic; reuses node package implementation behind the IPC boundary - -## Implementation Phases - -### Phase 0: API + Runtime Feasibility - -1. Finalize `persistedCollectionOptions` inference API (`sync` present vs absent). -2. Confirm Cloudflare DO adapter surface and runtime constraints. -3. Finalize coordinator protocol (`rpc`, `tx`, `leader`, `(term, seq)`), with browser multi-tab parts phase-gated. -4. Finalize key encoding and identifier hashing rules. -5. Finalize package boundaries around SQLite-only core. -6. Define staged rollout gates (single-process first, browser multi-tab last). - -Deliverable: finalized API, package plan, capability matrix, and protocol spec. - -### Phase 1: Add Index Lifecycle Events to `@tanstack/db` - -1. Extend collection events with: - -- `index:added` -- `index:removed` - -2. Update `CollectionIndexesManager` to emit stable index metadata. -3. Add index removal API (`removeIndex(...)`) and emit `index:removed`. - -Deliverable: index lifecycle observable and stable across tabs. - -### Phase 2: Core Persisted Wrapper (Inferred Behavior) - -1. Implement `sync`-present wrapper over `sync.sync(params)`. -2. Implement sync-absent behavior without required wrapped sync. -3. Add hydrate barrier + queued tx behavior. -4. Normalize remote inserts to updates (when `sync` is present). -5. Implement automatic mutation persistence wrappers (when `sync` is absent). -6. Add `utils.acceptMutations(transaction)` support for manual transactions. -7. Wire coordinator RPC (`ensureRemoteSubset`, `ensurePersistedIndex`, `applyLocalMutations`). -8. Implement seq-gap recovery path. -9. Implement inference edge-case validation (`InvalidSyncConfigError`). - -Deliverable: core wrapper passes in-memory tests for both inferred paths. - -### Phase 3: SQLite Core Adapter - -1. Implement `applyCommittedTx`, `ensureIndex`, `loadSubset` SQL pushdown (`eq`, `in`, range, `like`, `AND`, `OR`, date/datetime predicates). -2. Implement partial update merge semantics. -3. Implement `leader_term`, `schema_version`, and identifier registry tables. -4. Implement schema-version mismatch behavior (clear vs error by path). -5. Implement applied_tx pruning jobs. -6. Add adapter contract tests in node sqlite runtime. - -Deliverable: SQLite adapter contract passing in node. - -### Phase 4: Node + Electron - -1. Implement node wrapper over `better-sqlite3`. -2. Implement electron main-process ownership + renderer IPC over `better-sqlite3`. -3. Run shared contract/integration suites. - -Deliverable: node/electron parity with core semantics. - -### Phase 5: React Native + Expo - -1. Implement shared mobile package over `op-sqlite`. -2. Provide RN/Expo-specific entrypoints only where host bootstrapping differs. -3. Validate mobile lifecycle and transaction semantics on both RN and Expo. - -Deliverable: unified RN/Expo mobile package passes contract tests. - -### Phase 6: Cloudflare Durable Objects - -1. Implement DO SQLite adapter package. -2. Provide helper for per-object schema initialization and schema-version checks. -3. Support both inferred wrapper paths inside DO runtime (`sync` present or absent), with in-process execution only. -4. Add integration tests using Workers/DO test harness. - -Deliverable: DB and persistence running in-process in Durable Objects with SQLite-backed storage. - -### Phase 7: Browser Single-Tab (`wa-sqlite`, No Election) - -1. Implement OPFS driver (`OPFSCoopSyncVFS`). -2. Implement browser adapter path with `SingleProcessCoordinator` semantics for single-tab usage. -3. Validate offline-first read/write path without BroadcastChannel/Web Locks dependencies. -4. Add browser single-tab integration tests. - -Deliverable: stable browser persistence for single-tab sessions. - -### Phase 8: Browser Multi-Tab Coordinator (Final Phase) - -1. Implement Web Locks + Visibility + BroadcastChannel coordinator. -2. Implement per-collection leader/follower behavior for both inferred paths. -3. Implement follower local mutation RPC to leader with ack/rollback semantics. -4. Implement DB write serialization lock (`tsdb:writer:`) and busy retry policy. -5. Add Playwright multi-tab tests. - -Deliverable: stable browser local-first multi-tab behavior when `sync` is present or absent. - -## Testing Strategy - -### Unit Tests (Core Wrapper) - -1. Index lifecycle: - -- `createIndex` emits `index:added` with stable signature -- `removeIndex` emits `index:removed` - -2. Local hydrate safety: - -- hydrate uses `update` only -- remote inserts normalized to update - -3. Hydrate barrier: - -- tx during hydrate is queued then flushed in order - -4. Sync-present offline/online queue: - -- offline local resolve -- queued remote ensures replay online - -5. Sync-absent mutation persistence: - -- insert/update/delete auto-persist -- manual transaction `acceptMutations` persists and confirms - -6. Seq-gap recovery: - -- missing seq triggers `pullSince`; fallback to stale/reload/re-ensure - -7. Inference validation: - -- invalid `sync` shape throws `InvalidSyncConfigError` - -8. Key encoding: - -- `1` and `'1'` persist distinctly and round-trip correctly - -9. Local mutation acking: - -- `applyLocalMutations:res.acceptedMutationIds` maps to submitted `mutationId`s - -### Adapter Contract Tests - -Run same suite against: - -- in-memory adapter -- browser `wa-sqlite` adapter -- node sqlite adapter -- electron wrapper (`better-sqlite3`) and unified mobile wrapper (`op-sqlite`) where harness supports -- cloudflare durable object sqlite adapter - -Covers: - -- `ensureIndex` + `loadSubset` index-path usage -- pushdown parity for `AND`/`OR`, `IN` (including empty/single/large lists), `LIKE`, and date/datetime comparisons -- `applyCommittedTx` row/index correctness -- idempotency and replay handling on `(term, seq)` -- monotonic `row_version` behavior and `pullSince` cursor correctness -- `pullSince` discriminated response shape correctness (`requiresFullReload=true` returns no key lists) -- tombstone-based delete catch-up correctness -- per-key tombstone state semantics (latest delete only) correctness -- applied_tx pruning does not break row-version catch-up correctness -- schema reset clears `collection_version` cursor and follower resets tracked `lastSeenRowVersion` to `0` -- sync-absent auto-persist semantics -- schema-version mismatch behavior (clear vs error by path) -- identifier safety mapping (unsafe collectionId still produces safe physical table names) - -### Browser Single-Tab Integration Tests (Phase 7) - -1. OPFS-backed init and reopen behavior. -2. Local-first `loadSubset` and mutation persistence correctness. -3. Sync-present offline local path and reconnect replay without leader election. -4. No dependency on BroadcastChannel/Web Locks for correctness in single-tab mode. - -### Browser Multi-Tab Integration Tests (Playwright, Phase 8) - -1. Two tabs with different collection leaders: - -- tab A leads collection X -- tab B leads collection Y - -2. Local reads do not round-trip through leader. -3. Sync-absent follower mutation is serialized via leader and persisted. -4. Auto-index creates persisted index and speeds repeated lookups. -5. Leader handoff on visibility change / tab close. -6. Sync-present offline local-first and reconnect catch-up. -7. Cross-collection leaders contend for DB writes without correctness loss (`tsdb:writer` lock test). -8. Commit-broadcast gap recovers via heartbeat `latestSeq` + `pullSince`. - -### Cloudflare Durable Objects Integration Tests - -1. Schema init + schema-version mismatch behavior per DO instance. -2. `loadSubset` + index pushdown correctness. -3. Sync-absent mutation persistence correctness in DO runtime. -4. Restart/rehydration behavior with persisted SQLite state. -5. No browser coordinator path in DO (`SingleProcessCoordinator` only). - -### Corruption Recovery Tests - -1. Corrupted sqlite open path triggers integrity failure handling. -2. Sync-present path clears persistence and rehydrates from remote. -3. Sync-absent path raises `PersistenceCorruptionError` unless explicit reset is requested. - -## Agent Guard Rails (Implementation + Testing) - -These are mandatory rules for agents implementing this plan. - -1. No implementation step is complete without tests in the same change set. - -- bug fixes must include a regression test -- new behavior must include positive and negative-path coverage - -2. Do not progress to the next phase until the current phase exit criteria and tests are green. - -- phase completion requires local pass and CI pass for the phase test scope - -3. Operator support must be proven on both paths: - -- pushdown path (SQL execution) -- fallback path (superset load + in-memory filtering) -- applies to `IN`, `AND`, `OR`, `LIKE`, and date/datetime predicates - -4. `IN` is a v1 hard requirement because incremental join loading depends on it. - -- test `IN` with empty lists, single value lists, and large lists -- test parameter chunking behavior for large lists against SQLite parameter limits - -5. Date/datetime support requires canonical serialization and deterministic tests. - -- JSON date values must use canonical ISO-8601 UTC strings -- include timezone/offset boundary tests -- test both lexical comparison mode and SQLite date-function mode when normalization is required - -6. Any change to ordering, leadership, mutation routing, or replay must include failure-path tests. - -- dropped broadcast handling -- heartbeat timeout and takeover -- leader stepdown/lock loss -- retry/idempotency behavior for mutation RPC - -7. Cross-runtime parity is required for shared behavior. - -- if behavior is intended to be shared, contract tests must pass across supported adapters -- runtime-specific deviations must be documented and explicitly tested - -8. Schema safety and recovery semantics are non-optional. - -- sync-present mismatch path must prove clear + rehydrate behavior -- sync-absent mismatch path must prove explicit error behavior (unless opt-in reset path is enabled) - -9. Never loosen correctness for optimization without equivalence coverage. - -- any pushdown/performance optimization must include query-equivalence tests against fallback behavior - -## Failure Modes and Handling - -1. OPFS unavailable in browser: - -- when `sync` is absent: throw `PersistenceUnavailableError` at initialization -- when `sync` is present: default to disabling persistence for session and run remote sync path only -- expose capability/error to application so users can decide whether to hard-fail UI - -2. Invalid inferred sync config: - -- if `sync` key exists but is not a valid `SyncConfig`, throw `InvalidSyncConfigError` - -3. No current leader for a collection in browser: - -- local `loadSubset` still reads SQLite -- queue/timeout remote ensure or local-mutation RPC until election completes - -4. Leader crash or tab close: - -- Web Lock releases -- follower acquires leadership and resumes responsibilities - -5. Broadcast gap: - -- follower triggers collection recovery -- attempt `pullSince` catch-up first -- fallback to reload local subset and re-ensure when `sync` is present - -6. Durable Object instance restart: - -- in-memory state is rebuilt from persistent SQLite storage -- schema-version checks and clear/error policy run on initialization path - -7. Coordinated schema reset while tabs are active: - -- leader broadcasts `collection:reset` -- followers drop in-memory cache for that collection and reload subsets - -8. SQLite corruption / integrity failure: - -- detect on open/init (initial query failure or optional integrity check path) -- sync-present: clear persisted state and rehydrate from remote -- sync-absent: throw `PersistenceCorruptionError` and require explicit user reset -- expose `resetPersistence({ collectionId })` utility for app-level recovery - -## Risks and Mitigations - -1. Risk: browser differences in OPFS/Web Locks/visibility behavior. - Mitigation: capability matrix + conservative fallback behavior. - -2. Risk: cross-collection write contention causes `SQLITE_BUSY`. - Mitigation: serialize physical writes via `tsdb:writer:` + bounded retry/backoff. - -3. Risk: WASM startup overhead. - Mitigation: lazy init + connection reuse per tab. - -4. Risk: SQL pushdown mismatch vs query-engine semantics. - Mitigation: equivalence tests + fallback filtering for unsupported fragments. - -5. Risk: driver divergence across runtimes. - Mitigation: strict adapter contract suite and minimal driver interface. - -6. Risk: sync-absent follower mutation queuing during leader churn. - Mitigation: durable RPC retry/backoff and idempotent mutation envelopes. - -## Implementation Readiness Checklist - -1. API: - -- overload signatures compile and infer correctly for `sync` present/absent -- runtime branch matches compile-time discrimination (`options.sync != null`) - -2. Core semantics: - -- hydrate barrier + queued tx ordering implemented -- insert-to-update normalization implemented for sync-present path -- sync-absent auto-persist wrappers implemented - -3. Coordinator: - -- lock acquisition, heartbeat, timeout, and stepdown logic implemented -- protocol envelope and RPC correlation/idempotency implemented -- heartbeat carries `latestSeq` and followers perform `pullSince` catch-up - -4. SQLite adapter: - -- DDL initialization and schema-version checks implemented -- key encoding/decoding preserves string vs number identity -- identifier hashing/mapping prevents unsafe SQL identifiers -- pushdown planner + fallback filtering implemented -- applied tx idempotency table enforced -- tombstone per-key delete-state tracking implemented -- durable `leader_term` monotonicity and schema-version policy implemented -- corruption detection and reset utility implemented - -5. Runtime adapters: - -- browser OPFS adapter passes single-tab integration tests (Phase 7) -- browser multi-tab coordinator/election tests pass (Phase 8) -- node/electron/mobile (rn+expo) adapters passing contract suite -- cloudflare DO adapter passing integration suite - -6. Test coverage: - -- unit + contract + browser integration + DO integration green in CI - -## Open Decisions - -1. Electron renderer read policy: direct read vs strict main-process proxy. -2. Whether `ensureRemoteSubset` is always background or optionally awaited. - -Blocking-before-implementation: - -- none (runtime driver choices and package shape are fixed in this plan: Node/Electron `better-sqlite3`, `@tanstack/react-native-db-sqlite-persistence` for RN/Expo via `op-sqlite`) - -Blocking-before-browser phases: - -- Phase 7: verify OPFS + `FileSystemSyncAccessHandle` in target evergreen browsers. -- Phase 8: verify Web Locks in the same target browsers. - -Non-blocking (can be phased after initial implementation): - -- electron renderer read policy refinements -- awaited vs background `ensureRemoteSubset` behavior toggle - -## Notes and Implications - -1. First-time index build has unavoidable cost; subsequent indexed reads are fast. -2. Local performance depends on index coverage; use `autoIndex` or explicit `createIndex(...)` on hot paths. -3. Reads never round-trip through leader; leader handles write serialization and sync responsibilities. -4. Sync-absent usage provides a persistence-first option without requiring remote sync wiring. -5. `loadSubset` currently returns materialized arrays; cursor/streaming read API can be explored after v1. diff --git a/persistance-plan/README.md b/persistance-plan/README.md deleted file mode 100644 index 142792285..000000000 --- a/persistance-plan/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# Persistence Plan - Phase Breakdown - -This folder contains the detailed execution plan for the SQLite-only persisted collection architecture. - -## Phase Files - -1. [Phase 0 - API + Runtime Feasibility](./phase-0-api-runtime-feasibility.md) -2. [Phase 1 - Index Lifecycle Events in `@tanstack/db`](./phase-1-index-lifecycle-events.md) -3. [Phase 2 - Core Persisted Wrapper](./phase-2-core-persisted-wrapper.md) -4. [Phase 3 - SQLite Core Adapter](./phase-3-sqlite-core-adapter.md) -5. [Phase 4 - Node + Electron](./phase-4-node-electron.md) -6. [Phase 5 - React Native + Expo](./phase-5-react-native-expo.md) -7. [Phase 6 - Cloudflare Durable Objects](./phase-6-cloudflare-durable-objects.md) -8. [Phase 7 - Browser Single-Tab (OPFS)](./phase-7-browser-single-tab.md) -9. [Phase 8 - Browser Multi-Tab Coordinator](./phase-8-browser-multi-tab.md) - -## Delivery Principles - -- SQLite-only persistence architecture across all runtimes. -- Collection-scoped leadership with DB-level write serialization. -- Local-first `loadSubset` behavior in both sync-present and sync-absent modes. -- One shared contract test suite across adapters. -- Browser multi-tab is intentionally the final rollout gate. - -## Suggested Milestone Gates - -- **Gate A (Core Semantics):** Phases 0-2 complete. -- **Gate B (Storage Correctness):** Phase 3 complete with contract tests green. -- **Gate C (Runtime Parity):** Phases 4-6 complete. -- **Gate D (Browser Readiness):** Phases 7-8 complete with integration tests. - -## Agent Guard Rails - -Use these rules when implementing any phase: - -1. No work is complete without tests in the same change. -2. Do not advance phases unless current-phase exit criteria and CI are green. -3. For query operators (`IN`, `AND`, `OR`, `LIKE`, date/datetime), always test: - - SQL pushdown path - - fallback filtering path -4. `IN` is mandatory for v1 incremental join loading: - - cover empty/single/large lists and SQLite parameter chunking -5. Date/datetime predicates require: - - canonical ISO-8601 UTC serialization - - timezone/offset boundary tests - - coverage for both lexical compare and SQLite date-function normalization paths -6. Any leadership/replay/mutation routing change must include failure-path tests. -7. Shared semantics must pass cross-runtime contract tests. -8. Schema mismatch and corruption behavior must be explicitly tested by mode. diff --git a/persistance-plan/phase-0-api-runtime-feasibility.md b/persistance-plan/phase-0-api-runtime-feasibility.md deleted file mode 100644 index 6e5ed96a7..000000000 --- a/persistance-plan/phase-0-api-runtime-feasibility.md +++ /dev/null @@ -1,124 +0,0 @@ -# Phase 0 - API + Runtime Feasibility - -## Objective - -Lock down the API surface, protocol shape, packaging boundaries, and runtime capability assumptions before implementation begins. - -## Why This Phase Exists - -The later phases depend on a stable contract for: - -- `persistedCollectionOptions(...)` mode inference -- coordinator protocol and required/optional methods -- runtime feature gates (browser, node, mobile, electron, DO) -- SQL key/identifier safety rules - -A weak Phase 0 creates churn in every downstream package. - -## Inputs - -- Root design doc (`/PERSISTNCE-PLAN-SQLITE-ONLY.md`) -- Current `@tanstack/db` collection API and sync API -- Existing runtime adapter patterns in monorepo - -## Scope - -1. Finalize TypeScript overloads for sync-present vs sync-absent mode. -2. Finalize runtime validation rules for invalid `sync` shape. -3. Finalize coordinator protocol envelope, payload types, and idempotency keys. -4. Finalize key encoding (`s:` / `n:` with `-0` handling) and safe identifier mapping strategy. -5. Freeze package boundaries and ownership. -6. Define staged rollout gates and kill-switch/fallback strategy. -7. Freeze the v1 pushdown operator matrix for `loadSubset` (`IN`, `AND`, `OR`, `LIKE`, and date/datetime predicates). - -## Out of Scope - -- Implementing storage adapter logic -- Implementing browser election -- Implementing runtime-specific packages - -## Detailed Workstreams - -### Workstream A - API and Type Inference - -- [ ] Draft final overload signatures for `persistedCollectionOptions`. -- [ ] Define `PersistedCollectionUtils` and where it appears in inferred return type. -- [ ] Document compile-time and runtime discrimination rules. -- [ ] Specify all runtime validation errors: - - `InvalidSyncConfigError` - - `PersistenceUnavailableError` - - `PersistenceSchemaVersionMismatchError` - -**Acceptance criteria** - -- Two minimal compile tests prove inference for both modes. -- Invalid `sync` shapes are unambiguous and deterministic. - -### Workstream B - Coordinator Contract and Protocol - -- [ ] Freeze required coordinator methods shared by all runtimes. -- [ ] Identify browser-only optional methods (`pullSince`, mutation RPC helpers). -- [ ] Finalize message envelope versioning (`v: 1`) and forward-compat guidance. -- [ ] Define timeout/retry semantics and defaults. -- [ ] Define idempotency correlation keys and persistence requirements. - -**Acceptance criteria** - -- Protocol type definitions reviewed and approved. -- Browser and single-process coordinators can both satisfy the interface. - -### Workstream C - Storage Safety Rules - -- [ ] Finalize canonical key encoding and decode edge cases. -- [ ] Finalize collectionId -> hashed table name mapping contract. -- [ ] Confirm no SQL identifier interpolation with raw user values. -- [ ] Finalize canonical JSON date/datetime serialization contract (ISO-8601 UTC string format). - -**Acceptance criteria** - -- Safety invariants are codified in testable helper contracts. - -### Workstream D - Packaging and Rollout - -- [ ] Confirm package list and scope ownership. -- [ ] Decide what lives in sqlite core vs runtime wrappers. -- [ ] Define phase gates and success metrics. -- [ ] Define fallback behavior by runtime when persistence capability is missing. -- [ ] Freeze pushdown behavior for v1 operators, including `IN` as mandatory for incremental join loading. - -**Acceptance criteria** - -- Package ownership is explicit (no overlap ambiguity). -- Rollout order is accepted by maintainers. -- v1 query-planning operator commitments are explicit and testable. - -## Deliverables - -1. Finalized API signature document (types + runtime rules). -2. Coordinator protocol spec (envelope, payloads, retries, idempotency). -3. Capability matrix by runtime. -4. Package boundary matrix (core vs wrappers). -5. Query-planning operator matrix and date serialization contract. -6. Phase gate checklist used by later phases. - -## Testing Plan - -- Type-level tests for overload inference. -- Runtime validation unit tests for invalid sync config. -- Protocol shape tests (serialization and discriminated unions). - -## Risks and Mitigations - -- **Risk:** ambiguous mode detection with optional `sync`. - - **Mitigation:** strict runtime guard: `sync` key present but invalid throws. -- **Risk:** coordinator contract too browser-specific. - - **Mitigation:** optionalize browser RPC methods and validate per runtime. -- **Risk:** package boundary drift. - - **Mitigation:** explicit ownership matrix checked in design review. - -## Exit Criteria - -- API and protocol types are frozen for Phases 1-3. -- Runtime capability assumptions are documented and approved. -- Package boundaries accepted by maintainers. -- No blocking unresolved decisions remain for implementation start. diff --git a/persistance-plan/phase-1-index-lifecycle-events.md b/persistance-plan/phase-1-index-lifecycle-events.md deleted file mode 100644 index 45552d6b0..000000000 --- a/persistance-plan/phase-1-index-lifecycle-events.md +++ /dev/null @@ -1,88 +0,0 @@ -# Phase 1 - Add Index Lifecycle Events to `@tanstack/db` - -## Objective - -Expose index lifecycle events in `@tanstack/db` so persistence can mirror index create/remove behavior consistently across tabs and runtimes. - -## Dependencies - -- Phase 0 protocol and signature finalization complete. -- Agreement on stable index signature strategy. - -## Scope - -1. Emit `index:added` and `index:removed` events. -2. Add index removal API (`removeIndex(...)`) to collection/index manager. -3. Ensure emitted payloads contain stable, serializable metadata. - -## Non-Goals - -- Building persisted SQLite indexes (Phase 3+) -- Browser tab synchronization behavior - -## Detailed Workstreams - -### Workstream A - Event Surface Design - -- [ ] Define event payload types for `index:added` and `index:removed`. -- [ ] Ensure payload includes fields needed to generate stable signature. -- [ ] Add versioning guidance if payload schema evolves. - -**Acceptance criteria** - -- Event payloads can be serialized and replayed. -- Payload includes enough data to build deterministic signature hash. - -### Workstream B - Index Manager Integration - -- [ ] Update `CollectionIndexesManager` to emit `index:added` after successful registration. -- [ ] Implement `removeIndex(...)` and emit `index:removed` on successful removal. -- [ ] Ensure idempotent behavior for duplicate remove calls. - -**Acceptance criteria** - -- Add/remove events fire exactly once per state transition. -- Removing unknown index is deterministic (documented behavior). - -### Workstream C - Backward Compatibility - -- [ ] Verify existing index consumers are not broken by new API. -- [ ] Add compatibility notes in changelog/docs. -- [ ] Confirm no behavior changes to query semantics. - -**Acceptance criteria** - -- Existing tests pass without relying on new events. -- New APIs are additive and non-breaking. - -## Deliverables - -1. Event types and public API changes in `@tanstack/db`. -2. `removeIndex(...)` implementation with tests. -3. Updated docs/examples for index lifecycle events. - -## Test Plan - -### Unit Tests - -- `createIndex` emits `index:added` with stable metadata. -- `removeIndex` emits `index:removed`. -- Duplicate remove handling is deterministic. - -### Integration Tests - -- Event ordering under rapid create/remove sequences. -- Auto-index interaction with lifecycle events. - -## Risks and Mitigations - -- **Risk:** unstable index metadata across tabs/processes. - - **Mitigation:** enforce canonical serialization before emitting. -- **Risk:** event emission before internal state update. - - **Mitigation:** emit only after successful state transition. - -## Exit Criteria - -- Lifecycle events are available and documented. -- `removeIndex(...)` is production-ready. -- Test coverage confirms stable metadata and event ordering. diff --git a/persistance-plan/phase-2-core-persisted-wrapper.md b/persistance-plan/phase-2-core-persisted-wrapper.md deleted file mode 100644 index 9808f54ae..000000000 --- a/persistance-plan/phase-2-core-persisted-wrapper.md +++ /dev/null @@ -1,130 +0,0 @@ -# Phase 2 - Core Persisted Wrapper (Inferred Behavior) - -## Objective - -Implement `persistedCollectionOptions(...)` behavior for both runtime-inferred modes: - -- sync-present: persistence augments remote sync flow -- sync-absent: persistence is local source of truth with automatic mutation persistence - -## Dependencies - -- Phase 0 API/protocol finalized -- Phase 1 index lifecycle events available - -## Scope - -1. Implement inferred mode branching with runtime validation. -2. Implement hydrate barrier and ordered tx queueing. -3. Implement sync-present remote insert normalization (`insert` -> `update`). -4. Implement sync-absent mutation persistence wrappers. -5. Implement `utils.acceptMutations(transaction)` path. -6. Wire coordinator RPC stubs and fallbacks. -7. Implement seq-gap detection and recovery orchestration. - -## Non-Goals - -- SQLite SQL pushdown implementation (Phase 3) -- Browser leader election internals (Phase 8) - -## Detailed Workstreams - -### Workstream A - Wrapper Initialization and Validation - -- [ ] Implement mode selection based on presence of `sync` key. -- [ ] Throw `InvalidSyncConfigError` for invalid `sync` shapes. -- [ ] Default coordinator to `SingleProcessCoordinator` when omitted. -- [ ] Validate coordinator capabilities based on runtime mode. -- [ ] Bootstrap persisted index mirror from `collection.getIndexMetadata()` before listening to lifecycle events. - -**Acceptance criteria** - -- Runtime behavior matches compile-time discrimination. -- Validation errors are deterministic and tested. - -### Workstream B - Hydrate Barrier + Apply Queue - -- [ ] Add collection-scoped hydrate state (`isHydrating`, queued tx list). -- [ ] Ensure tx events received during hydrate are queued. -- [ ] Flush queued tx in strict order after hydrate completion. -- [ ] Ensure apply mutex serializes write/apply paths. -- [ ] Start index lifecycle listeners only after bootstrap snapshot is applied to avoid missing pre-sync indexes. - -**Acceptance criteria** - -- No lost updates during hydrate. -- Ordered replay across queued tx. - -### Workstream C - Sync-Present Semantics - -- [ ] Wrap `sync.sync(params)` and preserve existing semantics. -- [ ] Normalize remote insert payloads to update before write. -- [ ] Trigger leader remote ensure flow through coordinator request path. -- [ ] Maintain offline-first local load behavior. - -**Acceptance criteria** - -- Duplicate-key conflicts do not occur on overlapping cache/snapshot data. -- Offline `loadSubset` resolves from local persistence. - -### Workstream D - Sync-Absent Semantics - -- [ ] Wrap `onInsert/onUpdate/onDelete` to persist first, then confirm optimistic state. -- [ ] Implement mutation envelope construction with stable `mutationId`. -- [ ] Implement follower->leader mutation RPC path (coordinator capability gated). -- [ ] Implement `acceptMutations(transaction)` utility for manual transaction support. - -**Acceptance criteria** - -- All mutation entry points persist consistently. -- Mutation acknowledgments map to submitted ids. - -### Workstream E - Recovery and Invalidation - -- [ ] Detect seq gaps from `(term, seq)` stream. -- [ ] Trigger `pullSince(lastSeenRowVersion)` when possible. -- [ ] Support fallback stale-mark + subset reload when pull fails. -- [ ] Implement targeted invalidation threshold behavior. - -**Acceptance criteria** - -- Gap recovery path is deterministic and tested. -- Full-reload fallback keeps state correct. - -## Deliverables - -1. Core persisted wrapper implementation. -2. Mode-specific mutation behavior and utilities. -3. Hydrate barrier and queueing logic. -4. Recovery orchestration implementation. - -## Test Plan - -### Core Unit Tests - -- Inference validation and mode branching. -- Hydrate barrier queue and flush ordering. -- Sync-present insert-to-update normalization. -- Sync-absent auto-persist for insert/update/delete. -- Manual transaction persistence via `acceptMutations`. -- Seq-gap detection and pull fallback behavior. - -### In-Memory Integration Tests - -- Multi-node coordinator simulation for tx ordering. -- Mutation ack and rollback behavior under retries. - -## Risks and Mitigations - -- **Risk:** hidden race between hydrate and incoming tx. - - **Mitigation:** collection-scoped mutex and explicit queue flushing. -- **Risk:** divergent behavior between wrapped hooks and manual transactions. - - **Mitigation:** shared mutation envelope pipeline used by both paths. -- **Risk:** coordinator optional methods missing at runtime. - - **Mitigation:** upfront capability validation with clear errors. - -## Exit Criteria - -- Both inferred modes pass in-memory suites. -- Recovery paths are validated for success and failure branches. -- Public utilities and error semantics documented. diff --git a/persistance-plan/phase-3-sqlite-core-adapter.md b/persistance-plan/phase-3-sqlite-core-adapter.md deleted file mode 100644 index bd8a51f12..000000000 --- a/persistance-plan/phase-3-sqlite-core-adapter.md +++ /dev/null @@ -1,145 +0,0 @@ -# Phase 3 - SQLite Core Adapter - -## Objective - -Deliver the runtime-agnostic SQLite adapter core that powers persisted collection reads/writes, index management, row-version catch-up, and schema policy handling. - -## Dependencies - -- Phase 2 wrapper behavior complete -- Stable index lifecycle metadata from Phase 1 - -## Scope - -1. Implement adapter operations: `loadSubset`, `applyCommittedTx`, `ensureIndex`. -2. Implement metadata schema initialization and evolution checks. -3. Implement partial update merge semantics. -4. Implement idempotency via `applied_tx`. -5. Implement row-version catch-up inputs and tombstone behavior. -6. Implement schema mismatch policies per mode. -7. Implement metadata pruning policies. - -## Non-Goals - -- Runtime-specific driver bindings beyond SQLiteDriver interface -- Browser/Web Locks behavior - -## Detailed Workstreams - -### Workstream A - DDL and Initialization - -- [ ] Create collection table and tombstone table mapping. -- [ ] Create metadata tables: - - `collection_registry` - - `persisted_index_registry` - - `applied_tx` - - `collection_version` - - `leader_term` - - `schema_version` - - `collection_reset_epoch` -- [ ] Add deterministic bootstrap order and migrationless checks. - -**Acceptance criteria** - -- Adapter can initialize clean DB from empty state. -- Re-initialization is idempotent. - -### Workstream B - Key and Identifier Safety - -- [ ] Implement `encodeStorageKey` / `decodeStorageKey` helpers. -- [ ] Handle `-0`, finite number checks, and string/number identity. -- [ ] Implement safe `collectionId` -> physical table name registry mapping. - -**Acceptance criteria** - -- No collisions between numeric and string keys. -- No unsafe identifier interpolation paths remain. - -### Workstream C - Transaction Apply Pipeline - -- [ ] Implement DB writer transaction logic for committed tx apply. -- [ ] Increment/read `collection_version.latest_row_version` per tx. -- [ ] Upsert rows and clear tombstones on upsert. -- [ ] Upsert tombstones on delete. -- [ ] Insert idempotency marker in `applied_tx`. - -**Acceptance criteria** - -- Replaying `(term, seq)` does not duplicate mutations. -- Row version is monotonic and shared across tx mutations. - -### Workstream D - Query Planning and Pushdown - -- [ ] Implement supported predicate pushdown (`eq`, `in`, `gt/gte/lt/lte`, `like`, `AND`, `OR`). -- [ ] Treat `IN` as required v1 functionality for incremental join loading paths. -- [ ] Handle `IN` edge cases (`[]`, single item, large lists with parameter batching). -- [ ] Implement date/datetime predicate compilation for JSON string fields. - - prefer canonical ISO-8601 UTC string comparisons when possible - - compile to `datetime(...)` / `strftime(...)` when normalization is required -- [ ] Implement `orderBy` alignment with index expressions. -- [ ] Implement fallback to superset + in-memory filter for unsupported fragments. - -**Acceptance criteria** - -- Query results match query-engine semantics. -- Incremental join loading paths using `IN` are fully pushdown-capable in v1. -- Unsupported expressions still return correct result after filtering. - -### Workstream E - Index Management - -- [ ] Compile persisted index spec to canonical SQL expression text. -- [ ] Implement `ensureIndex` with stable signature tracking. -- [ ] Track index state and usage timestamps in registry. -- [ ] Implement optional removal/mark-removed behavior. - -**Acceptance criteria** - -- Same logical index spec yields same signature and SQL. -- Repeated ensure calls are idempotent. - -### Workstream F - Schema Policy and Cleanup - -- [ ] Implement schema version checks per collection. -- [ ] Sync-present mismatch path: coordinated clear + reset epoch. -- [ ] Sync-absent mismatch path: throw (unless opt-in reset). -- [ ] Implement `applied_tx` pruning by seq/time policy. - -**Acceptance criteria** - -- Schema mismatch behavior follows design contract by mode. -- Pruning does not break pull/catch-up correctness. - -## Deliverables - -1. Shared SQLite core adapter implementation. -2. DDL bootstrap and metadata policy implementation. -3. Query pushdown + fallback logic. -4. Index registry and signature management. - -## Test Plan - -### Contract Test Matrix (Node runtime first) - -- `applyCommittedTx` correctness and idempotency. -- `loadSubset` correctness with/without index pushdown. -- Pushdown parity tests for `AND`/`OR`, `IN` (empty/single/large), `LIKE`, and date/datetime filters. -- Tombstone catch-up and key-level delta behavior. -- Schema version mismatch mode behavior. -- Key encoding round-trips and collision safety. -- Identifier safety for hostile collection ids. -- Pruning behavior and recovery correctness. - -## Risks and Mitigations - -- **Risk:** pushdown mismatch with query engine semantics. - - **Mitigation:** equivalence tests with randomized predicates. -- **Risk:** SQL busy/contention in concurrent runtimes. - - **Mitigation:** writer lock integration in upper coordinator layers plus retries. -- **Risk:** schema clear races with active reads. - - **Mitigation:** reset epoch and explicit collection reset handling. - -## Exit Criteria - -- Node-based adapter contract suite is green. -- Metadata/state invariants are validated under replay and recovery. -- Adapter is ready for runtime wrapper integration (Phases 4-8). diff --git a/persistance-plan/phase-4-node-electron.md b/persistance-plan/phase-4-node-electron.md deleted file mode 100644 index 974ff8f68..000000000 --- a/persistance-plan/phase-4-node-electron.md +++ /dev/null @@ -1,87 +0,0 @@ -# Phase 4 - Node + Electron - -## Objective - -Ship production-ready Node and Electron adapters on top of the shared SQLite core, ensuring behavioral parity and clear process boundaries. - -## Dependencies - -- Phase 3 adapter contract green in Node harness. -- Phase 2 wrapper semantics stable. - -## Scope - -1. Node package over `better-sqlite3` using shared `SQLiteDriver` adapter. -2. Electron package with main-process ownership and renderer IPC bridge. -3. Parity validation between Node and Electron behavior. - -## Non-Goals - -- Browser coordination or OPFS concerns -- Mobile runtime adaptation - -## Detailed Workstreams - -### Workstream A - Node Package - -- [ ] Implement `better-sqlite3` driver adapter with Promise-based interface. -- [ ] Expose `persistedCollectionOptions` wiring for node usage. -- [ ] Validate transaction and error semantics in sync + async wrappers. - -**Acceptance criteria** - -- Node package passes all shared adapter contract tests. -- API ergonomics match core expectations. - -### Workstream B - Electron Architecture - -- [ ] Define IPC API surface (renderer requests -> main execution). -- [ ] Keep SQLite and persistence execution in main process only. -- [ ] Implement request/response timeout and structured error transport. -- [ ] Ensure renderer cannot bypass main-process ownership. - -**Acceptance criteria** - -- Renderer operations function through IPC with no direct DB access. -- Error and timeout behavior are deterministic. - -### Workstream C - Parity and Reliability - -- [ ] Reuse Node adapter logic in Electron main process. -- [ ] Run shared contract suite against electron harness where supported. -- [ ] Add smoke tests for app lifecycle (start/restart/close). - -**Acceptance criteria** - -- Node and Electron behavior are equivalent for core flows. -- No Electron-specific correctness regressions. - -## Deliverables - -1. `@tanstack/node-db-sqlite-persistence` -2. `@tanstack/electron-db-sqlite-persistence` -3. Electron IPC bridge docs and example integration - -## Test Plan - -- Full adapter contract suite on Node. -- Electron integration tests: - - read/write round-trip through IPC - - process restart and persistence durability - - error propagation and timeout handling -- Regression tests for schema mismatch and reset flows. - -## Risks and Mitigations - -- **Risk:** IPC latency impacts hot-path operations. - - **Mitigation:** batch operations where possible and keep payloads compact. -- **Risk:** Electron renderer attempts direct file/db access. - - **Mitigation:** hard architecture rule: DB in main process only. -- **Risk:** subtle sync-vs-async wrapper mismatch. - - **Mitigation:** strict parity tests and adapter abstraction boundaries. - -## Exit Criteria - -- Node and Electron packages published with parity tests green. -- IPC boundary validated for correctness and reliability. -- Documentation includes integration guidance for app teams. diff --git a/persistance-plan/phase-5-react-native-expo.md b/persistance-plan/phase-5-react-native-expo.md deleted file mode 100644 index 02bc34c6c..000000000 --- a/persistance-plan/phase-5-react-native-expo.md +++ /dev/null @@ -1,85 +0,0 @@ -# Phase 5 - React Native + Expo - -## Objective - -Provide a unified mobile SQLite persistence package for both React Native and Expo using `op-sqlite`, with minimal platform divergence. - -## Dependencies - -- Phase 3 core adapter stable. -- Phase 2 wrapper semantics stable. - -## Scope - -1. Build shared mobile adapter package over `op-sqlite`. -2. Add RN/Expo-specific entrypoints only where host initialization differs. -3. Validate lifecycle, transaction, and persistence semantics on both hosts. - -## Non-Goals - -- Cross-process mobile coordination -- Browser multi-tab semantics - -## Detailed Workstreams - -### Workstream A - Shared Mobile Driver Layer - -- [ ] Implement `SQLiteDriver` wrapper around `op-sqlite`. -- [ ] Ensure consistent transaction boundaries and error mapping. -- [ ] Validate serialization/parsing paths for JSON payloads. - -**Acceptance criteria** - -- Same core adapter code runs unchanged on RN and Expo. -- Driver behavior matches node contract expectations. - -### Workstream B - Runtime Entrypoints - -- [ ] Provide RN entrypoint for bare/native setup. -- [ ] Provide Expo entrypoint for managed workflow setup. -- [ ] Keep API parity with node/browser wrappers where possible. - -**Acceptance criteria** - -- Consumers can swap runtimes with minimal app-level code change. - -### Workstream C - Mobile Lifecycle Hardening - -- [ ] Validate foreground/background transitions. -- [ ] Validate reopen behavior after app process restart. -- [ ] Confirm no data loss under rapid mutation bursts. - -**Acceptance criteria** - -- Persistence survives app restarts. -- Transaction semantics hold under lifecycle transitions. - -## Deliverables - -1. `@tanstack/react-native-db-sqlite-persistence` -2. RN and Expo entrypoint docs/examples -3. Mobile-focused integration tests - -## Test Plan - -- Shared adapter contract suite where harness supports mobile runtime. -- RN integration tests: - - loadSubset startup path - - mutation persistence - - restart durability -- Expo integration tests with equivalent scenarios. - -## Risks and Mitigations - -- **Risk:** runtime differences between RN and Expo initialization. - - **Mitigation:** isolate host bootstrapping in thin entrypoint layer. -- **Risk:** mobile backgrounding interrupts in-flight writes. - - **Mitigation:** short transactions and robust retry/rollback handling. -- **Risk:** driver behavior divergence from node. - - **Mitigation:** enforce shared contract tests against both runtimes. - -## Exit Criteria - -- Unified mobile package works on RN and Expo. -- Contract and lifecycle tests pass in both environments. -- Documentation clearly explains host-specific setup steps. diff --git a/persistance-plan/phase-6-cloudflare-durable-objects.md b/persistance-plan/phase-6-cloudflare-durable-objects.md deleted file mode 100644 index 87cd3a1ed..000000000 --- a/persistance-plan/phase-6-cloudflare-durable-objects.md +++ /dev/null @@ -1,86 +0,0 @@ -# Phase 6 - Cloudflare Durable Objects - -## Objective - -Implement Durable Object-native SQLite persistence using in-process execution (no browser election path), while preserving wrapper semantics for both inferred modes. - -## Dependencies - -- Phase 2 wrapper behavior complete -- Phase 3 core adapter complete - -## Scope - -1. Build DO SQLite adapter package for code executing inside the DO instance. -2. Provide schema initialization and version check helper utilities. -3. Support sync-present and sync-absent wrapper modes in DO runtime. -4. Validate behavior with Workers/DO integration harness. - -## Non-Goals - -- Browser lock/election protocols -- Remote DB proxy adapter pattern - -## Detailed Workstreams - -### Workstream A - DO Adapter Binding - -- [ ] Map DO SQL storage APIs to `SQLiteDriver` contract. -- [ ] Ensure transaction semantics align with core adapter expectations. -- [ ] Provide helper for collection table mapping initialization. - -**Acceptance criteria** - -- Core adapter runs with no DO-specific branching beyond driver wrapper. - -### Workstream B - Runtime Semantics - -- [ ] Default coordinator to `SingleProcessCoordinator`. -- [ ] Confirm no browser RPC/election method requirements. -- [ ] Ensure sync-absent mode behaves as first-class local persistence path. - -**Acceptance criteria** - -- DO runtime operates correctly without multi-tab coordination logic. - -### Workstream C - Schema and Recovery - -- [ ] Implement startup schema version checks per object instance. -- [ ] Support clear-on-mismatch for sync-present mode. -- [ ] Support throw-on-mismatch default for sync-absent mode. -- [ ] Validate restart and rehydrate paths. - -**Acceptance criteria** - -- Schema policy matches global design contract. -- Object restarts recover state cleanly. - -## Deliverables - -1. `@tanstack/cloudflare-durable-objects-db-sqlite-persistence` -2. DO initialization helpers and usage docs -3. DO integration test suite - -## Test Plan - -- Workers/DO integration tests for: - - schema init and mismatch behavior - - local-first `loadSubset` - - sync-absent mutation persistence - - restart durability - - no-election path correctness - -## Risks and Mitigations - -- **Risk:** subtle API mismatch in DO SQL wrapper. - - **Mitigation:** adapter conformance tests at driver boundary. -- **Risk:** incorrect assumptions about single-threaded execution. - - **Mitigation:** explicit `SingleProcessCoordinator` semantics and tests. -- **Risk:** schema resets during active request bursts. - - **Mitigation:** transactional reset flow and deterministic error handling. - -## Exit Criteria - -- DO package passes integration suite. -- Both inferred modes work in DO runtime. -- Runtime docs clarify in-process model and limitations. diff --git a/persistance-plan/phase-7-browser-single-tab.md b/persistance-plan/phase-7-browser-single-tab.md deleted file mode 100644 index 213ce7b21..000000000 --- a/persistance-plan/phase-7-browser-single-tab.md +++ /dev/null @@ -1,85 +0,0 @@ -# Phase 7 - Browser Single-Tab (`wa-sqlite`, No Election) - -## Objective - -Deliver stable browser persistence for single-tab usage using `wa-sqlite` + `OPFSCoopSyncVFS`, without requiring BroadcastChannel or Web Locks. - -## Dependencies - -- Phase 2 wrapper behavior complete -- Phase 3 core adapter complete - -## Scope - -1. Implement OPFS-backed browser SQLite driver. -2. Run wrapper in single-process coordination mode. -3. Validate local-first behavior with offline/online transitions. -4. Ensure system is correct without multi-tab infrastructure. - -## Non-Goals - -- Web Locks leadership election -- Cross-tab mutation RPC - -## Detailed Workstreams - -### Workstream A - Browser Driver Implementation - -- [x] Integrate `wa-sqlite` with `OPFSCoopSyncVFS`. -- [x] Build browser `SQLiteDriver` wrapper. -- [x] Handle startup/open/reopen lifecycle and capability checks. -- [x] Run OPFS sync-handle access inside a dedicated Web Worker. - -**Acceptance criteria** - -- Browser driver initializes and reopens persisted DB correctly. -- Capability errors are surfaced as `PersistenceUnavailableError` where required. - -### Workstream B - Single-Tab Runtime Wiring - -- [x] Use `SingleProcessCoordinator` semantics in browser single-tab mode. -- [x] Ensure no dependencies on BroadcastChannel/Web Locks. -- [x] Validate sync-present and sync-absent wrapper modes. - -**Acceptance criteria** - -- Single-tab mode functions fully offline-first with local writes and reads. - -### Workstream C - Offline/Online Behavior - -- [x] Validate offline `loadSubset` local path for sync-present mode. -- [x] Validate remote ensure replay on reconnect. -- [x] Validate sync-absent behavior unaffected by network transitions. - -**Acceptance criteria** - -- Correct data convergence after reconnect. - -## Deliverables - -1. Browser single-tab adapter/runtime package updates. -2. Capability detection and error handling behavior. -3. Browser integration tests for single-tab mode. - -## Test Plan - -- Browser integration suite: - - OPFS init and reopen - - mutation persistence correctness - - sync-present offline + reconnect replay - - no Web Locks/BroadcastChannel dependency - -## Risks and Mitigations - -- **Risk:** OPFS support differences across browsers. - - **Mitigation:** capability matrix and clear fallback policy. -- **Risk:** WASM startup latency. - - **Mitigation:** lazy init and connection reuse. -- **Risk:** accidental dependency on multi-tab APIs. - - **Mitigation:** explicit tests with those APIs unavailable. - -## Exit Criteria - -- Browser single-tab integration tests are green. -- Offline-first behavior proven for both inferred modes. -- No election/multi-tab runtime requirements remain in this phase. diff --git a/persistance-plan/phase-8-browser-multi-tab.md b/persistance-plan/phase-8-browser-multi-tab.md deleted file mode 100644 index 4ffab579a..000000000 --- a/persistance-plan/phase-8-browser-multi-tab.md +++ /dev/null @@ -1,157 +0,0 @@ -# Phase 8 - Browser Multi-Tab Coordinator (Final Phase) - -## Objective - -Implement robust multi-tab coordination using Web Locks, Visibility API, and BroadcastChannel with collection-scoped leadership and DB-wide write serialization. - -## Dependencies - -- Phase 7 browser single-tab stable -- Phase 2/3 recovery and row-version logic available - -## Scope - -1. Implement `BrowserCollectionCoordinator` with election and heartbeat. -2. Implement collection-scoped leader/follower behavior for both inferred modes. -3. Implement mutation RPC and follower acknowledgment/rollback handling. -4. Implement seq-gap recovery (`pullSince`) and stale fallback. -5. Implement DB writer lock (`tsdb:writer:`) and contention policy. -6. Validate multi-tab behavior via Playwright. - -## Non-Goals - -- SharedWorker architecture -- Global single-writer ownership across all collections - -## Implementation Status - -> **Overall: IMPLEMENTED** — `BrowserCollectionCoordinator` class implemented in -> `packages/browser-db-sqlite-persistence/src/browser-coordinator.ts`. -> Exported from package index. Unit tests with Web Locks and BroadcastChannel -> mocks pass (15 tests). Remaining: hidden-tab stepdown, heartbeat timeout -> detection, and Playwright multi-tab integration tests. - -## Detailed Workstreams - -### Workstream A - Leadership and Heartbeats - -- [x] Acquire per-collection Web Lock (`tsdb:leader::`). _(implemented in `browser-coordinator.ts` via `navigator.locks.request` with abort signal)_ -- [x] Increment durable `leader_term` transactionally on leadership gain. _(storage-level `leader_term` table in `sqlite-core-adapter.ts`; coordinator increments in-memory term on lock acquisition after restoring from `getStreamPosition`)_ -- [x] Emit leader heartbeat with latest seq/rowVersion. _(implemented in `browser-coordinator.ts` via `emitHeartbeat` on interval `HEARTBEAT_INTERVAL_MS=3000`)_ -- [ ] Detect heartbeat timeout and trigger takeover attempts. _(not needed for Web Locks approach — lock release is automatic on tab close/crash; deferred to future iteration if needed)_ -- [ ] Implement hidden-tab cooperative stepdown and cooldown. _(deferred — Web Locks handle crash/close; Visibility API stepdown is a future optimization)_ - -**Acceptance criteria** - -- Exactly one leader per collection at a time. -- Leadership term never decrements across reload/restart. - -### Workstream B - Protocol Transport and RPC - -- [x] Implement BroadcastChannel envelope transport per collection. _(single `BroadcastChannel` per coordinator instance `tsdb:coord:`, messages routed by `collectionId` field)_ -- [x] Implement request/response correlation via `rpcId`. _(implemented in `sendRPCOnce` with `pendingRPCs` map and timeout)_ -- [x] Implement RPC handlers: - - `ensureRemoteSubset` _(leader handler returns ok — leader's own sync handles the subset)_ - - `ensurePersistedIndex` _(leader handler calls `adapter.ensureIndex` under writer lock)_ - - `applyLocalMutations` _(leader handler applies tx, broadcasts `tx:committed`, returns accepted ids)_ - - `pullSince` _(leader handler delegates to `adapter.pullSince` and returns result)_ -- [x] Implement retry/backoff and timeout behavior. _(RPC_TIMEOUT_MS=10000, RPC_RETRY_ATTEMPTS=2, RPC_RETRY_DELAY_MS=200 with linear backoff)_ - -**Acceptance criteria** - -- RPCs are correlated, timed out, retried, and idempotent where required. - -### Workstream C - Mutation Routing and Acknowledgment - -- [x] Route follower sync-absent mutations to current leader. _(follower calls `requestApplyLocalMutations` which sends RPC to leader via BroadcastChannel)_ -- [x] Dedupe mutation envelopes by `envelopeId` at leader. _(`appliedEnvelopeIds` map with 60s TTL pruning)_ -- [x] Return accepted mutation ids and resulting `(term, seq, rowVersion)`. _(leader handler returns full `ApplyLocalMutationsResponse`)_ -- [x] Confirm/rollback optimistic local entries in follower based on response. _(caller side in `persisted.ts:1340-1368` handles ok/error responses and validates accepted mutation ids)_ - -**Acceptance criteria** - -- At-least-once mutation delivery yields exactly-once logical apply. - -### Workstream D - Commit Ordering and Recovery - -- [x] Broadcast `tx:committed` after DB commit only. _(implemented in `persisted.ts:1201-1215` and `persisted.ts:1376-1389`; leader handler in coordinator broadcasts after `applyCommittedTx`)_ -- [x] Track follower last seen `(term, seq)` and rowVersion. _(implemented in `persisted.ts:1449-1474` via `observeStreamPosition`; restored from DB on startup via `getStreamPosition`)_ -- [x] On seq gap, invoke `pullSince(lastSeenRowVersion)`. _(implemented in `persisted.ts:1642-1651` gap detection and `persisted.ts:1662-1684` recovery)_ -- [x] Apply targeted invalidation when key count is within limit. _(implemented in `persisted.ts:1705-1738` with `TARGETED_INVALIDATION_KEY_LIMIT` and inline row data in `changedRows`)_ -- [x] Trigger full reload when required or when pull fails. _(implemented in `persisted.ts:1708-1711` for `requiresFullReload`, `persisted.ts:1715-1718` for over-limit, and `persisted.ts:1684` as fallback)_ - -**Acceptance criteria** - -- Followers converge after dropped broadcasts. -- Recovery works without full page reload. - -### Workstream E - DB Write Serialization - -- [x] Implement DB writer lock (`tsdb:writer:`). _(implemented in `browser-coordinator.ts` via `withWriterLock` using `navigator.locks.request`)_ -- [x] Serialize physical SQLite write transactions across collection leaders. _(all leader-side adapter writes go through `withWriterLock`)_ -- [x] Apply bounded busy retries and backoff policy. _(WRITER_LOCK_MAX_RETRIES=20, WRITER_LOCK_BUSY_RETRY_MS=50 with capped linear backoff)_ - -**Acceptance criteria** - -- No correctness loss under cross-collection write contention. - -## Deliverables - -1. Browser multi-tab coordinator implementation. -2. Protocol transport and RPC machinery. -3. Recovery and invalidation orchestration in browser runtime. -4. Playwright multi-tab test suite. - -## Test Plan - -### Unit Tests (Completed) - -Tests in `tests/browser-coordinator.test.ts` using Web Locks and BroadcastChannel mocks: - -1. Leadership acquisition and release. -2. Leadership takeover on dispose. -3. Independent leadership per collection. -4. Message transport between coordinators. -5. Self-message filtering. -6. Leader applies mutations directly. -7. Follower routes mutations to leader via RPC. -8. Envelope ID deduplication. -9. Leader handles pullSince directly. -10. Follower routes pullSince to leader via RPC. -11. Leader ensures persisted index locally. -12. Follower routes ensurePersistedIndex to leader. -13. Cleanup on dispose. - -### Playwright Multi-Tab Scenarios (Not Yet Implemented) - -1. Two tabs leading different collections simultaneously. -2. Reads served locally without leader-proxy round trips. -3. Follower mutation routing and ack/rollback flow. -4. Visibility-driven leader handoff behavior. -5. Tab close/crash leadership takeover. -6. Commit-broadcast gap recovery via heartbeat + pullSince. -7. Cross-collection write contention correctness under writer lock. -8. Sync-present offline-first and reconnect convergence. - -### Fault Injection Tests (Not Yet Implemented) - -- Drop selected BroadcastChannel messages. -- Delay/reorder RPC responses. -- Force leader stepdown mid-mutation. - -## Risks and Mitigations - -- **Risk:** browser API inconsistencies (Web Locks/visibility). - - **Mitigation:** strict capability checks and conservative fallbacks. -- **Risk:** lock thrash during visibility transitions. - - **Mitigation:** stepdown delay + reacquire cooldown. -- **Risk:** high contention causes latency spikes. - - **Mitigation:** DB writer lock + bounded retry with telemetry. -- **Risk:** mutation duplicates under retries. - - **Mitigation:** `envelopeId` dedupe and idempotent leader apply. - -## Exit Criteria - -- Playwright multi-tab suite is green and stable. -- Leadership, ordering, mutation routing, and recovery invariants hold under fault tests. -- Browser multi-tab marked GA-ready for both inferred modes.