@taylordb/query-builder 0.8.0 → 0.9.1

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.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/cjs/@types/insert.d.ts +13 -4
  4. package/dist/cjs/@types/query-builder.d.ts +2 -2
  5. package/dist/cjs/@types/type-helpers.d.ts +3 -3
  6. package/dist/cjs/@types/update.d.ts +8 -3
  7. package/dist/cjs/__tests__/query-builder.spec.js +1 -1
  8. package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
  9. package/dist/cjs/__tests__/taylorclient.types.d.ts +57 -51
  10. package/dist/cjs/aggregation-query-builder.d.ts +92 -0
  11. package/dist/cjs/aggregation-query-builder.js +92 -0
  12. package/dist/cjs/aggregation-query-builder.js.map +1 -1
  13. package/dist/cjs/batch-query-builder.d.ts +36 -0
  14. package/dist/cjs/batch-query-builder.js +36 -0
  15. package/dist/cjs/batch-query-builder.js.map +1 -1
  16. package/dist/cjs/delete-query-builder.d.ts +17 -0
  17. package/dist/cjs/delete-query-builder.js +17 -0
  18. package/dist/cjs/delete-query-builder.js.map +1 -1
  19. package/dist/cjs/executor.js +1 -1
  20. package/dist/cjs/executor.js.map +1 -1
  21. package/dist/cjs/insert-query-builder.d.ts +68 -0
  22. package/dist/cjs/insert-query-builder.js +71 -0
  23. package/dist/cjs/insert-query-builder.js.map +1 -1
  24. package/dist/cjs/query-builder.d.ts +218 -1
  25. package/dist/cjs/query-builder.js +188 -0
  26. package/dist/cjs/query-builder.js.map +1 -1
  27. package/dist/cjs/selection-builder.d.ts +12 -1
  28. package/dist/cjs/selection-builder.js +11 -0
  29. package/dist/cjs/selection-builder.js.map +1 -1
  30. package/dist/cjs/update-query-builder.d.ts +32 -0
  31. package/dist/cjs/update-query-builder.js +32 -0
  32. package/dist/cjs/update-query-builder.js.map +1 -1
  33. package/dist/cjs/where-query-builder.d.ts +61 -2
  34. package/dist/cjs/where-query-builder.js +6 -0
  35. package/dist/cjs/where-query-builder.js.map +1 -1
  36. package/dist/esm/@types/insert.d.ts +13 -4
  37. package/dist/esm/@types/query-builder.d.ts +2 -2
  38. package/dist/esm/@types/type-helpers.d.ts +3 -3
  39. package/dist/esm/@types/update.d.ts +8 -3
  40. package/dist/esm/__tests__/query-builder.spec.js +1 -1
  41. package/dist/esm/__tests__/query-builder.spec.js.map +1 -1
  42. package/dist/esm/__tests__/taylorclient.types.d.ts +57 -51
  43. package/dist/esm/aggregation-query-builder.d.ts +92 -0
  44. package/dist/esm/aggregation-query-builder.js +92 -0
  45. package/dist/esm/aggregation-query-builder.js.map +1 -1
  46. package/dist/esm/batch-query-builder.d.ts +36 -0
  47. package/dist/esm/batch-query-builder.js +36 -0
  48. package/dist/esm/batch-query-builder.js.map +1 -1
  49. package/dist/esm/delete-query-builder.d.ts +17 -0
  50. package/dist/esm/delete-query-builder.js +17 -0
  51. package/dist/esm/delete-query-builder.js.map +1 -1
  52. package/dist/esm/executor.js +1 -1
  53. package/dist/esm/executor.js.map +1 -1
  54. package/dist/esm/insert-query-builder.d.ts +68 -0
  55. package/dist/esm/insert-query-builder.js +71 -0
  56. package/dist/esm/insert-query-builder.js.map +1 -1
  57. package/dist/esm/query-builder.d.ts +218 -1
  58. package/dist/esm/query-builder.js +188 -0
  59. package/dist/esm/query-builder.js.map +1 -1
  60. package/dist/esm/selection-builder.d.ts +12 -1
  61. package/dist/esm/selection-builder.js +11 -0
  62. package/dist/esm/selection-builder.js.map +1 -1
  63. package/dist/esm/update-query-builder.d.ts +32 -0
  64. package/dist/esm/update-query-builder.js +32 -0
  65. package/dist/esm/update-query-builder.js.map +1 -1
  66. package/dist/esm/where-query-builder.d.ts +61 -2
  67. package/dist/esm/where-query-builder.js +6 -0
  68. package/dist/esm/where-query-builder.js.map +1 -1
  69. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  70. package/package.json +3 -3
@@ -12,6 +12,13 @@ const selection_builder_js_1 = require("./selection-builder.js");
12
12
  const update_query_builder_js_1 = require("./update-query-builder.js");
13
13
  const where_query_builder_js_1 = require("./where-query-builder.js");
14
14
  const DEFAULT_LIMIT = 50;
15
+ /**
16
+ * The main query builder class for constructing and executing select queries.
17
+ * @template DB - The database type.
18
+ * @template TableName - The name of the table to query.
19
+ * @template Selection - The type of the selected fields.
20
+ * @template LinkName - The name of the link field if this is a subquery.
21
+ */
15
22
  class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
16
23
  constructor(node, executor) {
17
24
  super(node, executor);
@@ -20,12 +27,37 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
20
27
  pagination: { limit: DEFAULT_LIMIT, offset: 0, ...node.pagination },
21
28
  };
22
29
  }
30
+ /**
31
+ * Selects a set of fields from the table.
32
+ * @param fields - An array of field names to select.
33
+ * @returns A new `QueryBuilder` instance with the specified fields selected.
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * const users = await qb
38
+ * .selectFrom('users')
39
+ * .select(['id', 'name'])
40
+ * .execute();
41
+ * ```
42
+ */
23
43
  select(fields) {
24
44
  return new QueryBuilder({
25
45
  ...this._node,
26
46
  fields: [...this._node.fields, ...fields],
27
47
  }, this._executor);
28
48
  }
49
+ /**
50
+ * Selects all fields from the table.
51
+ * @returns A new `QueryBuilder` instance with all fields selected.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const users = await qb
56
+ * .selectFrom('users')
57
+ * .selectAll()
58
+ * .execute();
59
+ * ```
60
+ */
29
61
  selectAll() {
30
62
  return new QueryBuilder({
31
63
  ...this._node,
@@ -59,21 +91,79 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
59
91
  fields: [...this._node.fields, ...newSelects],
60
92
  }, this._executor);
61
93
  }
94
+ /**
95
+ * Sets the maximum number of records to return.
96
+ * @param count - The maximum number of records.
97
+ * @returns A new `QueryBuilder` instance with the limit applied.
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const users = await qb
102
+ * .selectFrom('users')
103
+ * .select(['id', 'name'])
104
+ * .limit(10)
105
+ * .execute();
106
+ * ```
107
+ */
62
108
  limit(count) {
63
109
  return new QueryBuilder({
64
110
  ...this._node,
65
111
  pagination: { ...this._node.pagination, limit: count },
66
112
  }, this._executor);
67
113
  }
114
+ /**
115
+ * Sets the number of records to skip.
116
+ * @param count - The number of records to skip.
117
+ * @returns A new `QueryBuilder` instance with the offset applied.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const users = await qb
122
+ * .selectFrom('users')
123
+ * .select(['id', 'name'])
124
+ * .offset(10)
125
+ * .execute();
126
+ * ```
127
+ */
68
128
  offset(count) {
69
129
  return new QueryBuilder({
70
130
  ...this._node,
71
131
  pagination: { ...this._node.pagination, offset: count },
72
132
  }, this._executor);
73
133
  }
134
+ /**
135
+ * Paginates the results.
136
+ * @param page - The page number to retrieve.
137
+ * @param limit - The number of records per page.
138
+ * @returns A new `QueryBuilder` instance with pagination applied.
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * const users = await qb
143
+ * .selectFrom('users')
144
+ * .select(['id', 'name'])
145
+ * .paginate(2, 25) // Retrieves page 2 with 25 records per page
146
+ * .execute();
147
+ * ```
148
+ */
74
149
  paginate(page, limit) {
75
150
  return this.offset((page - 1) * limit).limit(limit);
76
151
  }
152
+ /**
153
+ * Sorts the results by a specified field.
154
+ * @param field - The field to sort by.
155
+ * @param direction - The sort direction ('asc' or 'desc').
156
+ * @returns A new `QueryBuilder` instance with the sorting applied.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const users = await qb
161
+ * .selectFrom('users')
162
+ * .select(['id', 'name'])
163
+ * .orderBy('name', 'asc')
164
+ * .execute();
165
+ * ```
166
+ */
77
167
  orderBy(field, direction = 'asc') {
78
168
  const newSorting = {
79
169
  field: field,
@@ -84,10 +174,35 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
84
174
  sorting: [...(this._node.sorting || []), newSorting],
85
175
  }, this._executor);
86
176
  }
177
+ /**
178
+ * Executes the select query.
179
+ * @returns A promise that resolves with an array of the selected records.
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const users = await qb
184
+ * .selectFrom('users')
185
+ * .select(['id', 'name'])
186
+ * .execute();
187
+ * ```
188
+ */
87
189
  async execute() {
88
190
  const response = await this._executor.execute(this);
89
191
  return response[0];
90
192
  }
193
+ /**
194
+ * Executes the select query and returns the first result.
195
+ * @returns A promise that resolves with the first record, or `null` if no records were found.
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * const user = await qb
200
+ * .selectFrom('users')
201
+ * .where('id', '=', 1)
202
+ * .select(['id', 'name'])
203
+ * .executeTakeFirst();
204
+ * ```
205
+ */
91
206
  async executeTakeFirst() {
92
207
  const response = await this._executor.execute(this);
93
208
  return response[0]?.[0] ?? null;
@@ -149,11 +264,25 @@ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
149
264
  }
150
265
  }
151
266
  exports.QueryBuilder = QueryBuilder;
267
+ /**
268
+ * The root query builder class that provides entry points for all query types.
269
+ */
152
270
  class RootQueryBuilder {
153
271
  #executor;
154
272
  constructor(config) {
155
273
  this.#executor = new executor_js_1.Executor(config.baseUrl, config.apiKey);
156
274
  }
275
+ /**
276
+ * Creates a new select query builder for the specified table.
277
+ * @param from - The name of the table to select from.
278
+ * @returns A new `QueryBuilder` instance.
279
+ *
280
+ * @example
281
+ * ```typescript
282
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
283
+ * const userQuery = qb.selectFrom('users');
284
+ * ```
285
+ */
157
286
  selectFrom(from) {
158
287
  return new QueryBuilder({
159
288
  tableName: from,
@@ -163,6 +292,17 @@ class RootQueryBuilder {
163
292
  queryType: 'root',
164
293
  }, this.#executor);
165
294
  }
295
+ /**
296
+ * Creates a new insert query builder for the specified table.
297
+ * @param into - The name of the table to insert into.
298
+ * @returns A new `InsertQueryBuilder` instance.
299
+ *
300
+ * @example
301
+ * ```typescript
302
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
303
+ * const insertQuery = qb.insertInto('users');
304
+ * ```
305
+ */
166
306
  insertInto(into) {
167
307
  return new insert_query_builder_js_1.InsertQueryBuilder({
168
308
  tableName: into,
@@ -171,6 +311,17 @@ class RootQueryBuilder {
171
311
  type: 'create',
172
312
  }, this.#executor);
173
313
  }
314
+ /**
315
+ * Creates a new update query builder for the specified table.
316
+ * @param tableName - The name of the table to update.
317
+ * @returns A new `UpdateQueryBuilder` instance.
318
+ *
319
+ * @example
320
+ * ```typescript
321
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
322
+ * const updateQuery = qb.update('users');
323
+ * ```
324
+ */
174
325
  update(tableName) {
175
326
  return new update_query_builder_js_1.UpdateQueryBuilder({
176
327
  tableName: tableName,
@@ -179,6 +330,17 @@ class RootQueryBuilder {
179
330
  type: 'update',
180
331
  }, this.#executor);
181
332
  }
333
+ /**
334
+ * Creates a new delete query builder for the specified table.
335
+ * @param tableName - The name of the table to delete from.
336
+ * @returns A new `DeleteQueryBuilder` instance.
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
341
+ * const deleteQuery = qb.deleteFrom('users');
342
+ * ```
343
+ */
182
344
  deleteFrom(tableName) {
183
345
  return new delete_query_builder_js_1.DeleteQueryBuilder({
184
346
  tableName: tableName,
@@ -187,9 +349,35 @@ class RootQueryBuilder {
187
349
  type: 'delete',
188
350
  }, this.#executor);
189
351
  }
352
+ /**
353
+ * Creates a new batch query builder.
354
+ * @param builders - An array of query builders to execute in a batch.
355
+ * @returns A new `BatchQueryBuilder` instance.
356
+ *
357
+ * @example
358
+ * ```typescript
359
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
360
+ * const batchQuery = qb.batch([
361
+ * qb.selectFrom('users').select(['id', 'name']),
362
+ * qb.insertInto('users').values({ name: 'New User' }),
363
+ * ]);
364
+ * const [users, newUser] = await batchQuery.execute();
365
+ * ```
366
+ */
190
367
  batch(builders) {
191
368
  return new batch_query_builder_js_1.BatchQueryBuilder(builders, this.#executor);
192
369
  }
370
+ /**
371
+ * Creates a new aggregation query builder for the specified table.
372
+ * @param tableName - The name of the table to aggregate from.
373
+ * @returns A new `AggregationQueryBuilder` instance.
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
378
+ * const aggregateQuery = qb.aggregateFrom('users');
379
+ * ```
380
+ */
193
381
  aggregateFrom(tableName) {
194
382
  const node = {
195
383
  tableName: tableName,
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,19 @@ import type { AnyDB } from './@types/internal-types.js';
3
3
  import { LinkColumnNames } from './@types/query-builder.js';
4
4
  import { Executor } from './executor.js';
5
5
  import { QueryBuilder } from './query-builder.js';
6
+ /**
7
+ * A builder for creating subqueries on linked records.
8
+ * This is used internally by the `with` method on the `QueryBuilder`.
9
+ * @template DB - The database type.
10
+ * @template CurrentTableName - The name of the table the selection is starting from.
11
+ */
6
12
  export declare class SelectionBuilder<DB extends AnyDB, CurrentTableName extends keyof DB> {
7
13
  _executor: Executor;
8
14
  constructor(executor: Executor);
9
- useLink<LinkName extends LinkColumnNames<DB[CurrentTableName]> & string>(from: LinkName): QueryBuilder<DB, DB[CurrentTableName][LinkName] extends LinkColumnType<any> ? DB[CurrentTableName][LinkName]["linkedTo"] : never, object, LinkName>;
15
+ /**
16
+ * Creates a new query builder for a linked table.
17
+ * @param from - The name of the link field to select from.
18
+ * @returns A new `QueryBuilder` instance for the linked table.
19
+ */
20
+ useLink<LinkName extends LinkColumnNames<DB[CurrentTableName]> & string>(from: LinkName): QueryBuilder<DB, DB[CurrentTableName][LinkName] extends LinkColumnType<any, boolean> ? DB[CurrentTableName][LinkName]["linkedTo"] : never, object, LinkName>;
10
21
  }
@@ -2,11 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SelectionBuilder = void 0;
4
4
  const query_builder_js_1 = require("./query-builder.js");
5
+ /**
6
+ * A builder for creating subqueries on linked records.
7
+ * This is used internally by the `with` method on the `QueryBuilder`.
8
+ * @template DB - The database type.
9
+ * @template CurrentTableName - The name of the table the selection is starting from.
10
+ */
5
11
  class SelectionBuilder {
6
12
  _executor;
7
13
  constructor(executor) {
8
14
  this._executor = executor;
9
15
  }
16
+ /**
17
+ * Creates a new query builder for a linked table.
18
+ * @param from - The name of the link field to select from.
19
+ * @returns A new `QueryBuilder` instance for the linked table.
20
+ */
10
21
  useLink(from) {
11
22
  return new query_builder_js_1.QueryBuilder({
12
23
  field: from,
@@ -1 +1 @@
1
- {"version":3,"file":"selection-builder.js","sourceRoot":"","sources":["../../src/selection-builder.ts"],"names":[],"mappings":";;;AAIA,yDAAkD;AAElD,MAAa,gBAAgB;IAI3B,SAAS,CAAW;IAEpB,YAAY,QAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,CACL,IAAc;QAEd,OAAO,IAAI,+BAAY,CAQrB;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YAClD,SAAS,EAAE,MAAM;SAClB,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;AA9BD,4CA8BC"}
1
+ {"version":3,"file":"selection-builder.js","sourceRoot":"","sources":["../../src/selection-builder.ts"],"names":[],"mappings":";;;AAIA,yDAAkD;AAElD;;;;;GAKG;AACH,MAAa,gBAAgB;IAI3B,SAAS,CAAW;IAEpB,YAAY,QAAkB;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,IAAc;QAEd,OAAO,IAAI,+BAAY,CAQrB;YACE,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;YAClD,SAAS,EAAE,MAAM;SAClB,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;AAnCD,4CAmCC"}
@@ -2,10 +2,42 @@ import type { AnyDB } from './@types/internal-types.js';
2
2
  import type { Updatable, UpdateNode } from './@types/update.js';
3
3
  import { Executor } from './executor.js';
4
4
  import { FilterableQueryBuilder } from './where-query-builder.js';
5
+ /**
6
+ * A query builder for updating records in the database.
7
+ * @template DB - The database type.
8
+ * @template TableName - The name of the table to update.
9
+ */
5
10
  export declare class UpdateQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
6
11
  #private;
7
12
  constructor(node: UpdateNode, executor: Executor);
13
+ /**
14
+ * Sets the values to update for the records that match the where clauses.
15
+ * @param values - An object containing the fields and their new values.
16
+ * @returns The `UpdateQueryBuilder` instance for chaining.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const { affectedRecords } = await qb
21
+ * .update('users')
22
+ * .set({ name: 'New Name' })
23
+ * .where('id', '=', 1)
24
+ * .execute();
25
+ * ```
26
+ */
8
27
  set(values: Updatable<DB[TableName]>): UpdateQueryBuilder<DB, TableName>;
28
+ /**
29
+ * Executes the update query.
30
+ * @returns A promise that resolves with the number of affected records.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const { affectedRecords } = await qb
35
+ * .update('users')
36
+ * .set({ name: 'New Name' })
37
+ * .where('id', '=', 1)
38
+ * .execute();
39
+ * ```
40
+ */
9
41
  execute(): Promise<{
10
42
  affectedRecords: number;
11
43
  }>;
@@ -2,18 +2,50 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UpdateQueryBuilder = void 0;
4
4
  const where_query_builder_js_1 = require("./where-query-builder.js");
5
+ /**
6
+ * A query builder for updating records in the database.
7
+ * @template DB - The database type.
8
+ * @template TableName - The name of the table to update.
9
+ */
5
10
  class UpdateQueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
6
11
  #node;
7
12
  constructor(node, executor) {
8
13
  super(node, executor);
9
14
  this.#node = node;
10
15
  }
16
+ /**
17
+ * Sets the values to update for the records that match the where clauses.
18
+ * @param values - An object containing the fields and their new values.
19
+ * @returns The `UpdateQueryBuilder` instance for chaining.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const { affectedRecords } = await qb
24
+ * .update('users')
25
+ * .set({ name: 'New Name' })
26
+ * .where('id', '=', 1)
27
+ * .execute();
28
+ * ```
29
+ */
11
30
  set(values) {
12
31
  return new UpdateQueryBuilder({
13
32
  ...this.#node,
14
33
  values,
15
34
  }, this._executor);
16
35
  }
36
+ /**
37
+ * Executes the update query.
38
+ * @returns A promise that resolves with the number of affected records.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const { affectedRecords } = await qb
43
+ * .update('users')
44
+ * .set({ name: 'New Name' })
45
+ * .where('id', '=', 1)
46
+ * .execute();
47
+ * ```
48
+ */
17
49
  async execute() {
18
50
  const response = await this._executor.execute(this);
19
51
  return response[0];
@@ -1 +1 @@
1
- {"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,MAAgC;QAClC,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM;SACP,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAgC,IAAI,CAAC,CAAC;QAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;CACF;AAnDD,gDAmDC"}
1
+ {"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE;;;;GAIG;AACH,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,MAAgC;QAClC,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM;SACP,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAgC,IAAI,CAAC,CAAC;QAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;CACF;AA9ED,gDA8EC"}
@@ -2,13 +2,72 @@ import { LinkColumnType } from '@taylordb/shared';
2
2
  import { AnyDB, FilterableNode } from './@types/internal-types.js';
3
3
  import { ColumnNames } from './@types/query-builder.js';
4
4
  import { Executor } from './executor.js';
5
+ /**
6
+ * A base class for query builders that support filtering.
7
+ * It provides the `where` and `orWhere` methods.
8
+ * @template DB - The database type.
9
+ * @template TableName - The name of the table to query.
10
+ */
5
11
  export declare class FilterableQueryBuilder<DB extends AnyDB, TableName extends keyof DB> {
6
12
  _node: FilterableNode;
7
13
  _executor: Executor;
8
14
  constructor(node: FilterableNode, executor: Executor);
9
- where<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any> ? ((qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
15
+ /**
16
+ * Adds a `where` clause to the query.
17
+ * This can be a simple condition, a nested query, or a cross-filter on a linked table.
18
+ *
19
+ * @param field - The field to filter on.
20
+ * @param operator - The filter operator.
21
+ * @param value - The value to filter by.
22
+ * @returns The query builder instance for chaining.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const users = await qb
27
+ * .selectFrom('users')
28
+ * .where('name', '=', 'John Doe')
29
+ * .execute();
30
+ * ```
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const users = await qb
35
+ * .selectFrom('users')
36
+ * .where((qb) =>
37
+ * qb.where('name', '=', 'John Doe').orWhere('email', '=', 'john.doe@example.com')
38
+ * )
39
+ * .execute();
40
+ * ```
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const users = await qb
45
+ * .selectFrom('users')
46
+ * .where('posts', 'hasAnyOf', (qb) => qb.where('isPublished', '=', true))
47
+ * .execute();
48
+ * ```
49
+ */
50
+ where<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any, boolean> ? ((qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
10
51
  where<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
11
- orWhere<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any> ? (qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never> | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
52
+ /**
53
+ * Adds an `orWhere` clause to the query.
54
+ * This is similar to `where`, but the condition will be joined with `OR`.
55
+ *
56
+ * @param field - The field to filter on.
57
+ * @param operator - The filter operator.
58
+ * @param value - The value to filter by.
59
+ * @returns The query builder instance for chaining.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * const users = await qb
64
+ * .selectFrom('users')
65
+ * .where('name', '=', 'John Doe')
66
+ * .orWhere('name', '=', 'Jane Doe')
67
+ * .execute();
68
+ * ```
69
+ */
70
+ orWhere<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any, boolean> ? (qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any, boolean> ? DB[TableName][TField]['linkedTo'] : never> | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
12
71
  orWhere<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
13
72
  }
14
73
  export declare class WhereQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
@@ -2,6 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WhereQueryBuilder = exports.FilterableQueryBuilder = void 0;
4
4
  const selection_builder_js_1 = require("./selection-builder.js");
5
+ /**
6
+ * A base class for query builders that support filtering.
7
+ * It provides the `where` and `orWhere` methods.
8
+ * @template DB - The database type.
9
+ * @template TableName - The name of the table to query.
10
+ */
5
11
  class FilterableQueryBuilder {
6
12
  _executor;
7
13
  constructor(node, executor) {
@@ -1 +1 @@
1
- {"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
- import { ColumnType, CreateMutationMetaData, MetadataWithTableName } from '@taylordb/shared';
2
- import { QueryNode } from './internal-types.js';
1
+ import { CreateMutationMetaData, MetadataWithTableName } from '@taylordb/shared';
2
+ import { AnyDB, QueryNode } from './internal-types.js';
3
3
  export type InsertNode = MetadataWithTableName<CreateMutationMetaData> & {
4
4
  returning: (string | QueryNode)[];
5
5
  };
6
- export type Insertable<T> = {
7
- [K in keyof T]?: T[K] extends ColumnType<any, any, infer I, any> ? I : never;
6
+ type RequiredKeys<T extends AnyDB[string]> = {
7
+ [K in keyof T]: T[K]['isRequired'] extends true ? T[K]['insert'] extends never ? never : K : never;
8
+ }[keyof T];
9
+ type OptionalKeys<T extends AnyDB[string]> = {
10
+ [K in keyof T]: T[K]['isRequired'] extends false ? T[K]['insert'] extends never ? never : K : never;
11
+ }[keyof T];
12
+ export type Insertable<T extends AnyDB[string]> = {
13
+ [K in RequiredKeys<T>]: T[K]['insert'];
14
+ } & {
15
+ [K in OptionalKeys<T>]?: T[K]['insert'];
8
16
  };
17
+ export {};
@@ -1,8 +1,8 @@
1
1
  import { LinkColumnType } from '@taylordb/shared';
2
2
  export type NonLinkColumnNames<T> = {
3
- [K in keyof T]: T[K] extends LinkColumnType<any> ? never : K;
3
+ [K in keyof T]: T[K] extends LinkColumnType<any, any> ? never : K;
4
4
  }[keyof T];
5
5
  export type LinkColumnNames<T> = {
6
- [K in keyof T]: T[K] extends LinkColumnType<any> ? K : never;
6
+ [K in keyof T]: T[K] extends LinkColumnType<any, any> ? K : never;
7
7
  }[keyof T];
8
8
  export type ColumnNames<T> = keyof T;
@@ -2,8 +2,8 @@ import { ColumnType, LinkColumnType } from '@taylordb/shared';
2
2
  import { QueryBuilder } from '../query-builder.js';
3
3
  import { AnyDB } from './internal-types.js';
4
4
  import { LinkColumnNames, NonLinkColumnNames } from './query-builder.js';
5
- export type InferDataType<TColumn> = TColumn extends ColumnType<infer D, any, any, any> ? D : never;
6
- export type TableShape<TTable> = {
5
+ export type InferDataType<TColumn extends ColumnType<any, any, any, any, any>> = TColumn['isRequired'] extends true ? TColumn['raw'] : TColumn['raw'] | undefined;
6
+ export type TableShape<TTable extends AnyDB[string]> = {
7
7
  [K in keyof TTable]: InferDataType<TTable[K]>;
8
8
  };
9
9
  type InferSubqueryResult<TSubquery> = TSubquery extends QueryBuilder<any, any, infer TSelection, any> ? TSelection[] : never;
@@ -18,7 +18,7 @@ export type ResolveSelection<DB extends AnyDB, TName extends keyof DB, TFields e
18
18
  }[number]>;
19
19
  export type ResolveWithPlain<DB extends AnyDB, TName extends keyof DB, TRelations extends (LinkColumnNames<DB[TName]> & string) | readonly (LinkColumnNames<DB[TName]> & string)[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
20
20
  [K in TRelations extends readonly any[] ? TRelations[number] : TRelations]: {
21
- [P in K]: TableShape<DB[DB[TName][P] extends LinkColumnType<infer L> ? L : never]>[];
21
+ [P in K]: TableShape<DB[DB[TName][P] extends LinkColumnType<infer L, any> ? L : never]>[];
22
22
  };
23
23
  }[TRelations extends readonly any[] ? TRelations[number] : TRelations]>;
24
24
  export type ResolveWithObject<TRelations extends Record<string, (qb: any) => QueryBuilder<any, any, any, any>>, TCurrentSelection> = TCurrentSelection & {
@@ -1,5 +1,10 @@
1
- import { ColumnType, MetadataWithTableName, UpdateMutationMetaData } from '@taylordb/shared';
1
+ import { MetadataWithTableName, UpdateMutationMetaData } from '@taylordb/shared';
2
+ import { AnyDB } from './internal-types';
2
3
  export type UpdateNode = MetadataWithTableName<UpdateMutationMetaData>;
3
- export type Updatable<T> = {
4
- [K in keyof T]?: T[K] extends ColumnType<any, any, infer I, any> ? I : never;
4
+ type NotUpdatableKeys<T extends AnyDB[string]> = {
5
+ [K in keyof T]: T[K]['update'] extends never ? K : never;
6
+ }[keyof T];
7
+ export type Updatable<T extends AnyDB[string]> = {
8
+ [K in keyof Omit<T, NotUpdatableKeys<T>>]?: T[K]['update'];
5
9
  };
10
+ export {};
@@ -87,7 +87,7 @@ describe('QueryBuilder', () => {
87
87
  },
88
88
  });
89
89
  });
90
- it('should compile a batch query', () => {
90
+ it('should compile a batch query', async () => {
91
91
  const { variables } = qb
92
92
  .batch([
93
93
  qb.selectFrom('customers').select(['firstName', 'lastName']),