Relocate the ~6k-file docs tree from the repo root into plugins/document-navigator/docs/ so the plugin is self-contained and portable. docs/superpowers/ (specs and plans) stays at the repo root. Moved via cp+rm rather than git mv because directory rename() fails with EPERM on this WSL /mnt DrvFs mount; git rename-detection pairs the identical-content files at commit time. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@suaveplan/surrealdb - Universal SurrealDB client wrapper implementing DatabaseAdapter: connection lifecycle, singleton registry, typed CRUD, schema discovery, initialisation, version detection, OTel instrumentation, retry integration, and structured SURREAL.* error codes.
Summary
Universal SurrealDB client wrapper for Suaveplan. Implements @suaveplan/db's DatabaseAdapter interface with connection lifecycle management, typed CRUD, schema discovery, database initialisation, version detection, structured SURREAL.* error codes, and OTel instrumentation.
Documentation tree
- adapter — (no submodules)
- adapter — (no submodules)
- crud — (no submodules)
- crud — (no submodules)
- query-helpers — (no submodules)
- query-helpers — (no submodules)
- transaction — (no submodules)
- transaction — (no submodules)
- connection — (no submodules)
- connection — (no submodules)
- errors — (no submodules)
- error — (no submodules)
- init — (no submodules)
- init — (no submodules)
- schema — (no submodules)
- discovery — (no submodules)
- schemas — (no submodules)
- schemas — (no submodules)
- singleton — (no submodules)
- singleton — (no submodules)
- types — (no submodules)
- types — (no submodules)
- utils — (no submodules)
- version-detector — (no submodules)
- crud —
crudexposes the typed record-level CRUD primitives (create,select,update,delete,selectAll) used by `Su… - query-helpers —
query-helpersholds the small, stateless utility functions shared by every public method onSurrealAdapterand its…- query-helpers —
query-helpersholds the small, stateless utility functions shared by every public method onSurrealAdapterand its…
- query-helpers —
- transaction —
transactionhouses the SurrealDB transaction orchestration logic that wraps a caller-supplied function in a `BEGIN TR…- transaction —
transactionhouses the SurrealDB transaction orchestration logic that wraps a caller-supplied function in a `BEGIN TR…
- transaction —
- connection — (no submodules)- connection — (no submodules)- errors — (no submodules)- error — (no submodules)- init — (no submodules)- init — (no submodules)- schema — (no submodules)- discovery — (no submodules)- schemas — (no submodules)- schemas — (no submodules)- singleton — (no submodules)- singleton — (no submodules)- types — (no submodules)- types — (no submodules)- utils — (no submodules)- version-detector — (no submodules)- adapter — (no submodules)- crud — (no submodules)- query-helpers — (no submodules)- transaction — (no submodules)- connection — (no submodules)- connection — (no submodules)- errors — (no submodules)- error — (no submodules)- init — (no submodules)- init — (no submodules)- schema — (no submodules)- discovery — (no submodules)- schemas — (no submodules)- schemas — (no submodules)- singleton — (no submodules)- singleton — (no submodules)- types — (no submodules)- types — (no submodules)- utils — (no submodules)- version-detector — (no submodules)## Packages
| Module | Description |
|---|---|
| errors/error | SurrealError class and SURREAL_CODES registry |
| types/types | Shared TypeScript types and the SurrealClientLike injection interface |
| schemas/schemas | Zod schemas for all public option types |
| connection/connection | Connection lifecycle and singleton registry |
| adapter/adapter | SurrealAdapter implementing DatabaseAdapter |
| adapter/crud | Typed record-level CRUD primitives |
| adapter/transaction | BEGIN/COMMIT/CANCEL TRANSACTION orchestration |
| adapter/query-helpers | Positional-param conversion, error wrapping, result flattening |
| schema/discovery | Schema file discovery, sorting, and reading |
| init/init | Database initialisation from schema files |
| utils/version-detector | SurrealDB version parsing and detection |
| singleton/singleton | Adapter-level singleton registry |
Quick Start
import { SurrealAdapter } from "@suaveplan/surrealdb";
const adapter = new SurrealAdapter({
url: "ws://localhost:8000",
namespace: "prod",
database: "app",
username: "root",
password: "root",
});
await adapter.connect();
const user = await adapter.create("user", { name: "Alice", email: "alice@example.com" });
console.log(user.id); // "user:alice..."
await adapter.disconnect();
Integration tests
The package ships a parallel test suite under tests/integration/ that exercises the adapter against a real SurrealDB v3.0.4 container via @suaveplan/testing-integration-surrealdb. The unit suite (src/**/*.test.ts) runs against a dependency-injected fake; the integration suite proves the same code paths work against the live engine.
Run the integration suite:
bunx turbo test:integration --filter=@suaveplan/surrealdb
# or, from the package directory:
bun run test:integration
Requirements:
- Docker available locally; the fixture pulls
surrealdb/surrealdb:v3.0.4on first run. @suaveplan/testing-integrationand@suaveplan/testing-integration-surrealdbresolve as devDependencies (already wired).- The integration config points at
vitest.integration.config.ts(separate from the unitvitest.config.ts) and only matchestests/integration/**/*.integration.test.ts.
What the suite covers:
connect → use → signin → query → closeround-trip and parameter passthrough.- DDL via
execute("DEFINE TABLE …")followed byINFO FOR DBto confirm the schema took. transaction()commit-on-resolve / rollback-on-throw semantics.- Lifecycle:
getSingletondeduplication andcloseAllSingletonsordering. - Connection failure surfaces
DB.CONNECTION_FAILEDwith the documentedConnectionRefused/Unable to connectpatterns. - Version detection against the pinned
v3.0.4image. - The
INSERT INTOworkaround for thedb.create()content-drop bug. - Schema discovery returns the expected table/field shapes.
If Docker is unavailable, every integration test is skipped via skipIfUnavailable("surrealdb", inject) so CI does not falsely fail when the runner has no Docker daemon.