@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
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BatchQueryBuilder = void 0;
4
4
  const aggregation_query_builder_js_1 = require("./aggregation-query-builder.js");
5
5
  const query_builder_js_1 = require("./query-builder.js");
6
+ /**
7
+ * A query builder for executing multiple queries in a single batch.
8
+ * @template TBuilders - An array of query builders to execute.
9
+ */
6
10
  class BatchQueryBuilder {
7
11
  #builders;
8
12
  #executor;
@@ -10,9 +14,41 @@ class BatchQueryBuilder {
10
14
  this.#builders = builders;
11
15
  this.#executor = executor;
12
16
  }
17
+ /**
18
+ * Executes the batch query.
19
+ * @returns A promise that resolves with an array of the results from each query in the batch.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const [users, newUser] = await qb.batch([
24
+ * qb.selectFrom('users').select(['id', 'name']),
25
+ * qb.insertInto('users').values({ name: 'New User' }).returning(['id', 'name']),
26
+ * ]).execute();
27
+ * ```
28
+ */
13
29
  async execute() {
14
30
  return this.#executor.execute(this);
15
31
  }
32
+ /**
33
+ * Subscribes to the results of the batch query.
34
+ * This is only possible if all queries in the batch are subscribable (select and aggregate).
35
+ * @param callback - A callback function that will be called with the results of the batch query.
36
+ * @returns A function to unsubscribe from the query.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * const unsubscribe = qb.batch([
41
+ * qb.selectFrom('users').select(['id', 'name']),
42
+ * qb.aggregateFrom('users').groupBy('role').withAggregates({ id: ['count'] }),
43
+ * ]).subscribe(([users, userAggregates]) => {
44
+ * console.log('Users:', users);
45
+ * console.log('User Aggregates:', userAggregates);
46
+ * });
47
+ *
48
+ * // To stop listening for updates
49
+ * unsubscribe();
50
+ * ```
51
+ */
16
52
  subscribe(callback) {
17
53
  const builders = this.#builders.filter(builder => builder instanceof aggregation_query_builder_js_1.AggregationQueryBuilder ||
18
54
  builder instanceof query_builder_js_1.QueryBuilder);
@@ -1 +1 @@
1
- {"version":3,"file":"batch-query-builder.js","sourceRoot":"","sources":["../../src/batch-query-builder.ts"],"names":[],"mappings":";;;AAAA,iFAAyE;AAIzE,yDAAkD;AAuBlD,MAAa,iBAAiB;IAG5B,SAAS,CAAY;IACrB,SAAS,CAAW;IAEpB,YAAY,QAAmB,EAAE,QAAkB;QACjD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO;QAGX,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,CACP,QAIS;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACpC,OAAO,CAAC,EAAE,CACR,OAAO,YAAY,sDAAuB;YAC1C,OAAO,YAAY,+BAAY,CAClC,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAe,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC5C,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;CACF;AArDD,8CAqDC"}
1
+ {"version":3,"file":"batch-query-builder.js","sourceRoot":"","sources":["../../src/batch-query-builder.ts"],"names":[],"mappings":";;;AAAA,iFAAyE;AAIzE,yDAAkD;AAuBlD;;;GAGG;AACH,MAAa,iBAAiB;IAG5B,SAAS,CAAY;IACrB,SAAS,CAAW;IAEpB,YAAY,QAAmB,EAAE,QAAkB;QACjD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,OAAO;QAGX,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CACP,QAIS;QAET,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CACpC,OAAO,CAAC,EAAE,CACR,OAAO,YAAY,sDAAuB;YAC1C,OAAO,YAAY,+BAAY,CAClC,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAe,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YAC5C,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;CACF;AArFD,8CAqFC"}
@@ -2,9 +2,26 @@ import type { DeleteNode } from './@types/delete.js';
2
2
  import type { AnyDB } from './@types/internal-types.js';
3
3
  import { Executor } from './executor.js';
4
4
  import { FilterableQueryBuilder } from './where-query-builder.js';
5
+ /**
6
+ * A query builder for deleting records from the database.
7
+ * @template DB - The database type.
8
+ * @template TableName - The name of the table to delete from.
9
+ */
5
10
  export declare class DeleteQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
6
11
  #private;
7
12
  constructor(node: DeleteNode, executor: Executor);
13
+ /**
14
+ * Executes the delete query.
15
+ * @returns A promise that resolves with the number of affected records.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const { affectedRecords } = await qb
20
+ * .deleteFrom('users')
21
+ * .where('id', '=', 1)
22
+ * .execute();
23
+ * ```
24
+ */
8
25
  execute(): Promise<{
9
26
  affectedRecords: number;
10
27
  }>;
@@ -2,12 +2,29 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DeleteQueryBuilder = void 0;
4
4
  const where_query_builder_js_1 = require("./where-query-builder.js");
5
+ /**
6
+ * A query builder for deleting records from the database.
7
+ * @template DB - The database type.
8
+ * @template TableName - The name of the table to delete from.
9
+ */
5
10
  class DeleteQueryBuilder 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
+ * Executes the delete query.
18
+ * @returns A promise that resolves with the number of affected records.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * const { affectedRecords } = await qb
23
+ * .deleteFrom('users')
24
+ * .where('id', '=', 1)
25
+ * .execute();
26
+ * ```
27
+ */
11
28
  async execute() {
12
29
  const response = await this._executor.execute(this);
13
30
  return response[0];
@@ -1 +1 @@
1
- {"version":3,"file":"delete-query-builder.js","sourceRoot":"","sources":["../../src/delete-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,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,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;AAxCD,gDAwCC"}
1
+ {"version":3,"file":"delete-query-builder.js","sourceRoot":"","sources":["../../src/delete-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;;;;;;;;;;;OAWG;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,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;AApDD,gDAoDC"}
@@ -47,7 +47,7 @@ class Executor {
47
47
  }
48
48
  const jsonResponse = await response.json();
49
49
  if (jsonResponse.errors) {
50
- throw new Error(`GraphQL errors: ${JSON.stringify(jsonResponse.errors)}`);
50
+ throw new Error(`GraphQL errors: ${jsonResponse.errors.map(error => error.message).join('\n')}`);
51
51
  }
52
52
  if (jsonResponse.data) {
53
53
  const [firstKey] = Object.keys(jsonResponse.data);
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,82 @@ import type { AnyDB } from './@types/internal-types.js';
3
3
  import { NonLinkColumnNames } from './@types/query-builder.js';
4
4
  import { ResolveSelection } from './@types/type-helpers.js';
5
5
  import { Executor } from './executor.js';
6
+ /**
7
+ * A query builder for creating new records in the database.
8
+ * @template DB - The database type.
9
+ * @template TableName - The name of the table to insert into.
10
+ * @template Selection - The type of the selected fields.
11
+ */
6
12
  export declare class InsertQueryBuilder<DB extends AnyDB, TableName extends keyof DB, Selection = {
7
13
  id: number;
8
14
  }> {
9
15
  #private;
10
16
  constructor(node: InsertNode, executor: Executor);
17
+ /**
18
+ * The values to insert into the table.
19
+ * @param values - An object or array of objects representing the records to create.
20
+ * @returns The `InsertQueryBuilder` instance for chaining.
21
+ *
22
+ * @example Single Record Insertion
23
+ * ```typescript
24
+ * const newUser = await qb
25
+ * .insertInto('users')
26
+ * .values({ name: 'John Doe', email: 'john.doe@example.com' })
27
+ * .executeTakeFirst();
28
+ * ```
29
+ *
30
+ * @example Multiple Record Insertion
31
+ * ```typescript
32
+ * const newUsers = await qb
33
+ * .insertInto('users')
34
+ * .values([{ name: 'John Doe' }, { name: 'Jane Doe' }])
35
+ * .execute();
36
+ * ```
37
+ */
11
38
  values(values: Insertable<DB[TableName]> | Insertable<DB[TableName]>[]): InsertQueryBuilder<DB, TableName, Selection>;
39
+ /**
40
+ * The fields to return after the insert operation.
41
+ * @param fields - An array of field names to return.
42
+ * @returns The `InsertQueryBuilder` instance for chaining.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const newUser = await qb
47
+ * .insertInto('users')
48
+ * .values({ name: 'John Doe' })
49
+ * .returning(['id', 'name'])
50
+ * .executeTakeFirst();
51
+ * ```
52
+ */
12
53
  returning<const TFields extends readonly NonLinkColumnNames<DB[TableName]>[]>(fields: TFields): InsertQueryBuilder<DB, TableName, ResolveSelection<DB, TableName, TFields, object>>;
54
+ /**
55
+ * Executes the insert query.
56
+ * @returns A promise that resolves with an array of the selected fields from the inserted records.
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * const newUsers = await qb
61
+ * .insertInto('users')
62
+ * .values([{ name: 'John Doe' }, { name: 'Jane Doe' }])
63
+ * .returning(['id', 'name'])
64
+ * .execute();
65
+ * ```
66
+ */
13
67
  execute(): Promise<Selection[]>;
68
+ /**
69
+ * Executes the insert query and returns the first result.
70
+ * @returns A promise that resolves with the first inserted record, or `null` if no records were inserted.
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const newUser = await qb
75
+ * .insertInto('users')
76
+ * .values({ name: 'John Doe' })
77
+ * .returning(['id', 'name'])
78
+ * .executeTakeFirst();
79
+ * ```
80
+ */
81
+ executeTakeFirst(): Promise<Selection | null>;
14
82
  compile(): {
15
83
  query: string;
16
84
  variables: Record<string, any>;
@@ -3,6 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InsertQueryBuilder = void 0;
4
4
  const query_builder_js_1 = require("./query-builder.js");
5
5
  const selection_builder_js_1 = require("./selection-builder.js");
6
+ /**
7
+ * A query builder for creating new records in the database.
8
+ * @template DB - The database type.
9
+ * @template TableName - The name of the table to insert into.
10
+ * @template Selection - The type of the selected fields.
11
+ */
6
12
  class InsertQueryBuilder {
7
13
  #node;
8
14
  #executor;
@@ -10,12 +16,47 @@ class InsertQueryBuilder {
10
16
  this.#node = node;
11
17
  this.#executor = executor;
12
18
  }
19
+ /**
20
+ * The values to insert into the table.
21
+ * @param values - An object or array of objects representing the records to create.
22
+ * @returns The `InsertQueryBuilder` instance for chaining.
23
+ *
24
+ * @example Single Record Insertion
25
+ * ```typescript
26
+ * const newUser = await qb
27
+ * .insertInto('users')
28
+ * .values({ name: 'John Doe', email: 'john.doe@example.com' })
29
+ * .executeTakeFirst();
30
+ * ```
31
+ *
32
+ * @example Multiple Record Insertion
33
+ * ```typescript
34
+ * const newUsers = await qb
35
+ * .insertInto('users')
36
+ * .values([{ name: 'John Doe' }, { name: 'Jane Doe' }])
37
+ * .execute();
38
+ * ```
39
+ */
13
40
  values(values) {
14
41
  return new InsertQueryBuilder({
15
42
  ...this.#node,
16
43
  createdRecords: Array.isArray(values) ? values : [values],
17
44
  }, this.#executor);
18
45
  }
46
+ /**
47
+ * The fields to return after the insert operation.
48
+ * @param fields - An array of field names to return.
49
+ * @returns The `InsertQueryBuilder` instance for chaining.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const newUser = await qb
54
+ * .insertInto('users')
55
+ * .values({ name: 'John Doe' })
56
+ * .returning(['id', 'name'])
57
+ * .executeTakeFirst();
58
+ * ```
59
+ */
19
60
  returning(fields) {
20
61
  const newSelects = fields.map(field => {
21
62
  if (typeof field === 'function') {
@@ -31,9 +72,39 @@ class InsertQueryBuilder {
31
72
  returning: [...this.#node.returning, ...newSelects],
32
73
  }, this.#executor);
33
74
  }
75
+ /**
76
+ * Executes the insert query.
77
+ * @returns A promise that resolves with an array of the selected fields from the inserted records.
78
+ *
79
+ * @example
80
+ * ```typescript
81
+ * const newUsers = await qb
82
+ * .insertInto('users')
83
+ * .values([{ name: 'John Doe' }, { name: 'Jane Doe' }])
84
+ * .returning(['id', 'name'])
85
+ * .execute();
86
+ * ```
87
+ */
34
88
  async execute() {
35
89
  return (await this.#executor.execute(this))[0];
36
90
  }
91
+ /**
92
+ * Executes the insert query and returns the first result.
93
+ * @returns A promise that resolves with the first inserted record, or `null` if no records were inserted.
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const newUser = await qb
98
+ * .insertInto('users')
99
+ * .values({ name: 'John Doe' })
100
+ * .returning(['id', 'name'])
101
+ * .executeTakeFirst();
102
+ * ```
103
+ */
104
+ async executeTakeFirst() {
105
+ const response = await this.execute();
106
+ return response[0] ?? null;
107
+ }
37
108
  compile() {
38
109
  const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
39
110
  const metadata = [this._prepareMetadata()];
@@ -1 +1 @@
1
- {"version":3,"file":"insert-query-builder.js","sourceRoot":"","sources":["../../src/insert-query-builder.ts"],"names":[],"mappings":";;;AAKA,yDAAkD;AAClD,iEAA0D;AAE1D,MAAa,kBAAkB;IAK7B,KAAK,CAAa;IAClB,SAAS,CAAW;IAEpB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,MAAM,CACJ,MAA+D;QAE/D,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SAC1D,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,SAAS,CACP,MAAe;QAMf,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACpC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,MAAM,OAAO,GAAG,IAAI,uCAAgB,CAAgB,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpE,aAAa;gBACb,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChC,OAAO,QAAQ,CAAC,KAAK,CAAC;YACxB,CAAC;YACD,OAAO,KAAe,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC;SACpD,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,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,MAAM,YAAY,GAAG,CAAC,OAA+B,EAAS,EAAE;YAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,MAAM,eAAe,GAAG,IAAI,+BAAY,CACtC,KAAkB,EAClB,IAAI,CAAC,SAAS,CACf,CAAC;gBACF,OAAO,eAAe,CAAC,gBAAgB,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;YACpD,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACpC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEX,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc;YACzC,SAAS,EAAE,kBAAkB;SAC9B,CAAC;IACJ,CAAC;CACF;AA7FD,gDA6FC"}
1
+ {"version":3,"file":"insert-query-builder.js","sourceRoot":"","sources":["../../src/insert-query-builder.ts"],"names":[],"mappings":"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"}
@@ -9,22 +9,166 @@ import { Executor } from './executor.js';
9
9
  import { InsertQueryBuilder } from './insert-query-builder.js';
10
10
  import { UpdateQueryBuilder } from './update-query-builder.js';
11
11
  import { FilterableQueryBuilder } from './where-query-builder.js';
12
+ /**
13
+ * The main query builder class for constructing and executing select queries.
14
+ * @template DB - The database type.
15
+ * @template TableName - The name of the table to query.
16
+ * @template Selection - The type of the selected fields.
17
+ * @template LinkName - The name of the link field if this is a subquery.
18
+ */
12
19
  export declare class QueryBuilder<DB extends AnyDB, TableName extends keyof DB, Selection = object, LinkName = null> extends FilterableQueryBuilder<DB, TableName> {
13
20
  _node: QueryNode;
14
21
  constructor(node: QueryNode, executor: Executor);
22
+ /**
23
+ * Selects a set of fields from the table.
24
+ * @param fields - An array of field names to select.
25
+ * @returns A new `QueryBuilder` instance with the specified fields selected.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const users = await qb
30
+ * .selectFrom('users')
31
+ * .select(['id', 'name'])
32
+ * .execute();
33
+ * ```
34
+ */
15
35
  select<const TFields extends readonly NonLinkColumnNames<DB[TableName]>[]>(fields: TFields): QueryBuilder<DB, TableName, ResolveSelection<DB, TableName, TFields, Selection>>;
36
+ /**
37
+ * Selects all fields from the table.
38
+ * @returns A new `QueryBuilder` instance with all fields selected.
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * const users = await qb
43
+ * .selectFrom('users')
44
+ * .selectAll()
45
+ * .execute();
46
+ * ```
47
+ */
16
48
  selectAll(): QueryBuilder<DB, TableName, Selection & {
17
49
  [K in keyof DB[TableName]]: InferDataType<DB[TableName][K]>;
18
50
  }>;
51
+ /**
52
+ * Includes related records from a linked table.
53
+ * This method has two overloads:
54
+ * 1. Pass an array of link field names to include all fields from the related records.
55
+ * 2. Pass an object to specify subqueries for each link field.
56
+ *
57
+ * @param relations - The relations to include.
58
+ * @returns A new `QueryBuilder` instance with the specified relations included.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const usersWithPosts = await qb
63
+ * .selectFrom('users')
64
+ * .select(['id', 'name'])
65
+ * .with(['posts']) // Assuming 'posts' is a link field on the 'users' table
66
+ * .execute();
67
+ * ```
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const usersWithPublishedPosts = await qb
72
+ * .selectFrom('users')
73
+ * .select(['id', 'name'])
74
+ * .with({
75
+ * posts: (qb) => qb.select(['title', 'content']).where('isPublished', '=', true),
76
+ * })
77
+ * .execute();
78
+ * ```
79
+ */
19
80
  with<const TArg extends (LinkColumnNames<DB[TableName]> & string) | readonly (LinkColumnNames<DB[TableName]> & string)[]>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithPlain<DB, TableName, TArg, Selection>>;
20
81
  with<const TArg extends {
21
- [K in LinkColumnNames<DB[TableName]>]?: (qb: QueryBuilder<DB, DB[TableName][K] extends LinkColumnType<any> ? DB[TableName][K]['linkedTo'] : never, object, K>) => QueryBuilder<DB, any, any, any>;
82
+ [K in LinkColumnNames<DB[TableName]>]?: (qb: QueryBuilder<DB, DB[TableName][K] extends LinkColumnType<any, boolean> ? DB[TableName][K]['linkedTo'] : never, object, K>) => QueryBuilder<DB, any, any, any>;
22
83
  }>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithObject<TArg, Selection>>;
84
+ /**
85
+ * Sets the maximum number of records to return.
86
+ * @param count - The maximum number of records.
87
+ * @returns A new `QueryBuilder` instance with the limit applied.
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const users = await qb
92
+ * .selectFrom('users')
93
+ * .select(['id', 'name'])
94
+ * .limit(10)
95
+ * .execute();
96
+ * ```
97
+ */
23
98
  limit(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
99
+ /**
100
+ * Sets the number of records to skip.
101
+ * @param count - The number of records to skip.
102
+ * @returns A new `QueryBuilder` instance with the offset applied.
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const users = await qb
107
+ * .selectFrom('users')
108
+ * .select(['id', 'name'])
109
+ * .offset(10)
110
+ * .execute();
111
+ * ```
112
+ */
24
113
  offset(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
114
+ /**
115
+ * Paginates the results.
116
+ * @param page - The page number to retrieve.
117
+ * @param limit - The number of records per page.
118
+ * @returns A new `QueryBuilder` instance with pagination applied.
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const users = await qb
123
+ * .selectFrom('users')
124
+ * .select(['id', 'name'])
125
+ * .paginate(2, 25) // Retrieves page 2 with 25 records per page
126
+ * .execute();
127
+ * ```
128
+ */
25
129
  paginate(page: number, limit: number): QueryBuilder<DB, TableName, Selection, LinkName>;
130
+ /**
131
+ * Sorts the results by a specified field.
132
+ * @param field - The field to sort by.
133
+ * @param direction - The sort direction ('asc' or 'desc').
134
+ * @returns A new `QueryBuilder` instance with the sorting applied.
135
+ *
136
+ * @example
137
+ * ```typescript
138
+ * const users = await qb
139
+ * .selectFrom('users')
140
+ * .select(['id', 'name'])
141
+ * .orderBy('name', 'asc')
142
+ * .execute();
143
+ * ```
144
+ */
26
145
  orderBy(field: keyof DB[TableName], direction?: 'asc' | 'desc'): QueryBuilder<DB, TableName, Selection, LinkName>;
146
+ /**
147
+ * Executes the select query.
148
+ * @returns A promise that resolves with an array of the selected records.
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * const users = await qb
153
+ * .selectFrom('users')
154
+ * .select(['id', 'name'])
155
+ * .execute();
156
+ * ```
157
+ */
27
158
  execute(): Promise<Selection[]>;
159
+ /**
160
+ * Executes the select query and returns the first result.
161
+ * @returns A promise that resolves with the first record, or `null` if no records were found.
162
+ *
163
+ * @example
164
+ * ```typescript
165
+ * const user = await qb
166
+ * .selectFrom('users')
167
+ * .where('id', '=', 1)
168
+ * .select(['id', 'name'])
169
+ * .executeTakeFirst();
170
+ * ```
171
+ */
28
172
  executeTakeFirst(): Promise<Selection | null>;
29
173
  subscribe(callback: (result: Selection[]) => void): Promise<{
30
174
  unsubscribe: () => Promise<void>;
@@ -37,17 +181,90 @@ export declare class QueryBuilder<DB extends AnyDB, TableName extends keyof DB,
37
181
  isSelectionQueryNode(node: QueryNode): node is SelectionQueryNode;
38
182
  isRootQueryNode(node: QueryNode): node is RootQueryNode;
39
183
  }
184
+ /**
185
+ * The root query builder class that provides entry points for all query types.
186
+ */
40
187
  export declare class RootQueryBuilder<DB extends AnyDB> {
41
188
  #private;
42
189
  constructor(config: {
43
190
  baseUrl: string;
44
191
  apiKey: string;
45
192
  });
193
+ /**
194
+ * Creates a new select query builder for the specified table.
195
+ * @param from - The name of the table to select from.
196
+ * @returns A new `QueryBuilder` instance.
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
201
+ * const userQuery = qb.selectFrom('users');
202
+ * ```
203
+ */
46
204
  selectFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(from: TableName): QueryBuilder<DB, TableName>;
205
+ /**
206
+ * Creates a new insert query builder for the specified table.
207
+ * @param into - The name of the table to insert into.
208
+ * @returns A new `InsertQueryBuilder` instance.
209
+ *
210
+ * @example
211
+ * ```typescript
212
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
213
+ * const insertQuery = qb.insertInto('users');
214
+ * ```
215
+ */
47
216
  insertInto<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(into: TableName): InsertQueryBuilder<DB, TableName>;
217
+ /**
218
+ * Creates a new update query builder for the specified table.
219
+ * @param tableName - The name of the table to update.
220
+ * @returns A new `UpdateQueryBuilder` instance.
221
+ *
222
+ * @example
223
+ * ```typescript
224
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
225
+ * const updateQuery = qb.update('users');
226
+ * ```
227
+ */
48
228
  update<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): UpdateQueryBuilder<DB, TableName>;
229
+ /**
230
+ * Creates a new delete query builder for the specified table.
231
+ * @param tableName - The name of the table to delete from.
232
+ * @returns A new `DeleteQueryBuilder` instance.
233
+ *
234
+ * @example
235
+ * ```typescript
236
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
237
+ * const deleteQuery = qb.deleteFrom('users');
238
+ * ```
239
+ */
49
240
  deleteFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): DeleteQueryBuilder<DB, TableName>;
241
+ /**
242
+ * Creates a new batch query builder.
243
+ * @param builders - An array of query builders to execute in a batch.
244
+ * @returns A new `BatchQueryBuilder` instance.
245
+ *
246
+ * @example
247
+ * ```typescript
248
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
249
+ * const batchQuery = qb.batch([
250
+ * qb.selectFrom('users').select(['id', 'name']),
251
+ * qb.insertInto('users').values({ name: 'New User' }),
252
+ * ]);
253
+ * const [users, newUser] = await batchQuery.execute();
254
+ * ```
255
+ */
50
256
  batch<const TBuilders extends readonly AnyQueryBuilder[]>(builders: TBuilders): AreAllBuildersSubscribable<TBuilders> extends true ? BatchQueryBuilder<TBuilders> : Omit<BatchQueryBuilder<TBuilders>, 'subscribe'>;
257
+ /**
258
+ * Creates a new aggregation query builder for the specified table.
259
+ * @param tableName - The name of the table to aggregate from.
260
+ * @returns A new `AggregationQueryBuilder` instance.
261
+ *
262
+ * @example
263
+ * ```typescript
264
+ * const qb = createQueryBuilder<MyDatabase>({ ... });
265
+ * const aggregateQuery = qb.aggregateFrom('users');
266
+ * ```
267
+ */
51
268
  aggregateFrom<TableName extends keyof Omit<DB, 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): AggregationQueryBuilder<DB, TableName>;
52
269
  }
53
270
  export declare function createQueryBuilder<DB extends AnyDB>(config: {