bun-query-builder 0.2.69 → 0.3.0
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 +20 -20
- package/dist/{chunk-kwpppy92.js → chunk-3xpe6b57.js} +4 -4
- package/dist/{chunk-7xvyccgk.js → chunk-4cs1xx1d.js} +2 -2
- package/dist/chunk-c7m701dd.js +3 -0
- package/dist/chunk-cxpaxq2p.js +3 -0
- package/dist/chunk-hgsjz3vz.js +2 -0
- package/dist/chunk-hjgcemhy.js +67 -0
- package/dist/chunk-vn93p5q6.js +2 -0
- package/dist/chunk-vw9ss7z8.js +383 -0
- package/dist/client.d.ts +33 -19
- package/dist/index.d.ts +5 -1
- package/dist/model.d.ts +21 -1
- package/dist/orm.d.ts +16 -1
- package/dist/runtime.d.ts +19 -0
- package/dist/sql-fragments.d.ts +18 -4
- package/dist/src/browser.js +1 -1
- package/dist/src/dynamodb/index.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/runtime.js +2 -0
- package/package.json +8 -4
- package/dist/chunk-1dv5caj0.js +0 -383
- package/dist/chunk-8pz2q01r.js +0 -66
- package/dist/chunk-adc2hmcg.js +0 -2
- package/dist/chunk-asqteyr4.js +0 -2
- /package/dist/{chunk-0h2h0qf3.js → chunk-r2ta1rnj.js} +0 -0
package/dist/client.d.ts
CHANGED
|
@@ -31,7 +31,11 @@ import type { SchemaMeta } from './meta';
|
|
|
31
31
|
* db.selectFrom('orders').whereRaw(raw`status = ${userStatus}`) // value escaped
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
34
|
-
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;
|
|
35
39
|
/**
|
|
36
40
|
* Render a SELECT-list entry to its SQL text, unwrapping SQL fragments instead
|
|
37
41
|
* of letting them stringify to "[object Object]" (stacksjs/bun-query-builder#1016).
|
|
@@ -126,6 +130,14 @@ export declare function setQueryCacheMaxSize(size: number): void;
|
|
|
126
130
|
declare interface RawExpression {
|
|
127
131
|
raw: string
|
|
128
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
|
+
}
|
|
129
141
|
export declare interface WhereRaw {
|
|
130
142
|
raw: SqlFragment
|
|
131
143
|
}
|
|
@@ -152,7 +164,7 @@ export declare interface BaseSelectQueryBuilder<DB extends AnyDatabaseSchema, TT
|
|
|
152
164
|
distinctOn: (...columns: (keyof DB[TTable]['columns'] & string | string)[]) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
153
165
|
selectRaw: (fragment: SqlFragment) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
154
166
|
where: <K extends keyof DB[TTable]['columns'] & string>(
|
|
155
|
-
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
167
|
+
expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
|
|
156
168
|
op?: WhereOperator,
|
|
157
169
|
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
158
170
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -189,12 +201,12 @@ export declare interface BaseSelectQueryBuilder<DB extends AnyDatabaseSchema, TT
|
|
|
189
201
|
whereJsonContains: (column: string, json: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
190
202
|
whereJsonPath?: (path: string, op: WhereOperator, value: unknown) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
191
203
|
andWhere: <K extends keyof DB[TTable]['columns'] & string>(
|
|
192
|
-
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
204
|
+
expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
|
|
193
205
|
op?: WhereOperator,
|
|
194
206
|
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
195
207
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
196
208
|
orWhere: <K extends keyof DB[TTable]['columns'] & string>(
|
|
197
|
-
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
209
|
+
expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
|
|
198
210
|
op?: WhereOperator,
|
|
199
211
|
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
200
212
|
) => SelectQueryBuilder<DB, TTable, TSelected, TJoined>
|
|
@@ -360,7 +372,7 @@ export declare interface UpdateQueryBuilder<DB extends AnyDatabaseSchema, TTable
|
|
|
360
372
|
}
|
|
361
373
|
export declare interface DeleteQueryBuilder<DB extends AnyDatabaseSchema, TTable extends keyof DB & string> {
|
|
362
374
|
where: <K extends keyof DB[TTable]['columns'] & string>(
|
|
363
|
-
expr: WhereExpression<DB[TTable]['columns']> | K,
|
|
375
|
+
expr: WhereExpression<DB[TTable]['columns']> | K | BoundSqlFragment,
|
|
364
376
|
op?: WhereOperator,
|
|
365
377
|
value?: WhereValue<DB[TTable]['columns'][K]>,
|
|
366
378
|
) => DeleteQueryBuilder<DB, TTable>
|
|
@@ -397,7 +409,7 @@ export declare interface QueryBuilder<DB extends AnyDatabaseSchema> {
|
|
|
397
409
|
table: <TTable extends keyof DB & string>(table: TTable) => TableQueryBuilder<DB, TTable>
|
|
398
410
|
selectFromSub: (sub: { toSQL: () => string }, alias: string) => SelectQueryBuilder<DB, keyof DB & string, Record<string, unknown>>
|
|
399
411
|
sql: DriverConnection
|
|
400
|
-
raw: (strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment
|
|
412
|
+
raw: ((sql: string, bindings?: readonly unknown[]) => BoundSqlFragment) & ((strings: TemplateStringsArray, ...values: unknown[]) => SqlFragment)
|
|
401
413
|
simple: (strings: TemplateStringsArray, ...values: unknown[]) => unknown
|
|
402
414
|
unsafe: <TRow extends Record<string, unknown> = Record<string, unknown>>(query: string, params?: unknown[]) => Promise<TRow[]>
|
|
403
415
|
deferInsert?: DeferredInsert
|
|
@@ -530,19 +542,21 @@ declare type Primitive = string | number | boolean | bigint | Date | null | unde
|
|
|
530
542
|
declare type ValueOrRef = Primitive;
|
|
531
543
|
export type WhereOperator = '=' | '!=' | '<' | '>' | '<=' | '>=' | 'like' | 'in' | 'not in' | 'is' | 'is not';
|
|
532
544
|
/**
|
|
533
|
-
* Brand for SQL fragments
|
|
534
|
-
*
|
|
535
|
-
*
|
|
536
|
-
*
|
|
537
|
-
*
|
|
538
|
-
* 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.
|
|
539
550
|
*
|
|
540
|
-
* Callers who
|
|
541
|
-
*
|
|
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.
|
|
542
555
|
*
|
|
543
556
|
* ```ts
|
|
544
|
-
* import {
|
|
545
|
-
* 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]))
|
|
546
560
|
* ```
|
|
547
561
|
*
|
|
548
562
|
* The runtime guard in each *Raw method also rejects bare strings as
|
|
@@ -658,7 +672,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
|
|
|
658
672
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
659
673
|
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
660
674
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
661
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
675
|
+
expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
|
|
662
676
|
op?: WhereOperator,
|
|
663
677
|
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
664
678
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} WHERE ${string}`>)
|
|
@@ -667,7 +681,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
|
|
|
667
681
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
668
682
|
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
669
683
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
670
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
684
|
+
expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
|
|
671
685
|
op?: WhereOperator,
|
|
672
686
|
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
673
687
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} AND ${string}`>)
|
|
@@ -676,7 +690,7 @@ export type TypedSelectQueryBuilder<DB extends AnyDatabaseSchema, TTable extends
|
|
|
676
690
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} = ?`>) & (<K extends keyof DB[TTable]['columns'] & string, OP extends WhereOperator>(
|
|
677
691
|
expr: [K, OP, WhereValue<DB[TTable]['columns'][K]>],
|
|
678
692
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${K} ${Uppercase<OP>} ${OP extends 'in' | 'not in' ? '(?)' : '?'}`>) & ((
|
|
679
|
-
expr: WhereExpression<DB[TTable]['columns']> | string,
|
|
693
|
+
expr: WhereExpression<DB[TTable]['columns']> | string | BoundSqlFragment,
|
|
680
694
|
op?: WhereOperator,
|
|
681
695
|
value?: WhereValue<DB[TTable]['columns'][keyof DB[TTable]['columns'] & string]>,
|
|
682
696
|
) => TypedSelectQueryBuilder<DB, TTable, TSelected, TJoined, `${TSql} OR ${string}`>)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export type { DeferredInsert } from './sqlite-deferred-inserts';
|
|
2
2
|
// Resolve ambiguous re-exports by explicitly choosing which module's version to use
|
|
3
3
|
export type { WhereOperator } from './browser';
|
|
4
|
-
|
|
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';
|
|
5
9
|
export type { ColumnName, QueryBuilder } from './client';
|
|
6
10
|
export type { ModelRecord } from './schema';
|
|
7
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
|
@@ -547,7 +547,10 @@ export type ModelStatic<TDef extends ModelDefinition> = StaticWhereOverloads<TDe
|
|
|
547
547
|
createMany: (items: FillableAttributes<TDef>[]) => Promise<ModelRecord<TDef>[]>
|
|
548
548
|
updateOrCreate: (search: Partial<ModelAttributes<TDef>>, data: FillableAttributes<TDef>) => Promise<ModelRecord<TDef>>
|
|
549
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>
|
|
550
552
|
destroy: (id: number | string) => Promise<boolean>
|
|
553
|
+
forceDelete: (id: number | string) => Promise<boolean>
|
|
551
554
|
remove: (id: number | string) => Promise<boolean>
|
|
552
555
|
truncate: () => Promise<void>
|
|
553
556
|
getDefinition: () => TDef
|
|
@@ -584,7 +587,7 @@ declare class DriverExecutor implements OrmExecutor {
|
|
|
584
587
|
* Model instance - represents a single database record
|
|
585
588
|
*/
|
|
586
589
|
declare class ModelInstance<TDef extends ModelDefinition, TSelected extends ColumnName<TDef> = ColumnName<TDef>> {
|
|
587
|
-
constructor(definition: TDef, attributes
|
|
590
|
+
constructor(definition: TDef, attributes: Partial<ModelAttributes<TDef>>, exists: boolean);
|
|
588
591
|
get<K extends TSelected>(key: K): K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : never;
|
|
589
592
|
getAttribute<K extends TSelected>(key: K): K extends keyof ModelAttributes<TDef> ? ModelAttributes<TDef>[K] : unknown;
|
|
590
593
|
getAttributes(): Pick<ModelAttributes<TDef>, TSelected & keyof ModelAttributes<TDef>>;
|
|
@@ -602,10 +605,13 @@ declare class ModelInstance<TDef extends ModelDefinition, TSelected extends Colu
|
|
|
602
605
|
getChanges(): Partial<InferModelAttributes<TDef>>;
|
|
603
606
|
fill(data: FillableAttributes<TDef>): this;
|
|
604
607
|
forceFill(data: Partial<InferModelAttributes<TDef>>): this;
|
|
608
|
+
_prepareInsert(): Promise<Record<string, unknown>>;
|
|
609
|
+
_markInserted(data: Record<string, unknown>, generatedKey?: unknown): Promise<void>;
|
|
605
610
|
save(): Promise<this>;
|
|
606
611
|
update(data: FillableAttributes<TDef>): Promise<this>;
|
|
607
612
|
fresh(): Promise<ModelInstance<TDef, TSelected> | null>;
|
|
608
613
|
delete(): Promise<boolean>;
|
|
614
|
+
forceDelete(): Promise<boolean>;
|
|
609
615
|
restore(): Promise<this>;
|
|
610
616
|
trashed(): boolean;
|
|
611
617
|
refresh(): Promise<this | null>;
|
|
@@ -673,7 +679,11 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
673
679
|
orWhereLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
674
680
|
whereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
675
681
|
orWhereNotLike<K extends ColumnName<TDef>>(column: K, pattern: string): ModelQueryBuilder<TDef, TSelected>;
|
|
682
|
+
whereRaw(fragment: string, bindings: readonly unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
683
|
+
whereRaw(fragment: string, ...bindings: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
676
684
|
whereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
685
|
+
orWhereRaw(fragment: string, bindings: readonly unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
686
|
+
orWhereRaw(fragment: string, ...bindings: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
677
687
|
orWhereRaw(fragment: string, ...params: unknown[]): ModelQueryBuilder<TDef, TSelected>;
|
|
678
688
|
whereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
679
689
|
orWhereGroup(callback: (builder: ModelQueryBuilder<TDef, TSelected>) => unknown): ModelQueryBuilder<TDef, TSelected>;
|
|
@@ -683,6 +693,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
683
693
|
orderBy<K extends ColumnName<TDef>>(column: K, direction?: 'asc' | 'desc'): ModelQueryBuilder<TDef, TSelected>;
|
|
684
694
|
orderByDesc<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
685
695
|
orderByAsc<K extends ColumnName<TDef>>(column: K): ModelQueryBuilder<TDef, TSelected>;
|
|
696
|
+
latest(column?: ColumnName<TDef>): ModelQueryBuilder<TDef, TSelected>;
|
|
697
|
+
oldest(column?: ColumnName<TDef>): ModelQueryBuilder<TDef, TSelected>;
|
|
686
698
|
limit(count: number): ModelQueryBuilder<TDef, TSelected>;
|
|
687
699
|
take(count: number): ModelQueryBuilder<TDef, TSelected>;
|
|
688
700
|
offset(count: number): ModelQueryBuilder<TDef, TSelected>;
|
|
@@ -694,6 +706,8 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
694
706
|
get(): Promise<ModelRecord<TDef, TSelected>[]>;
|
|
695
707
|
first(): Promise<ModelRecord<TDef, TSelected> | undefined>;
|
|
696
708
|
firstOrFail(): Promise<ModelRecord<TDef, TSelected>>;
|
|
709
|
+
find(id: number | string): Promise<ModelRecord<TDef, TSelected> | undefined>;
|
|
710
|
+
findOrFail(id: number | string): Promise<ModelRecord<TDef, TSelected>>;
|
|
697
711
|
last(): Promise<ModelRecord<TDef, TSelected> | undefined>;
|
|
698
712
|
count(): Promise<number>;
|
|
699
713
|
exists(): Promise<boolean>;
|
|
@@ -720,5 +734,6 @@ declare class ModelQueryBuilder<TDef extends ModelDefinition, TSelected extends
|
|
|
720
734
|
avg<K extends NumericColumns<TDef>>(column: K): Promise<number>;
|
|
721
735
|
sum<K extends NumericColumns<TDef>>(column: K): Promise<number>;
|
|
722
736
|
delete(): Promise<number>;
|
|
737
|
+
forceDelete(): Promise<number>;
|
|
723
738
|
update(data: Partial<Pick<InferModelAttributes<TDef>, FillableKeys<TDef>>>): Promise<number>;
|
|
724
739
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type { AnyDatabaseSchema, DatabaseSchema, ModelRecord } from './schema';
|
|
2
|
+
export type {
|
|
3
|
+
DatabaseConfig,
|
|
4
|
+
QueryBuilderConfig,
|
|
5
|
+
QueryBuilderOptions,
|
|
6
|
+
QueryHooks,
|
|
7
|
+
SqliteConfig,
|
|
8
|
+
SupportedDialect,
|
|
9
|
+
} from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Request-time SQL entrypoint.
|
|
12
|
+
*
|
|
13
|
+
* The package root also exposes migrations, seeders, generators, DynamoDB,
|
|
14
|
+
* browser models, factories, and CLI actions. HTTP servers that only build
|
|
15
|
+
* and execute SQL should not evaluate those modules during process startup.
|
|
16
|
+
*/
|
|
17
|
+
export * from './client';
|
|
18
|
+
export * from './config';
|
|
19
|
+
export * from './sqlite-pragmas';
|
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
|
package/dist/src/browser.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{en,tn,nn,g,ze,Ye,rn,Ie,sn,kn}from"../chunk-4cs1xx1d.js";export{ze as BrowserQueryBuilder,g as BrowserQueryError,sn as browserAuth,Ye as browserQuery,en as configureBrowser,rn as createBrowserDb,Ie as createBrowserModel,kn as default,tn as getBrowserConfig,nn as isBrowser};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{
|
|
2
|
+
import{Q,E,wt,qe,x,ke,We,Ue,Ce,St,d,G,Re,Ve,Dt,He,jt,qt}from"../../chunk-3xpe6b57.js";export{Q as DynamoDBClient,Re as DynamoDBMigrationDriver,G as DynamoDBMigrationTracker,He as EntityQueryBuilder,d as MIGRATIONS_TABLE,qe as Model,Ce as buildDynamoDBMigrationPlan,wt as configureModels,Ue as convertSchemaToDefinition,E as createClient,qt as createDynamo,Ve as createMigrationDriver,jt as dynamo,We as extractModelSchema,ke as extractTableDefinition,x as hashTableDefinition,St as isDefinitionEqual,Dt as migrateModels};
|
package/dist/src/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{J,
|
|
2
|
+
import{J,z,Y,X,O,Z,ee,te,ne,_,re,I,L,ie,se,K,ae,oe,Xe,Le,Ze,k,le,a,ce,ue,de,fe,m,et,T,C,R,me,he,F,ge,j,pe,q,W,A,U,ye,be,Te,we,V,Se,De,w,h,an,on,ln,tt,nt,rt,it,st,cn,at,Pt,un,dn,fn,mn,ot,hn,gn,pn,$e,u,lt,ct,ut,dt,ft,Ot,H,Ee,yn,bn,mt,Ke,p,Fe,je,_t,Tn,It,wn,ht,gt,pt,Lt,Kt}from"../chunk-vw9ss7z8.js";import{D,Sn,Ft,l,yt,bt,i,xe,ve}from"../chunk-c7m701dd.js";import{Tt,c,Q,E,wt,qe,x,ke,We,Ue,Ce,St,d,G,Re,Ve,Dt,He,jt,qt}from"../chunk-3xpe6b57.js";import{$t,Et,xt,vt,Dn,$n,En,kt,Ct,xn,vn,Wt,Ut,Vt,Ht,Qt,Rt,Gt,Jt}from"../chunk-cxpaxq2p.js";import{n,Qe,e,B,t,s,P,Ne,zt,At,Mt,v,Yt,Pe,b,Xt,Zt,f,Je}from"../chunk-hjgcemhy.js";import{en,tn,nn,g,ze,Ye,rn,Ie,sn}from"../chunk-4cs1xx1d.js";export{kt as BelongsToManyRelationBuilder,ze as BrowserQueryBuilder,g as BrowserQueryError,At as DEFAULT_SQLITE_PRAGMAS,Q as DynamoDBClient,Tt as DynamoDBDriverImpl,h as DynamoDBItemBuilder,Re as DynamoDBMigrationDriver,G as DynamoDBMigrationTracker,w as DynamoDBQueryBuilder,ot as DynamoDBToolingAdapter,He as EntityQueryBuilder,ut as GENERATED_MARKER,d as MIGRATIONS_TABLE,qe as Model,a as MySQLDriver,ce as PostgresDriver,fe as SQLiteDriver,It as Seeder,ue as SingleStoreDriver,tt as SingleTableManager,cn as SingleTablePatterns,rt as SingleTableQueryBuilder,nt as SingleTableRepository,p as UTC_CLOCK_DEFAULT,de as VitessDriver,v as applySqliteBootstrapPragmas,Lt as auditSchemaDrift,sn as browserAuth,Ye as browserQuery,$e as buildDatabaseSchema,Ce as buildDynamoDBMigrationPlan,H as buildMigrationPlan,lt as buildSchemaMeta,z as cacheClear,X as cacheConfig,Y as cacheStats,Ke as canonicalStorageType,Fe as canonicalizeDefault,Se as checkSchema,Et as clearLocalModels,Qt as clearModelRegistry,xe as clearQueryCache,e as config,en as configureBrowser,wt as configureModels,Dn as configureOrm,Ue as convertSchemaToDefinition,rn as createBrowserDb,Ie as createBrowserModel,E as createClient,qt as createDynamo,ln as createDynamoDBClient,c as createDynamoDBDriver,on as createDynamoDBItemBuilder,an as createDynamoDBQueryBuilder,hn as createDynamoDBToolingAdapter,$t as createFakerCompatLayer,Ve as createMigrationDriver,Ct as createModel,i as createQueryBuilder,st as createRepository,it as createSingleTableManager,xn as createTableFromModel,_ as dbInfo,I as dbOptimize,re as dbStats,L as dbWipe,Qe as defaultConfig,zt as defineConfig,Gt as defineModel,Tn as defineModels,wn as defineSeeder,ne as dumpDatabase,jt as dynamo,bt as escapeStringLiteral,C as executeMigration,ie as explain,q as explainAllQueries,ee as exportData,xt as extractChanges,vt as extractInsertId,We as extractModelSchema,ke as extractTableDefinition,ht as familyOfDeclared,gt as familyOfSqlType,se as file,Kt as formatSchemaDrift,be as freshDatabase,gn as generateAccessPatterns,W as generateDiagram,je as generateDiffOperations,_t as generateDiffSql,bn as generateDiffSqlString,T as generateMigration,Ze as generateModelSource,Ee as generateSql,yn as generateSqlString,Ut as getAllModels,tn as getBrowserConfig,P as getConfig,En as getDatabase,m as getDialectDriver,Wt as getModel,Vt as getModelRegistry,t as getPlaceholder,s as getPlaceholders,Ht as hasModel,mt as hashMigrationPlan,x as hashTableDefinition,te as importData,Zt as inflectSingular,K as inspectTable,oe as introspect,k as introspectDatabase,nn as isBrowser,St as isDefinitionEqual,dt as isGeneratedMigrationSql,Ot as isLosslessTypeChange,n as isMysqlLike,Sn as iterateAllPivots,ct as lastCreatedMigrationFiles,u as loadModels,le as makeModel,ye as makeSeeder,fn as marshallObject,me as migrateGenerate,ge as migrateList,Dt as migrateModels,he as migrateRollback,F as migrateStatus,ft as migrationBody,Le as modelNameForTable,j as modelShow,I as optimizeDatabase,Pt as parseStacksModels,pe as ping,q as queryExplainAll,l as quoteColumnForDialect,Ft as raw,Jt as registerBrowserModels,Rt as registerModel,W as relationDiagram,$n as releaseOrm,Yt as resetConnection,R as resetDatabase,B as resolveDialect,at as resolveKeyPattern,D as resolvePivot,Mt as resolveSqlitePragmas,J as runBenchmark,U as runSeeder,A as runSeeders,pt as satisfies,et as saveMigrationSnapshot,vn as seedModel,Ne as setConfig,ve as setQueryCacheMaxSize,j as showModel,f as singularizerFor,Te as sql,Xe as sqlTypeToAttr,pn as stacksModelToEntity,O as startConsole,Xt as stripTrailingS,ae as tableInfo,b as tableNameFor,yt as temporalLiteral,Z as tinker,Je as toDialectPlaceholders,un as toDynamoDBItem,dn as toModelInstance,Pe as toTableName,mn as unmarshallItem,we as unsafe,V as validateSchema,De as waitReady,L as wipeDatabase};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{n,Qe,e,B,t,s,P,Ne,zt,At,Mt,v,Yt}from"../chunk-hjgcemhy.js";import{Ft,l,yt,bt,i,xe,ve}from"../chunk-c7m701dd.js";export{At as DEFAULT_SQLITE_PRAGMAS,v as applySqliteBootstrapPragmas,xe as clearQueryCache,e as config,i as createQueryBuilder,Qe as defaultConfig,zt as defineConfig,bt as escapeStringLiteral,P as getConfig,t as getPlaceholder,s as getPlaceholders,n as isMysqlLike,l as quoteColumnForDialect,Ft as raw,Yt as resetConnection,B as resolveDialect,Mt as resolveSqlitePragmas,Ne as setConfig,ve as setQueryCacheMaxSize,yt as temporalLiteral};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bun-query-builder",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
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",
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
"types": "./dist/browser.d.ts",
|
|
29
29
|
"import": "./dist/src/browser.js"
|
|
30
30
|
},
|
|
31
|
+
"./runtime": {
|
|
32
|
+
"types": "./dist/runtime.d.ts",
|
|
33
|
+
"import": "./dist/src/runtime.js"
|
|
34
|
+
},
|
|
31
35
|
"./dynamodb": {
|
|
32
36
|
"types": "./dist/dynamodb/index.d.ts",
|
|
33
37
|
"import": "./dist/src/dynamodb/index.js"
|
|
@@ -77,13 +81,13 @@
|
|
|
77
81
|
"typecheck": "bun --bun tsc"
|
|
78
82
|
},
|
|
79
83
|
"dependencies": {
|
|
80
|
-
"@stacksjs/clapp": "^0.2.
|
|
84
|
+
"@stacksjs/clapp": "^0.2.16",
|
|
81
85
|
"@stacksjs/ts-faker": "^0.1.8",
|
|
82
86
|
"@stacksjs/ts-validation": "^0.5.2",
|
|
83
|
-
"dynamodb-tooling": "^0.3.
|
|
87
|
+
"dynamodb-tooling": "^0.3.6"
|
|
84
88
|
},
|
|
85
89
|
"devDependencies": {
|
|
86
|
-
"bunfig": "^0.15.
|
|
90
|
+
"bunfig": "^0.15.19"
|
|
87
91
|
},
|
|
88
92
|
"git-hooks": {
|
|
89
93
|
"pre-commit": {
|