workers-qb 1.7.0 → 1.9.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/README.md +26 -4
- package/dist/index.d.mts +29 -14
- package/dist/index.d.ts +29 -14
- package/dist/index.js +67 -6
- package/dist/index.mjs +67 -6
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -19,14 +19,16 @@ Currently, 3 databases are supported:
|
|
|
19
19
|
|
|
20
20
|
## Features
|
|
21
21
|
|
|
22
|
-
- [x] Zero dependencies
|
|
22
|
+
- [x] Zero dependencies
|
|
23
23
|
- [x] Fully typed/TypeScript support
|
|
24
|
+
- [x] [Migrations](https://workers-qb.massadas.com/migrations/)
|
|
24
25
|
- [x] [Type Checks for data read](https://workers-qb.massadas.com/type-check/)
|
|
25
26
|
- [x] [Create/drop tables](https://workers-qb.massadas.com/basic-queries/#dropping-and-creating-tables)
|
|
26
27
|
- [x] [Insert/Bulk Inserts/Update/Select/Delete/Join queries](https://workers-qb.massadas.com/basic-queries/)
|
|
27
|
-
- [x] [Modular selects](https://workers-qb.massadas.com/modular-selects/)
|
|
28
|
+
- [x] [Modular selects](https://workers-qb.massadas.com/modular-selects/) (qb.select(...).where(...).where(...).one())
|
|
28
29
|
- [x] [On Conflict for Inserts and Updates](https://workers-qb.massadas.com/advanced-queries/onConflict/)
|
|
29
30
|
- [x] [Upsert](https://workers-qb.massadas.com/advanced-queries/upsert/)
|
|
31
|
+
- [x] Lazy Load Rows
|
|
30
32
|
|
|
31
33
|
## Installation
|
|
32
34
|
|
|
@@ -40,7 +42,7 @@ npm install workers-qb --save
|
|
|
40
42
|
import { D1QB } from 'workers-qb'
|
|
41
43
|
|
|
42
44
|
export interface Env {
|
|
43
|
-
DB:
|
|
45
|
+
DB: D1Database
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
export default {
|
|
@@ -65,7 +67,7 @@ export default {
|
|
|
65
67
|
.execute()
|
|
66
68
|
|
|
67
69
|
// Or in a modular approach
|
|
68
|
-
const
|
|
70
|
+
const employeeListModular = await qb.select<Employee>('employees').where('active = ?', true).execute()
|
|
69
71
|
|
|
70
72
|
// You get IDE type hints on each employee data, like:
|
|
71
73
|
// employeeList.results[0].name
|
|
@@ -77,6 +79,26 @@ export default {
|
|
|
77
79
|
}
|
|
78
80
|
```
|
|
79
81
|
|
|
82
|
+
## Example for Cloudflare Durable Objects
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
import { DOQB } from 'workers-qb'
|
|
86
|
+
|
|
87
|
+
export class DOSRS extends DurableObject {
|
|
88
|
+
getEmployees() {
|
|
89
|
+
const qb = new DOQB(this.ctx.storage.sql)
|
|
90
|
+
|
|
91
|
+
const fetched = qb
|
|
92
|
+
.fetchAll({
|
|
93
|
+
tableName: 'employees',
|
|
94
|
+
})
|
|
95
|
+
.execute()
|
|
96
|
+
|
|
97
|
+
return fetched.results
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
80
102
|
## Example for Cloudflare Workers with PostgreSQL
|
|
81
103
|
|
|
82
104
|
Remember to close the connection using `ctx.waitUntil(qb.close());` or `await qb.close();` at the end of your request.
|
package/dist/index.d.mts
CHANGED
|
@@ -95,8 +95,9 @@ type RawQueryFetchAll = Omit<RawQuery, 'fetchType'> & {
|
|
|
95
95
|
fetchType: FetchTypes.ALL;
|
|
96
96
|
};
|
|
97
97
|
type RawQueryWithoutFetching = Omit<RawQuery, 'fetchType'>;
|
|
98
|
-
type SelectAll = SelectOne & {
|
|
98
|
+
type SelectAll<IsLazy extends true | undefined = undefined> = SelectOne & {
|
|
99
99
|
limit?: number;
|
|
100
|
+
lazy?: IsLazy;
|
|
100
101
|
};
|
|
101
102
|
type ConflictUpsert = {
|
|
102
103
|
column: string | Array<string>;
|
|
@@ -165,9 +166,17 @@ type PGResult = {
|
|
|
165
166
|
lastRowId?: string | number;
|
|
166
167
|
rowCount: number;
|
|
167
168
|
};
|
|
168
|
-
type
|
|
169
|
+
type IterableResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends true ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
|
|
170
|
+
results?: AsyncIterable<Result>;
|
|
171
|
+
}>> : Merge<ResultWrapper, {
|
|
172
|
+
results?: Iterable<Result>;
|
|
173
|
+
}> : never;
|
|
174
|
+
type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends undefined ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
|
|
169
175
|
results?: Array<Result>;
|
|
170
|
-
}
|
|
176
|
+
}>> : Merge<ResultWrapper, {
|
|
177
|
+
results?: Array<Result>;
|
|
178
|
+
}> : never;
|
|
179
|
+
type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IterableResult<ResultWrapper, Result, IsAsync, IsLazy> | FullArrayResult<ResultWrapper, Result, IsAsync, IsLazy>;
|
|
171
180
|
type OneResult<ResultWrapper, Result> = Merge<ResultWrapper, {
|
|
172
181
|
results?: Result;
|
|
173
182
|
}>;
|
|
@@ -182,6 +191,9 @@ declare function defaultLogger(query: RawQuery, meta: QueryLoggerMeta): any;
|
|
|
182
191
|
declare function asyncLoggerWrapper<Async extends boolean = true>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): Promise<any>;
|
|
183
192
|
declare function syncLoggerWrapper<Async extends boolean = false>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): any;
|
|
184
193
|
|
|
194
|
+
interface SelectExecuteOptions<IsLazy extends true | undefined> {
|
|
195
|
+
lazy?: IsLazy;
|
|
196
|
+
}
|
|
185
197
|
declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
|
|
186
198
|
_debugger: boolean;
|
|
187
199
|
_options: Partial<SelectAll>;
|
|
@@ -192,6 +204,7 @@ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnO
|
|
|
192
204
|
tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
193
205
|
fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
194
206
|
where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
207
|
+
whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
195
208
|
join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
196
209
|
groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
197
210
|
having(having: SelectAll['having']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
@@ -199,10 +212,10 @@ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnO
|
|
|
199
212
|
offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
200
213
|
limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
201
214
|
_parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
202
|
-
getQueryAll(): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
215
|
+
getQueryAll<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
|
|
203
216
|
getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
204
|
-
execute():
|
|
205
|
-
all():
|
|
217
|
+
execute<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
|
|
218
|
+
all<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
|
|
206
219
|
one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
|
|
207
220
|
count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
|
|
208
221
|
}
|
|
@@ -214,27 +227,28 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
|
|
|
214
227
|
setDebugger(state: boolean): void;
|
|
215
228
|
execute(query: Query<any, IsAsync>): MaybeAsync<IsAsync, any>;
|
|
216
229
|
batchExecute(queryArray: Query<any, IsAsync>[]): MaybeAsync<IsAsync, any[]>;
|
|
230
|
+
lazyExecute(query: Query<any, IsAsync>): IsAsync extends true ? Promise<AsyncIterable<any>> : Iterable<any>;
|
|
217
231
|
createTable<GenericResult = undefined>(params: {
|
|
218
232
|
tableName: string;
|
|
219
233
|
schema: string;
|
|
220
234
|
ifNotExists?: boolean;
|
|
221
|
-
}): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
235
|
+
}): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
222
236
|
dropTable<GenericResult = undefined>(params: {
|
|
223
237
|
tableName: string;
|
|
224
238
|
ifExists?: boolean;
|
|
225
|
-
}): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
239
|
+
}): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
226
240
|
select<GenericResult = DefaultReturnObject>(tableName: string): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
227
241
|
fetchOne<GenericResult = DefaultReturnObject>(params: SelectOne): QueryWithExtra<GenericResultWrapper, OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
228
|
-
fetchAll<GenericResult = DefaultReturnObject>(params: SelectAll): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
242
|
+
fetchAll<GenericResult = DefaultReturnObject, IsLazy extends true | undefined = undefined>(params: SelectAll<IsLazy>): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
|
|
229
243
|
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
230
|
-
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
244
|
+
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
231
245
|
raw<GenericResult = DefaultReturnObject>(params: RawQueryWithoutFetching): Query<GenericResultWrapper, IsAsync>;
|
|
232
246
|
insert<GenericResult = DefaultReturnObject>(params: InsertOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
233
|
-
insert<GenericResult = DefaultReturnObject>(params: InsertMultiple): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
247
|
+
insert<GenericResult = DefaultReturnObject>(params: InsertMultiple): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
234
248
|
insert<GenericResult = DefaultReturnObject>(params: InsertWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
235
|
-
update<GenericResult = DefaultReturnObject>(params: UpdateReturning): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
249
|
+
update<GenericResult = DefaultReturnObject>(params: UpdateReturning): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
236
250
|
update<GenericResult = DefaultReturnObject>(params: UpdateWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
237
|
-
delete<GenericResult = DefaultReturnObject>(params: DeleteReturning): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
251
|
+
delete<GenericResult = DefaultReturnObject>(params: DeleteReturning): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
238
252
|
delete<GenericResult = DefaultReturnObject>(params: DeleteWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
239
253
|
protected _parse_arguments(row: DefaultObject): Array<any>;
|
|
240
254
|
protected _onConflict(resolution?: string | ConflictTypes | ConflictUpsert): string;
|
|
@@ -311,6 +325,7 @@ declare class DOQB extends QueryBuilder<{}, false> {
|
|
|
311
325
|
constructor(db: any, options?: QueryBuilderOptions<false>);
|
|
312
326
|
migrations(options: MigrationOptions): syncMigrationsBuilder<{}>;
|
|
313
327
|
execute(query: Query<any, false>): any;
|
|
328
|
+
lazyExecute(query: Query<any, false>): Iterable<any>;
|
|
314
329
|
}
|
|
315
330
|
|
|
316
|
-
export { type ArrayResult, type AsyncType, ConflictTypes, type ConflictUpsert, type CountResult, type D1Meta, D1QB, type D1Result, DOQB, type DefaultObject, type DefaultReturnObject, type Delete, type DeleteReturning, type DeleteWithoutReturning, FetchTypes, type Insert, type InsertMultiple, type InsertOne, type InsertWithoutReturning, type Join, JoinTypes, type MaybeAsync, type Migration, type MigrationEntry, type MigrationOptions, type OneResult, OrderTypes, PGQB, type PGResult, type Primitive, Query, QueryBuilder, type QueryBuilderOptions, type QueryLoggerMeta, QueryWithExtra, Raw, type RawQuery, type RawQueryFetchAll, type RawQueryFetchOne, type RawQueryWithoutFetching, type SelectAll, type SelectOne, type SyncType, type Update, type UpdateReturning, type UpdateWithoutReturning, type Where, asyncLoggerWrapper, asyncMigrationsBuilder, defaultLogger, syncLoggerWrapper, syncMigrationsBuilder, type test, trimQuery };
|
|
331
|
+
export { type ArrayResult, type AsyncType, ConflictTypes, type ConflictUpsert, type CountResult, type D1Meta, D1QB, type D1Result, DOQB, type DefaultObject, type DefaultReturnObject, type Delete, type DeleteReturning, type DeleteWithoutReturning, FetchTypes, type FullArrayResult, type Insert, type InsertMultiple, type InsertOne, type InsertWithoutReturning, type IterableResult, type Join, JoinTypes, type MaybeAsync, type Migration, type MigrationEntry, type MigrationOptions, type OneResult, OrderTypes, PGQB, type PGResult, type Primitive, Query, QueryBuilder, type QueryBuilderOptions, type QueryLoggerMeta, QueryWithExtra, Raw, type RawQuery, type RawQueryFetchAll, type RawQueryFetchOne, type RawQueryWithoutFetching, type SelectAll, type SelectOne, type SyncType, type Update, type UpdateReturning, type UpdateWithoutReturning, type Where, asyncLoggerWrapper, asyncMigrationsBuilder, defaultLogger, syncLoggerWrapper, syncMigrationsBuilder, type test, trimQuery };
|
package/dist/index.d.ts
CHANGED
|
@@ -95,8 +95,9 @@ type RawQueryFetchAll = Omit<RawQuery, 'fetchType'> & {
|
|
|
95
95
|
fetchType: FetchTypes.ALL;
|
|
96
96
|
};
|
|
97
97
|
type RawQueryWithoutFetching = Omit<RawQuery, 'fetchType'>;
|
|
98
|
-
type SelectAll = SelectOne & {
|
|
98
|
+
type SelectAll<IsLazy extends true | undefined = undefined> = SelectOne & {
|
|
99
99
|
limit?: number;
|
|
100
|
+
lazy?: IsLazy;
|
|
100
101
|
};
|
|
101
102
|
type ConflictUpsert = {
|
|
102
103
|
column: string | Array<string>;
|
|
@@ -165,9 +166,17 @@ type PGResult = {
|
|
|
165
166
|
lastRowId?: string | number;
|
|
166
167
|
rowCount: number;
|
|
167
168
|
};
|
|
168
|
-
type
|
|
169
|
+
type IterableResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends true ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
|
|
170
|
+
results?: AsyncIterable<Result>;
|
|
171
|
+
}>> : Merge<ResultWrapper, {
|
|
172
|
+
results?: Iterable<Result>;
|
|
173
|
+
}> : never;
|
|
174
|
+
type FullArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IsLazy extends undefined ? IsAsync extends true ? Promise<Merge<ResultWrapper, {
|
|
169
175
|
results?: Array<Result>;
|
|
170
|
-
}
|
|
176
|
+
}>> : Merge<ResultWrapper, {
|
|
177
|
+
results?: Array<Result>;
|
|
178
|
+
}> : never;
|
|
179
|
+
type ArrayResult<ResultWrapper, Result, IsAsync extends boolean, IsLazy extends true | undefined = undefined> = IterableResult<ResultWrapper, Result, IsAsync, IsLazy> | FullArrayResult<ResultWrapper, Result, IsAsync, IsLazy>;
|
|
171
180
|
type OneResult<ResultWrapper, Result> = Merge<ResultWrapper, {
|
|
172
181
|
results?: Result;
|
|
173
182
|
}>;
|
|
@@ -182,6 +191,9 @@ declare function defaultLogger(query: RawQuery, meta: QueryLoggerMeta): any;
|
|
|
182
191
|
declare function asyncLoggerWrapper<Async extends boolean = true>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): Promise<any>;
|
|
183
192
|
declare function syncLoggerWrapper<Async extends boolean = false>(query: Query<any, Async> | Query<any, Async>[], loggerFunction: CallableFunction | undefined, innerFunction: () => any): any;
|
|
184
193
|
|
|
194
|
+
interface SelectExecuteOptions<IsLazy extends true | undefined> {
|
|
195
|
+
lazy?: IsLazy;
|
|
196
|
+
}
|
|
185
197
|
declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnObject, IsAsync extends boolean = true> {
|
|
186
198
|
_debugger: boolean;
|
|
187
199
|
_options: Partial<SelectAll>;
|
|
@@ -192,6 +204,7 @@ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnO
|
|
|
192
204
|
tableName(tableName: SelectAll['tableName']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
193
205
|
fields(fields: SelectAll['fields']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
194
206
|
where(conditions: string | Array<string>, params?: Primitive | Primitive[]): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
207
|
+
whereIn<T extends string | Array<string>, P extends T extends Array<string> ? Primitive[][] : Primitive[]>(fields: T, values: P): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
195
208
|
join(join: SelectAll['join']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
196
209
|
groupBy(groupBy: SelectAll['groupBy']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
197
210
|
having(having: SelectAll['having']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
@@ -199,10 +212,10 @@ declare class SelectBuilder<GenericResultWrapper, GenericResult = DefaultReturnO
|
|
|
199
212
|
offset(offset: SelectAll['offset']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
200
213
|
limit(limit: SelectAll['limit']): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
201
214
|
_parseArray(fieldName: string, option: any, value: any): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
202
|
-
getQueryAll(): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
215
|
+
getQueryAll<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
|
|
203
216
|
getQueryOne(): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
204
|
-
execute():
|
|
205
|
-
all():
|
|
217
|
+
execute<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
|
|
218
|
+
all<IsLazy extends true | undefined = undefined>(options?: SelectExecuteOptions<IsLazy>): ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>;
|
|
206
219
|
one(): MaybeAsync<IsAsync, OneResult<GenericResultWrapper, GenericResult>>;
|
|
207
220
|
count(): MaybeAsync<IsAsync, CountResult<GenericResultWrapper>>;
|
|
208
221
|
}
|
|
@@ -214,27 +227,28 @@ declare class QueryBuilder<GenericResultWrapper, IsAsync extends boolean = true>
|
|
|
214
227
|
setDebugger(state: boolean): void;
|
|
215
228
|
execute(query: Query<any, IsAsync>): MaybeAsync<IsAsync, any>;
|
|
216
229
|
batchExecute(queryArray: Query<any, IsAsync>[]): MaybeAsync<IsAsync, any[]>;
|
|
230
|
+
lazyExecute(query: Query<any, IsAsync>): IsAsync extends true ? Promise<AsyncIterable<any>> : Iterable<any>;
|
|
217
231
|
createTable<GenericResult = undefined>(params: {
|
|
218
232
|
tableName: string;
|
|
219
233
|
schema: string;
|
|
220
234
|
ifNotExists?: boolean;
|
|
221
|
-
}): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
235
|
+
}): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
222
236
|
dropTable<GenericResult = undefined>(params: {
|
|
223
237
|
tableName: string;
|
|
224
238
|
ifExists?: boolean;
|
|
225
|
-
}): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
239
|
+
}): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
226
240
|
select<GenericResult = DefaultReturnObject>(tableName: string): SelectBuilder<GenericResultWrapper, GenericResult, IsAsync>;
|
|
227
241
|
fetchOne<GenericResult = DefaultReturnObject>(params: SelectOne): QueryWithExtra<GenericResultWrapper, OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
228
|
-
fetchAll<GenericResult = DefaultReturnObject>(params: SelectAll): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
242
|
+
fetchAll<GenericResult = DefaultReturnObject, IsLazy extends true | undefined = undefined>(params: SelectAll<IsLazy>): QueryWithExtra<GenericResultWrapper, ArrayResult<GenericResultWrapper, GenericResult, IsAsync, IsLazy>, IsAsync>;
|
|
229
243
|
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
230
|
-
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
244
|
+
raw<GenericResult = DefaultReturnObject>(params: RawQueryFetchAll): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
231
245
|
raw<GenericResult = DefaultReturnObject>(params: RawQueryWithoutFetching): Query<GenericResultWrapper, IsAsync>;
|
|
232
246
|
insert<GenericResult = DefaultReturnObject>(params: InsertOne): Query<OneResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
233
|
-
insert<GenericResult = DefaultReturnObject>(params: InsertMultiple): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
247
|
+
insert<GenericResult = DefaultReturnObject>(params: InsertMultiple): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
234
248
|
insert<GenericResult = DefaultReturnObject>(params: InsertWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
235
|
-
update<GenericResult = DefaultReturnObject>(params: UpdateReturning): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
249
|
+
update<GenericResult = DefaultReturnObject>(params: UpdateReturning): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
236
250
|
update<GenericResult = DefaultReturnObject>(params: UpdateWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
237
|
-
delete<GenericResult = DefaultReturnObject>(params: DeleteReturning): Query<ArrayResult<GenericResultWrapper, GenericResult>, IsAsync>;
|
|
251
|
+
delete<GenericResult = DefaultReturnObject>(params: DeleteReturning): Query<ArrayResult<GenericResultWrapper, GenericResult, IsAsync>, IsAsync>;
|
|
238
252
|
delete<GenericResult = DefaultReturnObject>(params: DeleteWithoutReturning): Query<GenericResultWrapper, IsAsync>;
|
|
239
253
|
protected _parse_arguments(row: DefaultObject): Array<any>;
|
|
240
254
|
protected _onConflict(resolution?: string | ConflictTypes | ConflictUpsert): string;
|
|
@@ -311,6 +325,7 @@ declare class DOQB extends QueryBuilder<{}, false> {
|
|
|
311
325
|
constructor(db: any, options?: QueryBuilderOptions<false>);
|
|
312
326
|
migrations(options: MigrationOptions): syncMigrationsBuilder<{}>;
|
|
313
327
|
execute(query: Query<any, false>): any;
|
|
328
|
+
lazyExecute(query: Query<any, false>): Iterable<any>;
|
|
314
329
|
}
|
|
315
330
|
|
|
316
|
-
export { type ArrayResult, type AsyncType, ConflictTypes, type ConflictUpsert, type CountResult, type D1Meta, D1QB, type D1Result, DOQB, type DefaultObject, type DefaultReturnObject, type Delete, type DeleteReturning, type DeleteWithoutReturning, FetchTypes, type Insert, type InsertMultiple, type InsertOne, type InsertWithoutReturning, type Join, JoinTypes, type MaybeAsync, type Migration, type MigrationEntry, type MigrationOptions, type OneResult, OrderTypes, PGQB, type PGResult, type Primitive, Query, QueryBuilder, type QueryBuilderOptions, type QueryLoggerMeta, QueryWithExtra, Raw, type RawQuery, type RawQueryFetchAll, type RawQueryFetchOne, type RawQueryWithoutFetching, type SelectAll, type SelectOne, type SyncType, type Update, type UpdateReturning, type UpdateWithoutReturning, type Where, asyncLoggerWrapper, asyncMigrationsBuilder, defaultLogger, syncLoggerWrapper, syncMigrationsBuilder, type test, trimQuery };
|
|
331
|
+
export { type ArrayResult, type AsyncType, ConflictTypes, type ConflictUpsert, type CountResult, type D1Meta, D1QB, type D1Result, DOQB, type DefaultObject, type DefaultReturnObject, type Delete, type DeleteReturning, type DeleteWithoutReturning, FetchTypes, type FullArrayResult, type Insert, type InsertMultiple, type InsertOne, type InsertWithoutReturning, type IterableResult, type Join, JoinTypes, type MaybeAsync, type Migration, type MigrationEntry, type MigrationOptions, type OneResult, OrderTypes, PGQB, type PGResult, type Primitive, Query, QueryBuilder, type QueryBuilderOptions, type QueryLoggerMeta, QueryWithExtra, Raw, type RawQuery, type RawQueryFetchAll, type RawQueryFetchOne, type RawQueryWithoutFetching, type SelectAll, type SelectOne, type SyncType, type Update, type UpdateReturning, type UpdateWithoutReturning, type Where, asyncLoggerWrapper, asyncMigrationsBuilder, defaultLogger, syncLoggerWrapper, syncMigrationsBuilder, type test, trimQuery };
|
package/dist/index.js
CHANGED
|
@@ -160,6 +160,52 @@ var SelectBuilder = class _SelectBuilder {
|
|
|
160
160
|
this._fetchOne
|
|
161
161
|
);
|
|
162
162
|
}
|
|
163
|
+
whereIn(fields, values) {
|
|
164
|
+
let whereInCondition;
|
|
165
|
+
let whereInParams;
|
|
166
|
+
const seperateWithComma = (prev, next) => prev + ", " + next;
|
|
167
|
+
if (values.length === 0) {
|
|
168
|
+
return new _SelectBuilder(
|
|
169
|
+
{
|
|
170
|
+
...this._options
|
|
171
|
+
},
|
|
172
|
+
this._fetchAll,
|
|
173
|
+
this._fetchOne
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
if (!Array.isArray(fields)) {
|
|
177
|
+
whereInCondition = `(${fields}) IN (VALUES `;
|
|
178
|
+
whereInCondition += values.map(() => "(?)").reduce(seperateWithComma);
|
|
179
|
+
whereInCondition += ")";
|
|
180
|
+
whereInParams = values;
|
|
181
|
+
} else {
|
|
182
|
+
const fieldLength = fields.length;
|
|
183
|
+
whereInCondition = `(${fields.map((val) => val).reduce(seperateWithComma)}) IN (VALUES `;
|
|
184
|
+
const valuesString = `(${[...new Array(fieldLength).keys()].map(() => "?").reduce(seperateWithComma)})`;
|
|
185
|
+
whereInCondition += [...new Array(fieldLength).keys()].map(() => valuesString).reduce(seperateWithComma);
|
|
186
|
+
whereInCondition += ")";
|
|
187
|
+
whereInParams = values.flat();
|
|
188
|
+
}
|
|
189
|
+
let conditions = [whereInCondition];
|
|
190
|
+
let params = whereInParams;
|
|
191
|
+
if (this._options.where?.conditions) {
|
|
192
|
+
conditions = this._options.where?.conditions.concat(conditions);
|
|
193
|
+
}
|
|
194
|
+
if (this._options.where?.params) {
|
|
195
|
+
params = this._options.where?.params.concat(params);
|
|
196
|
+
}
|
|
197
|
+
return new _SelectBuilder(
|
|
198
|
+
{
|
|
199
|
+
...this._options,
|
|
200
|
+
where: {
|
|
201
|
+
conditions,
|
|
202
|
+
params
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
this._fetchAll,
|
|
206
|
+
this._fetchOne
|
|
207
|
+
);
|
|
208
|
+
}
|
|
163
209
|
join(join) {
|
|
164
210
|
return this._parseArray("join", this._options.join, join);
|
|
165
211
|
}
|
|
@@ -211,16 +257,16 @@ var SelectBuilder = class _SelectBuilder {
|
|
|
211
257
|
this._fetchOne
|
|
212
258
|
);
|
|
213
259
|
}
|
|
214
|
-
getQueryAll() {
|
|
260
|
+
getQueryAll(options) {
|
|
215
261
|
return this._fetchAll(this._options);
|
|
216
262
|
}
|
|
217
263
|
getQueryOne() {
|
|
218
264
|
return this._fetchOne(this._options);
|
|
219
265
|
}
|
|
220
|
-
execute() {
|
|
266
|
+
execute(options) {
|
|
221
267
|
return this._fetchAll(this._options).execute();
|
|
222
268
|
}
|
|
223
|
-
all() {
|
|
269
|
+
all(options) {
|
|
224
270
|
return this._fetchAll(this._options).execute();
|
|
225
271
|
}
|
|
226
272
|
one() {
|
|
@@ -300,6 +346,9 @@ var QueryBuilder = class {
|
|
|
300
346
|
batchExecute(queryArray) {
|
|
301
347
|
throw new Error("Batch execute method not implemented");
|
|
302
348
|
}
|
|
349
|
+
lazyExecute(query) {
|
|
350
|
+
throw new Error("Execute lazyExecute not implemented");
|
|
351
|
+
}
|
|
303
352
|
createTable(params) {
|
|
304
353
|
return new Query(
|
|
305
354
|
(q) => {
|
|
@@ -350,15 +399,16 @@ var QueryBuilder = class {
|
|
|
350
399
|
fetchAll(params) {
|
|
351
400
|
return new QueryWithExtra(
|
|
352
401
|
(q) => {
|
|
353
|
-
return this.execute(q);
|
|
402
|
+
return params.lazy ? this.lazyExecute(q) : this.execute(q);
|
|
354
403
|
},
|
|
355
|
-
this._select(params),
|
|
404
|
+
this._select({ ...params, lazy: void 0 }),
|
|
356
405
|
this._select({
|
|
357
406
|
...params,
|
|
358
407
|
fields: "count(*) as total",
|
|
359
408
|
offset: void 0,
|
|
360
409
|
groupBy: void 0,
|
|
361
|
-
limit: 1
|
|
410
|
+
limit: 1,
|
|
411
|
+
lazy: void 0
|
|
362
412
|
}),
|
|
363
413
|
typeof params.where === "object" && !Array.isArray(params.where) && params.where?.params ? Array.isArray(params.where?.params) ? params.where?.params : [params.where?.params] : void 0,
|
|
364
414
|
"ALL" /* ALL */
|
|
@@ -853,6 +903,17 @@ var DOQB = class extends QueryBuilder {
|
|
|
853
903
|
};
|
|
854
904
|
});
|
|
855
905
|
}
|
|
906
|
+
lazyExecute(query) {
|
|
907
|
+
return this.loggerWrapper(query, this.options.logger, () => {
|
|
908
|
+
let cursor;
|
|
909
|
+
if (query.arguments) {
|
|
910
|
+
cursor = this.db.exec(query.query, ...query.arguments);
|
|
911
|
+
} else {
|
|
912
|
+
cursor = this.db.exec(query.query);
|
|
913
|
+
}
|
|
914
|
+
return cursor;
|
|
915
|
+
});
|
|
916
|
+
}
|
|
856
917
|
};
|
|
857
918
|
// Annotate the CommonJS export names for ESM import in node:
|
|
858
919
|
0 && (module.exports = {
|
package/dist/index.mjs
CHANGED
|
@@ -118,6 +118,52 @@ var SelectBuilder = class _SelectBuilder {
|
|
|
118
118
|
this._fetchOne
|
|
119
119
|
);
|
|
120
120
|
}
|
|
121
|
+
whereIn(fields, values) {
|
|
122
|
+
let whereInCondition;
|
|
123
|
+
let whereInParams;
|
|
124
|
+
const seperateWithComma = (prev, next) => prev + ", " + next;
|
|
125
|
+
if (values.length === 0) {
|
|
126
|
+
return new _SelectBuilder(
|
|
127
|
+
{
|
|
128
|
+
...this._options
|
|
129
|
+
},
|
|
130
|
+
this._fetchAll,
|
|
131
|
+
this._fetchOne
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
if (!Array.isArray(fields)) {
|
|
135
|
+
whereInCondition = `(${fields}) IN (VALUES `;
|
|
136
|
+
whereInCondition += values.map(() => "(?)").reduce(seperateWithComma);
|
|
137
|
+
whereInCondition += ")";
|
|
138
|
+
whereInParams = values;
|
|
139
|
+
} else {
|
|
140
|
+
const fieldLength = fields.length;
|
|
141
|
+
whereInCondition = `(${fields.map((val) => val).reduce(seperateWithComma)}) IN (VALUES `;
|
|
142
|
+
const valuesString = `(${[...new Array(fieldLength).keys()].map(() => "?").reduce(seperateWithComma)})`;
|
|
143
|
+
whereInCondition += [...new Array(fieldLength).keys()].map(() => valuesString).reduce(seperateWithComma);
|
|
144
|
+
whereInCondition += ")";
|
|
145
|
+
whereInParams = values.flat();
|
|
146
|
+
}
|
|
147
|
+
let conditions = [whereInCondition];
|
|
148
|
+
let params = whereInParams;
|
|
149
|
+
if (this._options.where?.conditions) {
|
|
150
|
+
conditions = this._options.where?.conditions.concat(conditions);
|
|
151
|
+
}
|
|
152
|
+
if (this._options.where?.params) {
|
|
153
|
+
params = this._options.where?.params.concat(params);
|
|
154
|
+
}
|
|
155
|
+
return new _SelectBuilder(
|
|
156
|
+
{
|
|
157
|
+
...this._options,
|
|
158
|
+
where: {
|
|
159
|
+
conditions,
|
|
160
|
+
params
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
this._fetchAll,
|
|
164
|
+
this._fetchOne
|
|
165
|
+
);
|
|
166
|
+
}
|
|
121
167
|
join(join) {
|
|
122
168
|
return this._parseArray("join", this._options.join, join);
|
|
123
169
|
}
|
|
@@ -169,16 +215,16 @@ var SelectBuilder = class _SelectBuilder {
|
|
|
169
215
|
this._fetchOne
|
|
170
216
|
);
|
|
171
217
|
}
|
|
172
|
-
getQueryAll() {
|
|
218
|
+
getQueryAll(options) {
|
|
173
219
|
return this._fetchAll(this._options);
|
|
174
220
|
}
|
|
175
221
|
getQueryOne() {
|
|
176
222
|
return this._fetchOne(this._options);
|
|
177
223
|
}
|
|
178
|
-
execute() {
|
|
224
|
+
execute(options) {
|
|
179
225
|
return this._fetchAll(this._options).execute();
|
|
180
226
|
}
|
|
181
|
-
all() {
|
|
227
|
+
all(options) {
|
|
182
228
|
return this._fetchAll(this._options).execute();
|
|
183
229
|
}
|
|
184
230
|
one() {
|
|
@@ -258,6 +304,9 @@ var QueryBuilder = class {
|
|
|
258
304
|
batchExecute(queryArray) {
|
|
259
305
|
throw new Error("Batch execute method not implemented");
|
|
260
306
|
}
|
|
307
|
+
lazyExecute(query) {
|
|
308
|
+
throw new Error("Execute lazyExecute not implemented");
|
|
309
|
+
}
|
|
261
310
|
createTable(params) {
|
|
262
311
|
return new Query(
|
|
263
312
|
(q) => {
|
|
@@ -308,15 +357,16 @@ var QueryBuilder = class {
|
|
|
308
357
|
fetchAll(params) {
|
|
309
358
|
return new QueryWithExtra(
|
|
310
359
|
(q) => {
|
|
311
|
-
return this.execute(q);
|
|
360
|
+
return params.lazy ? this.lazyExecute(q) : this.execute(q);
|
|
312
361
|
},
|
|
313
|
-
this._select(params),
|
|
362
|
+
this._select({ ...params, lazy: void 0 }),
|
|
314
363
|
this._select({
|
|
315
364
|
...params,
|
|
316
365
|
fields: "count(*) as total",
|
|
317
366
|
offset: void 0,
|
|
318
367
|
groupBy: void 0,
|
|
319
|
-
limit: 1
|
|
368
|
+
limit: 1,
|
|
369
|
+
lazy: void 0
|
|
320
370
|
}),
|
|
321
371
|
typeof params.where === "object" && !Array.isArray(params.where) && params.where?.params ? Array.isArray(params.where?.params) ? params.where?.params : [params.where?.params] : void 0,
|
|
322
372
|
"ALL" /* ALL */
|
|
@@ -811,6 +861,17 @@ var DOQB = class extends QueryBuilder {
|
|
|
811
861
|
};
|
|
812
862
|
});
|
|
813
863
|
}
|
|
864
|
+
lazyExecute(query) {
|
|
865
|
+
return this.loggerWrapper(query, this.options.logger, () => {
|
|
866
|
+
let cursor;
|
|
867
|
+
if (query.arguments) {
|
|
868
|
+
cursor = this.db.exec(query.query, ...query.arguments);
|
|
869
|
+
} else {
|
|
870
|
+
cursor = this.db.exec(query.query);
|
|
871
|
+
}
|
|
872
|
+
return cursor;
|
|
873
|
+
});
|
|
874
|
+
}
|
|
814
875
|
};
|
|
815
876
|
export {
|
|
816
877
|
ConflictTypes,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workers-qb",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Zero dependencies Query Builder for Cloudflare Workers",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"build": "tsup src/index.ts --format cjs,esm --dts",
|
|
15
15
|
"lint": "npx @biomejs/biome check src/ tests/ || (npx @biomejs/biome check --write src/ tests/; exit 1)",
|
|
16
16
|
"test": "vitest run --root tests",
|
|
17
|
-
"prepare": "husky
|
|
17
|
+
"prepare": "husky"
|
|
18
18
|
},
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@biomejs/biome": "1.9.4",
|
|
60
|
-
"@cloudflare/vitest-pool-workers": "^0.
|
|
60
|
+
"@cloudflare/vitest-pool-workers": "^0.6.0",
|
|
61
61
|
"@cloudflare/workers-types": "^4.20241106.0",
|
|
62
62
|
"husky": "^9.1.6",
|
|
63
63
|
"tsup": "^8.3.5",
|
|
64
64
|
"typescript": "^5.6.3",
|
|
65
|
-
"vitest": "2.
|
|
65
|
+
"vitest": "2.1.8",
|
|
66
66
|
"wrangler": "^3.86.0"
|
|
67
67
|
}
|
|
68
68
|
}
|