ReviewOS

also looking at this

stacks/bun-query-builder

fix(types): config options should not require what the library already defaults

#1064
Merged glennmichael123 wants to merge fix/config-options-deep-partial into main
12 files +885 -117
docs/advanced/api.mdmodified+23-5
Changes to docs/advanced/api.md
@@ -7,7 +7,7 @@ This page summarizes method signatures and brief descriptions. See feature pages
77## Imports
88
99```ts
10import type { CursorPaginationResult, DatabaseSchema, PaginationResult, QueryBuilderConfig, SchemaMeta, SortDirection, TransactionOptions, WhereExpression, WhereOperator } from 'bun-query-builder'
10import type { CursorPaginationResult, DatabaseSchema, PaginationResult, QueryBuilderOptions, SchemaMeta, SortDirection, TransactionOptions, WhereExpression, WhereOperator } from 'bun-query-builder'
1111import {
1212 // Schema and Model Definition
1313 buildDatabaseSchema,
@@ -41,10 +41,26 @@ const db = createQueryBuilder<typeof schema>({ schema, meta })
4141
4242## Configuration
4343
44- config: Global runtime config (merged via bunfig). Shape: `QueryBuilderConfig`
45- defaultConfig: Library defaults
44- `defineConfig(options)`: identity helper for a typed `query-builder.config.ts`
45- `setConfig(options)`: deep-merges `QueryBuilderOptions` into the live config
46- `getConfig()`: loads `query-builder.config.ts` and `QUERY_BUILDER_*` env vars once, merges them in, returns the resolved config
47- `config`: the live process-wide config, typed `QueryBuilderConfig` — every field is present, so `config.pagination.defaultPerPage` needs no guard
48- `defaultConfig`: the library defaults, same resolved shape
4649
47Key sections: `dialect`, `timestamps`, `pagination`, `aliasing`, `relations`, `transactionDefaults`, `sql`, `features`, `debug`.
50Two types, two jobs. **Write** `QueryBuilderOptions`: every field optional at every
51depth, so you supply only what you want to change. **Read** `QueryBuilderConfig`:
52your options merged over the defaults, every field present. Annotating your own
53config with the resolved type is what made every field added here a compile error
54downstream ([#1062](https://github.com/stacksjs/bun-query-builder/issues/1062)).
55
56Key sections: `dialect`, `database`, `snapshotDir`, `migrationDir`, `timestamps`, `pagination`, `aliasing`, `relations`, `transactionDefaults`, `sql`, `features`, `softDeletes`, `hooks`, `debug`.
57
58Naming one leaf keeps the rest of its section:
59
60```ts
61setConfig({ transactionDefaults: { retries: 5 } })
62// retries is 5; sqlStates and backoff keep their defaults
63```
4864
4965## Schema & Models
5066
@@ -276,7 +292,9 @@ await db
276292
277293- WhereOperator: '=', '!=', '<', '>', '<=', '>=', 'like', 'in', 'not in', 'is', 'is not'
278294- WhereExpression<TColumns>: object | tuple | raw
279- QueryBuilderConfig: see Configuration section
295- QueryBuilderOptions: user-supplied configuration — every field optional, recursively. What you write in `query-builder.config.ts` or pass to `setConfig()`
296- QueryBuilderConfig: defaults merged with your configuration — every field present. What `config`, `defaultConfig` and `getConfig()` give you
297- DeepPartial&lt;T&gt;: the utility behind `QueryBuilderOptions`
280298- DatabaseSchema<ModelRecord>
281299
282300---