bun-query-builder 0.2.68 → 0.2.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { config } from './config';
2
2
  import { resetConnection } from './db';
3
3
  import type { AnyDatabaseSchema } from './schema';
4
+ import type { DeferredInsert } from './sqlite-deferred-inserts';
4
5
  import type { DriverConnection } from './db';
5
6
  import type { QueryHooks, SupportedDialect } from './types';
6
7
  import type { SchemaMeta } from './meta';
@@ -30,7 +31,11 @@ import type { SchemaMeta } from './meta';
30
31
  * db.selectFrom('orders').whereRaw(raw`status = ${userStatus}`) // value escaped
31
32
  * ```
32
33
  */
33
- export declare function raw(strings: TemplateStringsArray | string, ...values: unknown[]): RawExpression;
34
+ export declare function raw(strings: TemplateStringsArray, ...values: unknown[]): RawExpression;
35
+ // eslint-disable-next-line pickier/no-unused-vars
36
+ export declare function raw(sqlOrStrings: TemplateStringsArray | string): RawExpression;
37
+ // eslint-disable-next-line pickier/no-unused-vars
38
+ export declare function raw(sql: string): RawExpression;
34
39
  /**
35
40
  * Render a SELECT-list entry to its SQL text, unwrapping SQL fragments instead
36
41
  * of letting them stringify to "[object Object]" (stacksjs/bun-query-builder#1016).
@@ -125,6 +130,14 @@ export declare function setQueryCacheMaxSize(size: number): void;
125
130
  declare interface RawExpression {
126
131
  raw: string
127
132
  }
133
+ /**
134
+ * A fragment with bound values, as `db.raw('stock - ?', [n])` builds it.
135
+ * `set()` and `where()` render it at its position and bind its values.
136
+ */
137
+ export declare interface BoundSqlFragment {
138
+ readonly sql: string
139
+ readonly parameters: readonly unknown[]
140
+ }
128
141
  export declare interface WhereRaw {
129
142
  raw: SqlFragment
130
143
  }
@@ -151,7 +164,7 @@ export declare interface BaseSelectQueryBuilder<DB extends AnyDatabaseSchema, TT
151
164
  distinctOn: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
152
165
  selectRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
153
166
  where: <K extends keyof DB[TTable]['columns'] & string>(
154
- expr: WhereExpression<DB[TTable]['columns']> | K,
167
+ expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
155
168
  op?: WhereOperator,
156
169
  value?: WhereValue<DB[TTable]['columns'][K]>,
157
170
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
@@ -188,12 +201,12 @@ export declare interface BaseSelectQueryBuilder<DB extends AnyDatabaseSchema, TT
188
201
  whereJsonContains: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
189
202
  whereJsonPath?: (path: string, op: WhereOperator, value: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
190
203
  andWhere: <K extends keyof DB[TTable]['columns'] & string>(
191
- expr: WhereExpression<DB[TTable]['columns']> | K,
204
+ expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
192
205
  op?: WhereOperator,
193
206
  value?: WhereValue<DB[TTable]['columns'][K]>,
194
207
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
195
208
  orWhere: <K extends keyof DB[TTable]['columns'] & string>(
196
- expr: WhereExpression<DB[TTable]['columns']> | K,
209
+ expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
197
210
  op?: WhereOperator,
198
211
  value?: WhereValue<DB[TTable]['columns'][K]>,
199
212
  ) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
@@ -359,7 +372,7 @@ export declare interface UpdateQueryBuilder<DB extends AnyDatabaseSchema, TTable
359
372
  }
360
373
  export declare interface DeleteQueryBuilder<DB extends AnyDatabaseSchema, TTable extends keyof DB & string> {
361
374
  where: <K extends keyof DB[TTable]['columns'] & string>(
362
- expr: WhereExpression<DB[TTable]['columns']> | K,
375
+ expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
363
376
  op?: WhereOperator,
364
377
  value?: WhereValue<DB[TTable]['columns'][K]>,
365
378
  ) => DeleteQueryBuilder<DB, TTable>
@@ -396,9 +409,11 @@ export declare interface QueryBuilder<DB extends AnyDatabaseSchema> {
396
409
  table: <TTable extends keyof DB & string>(table: TTable) => TableQueryBuilder<DB, TTable>
397
410
  selectFromSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, keyof DB & string, Record<string, unknown>>
398
411
  sql: DriverConnection
399
- raw: (strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment
412
+ raw: ((sql: string, bindings?: readonly unknown[]) => BoundSqlFragment) & ((strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment)
400
413
  simple: (strings: TemplateStringsArray, ...values: unknown[]) => unknown
401
414
  unsafe: <TRow extends Record<string, unknown> = Record<string, unknown>>(query: string, params?: unknown[]) => Promise<TRow[]>
415
+ deferInsert?: DeferredInsert
416
+ flushDeferredInserts?: () => void
402
417
  file: <TRow extends Record<string, unknown> = Record<string, unknown>>(path: string, params?: unknown[]) => Promise<TRow[]>
403
418
  reserve: () => Promise<(QueryBuilder<DB> & { release: () => void })>
404
419
  close: (opts?: { timeout?: number }) => Promise<void>
@@ -527,19 +542,21 @@ declare type Primitive = string | number | boolean | bigint | Date | null | unde
527
542
  declare type ValueOrRef = Primitive;
528
543
  export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in' | 'is' | 'is not';
529
544
  /**
530
- * Brand for SQL fragments produced by Bun's `sql\`...\`` tagged-template
531
- * (or any equivalent helper). Typed as `object` so the *Raw methods
532
- * (`whereRaw`, `selectRaw`, `groupByRaw`, `havingRaw`, `orderByRaw`)
533
- * refuse to compile when passed a bare string — concatenated user
534
- * input (`whereRaw(\`status = '${req.body.s}'\`)`) was the canonical
535
- * SQL-injection vector flagged by the audit as Q-3.
545
+ * Brand for SQL fragments, such as the exported `raw` helper builds. Typed as
546
+ * `object` so the *Raw methods (`whereRaw`, `selectRaw`, `groupByRaw`,
547
+ * `havingRaw`, `orderByRaw`) refuse to compile when passed a bare string —
548
+ * concatenated user input (`whereRaw(\`status = '${req.body.s}'\`)`) was the
549
+ * canonical SQL-injection vector flagged by the audit as Q-3.
536
550
  *
537
- * Callers who legitimately need raw SQL use `sql\`...\`` which
538
- * separates the SQL fragment from parameter values:
551
+ * Callers who need raw SQL use `raw`, which escapes interpolated values, or
552
+ * bind them with `db.raw('...', [values])` in `where()` and `set()`. A Bun
553
+ * `sql\`...\`` query is not a fragment: on Postgres and MySQL its text cannot be
554
+ * read back, and the *Raw methods take no bindings.
539
555
  *
540
556
  * ```ts
541
- * import { sql } from 'bun'
542
- * db.selectFrom('users').whereRaw(sql\`lower(name) = lower(${input})\`)
557
+ * import { raw } from 'bun-query-builder'
558
+ * db.selectFrom('users').whereRaw(raw\`lower(name) = lower(${input})\`)
559
+ * db.selectFrom('users').where(db.raw('lower(name) = lower(?)', [input]))
543
560
  * ```
544
561
  *
545
562
  * The runtime guard in each *Raw method also rejects bare strings as
@@ -655,7 +672,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
655
672
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
656
673
  expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
657
674
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
658
- expr: WhereExpression<DB[TTable]['columns']> | string,
675
+ expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
659
676
  op?: WhereOperator,
660
677
  value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
661
678
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
@@ -664,7 +681,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
664
681
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
665
682
  expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
666
683
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
667
- expr: WhereExpression<DB[TTable]['columns']> | string,
684
+ expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
668
685
  op?: WhereOperator,
669
686
  value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
670
687
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
@@ -673,7 +690,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
673
690
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
674
691
  expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
675
692
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
676
- expr: WhereExpression<DB[TTable]['columns']> | string,
693
+ expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
677
694
  op?: WhereOperator,
678
695
  value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
679
696
  ) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
package/dist/db.d.ts CHANGED
@@ -2,6 +2,7 @@ import { Database } from 'bun:sqlite';
2
2
  import { SQL } from 'bun';
3
3
  import type { SQLQueryBindings } from 'bun:sqlite';
4
4
  import type { DatabaseConfig, PoolConfig, SupportedDialect } from './types';
5
+ import type { DeferredInsert } from './sqlite-deferred-inserts';
5
6
  /**
6
7
  * The one place user values become driver bindings.
7
8
  *
@@ -160,6 +161,8 @@ export declare interface DriverConnection {
160
161
  unsafe: (sql: string, values?: unknown[]) => AwaitableDriverQuery
161
162
  query?: (sql: string, params?: unknown[]) => any
162
163
  close?: () => Promise<void> | void
164
+ deferInsert?: DeferredInsert
165
+ flushDeferredInserts?: () => void
163
166
  _prepareStatement?: (sql: string) => any
164
167
  [key: string]: any
165
168
  }
@@ -167,6 +170,8 @@ export declare interface DriverConnection {
167
170
  export type AwaitableDriverQuery = DriverQuery & PromiseLike<any>;
168
171
  declare class SQLiteWrapper {
169
172
  constructor(filename: string);
173
+ deferInsert: DeferredInsert;
174
+ flushDeferredInserts(): void;
170
175
  query(sql: string, params?: SQLQueryBindings[]): any[];
171
176
  run(sql: string, params?: SQLQueryBindings[]): any;
172
177
  close(): void;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,11 @@
1
+ export type { DeferredInsert } from './sqlite-deferred-inserts';
1
2
  // Resolve ambiguous re-exports by explicitly choosing which module's version to use
2
3
  export type { WhereOperator } from './browser';
3
- export type { ModelQueryBuilder } from './dynamodb/index';
4
+ // The ORM builder that `createModel(...).query()` and `defineModel(...).query()`
5
+ // return. It was the DynamoDB interface, which only the dynamodb entry point
6
+ // should name that; it stays reachable here under an explicit alias.
7
+ export type { ModelQueryBuilder } from './orm';
8
+ export type { ModelQueryBuilder as DynamoDBModelQueryBuilder } from './dynamodb/index';
4
9
  export type { ColumnName, QueryBuilder } from './client';
5
10
  export type { ModelRecord } from './schema';
6
11
  export type { ModelDefinition as OrmModelDefinition, ModelStatic as OrmModelStatic } from './orm';
package/dist/model.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { createBrowserModel, type BrowserModelDefinition } from './browser';
2
+ import { type ModelStatic, type ModelDefinition as OrmModelDefinition } from './orm';
2
3
  // Re-export the browser model types for convenience
3
4
  export type { BrowserModelDefinition as ModelDefinition };
4
5
  /**
@@ -83,7 +84,7 @@ export declare function registerModel<TModel>(name: string, model: TModel): TMod
83
84
  * @param definition - The model definition
84
85
  * @returns An isomorphic model with query methods
85
86
  */
86
- export declare function defineModel<const TDef extends BrowserModelDefinition>(definition: TDef): unknown;
87
+ export declare function defineModel<const TDef extends BrowserModelDefinition>(definition: TDef): DefinedModel<TDef>;
87
88
  /**
88
89
  * Register models on the global window.StacksBrowser object.
89
90
  * Call this in your app's entry point to make models available for STX auto-imports.
@@ -99,3 +100,22 @@ export declare function defineModel<const TDef extends BrowserModelDefinition>(d
99
100
  * ```
100
101
  */
101
102
  export declare function registerBrowserModels(models: Record<string, unknown>): void;
103
+ /**
104
+ * The definition as the ORM types read it. A literal definition normally
105
+ * satisfies the ORM's `ModelDefinition` already, which keeps its column and
106
+ * relation names narrow; intersecting unconditionally would widen them.
107
+ */
108
+ declare type ServerModelDefinition<TDef> = TDef extends OrmModelDefinition ? TDef : TDef & OrmModelDefinition;
109
+ /**
110
+ * What `defineModel()` returns: the ORM model, plus the raw definition for
111
+ * build tools that introspect it.
112
+ *
113
+ * It used to be typed as the browser model even though the package root runs
114
+ * on Bun and hands back the ORM model. So `whereRaw`, `with`, `whereGroup`,
115
+ * `increment` and the aggregates worked but did not type-check. Browser code
116
+ * builds its models with `createBrowserModel` from `bun-query-builder/browser`.
117
+ */
118
+ export type DefinedModel<TDef extends BrowserModelDefinition> = ModelStatic<ServerModelDefinition<TDef>> & {
119
+ definition: TDef
120
+ getName: () => TDef['name']
121
+ }
package/dist/orm.d.ts CHANGED
@@ -213,7 +213,7 @@ export declare interface WriteResultLike {
213
213
  * populated only for `belongsToMany` relations.
214
214
  */
215
215
  declare interface ResolvedRelation {
216
- type: 'hasMany' | 'hasOne' | 'belongsTo' | 'belongsToMany' | 'hasManyThrough' | 'hasOneThrough'
216
+ type: 'hasMany' | 'hasOne' | 'belongsTo' | 'belongsToMany' | 'hasManyThrough' | 'hasOneThrough' | 'morphMany' | 'morphOne'
217
217
  relatedModelName: string
218
218
  relatedTable: string
219
219
  foreignKey: string
@@ -225,6 +225,8 @@ declare interface ResolvedRelation {
225
225
  pivotTable?: string
226
226
  pivotFkParent?: string
227
227
  pivotFkRelated?: string
228
+ morphTypeColumn?: string
229
+ morphTypeValue?: string
228
230
  pivotColumns?: string[]
229
231
  pivotModelName?: string
230
232
  pivotTimestamps?: boolean
@@ -545,7 +547,10 @@ export type ModelStatic<TDef extends ModelDefinition> = StaticWhereOverloads<TDe
545
547
  createMany: (items: FillableAttributes<TDef>[]) => Promise<ModelRecord<TDef>[]>
546
548
  updateOrCreate: (search: Partial<ModelAttributes<TDef>>, data: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
547
549
  firstOrCreate: (search: Partial<ModelAttributes<TDef>>, data?: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
550
+ update: (id: number | string, data: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
551
+ delete: (id: number | string) => Promise<boolean>
548
552
  destroy: (id: number | string) => Promise<boolean>
553
+ forceDelete: (id: number | string) => Promise<boolean>
549
554
  remove: (id: number | string) => Promise<boolean>
550
555
  truncate: () => Promise<void>
551
556
  getDefinition: () => TDef
@@ -604,6 +609,7 @@ declare class ModelInstance<TDef extends ModelDefinition, TSelected extends Colu
604
609
  update(data: FillableAttributes<TDef>): Promise<this>;
605
610
  fresh(): Promise<ModelInstance<TDef, TSelected> | null>;
606
611
  delete(): Promise<boolean>;
612
+ forceDelete(): Promise<boolean>;
607
613
  restore(): Promise<this>;
608
614
  trashed(): boolean;
609
615
  refresh(): Promise<this | null>;
@@ -671,7 +677,11 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
671
677
  orWhereLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
672
678
  whereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
673
679
  orWhereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
680
+ whereRaw(fragment: string, bindings: readonly unknown[]): ModelQueryBuilder<TDef, TSelected>;
681
+ whereRaw(fragment: string, ...bindings: unknown[]): ModelQueryBuilder<TDef, TSelected>;
674
682
  whereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
683
+ orWhereRaw(fragment: string, bindings: readonly unknown[]): ModelQueryBuilder<TDef, TSelected>;
684
+ orWhereRaw(fragment: string, ...bindings: unknown[]): ModelQueryBuilder<TDef, TSelected>;
675
685
  orWhereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
676
686
  whereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
677
687
  orWhereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
@@ -681,6 +691,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
681
691
  orderBy<K extends ColumnName<TDef>>(column: K, direction?: 'asc' | 'desc'): ModelQueryBuilder<TDef, TSelected>;
682
692
  orderByDesc<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
683
693
  orderByAsc<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
694
+ latest(column?: ColumnName<TDef>): ModelQueryBuilder<TDef, TSelected>;
695
+ oldest(column?: ColumnName<TDef>): ModelQueryBuilder<TDef, TSelected>;
684
696
  limit(count: number): ModelQueryBuilder<TDef, TSelected>;
685
697
  take(count: number): ModelQueryBuilder<TDef, TSelected>;
686
698
  offset(count: number): ModelQueryBuilder<TDef, TSelected>;
@@ -692,6 +704,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
692
704
  get(): Promise<ModelRecord<TDef, TSelected>[]>;
693
705
  first(): Promise<ModelRecord<TDef, TSelected> | undefined>;
694
706
  firstOrFail(): Promise<ModelRecord<TDef, TSelected>>;
707
+ find(id: number | string): Promise<ModelRecord<TDef, TSelected> | undefined>;
708
+ findOrFail(id: number | string): Promise<ModelRecord<TDef, TSelected>>;
695
709
  last(): Promise<ModelRecord<TDef, TSelected> | undefined>;
696
710
  count(): Promise<number>;
697
711
  exists(): Promise<boolean>;
@@ -43,15 +43,29 @@ export declare function renderInPredicate(column: string, values: readonly unkno
43
43
  * application that developed against SQLite therefore finds out at the point
44
44
  * its raw queries first meet Postgres, and the error does not name the cause.
45
45
  *
46
- * Only unquoted placeholders are rewritten. A `?` inside a string literal, a
47
- * quoted identifier, or a dollar-quoted block is data and is left exactly as
48
- * written — the naive global replace is the reason this needs to be a function
49
- * with tests rather than one line at a call site.
46
+ * Only unquoted placeholders are rewritten; see {@link mapPlaceholders} for
47
+ * what counts as quoted. Postgres' jsonb `?`, `?|` and `?&` operators cannot be
48
+ * told apart from placeholders, so write them as `jsonb_exists(col, key)`,
49
+ * `jsonb_exists_any(col, keys)` and `jsonb_exists_all(col, keys)`.
50
50
  *
51
51
  * Dialects that already take `?` get the string back unchanged, so this is safe
52
52
  * to apply unconditionally.
53
53
  */
54
54
  export declare function toDialectPlaceholders(sql: string, dialect: SupportedDialect): string;
55
+ /**
56
+ * How many `?` placeholders `sql` binds, by the same rules as
57
+ * {@link toDialectPlaceholders}.
58
+ */
59
+ export declare function countPlaceholders(sql: string): number;
60
+ /* … *\/` block comments, which nest
61
+ *
62
+ * The ORM used a bare `sql.replace(/\?/g, …)`, so on Postgres
63
+ * `whereRaw("name = '?'")` was sent as `name = '$1'` and quietly matched nothing,
64
+ * and a `?` in a comment consumed a binding. The comment rules are the ones
65
+ * {@link scanTopLevelKeywords} uses; backslash escapes are not honoured, for the
66
+ * reason given there.
67
+ */
68
+ export declare function mapPlaceholders(sql: string, replace: (ordinal: number) => string | undefined): { text: string, count: number };
55
69
  /* … *\/` block comments, which nest
56
70
  * - `$$…$$` / `$tag$…$tag$` dollar-quoted strings, without mistaking a `$1`
57
71
  * placeholder for the start of one
@@ -0,0 +1,11 @@
1
+ import type { Database, SQLQueryBindings } from 'bun:sqlite';
2
+ export type DeferredInsert = (table: string, record: Readonly<Record<string, SQLQueryBindings | undefined>>) => Promise<void>;
3
+ /** Native work stays synchronous so close and transaction barriers can drain it. */
4
+ export declare class SQLiteDeferredInserts {
5
+ constructor(database: Database);
6
+ get hasPending(): boolean;
7
+ append: DeferredInsert;
8
+ flush(): void;
9
+ assertUsable(): void;
10
+ close(): void;
11
+ }
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{Gt,Jt,zt,h,Ve,He,Yt,Ne,Xt,xn}from"../chunk-7xvyccgk.js";export{Ve as BrowserQueryBuilder,h as BrowserQueryError,Xt as browserAuth,He as browserQuery,Gt as configureBrowser,Yt as createBrowserDb,Ne as createBrowserModel,xn as default,Jt as getBrowserConfig,zt as isBrowser};
2
+ import{zt,Yt,Xt,h,He,Qe,Zt,Be,en,vn}from"../chunk-baj1dqgh.js";export{He as BrowserQueryBuilder,h as BrowserQueryError,en as browserAuth,Qe as browserQuery,zt as configureBrowser,Zt as createBrowserDb,Be as createBrowserModel,vn as default,Yt as getBrowserConfig,Xt as isBrowser};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{U,D,gt,Ie,E,xe,Le,Ke,ve,pt,d,V,ke,Fe,yt,je,Ot,_t}from"../../chunk-55jccfgb.js";export{U as DynamoDBClient,ke as DynamoDBMigrationDriver,V as DynamoDBMigrationTracker,je as EntityQueryBuilder,d as MIGRATIONS_TABLE,Ie as Model,ve as buildDynamoDBMigrationPlan,gt as configureModels,Ke as convertSchemaToDefinition,D as createClient,_t as createDynamo,Fe as createMigrationDriver,Ot as dynamo,Le as extractModelSchema,xe as extractTableDefinition,E as hashTableDefinition,pt as isDefinitionEqual,yt as migrateModels};
2
+ import{U,D,pt,Le,E,xe,Ke,Fe,ve,yt,d,V,ke,je,bt,qe,It,Lt}from"../../chunk-0x1f6w08.js";export{U as DynamoDBClient,ke as DynamoDBMigrationDriver,V as DynamoDBMigrationTracker,qe as EntityQueryBuilder,d as MIGRATIONS_TABLE,Le as Model,ve as buildDynamoDBMigrationPlan,pt as configureModels,Fe as convertSchemaToDefinition,D as createClient,Lt as createDynamo,je as createMigrationDriver,It as dynamo,Ke as extractModelSchema,xe as extractTableDefinition,E as hashTableDefinition,yt as isDefinitionEqual,bt as migrateModels};
package/dist/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{J,S,Zt,en,l,kt,Ct,i,Qe,Ge,z,Y,X,N,Z,ee,te,ne,B,re,P,O,ie,se,_,ae,oe,Je,Be,ze,v,le,a,ce,ue,de,fe,f,Ye,b,k,C,me,he,I,ge,L,pe,K,F,R,j,ye,be,Te,we,q,Se,De,T,m,tn,nn,rn,Xe,Ze,et,tt,nt,sn,rt,Rt,an,on,ln,cn,it,un,dn,fn,$e,u,st,at,ot,lt,ct,At,W,Ee,mn,hn,ut,Pe,g,Oe,_e,Mt,gn,Nt,pn,dt,ft,mt,Bt,Pt}from"../chunk-52cd7svn.js";import{ht,c,U,D,gt,Ie,E,xe,Le,Ke,ve,pt,d,V,ke,Fe,yt,je,Ot,_t}from"../chunk-55jccfgb.js";import{n,bt,e,H,t,s,Q,qe,yn,It,Lt,G,bn,Ue,p,Kt,Ft,y,Tn,wt,St,Dt,$t,wn,Sn,Dn,Et,xt,$n,En,jt,qt,Wt,Ut,Vt,vt,Ht,Qt}from"../chunk-kxsapz85.js";import{Gt,Jt,zt,h,Ve,He,Yt,Ne,Xt}from"../chunk-7xvyccgk.js";export{Et as BelongsToManyRelationBuilder,Ve as BrowserQueryBuilder,h as BrowserQueryError,It as DEFAULT_SQLITE_PRAGMAS,U as DynamoDBClient,ht as DynamoDBDriverImpl,m as DynamoDBItemBuilder,ke as DynamoDBMigrationDriver,V as DynamoDBMigrationTracker,T as DynamoDBQueryBuilder,it as DynamoDBToolingAdapter,je as EntityQueryBuilder,ot as GENERATED_MARKER,d as MIGRATIONS_TABLE,Ie as Model,a as MySQLDriver,ce as PostgresDriver,fe as SQLiteDriver,Nt as Seeder,ue as SingleStoreDriver,Xe as SingleTableManager,sn as SingleTablePatterns,et as SingleTableQueryBuilder,Ze as SingleTableRepository,g as UTC_CLOCK_DEFAULT,de as VitessDriver,G as applySqliteBootstrapPragmas,Bt as auditSchemaDrift,Xt as browserAuth,He as browserQuery,$e as buildDatabaseSchema,ve as buildDynamoDBMigrationPlan,W as buildMigrationPlan,st as buildSchemaMeta,z as cacheClear,X as cacheConfig,Y as cacheStats,Pe as canonicalStorageType,Oe as canonicalizeDefault,Se as checkSchema,St as clearLocalModels,Vt as clearModelRegistry,Qe as clearQueryCache,e as config,Gt as configureBrowser,gt as configureModels,wn as configureOrm,Ke as convertSchemaToDefinition,Yt as createBrowserDb,Ne as createBrowserModel,D as createClient,_t as createDynamo,rn as createDynamoDBClient,c as createDynamoDBDriver,nn as createDynamoDBItemBuilder,tn as createDynamoDBQueryBuilder,un as createDynamoDBToolingAdapter,wt as createFakerCompatLayer,Fe as createMigrationDriver,xt as createModel,i as createQueryBuilder,nt as createRepository,tt as createSingleTableManager,$n as createTableFromModel,B as dbInfo,P as dbOptimize,re as dbStats,O as dbWipe,bt as defaultConfig,yn as defineConfig,Ht as defineModel,gn as defineModels,pn as defineSeeder,ne as dumpDatabase,Ot as dynamo,Ct as escapeStringLiteral,k as executeMigration,ie as explain,K as explainAllQueries,ee as exportData,Dt as extractChanges,$t as extractInsertId,Le as extractModelSchema,xe as extractTableDefinition,dt as familyOfDeclared,ft as familyOfSqlType,se as file,Pt as formatSchemaDrift,be as freshDatabase,dn as generateAccessPatterns,F as generateDiagram,_e as generateDiffOperations,Mt as generateDiffSql,hn as generateDiffSqlString,b as generateMigration,ze as generateModelSource,Ee as generateSql,mn as generateSqlString,qt as getAllModels,Jt as getBrowserConfig,Q as getConfig,Dn as getDatabase,f as getDialectDriver,jt as getModel,Wt as getModelRegistry,t as getPlaceholder,s as getPlaceholders,Ut as hasModel,ut as hashMigrationPlan,E as hashTableDefinition,te as importData,Ft as inflectSingular,_ as inspectTable,oe as introspect,v as introspectDatabase,zt as isBrowser,pt as isDefinitionEqual,lt as isGeneratedMigrationSql,At as isLosslessTypeChange,n as isMysqlLike,Zt as iterateAllPivots,at as lastCreatedMigrationFiles,u as loadModels,le as makeModel,ye as makeSeeder,ln as marshallObject,me as migrateGenerate,ge as migrateList,yt as migrateModels,he as migrateRollback,I as migrateStatus,ct as migrationBody,Be as modelNameForTable,L as modelShow,P as optimizeDatabase,Rt as parseStacksModels,pe as ping,K as queryExplainAll,l as quoteColumnForDialect,en as raw,Qt as registerBrowserModels,vt as registerModel,F as relationDiagram,Sn as releaseOrm,bn as resetConnection,C as resetDatabase,H as resolveDialect,rt as resolveKeyPattern,S as resolvePivot,Lt as resolveSqlitePragmas,J as runBenchmark,j as runSeeder,R as runSeeders,mt as satisfies,Ye as saveMigrationSnapshot,En as seedModel,qe as setConfig,Ge as setQueryCacheMaxSize,L as showModel,y as singularizerFor,Te as sql,Je as sqlTypeToAttr,fn as stacksModelToEntity,N as startConsole,Kt as stripTrailingS,ae as tableInfo,p as tableNameFor,kt as temporalLiteral,Z as tinker,Tn as toDialectPlaceholders,an as toDynamoDBItem,on as toModelInstance,Ue as toTableName,cn as unmarshallItem,we as unsafe,q as validateSchema,De as waitReady,O as wipeDatabase};
2
+ import{J,S,tn,nn,l,Rt,At,i,Ge,Je,z,Y,X,N,Z,ee,te,ne,B,re,P,O,ie,se,_,ae,oe,ze,Pe,Ye,v,le,a,ce,ue,de,fe,f,Xe,b,k,C,me,he,I,ge,L,pe,K,F,R,j,ye,be,Te,we,q,Se,De,T,m,rn,sn,an,Ze,et,tt,nt,rt,on,it,Mt,ln,cn,un,dn,st,fn,mn,hn,$e,u,at,ot,lt,ct,ut,Nt,W,Ee,gn,pn,dt,Oe,g,_e,Ie,Bt,yn,Pt,bn,ft,mt,ht,Ot,_t}from"../chunk-a8q2z6rv.js";import{gt,c,U,D,pt,Le,E,xe,Ke,Fe,ve,yt,d,V,ke,je,bt,qe,It,Lt}from"../chunk-0x1f6w08.js";import{n,Tt,e,H,t,s,Q,We,Tn,Kt,Ft,G,wn,Ve,p,jt,qt,y,St,Dt,$t,Et,xt,Sn,Dn,$n,vt,kt,En,xn,Wt,Ut,Vt,Ht,Qt,Ct,Gt,Jt}from"../chunk-ndnqqp78.js";import{zt,Yt,Xt,h,He,Qe,Zt,Be,en}from"../chunk-baj1dqgh.js";export{vt as BelongsToManyRelationBuilder,He as BrowserQueryBuilder,h as BrowserQueryError,Kt as DEFAULT_SQLITE_PRAGMAS,U as DynamoDBClient,gt as DynamoDBDriverImpl,m as DynamoDBItemBuilder,ke as DynamoDBMigrationDriver,V as DynamoDBMigrationTracker,T as DynamoDBQueryBuilder,st as DynamoDBToolingAdapter,qe as EntityQueryBuilder,lt as GENERATED_MARKER,d as MIGRATIONS_TABLE,Le as Model,a as MySQLDriver,ce as PostgresDriver,fe as SQLiteDriver,Pt as Seeder,ue as SingleStoreDriver,Ze as SingleTableManager,on as SingleTablePatterns,tt as SingleTableQueryBuilder,et as SingleTableRepository,g as UTC_CLOCK_DEFAULT,de as VitessDriver,G as applySqliteBootstrapPragmas,Ot as auditSchemaDrift,en as browserAuth,Qe as browserQuery,$e as buildDatabaseSchema,ve as buildDynamoDBMigrationPlan,W as buildMigrationPlan,at as buildSchemaMeta,z as cacheClear,X as cacheConfig,Y as cacheStats,Oe as canonicalStorageType,_e as canonicalizeDefault,Se as checkSchema,$t as clearLocalModels,Qt as clearModelRegistry,Ge as clearQueryCache,e as config,zt as configureBrowser,pt as configureModels,Sn as configureOrm,Fe as convertSchemaToDefinition,Zt as createBrowserDb,Be as createBrowserModel,D as createClient,Lt as createDynamo,an as createDynamoDBClient,c as createDynamoDBDriver,sn as createDynamoDBItemBuilder,rn as createDynamoDBQueryBuilder,fn as createDynamoDBToolingAdapter,Dt as createFakerCompatLayer,je as createMigrationDriver,kt as createModel,i as createQueryBuilder,rt as createRepository,nt as createSingleTableManager,En as createTableFromModel,B as dbInfo,P as dbOptimize,re as dbStats,O as dbWipe,Tt as defaultConfig,Tn as defineConfig,Gt as defineModel,yn as defineModels,bn as defineSeeder,ne as dumpDatabase,It as dynamo,At as escapeStringLiteral,k as executeMigration,ie as explain,K as explainAllQueries,ee as exportData,Et as extractChanges,xt as extractInsertId,Ke as extractModelSchema,xe as extractTableDefinition,ft as familyOfDeclared,mt as familyOfSqlType,se as file,_t as formatSchemaDrift,be as freshDatabase,mn as generateAccessPatterns,F as generateDiagram,Ie as generateDiffOperations,Bt as generateDiffSql,pn as generateDiffSqlString,b as generateMigration,Ye as generateModelSource,Ee as generateSql,gn as generateSqlString,Ut as getAllModels,Yt as getBrowserConfig,Q as getConfig,$n as getDatabase,f as getDialectDriver,Wt as getModel,Vt as getModelRegistry,t as getPlaceholder,s as getPlaceholders,Ht as hasModel,dt as hashMigrationPlan,E as hashTableDefinition,te as importData,qt as inflectSingular,_ as inspectTable,oe as introspect,v as introspectDatabase,Xt as isBrowser,yt as isDefinitionEqual,ct as isGeneratedMigrationSql,Nt as isLosslessTypeChange,n as isMysqlLike,tn as iterateAllPivots,ot as lastCreatedMigrationFiles,u as loadModels,le as makeModel,ye as makeSeeder,un as marshallObject,me as migrateGenerate,ge as migrateList,bt as migrateModels,he as migrateRollback,I as migrateStatus,ut as migrationBody,Pe as modelNameForTable,L as modelShow,P as optimizeDatabase,Mt as parseStacksModels,pe as ping,K as queryExplainAll,l as quoteColumnForDialect,nn as raw,Jt as registerBrowserModels,Ct as registerModel,F as relationDiagram,Dn as releaseOrm,wn as resetConnection,C as resetDatabase,H as resolveDialect,it as resolveKeyPattern,S as resolvePivot,Ft as resolveSqlitePragmas,J as runBenchmark,j as runSeeder,R as runSeeders,ht as satisfies,Xe as saveMigrationSnapshot,xn as seedModel,We as setConfig,Je as setQueryCacheMaxSize,L as showModel,y as singularizerFor,Te as sql,ze as sqlTypeToAttr,hn as stacksModelToEntity,N as startConsole,jt as stripTrailingS,ae as tableInfo,p as tableNameFor,Rt as temporalLiteral,Z as tinker,St as toDialectPlaceholders,ln as toDynamoDBItem,cn as toModelInstance,Ve as toTableName,dn as unmarshallItem,we as unsafe,q as validateSchema,De as waitReady,O as wipeDatabase};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.2.68",
4
+ "version": "0.2.70",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",
@@ -77,13 +77,13 @@
77
77
  "typecheck": "bun --bun tsc"
78
78
  },
79
79
  "dependencies": {
80
- "@stacksjs/clapp": "^0.2.12",
80
+ "@stacksjs/clapp": "^0.2.16",
81
81
  "@stacksjs/ts-faker": "^0.1.8",
82
82
  "@stacksjs/ts-validation": "^0.5.2",
83
- "dynamodb-tooling": "^0.3.5"
83
+ "dynamodb-tooling": "^0.3.6"
84
84
  },
85
85
  "devDependencies": {
86
- "bunfig": "^0.15.17"
86
+ "bunfig": "^0.15.19"
87
87
  },
88
88
  "git-hooks": {
89
89
  "pre-commit": {
@@ -1,2 +0,0 @@
1
- // @bun
2
- import{Ye,b,k,C}from"./chunk-52cd7svn.js";import"./chunk-55jccfgb.js";import"./chunk-kxsapz85.js";import"./chunk-7xvyccgk.js";export{k as executeMigration,b as generateMigration,C as resetDatabase,Ye as saveMigrationSnapshot};