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/bin/cli.js +19 -19
- package/dist/{chunk-55jccfgb.js → chunk-0x1f6w08.js} +3 -3
- package/dist/chunk-a8q2z6rv.js +383 -0
- package/dist/{chunk-7xvyccgk.js → chunk-baj1dqgh.js} +2 -2
- package/dist/chunk-f0ka4910.js +2 -0
- package/dist/chunk-n6g1zfr3.js +2 -0
- package/dist/chunk-ndnqqp78.js +67 -0
- package/dist/client.d.ts +36 -19
- package/dist/db.d.ts +5 -0
- package/dist/index.d.ts +6 -1
- package/dist/model.d.ts +21 -1
- package/dist/orm.d.ts +15 -1
- package/dist/sql-fragments.d.ts +18 -4
- package/dist/sqlite-deferred-inserts.d.ts +11 -0
- package/dist/src/browser.js +1 -1
- package/dist/src/dynamodb/index.js +1 -1
- package/dist/src/index.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-1fdcm72e.js +0 -2
- package/dist/chunk-52cd7svn.js +0 -383
- package/dist/chunk-9wq3hjqw.js +0 -2
- package/dist/chunk-kxsapz85.js +0 -66
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
|
|
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
|
|
531
|
-
*
|
|
532
|
-
*
|
|
533
|
-
*
|
|
534
|
-
*
|
|
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
|
|
538
|
-
*
|
|
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 {
|
|
542
|
-
* db.selectFrom('users').whereRaw(
|
|
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
|
-
|
|
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):
|
|
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>;
|
package/dist/sql-fragments.d.ts
CHANGED
|
@@ -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
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
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
|
+
}
|
package/dist/src/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
83
|
+
"dynamodb-tooling": "^0.3.6"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"bunfig": "^0.15.
|
|
86
|
+
"bunfig": "^0.15.19"
|
|
87
87
|
},
|
|
88
88
|
"git-hooks": {
|
|
89
89
|
"pre-commit": {
|
package/dist/chunk-1fdcm72e.js
DELETED