Files
2026-05-27 23:47:53 +01:00

72 lines
2.9 KiB
Markdown

# schemas
<!-- begin:auto-docs -->
_(no submodules)_
<!-- end:auto-docs -->
## Purpose
Zod schemas and inferred TypeScript types for all `@suaveplan/db-sqlite` configuration objects. Centralising validation in one module ensures that every entry point — `createBunDriver`, `createWasmDriver`, `SqliteAdapter`, `MigrationRunner` — applies the same rules with the same error messages, rather than duplicating ad-hoc checks across modules.
All schemas use `.strict()` where applicable so extra unknown properties are rejected at runtime, preventing silent misconfiguration from typos in option objects.
## Features
- `BunDriverOptionsSchema` — validates `filename` (optional string) and `readonly` (optional boolean, default `false`)
- `WasmDriverOptionsSchema` — validates `filename` (optional string) for OPFS persistence
- `SqliteAdapterOptionsSchema` — alias for `BunDriverOptionsSchema`; adapter and driver share the same shape
- `MigrationRunnerOptionsSchema` — validates `migrationsFolder` (default `"./migrations"`), `migrationsTable` (default `"__sqlite_migrations"`), `dryRun` (default `false`)
- Inferred TypeScript types exported for all four schemas
## Usage: Basic Example
```ts
import { BunDriverOptionsSchema } from "@suaveplan/db-sqlite/schemas";
const opts = BunDriverOptionsSchema.parse({ filename: ":memory:" });
// opts.readonly === false (default applied)
```
## Usage: Advanced Example
```ts
import { MigrationRunnerOptionsSchema } from "@suaveplan/db-sqlite/schemas";
const opts = MigrationRunnerOptionsSchema.parse({
migrationsFolder: "./db/migrations",
dryRun: true,
});
// opts.migrationsTable === "__sqlite_migrations" (default applied)
// opts.dryRun === true
```
## API Reference
### `BunDriverOptionsSchema`
`z.object({ filename?: string, readonly?: boolean }).strict()` — `readonly` defaults to `false`.
### `WasmDriverOptionsSchema`
`z.object({ filename?: string }).strict()` — no defaults; absence means in-memory.
### `SqliteAdapterOptionsSchema`
Alias for `BunDriverOptionsSchema`. Both driver and adapter accept the same option shape.
### `MigrationRunnerOptionsSchema`
`z.object({ migrationsFolder?: string, migrationsTable?: string, dryRun?: boolean }).strict()`.
Defaults: `migrationsFolder = "./migrations"`, `migrationsTable = "__sqlite_migrations"`, `dryRun = false`.
### Type aliases
- `BunDriverOptions = z.infer<typeof BunDriverOptionsSchema>`
- `WasmDriverOptions = z.infer<typeof WasmDriverOptionsSchema>`
- `SqliteAdapterOptions = BunDriverOptions`
- `MigrationRunnerOptions = z.infer<typeof MigrationRunnerOptionsSchema>`
## Implementation Notes
`SqliteAdapterOptions` is deliberately an alias for `BunDriverOptions` rather than a separate schema so that passing an `SqliteAdapterOptions` object to `createBunDriver` is type-safe without casting. If the WASM adapter ever gains `readonly` support the alias can be split without a breaking change to the option names callers already use.