docs: update portal for WRNexusJS 0.8.72

- Bump every @wrnexus/* dependency to its latest release (ui 0.8.88,
  styles 0.8.26, cli 0.8.72, core 0.8.16, i18n 0.8.12, ...) and refresh
  bun.lock and package-lock.json. graphql/native 0.8.8 were republished,
  so their stale lockfile integrity entries were re-resolved.
- wrnexus.config.ts: drop `functions` and `compatibility`, both removed
  from the framework.
- Regenerate package, portal and discovery docs from the installed
  packages, including the new 0.8.72 release page.
- Package pages now install each package's own released version
  (ui 0.8.88, core 0.8.16) instead of stamping the CLI version on all.
- llms.txt / llms-full.txt: the generator kept every earlier run's CLI
  reference and appended another; it now replaces it, so the guide holds
  one current reference and no longer advertises the removed
  `wrnexus compatibility` command.
- docs.test.ts: compileWireFile was renamed compileWrnFile; tests follow
  the per-package install versions and the removed command.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClintchizandClaude Opus 5.5 committed 2026-09-30 16:46:32 +05:30
1 parent 5c591ab7de
commit b536b57447
105 files changed
+24822 -12503

No files matched your search

+99 -11
View File
@@ -10,7 +10,7 @@ page wrnexusdb {
<header class="topbar">
<a class="brand" href="/"><span>W</span> WRNexusJS</a>
<nav aria-label="Primary"><a href="/getting-started">Get started</a><a href="/packages">Packages</a><a href="https://component.wrnexusjs.dev/">Components</a><a href="/language">Language</a><a href="/architecture">Architecture</a></nav>
<div class="topbar-actions"><a class="preview-pill" href="/access">Private preview · v0.8.8</a><button data-wire-theme-toggle class="theme-button" aria-label="Toggle color theme" title="Toggle color theme">◐</button></div>
<div class="topbar-actions"><a class="preview-pill" href="/access">Private preview · v0.8.72</a><button data-wire-theme-toggle class="theme-button" aria-label="Toggle color theme" title="Toggle color theme">◐</button></div>
</header>
<div class="mobile-doc-nav"><details><summary>Browse documentation</summary><nav><a href="/getting-started">Get started</a><a href="/packages">Packages</a><a href="https://component.wrnexusjs.dev/">Components</a><a href="/language">Language</a><a href="/architecture">Architecture</a><a href="/tutorial">Tutorial</a><a href="/guides/project-structure">Guides</a><a href="/examples">Examples</a><a href="/search">Search</a></nav></details></div>
<main id="main" class="portal-main docs-layout docs-layout--navigation"><aside class="docs-section-menu" aria-label="Documentation sections"><nav>
@@ -20,7 +20,7 @@ page wrnexusdb {
<section><strong>Reference</strong><a href="/packages">Packages overview</a><a href="/packages/cli">CLI</a><a href="/language">.wrn language</a><a href="https://component.wrnexusjs.dev/">Components</a><a href="/examples">Examples</a></section>
<section class="package-menu"><strong>Packages</strong><a href="/packages/ai">@wrnexus/ai</a><a href="/packages/auth">@wrnexus/auth</a><a href="/packages/authz">@wrnexus/authz</a><a href="/packages/benchmark">@wrnexus/benchmark</a><a href="/packages/cache">@wrnexus/cache</a><a href="/packages/captcha">@wrnexus/captcha</a><a href="/packages/cli">@wrnexus/cli</a><a href="/packages/compiler">@wrnexus/compiler</a><a href="/packages/content">@wrnexus/content</a><a href="/packages/core">@wrnexus/core</a><a href="/packages/csr">@wrnexus/csr</a><a href="/packages/db">@wrnexus/db</a><a href="/packages/dev-server">@wrnexus/dev-server</a><a href="/packages/dev-toolbar">@wrnexus/dev-toolbar</a><a href="/packages/encryption">@wrnexus/encryption</a><a href="/packages/graphql">@wrnexus/graphql</a><a href="/packages/helpers">@wrnexus/helpers</a><a href="/packages/i18n">@wrnexus/i18n</a><a href="/packages/identity">@wrnexus/identity</a><a href="/packages/image">@wrnexus/image</a><a href="/packages/jwt">@wrnexus/jwt</a><a href="/packages/language-server">@wrnexus/language-server</a><a href="/packages/mcp">@wrnexus/mcp</a><a href="/packages/mobile">@wrnexus/mobile</a><a href="/packages/native">@wrnexus/native</a><a href="/packages/oauth">@wrnexus/oauth</a><a href="/packages/observability">@wrnexus/observability</a><a href="/packages/playground">@wrnexus/playground</a><a href="/packages/plugin">@wrnexus/plugin</a><a href="/packages/pubsub">@wrnexus/pubsub</a><a href="/packages/pwa">@wrnexus/pwa</a><a href="/packages/queue">@wrnexus/queue</a><a href="/packages/reactive">@wrnexus/reactive</a><a href="/packages/realtime">@wrnexus/realtime</a><a href="/packages/router">@wrnexus/router</a><a href="/packages/security">@wrnexus/security</a><a href="/packages/ssr">@wrnexus/ssr</a><a href="/packages/store">@wrnexus/store</a><a href="/packages/styles">@wrnexus/styles</a><a href="/packages/syntax">@wrnexus/syntax</a><a href="/packages/test">@wrnexus/test</a><a href="/packages/tracking">@wrnexus/tracking</a><a href="/packages/typecheck">@wrnexus/typecheck</a><a href="/packages/ui">@wrnexus/ui</a><a href="/packages/uploader">@wrnexus/uploader</a><a href="/packages/validation">@wrnexus/validation</a></section>
</nav></aside><div class="docs-reading-column">
<article class="documentation prose standalone package-document"><nav class="breadcrumbs" aria-label="Breadcrumb"><a href="/">Home</a><span>/</span><a href="/packages">Packages</a><span>/</span><span aria-current="page">@wrnexus/db</span></nav><section class="doc-intro"><span class="eyebrow">Data · Package reference</span><h1>@wrnexus/db</h1><p>Database adapters, typed queries, models, migrations, and sessions.</p><div class="doc-meta"><span>v0.8.8</span><span>Private registry</span><span>Data</span></div><section id="access" class="access-callout"><h2>Install the package</h2><p>After WorkRoot approves private registry access, install the release-aligned package:</p><pre><code>bun add @wrnexus/db@0.8.8</code><button type="button" class="copy-button" aria-label="Copy installation command">Copy</button></pre><p><a href="/access">Request preview access</a>. Never put registry tokens in source control.</p></section></section><section id="guide"><h3 id="rollout-safe-migrations">Rollout-safe migrations</h3>
<article class="documentation prose standalone package-document"><nav class="breadcrumbs" aria-label="Breadcrumb"><a href="/">Home</a><span>/</span><a href="/packages">Packages</a><span>/</span><span aria-current="page">@wrnexus/db</span></nav><section class="doc-intro"><span class="eyebrow">Data · Package reference</span><h1>@wrnexus/db</h1><p>Database adapters, typed queries, models, migrations, and sessions.</p><div class="doc-meta"><span>v0.8.23</span><span>Private registry</span><span>Data</span></div><section id="access" class="access-callout"><h2>Install the package</h2><p>After WorkRoot approves private registry access, install the package:</p><pre><code>bun add @wrnexus/db@0.8.23</code><button type="button" class="copy-button" aria-label="Copy installation command">Copy</button></pre><p><a href="/access">Request preview access</a>. Never put registry tokens in source control.</p></section></section><section id="guide"><h3 id="rollout-safe-migrations">Rollout-safe migrations</h3>
<p>Run <code>wrnexus db check</code> in CI before deployment. The analyzer reports stable diagnostics for drops, renames, type changes, new/enforced required columns, and potentially blocking index creation, with an expand/backfill/switch/contract recommendation. <code>wrnexus db migrate</code> blocks critical issues in pending migrations. <code>--allow-breaking</code> is an explicit operator override; already-applied migrations do not block later releases.</p>
<blockquote>The database layer for WRNexusJS: TS models as the single source of truth for DDL, validation, and result typing, plus a driver-based <code>Db</code> client, migrations, and a sqlc-style query generator.</blockquote>
<p>Part of the <strong>WRNexusJS</strong> framework — an SSR-first, Bun-native full-stack web framework.</p>
@@ -81,7 +81,7 @@ const events = await getDb(&quot;analytics&quot;).all(&quot;SELECT * FROM hits&q
<li><code>@wrnexus/db/mongo</code> — <code>mongo(url, dbName?)</code>. A document API, not SQL: <code>db.collection(model)</code> returns a <code>MongoRepo&lt;T&gt;</code> with <code>find</code>, <code>findOne</code>, <code>insert</code>, <code>insertMany</code>, <code>update</code>, <code>delete</code>, <code>count</code>. Reads are coerced through <code>model.parse</code> (<code>_id</code> is mapped to <code>id</code>). The <code>mongodb</code> driver is imported lazily — install it to use Mongo.</li>
</ul>
<h4 id="migrations">Migrations</h4>
<p>Migrations are <code>.sql</code> files (in e.g. <code>app/db/migrations</code>), each split into <code>-- +up</code> and <code>-- +down</code> sections. A file with no markers is treated entirely as <code>up</code>. Applied names are recorded in a <code>_wire_migrations</code> table so each runs once.</p>
<p>Migrations are <code>.sql</code> files (in e.g. <code>app/db/migrations</code>), each split into <code>-- +up</code> and <code>-- +down</code> sections. A file with no markers is treated entirely as <code>up</code>. Applied names are recorded in a <code>_wrn_migrations</code> table so each runs once.</p>
<ul>
<li><code>parseMigration(name, content)</code> → <code>Migration</code> (<code>&#123; name, up, down &#125;</code>).</li>
<li><code>loadMigrations(dir)</code> — parse all <code>.sql</code> files, sorted by filename.</li>
@@ -162,7 +162,7 @@ const active = await repo.find(&#123; active: true &#125;);</code></pre>
<li><strong>Bun-only.</strong> Uses <code>bun:sqlite</code> (SQLite adapter + session store) and <code>Bun.SQL</code></li>
<p>(Postgres/MySQL). Migrations/scaffolding use <code>node:fs</code>/<code>node:path</code>.</p>
<li>Works with <code>@wrnexus/core</code> — <code>sqliteSessionStore</code> implements its</li>
<p><code>SessionBackend</code>; <code>getDb</code>/<code>setDb</code> are wired by the WRNexusJS runtime from <code>wrnexus.config.ts</code>.</p>
<p><code>SessionBackend</code>; <code>getDb</code>/<code>setDb</code> are connected by the WRNexusJS runtime from <code>wrnexus.config.ts</code>.</p>
<li>The <code>mongodb</code> npm package is an optional, lazily-imported peer — install it</li>
<p>only if you use <code>@wrnexus/db/mongo</code>. The core package stays dependency-free.</p>
</ul>
@@ -194,7 +194,14 @@ const users = await usersRepo.all(&#123;
offset: 0,
&#125;);</code></pre>
<p>Repository SQL identifiers are validated and values remain parameterized. Placeholder generation is dialect-aware: PostgreSQL uses <code>$1</code>, <code>$2</code>, and SQLite/MySQL use <code>?</code>. List limits are bounded.</p>
<p><code>retryTransaction()</code> retries recognized serialization, deadlock, and database-lock errors by default. Supply <code>shouldRetry</code> for application-specific retryable errors; ordinary validation or business errors are not retried automatically.</p></section><section id="api" class="api"><h2>Complete TypeScript API</h2><p>Generated from the exact installed package declarations.</p><pre data-language="typescript"><code>import &#123; M as Model &#125; from './schema-tVurYsbL.js';
<p><code>retryTransaction()</code> retries recognized serialization, deadlock, and database-lock errors by default. Supply <code>shouldRetry</code> for application-specific retryable errors; ordinary validation or business errors are not retried automatically.</p>
<h3 id="reusable-seed-helpers">Reusable seed helpers</h3>
<pre data-language="ts"><code>import &#123; addSeedData, removeSeedData, runSeedQuery, getDb &#125; from &quot;@wrnexus/db&quot;;
await addSeedData(getDb, [&#123; code: &quot;free&quot;, credits: 100 &#125;], &quot;plans&quot;, &#123; conflict: &quot;ignore&quot; &#125;);
await removeSeedData(getDb(), &#123; code: &quot;legacy&quot; &#125;, &quot;plans&quot;);
await runSeedQuery(getDb(), &quot;UPDATE plans SET credits = ? WHERE code = ?&quot;, [200, &quot;free&quot;]);</code></pre>
<p>Table and column identifiers are validated, values are always parameterized, and empty bulk deletes are refused unless <code>&#123; all: true &#125;</code> is explicit.</p></section><section id="api" class="api"><h2>Complete TypeScript API</h2><p>Generated from the exact installed package declarations.</p><pre data-language="typescript"><code>import &#123; M as Model &#125; from './schema-tVurYsbL.js';
export &#123; B as BaseType, C as Column, a as ColumnDef, b as Columns, t as table, v &#125; from './schema-tVurYsbL.js';
import &#123; a as Db, b as Dialect, R as Row, E as ExecResult &#125; from './driver-DA53QHkO.js';
export &#123; D as Driver, T as TxHandle, c as createDb, d as createTableSql &#125; from './driver-DA53QHkO.js';
@@ -234,7 +241,7 @@ declare function closeDatabases(): Promise&lt;void&gt;;
/**
* Migration runner. Migrations are `.sql` files in `app/db/migrations`, each
* split into `-- +up` and `-- +down` sections. Applied migrations are recorded
* in a `_wire_migrations` table so they run exactly once, newest-last.
* in a `_wrn_migrations` table so they run exactly once, newest-last.
*
* `scaffoldMigration(..., models)` writes an initial migration straight from the
* TS models — the source of truth — so you don't hand-write the first schema.
@@ -265,7 +272,18 @@ declare function appliedMigrations(db: Db): Promise&lt;string[]&gt;;
declare function applyMigrations(db: Db, migrations: readonly Migration[], options?: MigrationRunOptions): Promise&lt;string[]&gt;;
/** Apply all pending migrations from a directory. */
declare function migrate(db: Db, dir: string, options?: MigrationRunOptions): Promise&lt;string[]&gt;;
/** Roll back the most recently applied migration. Returns its name, or null. */
/**
* Roll back the most recently applied migration. Returns its name, or null when
* nothing has been applied.
*
* Refuses a migration that changed the schema but defines no `-- +down` section.
* Removing its tracking row would leave the change in place and unrecorded, and
* the next `migrate` would replay statements such as `ALTER TABLE ... ADD COLUMN`
* that cannot run twice, stranding the database between the two states.
*
* A migration whose `up` is empty — a placeholder, or comments only — has
* nothing to undo, so it rolls back by dropping its tracking row alone.
*/
declare function rollback(db: Db, dir: string, options?: Omit&lt;MigrationRunOptions, &quot;dryRun&quot;&gt; &amp; &#123;
dryRun?: boolean;
&#125;): Promise&lt;string | null&gt;;
@@ -316,7 +334,15 @@ interface ModelRef &#123;
varName: string;
model: Model;
&#125;
/** Parse annotated queries from one `.sql` file's contents. */
/**
* Parse annotated queries from one `.sql` file's contents.
*
* Line endings are normalised to LF first. The generator embeds each query's
* SQL as a string literal, so without this a CRLF checkout regenerated every
* query with CRLF where the committed file had LF -- a build dirtied the
* working tree, and that churn buried real changes in the same file. Line
* endings carry no meaning in SQL.
*/
declare function parseQueries(content: string): QueryDef[];
/** Generate the full `queries.gen.ts` source. */
declare function generateQueriesFile(queries: QueryDef[], models: ModelRef[], dialect: Dialect): string;
@@ -448,6 +474,16 @@ declare function firstOrThrow&lt;T&gt;(db: Db, sql: string, params?: unknown[],
declare function exists(db: Db, sql: string, params?: unknown[]): Promise&lt;boolean&gt;;
declare function countRows(db: Db, table: string, where?: string, params?: unknown[]): Promise&lt;number&gt;;
declare function withTransaction&lt;T&gt;(db: Db, callback: (tx: Db) =&gt; Promise&lt;T&gt;): Promise&lt;T&gt;;
/** Execute a parameterized compare-and-set update and report whether this caller won. */
declare function compareAndSet(db: Db, options: &#123;
table: string;
idColumn?: string;
id: string | number;
stateColumn?: string;
from: string;
to: string;
extra?: Record&lt;string, unknown&gt;;
&#125;): Promise&lt;boolean&gt;;
declare function retryTransaction&lt;T&gt;(db: Db, callback: (tx: Db, attempt: number) =&gt; Promise&lt;T&gt;, options?: &#123;
attempts?: number;
baseDelayMs?: number;
@@ -490,7 +526,59 @@ declare function createRepository&lt;T extends Row&gt;(db: Db, input: &#123;
&#125;;
&#125;): Repository&lt;T&gt;;
export &#123; type CursorPage, type CursorPageOptions, Db, Dialect, ExecResult, type Migration, type MigrationRunOptions, type MigrationSafetyIssue, Model, type ModelRef, type PageOptions, type Paginated, type QueryDef, type QueryIssue, type QueryKind, type QueryPolicy, type QueryRecord, RecordNotFoundError, type RelationOptions, type Repository, Row, analyzeMigrationSafety, analyzeMigrations, appliedMigrations, applyMigrations, batch, closeDatabases, countRows, createRepository, cursorPaginate, databaseHealth, databaseNames, exists, firstOrThrow, generateQueriesFile, getDb, getDbPerformanceSnapshot, hasDb, instrumentDb, loadMigrations, loadRelated, migrate, optimisticUpdate, paginate, parseMigration, parseQueries, queryOperation, registerDb, registerLazyDb, resetDbPerformanceSnapshot, retryTransaction, rollback, scaffoldMigration, setDb, softDeleteClause, status, tenantScope, withTransaction &#125;;
type SeedRow = Record&lt;string, unknown&gt;;
type SeedDatabase = Db | (() =&gt; Db);
interface AddSeedOptions &#123;
conflict?: &quot;error&quot; | &quot;ignore&quot; | &quot;replace&quot;;
&#125;
interface UpsertSeedOptions &#123;
key: string | readonly string[];
update?: readonly string[];
&#125;
/** Insert one or many object rows with parameterized values. */
declare function addSeedData(source: SeedDatabase, data: SeedRow | readonly SeedRow[], table: string, options?: AddSeedOptions): Promise&lt;ExecResult[]&gt;;
/** Delete matching seed rows. An empty match is refused unless `all` is explicit. */
declare function removeSeedData(source: SeedDatabase, match: SeedRow, table: string, options?: &#123;
all?: boolean;
&#125;): Promise&lt;ExecResult&gt;;
/** Execute an application-owned parameterized seed statement. */
declare function runSeedQuery(source: SeedDatabase, query: string, data?: readonly unknown[]): Promise&lt;ExecResult&gt;;
/** Portable object upsert for SQLite, PostgreSQL and MySQL. */
declare function upsertSeedData(source: SeedDatabase, data: SeedRow | readonly SeedRow[], table: string, options: UpsertSeedOptions): Promise&lt;ExecResult[]&gt;;
declare function seedIfMissing(source: SeedDatabase, table: string, match: SeedRow, data: SeedRow): Promise&lt;boolean&gt;;
type SeedStep = (db: Db) =&gt; void | Promise&lt;void&gt;;
declare function defineSeed(...steps: readonly SeedStep[]): SeedStep;
interface SeedUserAccount &#123;
identifier: string;
password?: string;
[key: string]: unknown;
&#125;
declare function seedUsers&lt;T extends SeedUserAccount, U extends &#123;
id: string;
&#125;&gt;(accounts: readonly T[], options: &#123;
find(identifier: string): Promise&lt;U | null&gt;;
create(account: T): Promise&lt;U&gt;;
configure?(user: U, account: T): void | Promise&lt;void&gt;;
&#125;): Promise&lt;U[]&gt;;
interface LedgerOptions &#123;
db: () =&gt; Db;
table: string;
subjectColumn?: string;
amountColumn?: string;
kindColumn?: string;
reasonColumn?: string;
referenceColumn?: string;
&#125;
declare function defineLedger(options: LedgerOptions): &#123;
balance: (subjectId: string, db?: Db) =&gt; Promise&lt;number&gt;;
credit(subjectId: string, value: number, entryReason: string, ref?: string): Promise&lt;void&gt;;
debit(subjectId: string, value: number, entryReason: string, ref?: string): Promise&lt;boolean&gt;;
refund: (subjectId: string, value: number, entryReason: string, ref?: string) =&gt; Promise&lt;void&gt;;
entries: (subjectId: string) =&gt; Promise&lt;Row[]&gt;;
&#125;;
export &#123; type AddSeedOptions, type CursorPage, type CursorPageOptions, Db, Dialect, ExecResult, type LedgerOptions, type Migration, type MigrationRunOptions, type MigrationSafetyIssue, Model, type ModelRef, type PageOptions, type Paginated, type QueryDef, type QueryIssue, type QueryKind, type QueryPolicy, type QueryRecord, RecordNotFoundError, type RelationOptions, type Repository, Row, type SeedDatabase, type SeedRow, type SeedStep, type SeedUserAccount, type UpsertSeedOptions, addSeedData, analyzeMigrationSafety, analyzeMigrations, appliedMigrations, applyMigrations, batch, closeDatabases, compareAndSet, countRows, createRepository, cursorPaginate, databaseHealth, databaseNames, defineLedger, defineSeed, exists, firstOrThrow, generateQueriesFile, getDb, getDbPerformanceSnapshot, hasDb, instrumentDb, loadMigrations, loadRelated, migrate, optimisticUpdate, paginate, parseMigration, parseQueries, queryOperation, registerDb, registerLazyDb, removeSeedData, resetDbPerformanceSnapshot, retryTransaction, rollback, runSeedQuery, scaffoldMigration, seedIfMissing, seedUsers, setDb, softDeleteClause, status, tenantScope, upsertSeedData, withTransaction &#125;;
</code></pre></section><section id="examples" class="examples"><h2>Examples</h2><p>Copy-ready examples from the installed package documentation.</p><div class="example-grid"><article class="example-card"><h3>Define models, connect, create tables, and query with typed results</h3><pre data-language="ts"><code>import &#123; v, table, createDb &#125; from &quot;@wrnexus/db&quot;;
import &#123; sqlite &#125; from &quot;@wrnexus/db/sqlite&quot;;
@@ -531,9 +619,9 @@ const mdb = await mongo(process.env.MONGO_URL!, &quot;app&quot;);
const repo = mdb.collection(users);
await repo.insert(&#123; email: &quot;a@b.com&quot; &#125;);
const active = await repo.find(&#123; active: true &#125;);</code></pre></article></div></section></article></div>
<aside class="on-this-page"><h2>On this page</h2><nav><a class="toc-level-2" href="#guide">Guide</a><a class="toc-level-3" href="#rollout-safe-migrations">Rollout-safe migrations</a><a class="toc-level-3" href="#overview">Overview</a><a class="toc-level-3" href="#api">API</a><a class="toc-level-4" href="#schema-v-table-column">Schema — v, table, Column</a><a class="toc-level-4" href="#driver-client-createdb-db-driver">Driver &amp; client — createDb, Db, Driver</a><a class="toc-level-4" href="#client-registry-getdb-setdb">Client registry — getDb / setDb</a><a class="toc-level-4" href="#adapters">Adapters</a><a class="toc-level-4" href="#migrations">Migrations</a><a class="toc-level-4" href="#query-generator-sqlc-style">Query generator (sqlc-style)</a><a class="toc-level-4" href="#query-helpers">Query helpers</a><a class="toc-level-4" href="#session-store">Session store</a><a class="toc-level-3" href="#usage">Usage</a><a class="toc-level-3" href="#configuration">Configuration</a><a class="toc-level-3" href="#requirements-notes">Requirements / Notes</a><a class="toc-level-3" href="#repository-and-transaction-helpers">Repository and transaction helpers</a><a class="toc-level-3" href="#0-8-repository-and-transaction-helpers">0.8 repository and transaction helpers</a><a class="toc-level-2" href="#api">Complete API</a><a class="toc-level-2" href="#examples">Examples</a></nav></aside>
<aside class="on-this-page"><h2>On this page</h2><nav><a class="toc-level-2" href="#guide">Guide</a><a class="toc-level-3" href="#rollout-safe-migrations">Rollout-safe migrations</a><a class="toc-level-3" href="#overview">Overview</a><a class="toc-level-3" href="#api">API</a><a class="toc-level-4" href="#schema-v-table-column">Schema — v, table, Column</a><a class="toc-level-4" href="#driver-client-createdb-db-driver">Driver &amp; client — createDb, Db, Driver</a><a class="toc-level-4" href="#client-registry-getdb-setdb">Client registry — getDb / setDb</a><a class="toc-level-4" href="#adapters">Adapters</a><a class="toc-level-4" href="#migrations">Migrations</a><a class="toc-level-4" href="#query-generator-sqlc-style">Query generator (sqlc-style)</a><a class="toc-level-4" href="#query-helpers">Query helpers</a><a class="toc-level-4" href="#session-store">Session store</a><a class="toc-level-3" href="#usage">Usage</a><a class="toc-level-3" href="#configuration">Configuration</a><a class="toc-level-3" href="#requirements-notes">Requirements / Notes</a><a class="toc-level-3" href="#repository-and-transaction-helpers">Repository and transaction helpers</a><a class="toc-level-3" href="#0-8-repository-and-transaction-helpers">0.8 repository and transaction helpers</a><a class="toc-level-3" href="#reusable-seed-helpers">Reusable seed helpers</a><a class="toc-level-2" href="#api">Complete API</a><a class="toc-level-2" href="#examples">Examples</a></nav></aside>
</main>
<footer><div class="footer-brand"><span class="footer-mark" aria-hidden="true">W</span><p><strong>WRNexusJS 0.8.8</strong><span>Complete API documentation generated from installed package declarations.</span></p></div><nav aria-label="Footer"><a href="/packages">All packages</a><a href="/getting-started">Get started</a><a href="/security">Security</a><a href="/support">Support</a><a href="/llms.txt">AI guide</a></nav><p class="footer-meta">Private Developer Preview · Bun-native</p></footer>
<footer><div class="footer-brand"><span class="footer-mark" aria-hidden="true">W</span><p><strong>WRNexusJS 0.8.72</strong><span>Complete API documentation generated from installed package declarations.</span></p></div><nav aria-label="Footer"><a href="/packages">All packages</a><a href="/getting-started">Get started</a><a href="/security">Security</a><a href="/support">Support</a><a href="/llms.txt">AI guide</a></nav><p class="footer-meta">Private Developer Preview · Bun-native</p></footer>
</div>
}
}