@taylordb/query-builder 0.9.0 → 0.9.2

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/cjs/__tests__/query-builder.spec.js +126 -23
  4. package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
  5. package/dist/cjs/aggregation-query-builder.d.ts +92 -0
  6. package/dist/cjs/aggregation-query-builder.js +92 -0
  7. package/dist/cjs/aggregation-query-builder.js.map +1 -1
  8. package/dist/cjs/batch-query-builder.d.ts +36 -0
  9. package/dist/cjs/batch-query-builder.js +36 -0
  10. package/dist/cjs/batch-query-builder.js.map +1 -1
  11. package/dist/cjs/delete-query-builder.d.ts +17 -0
  12. package/dist/cjs/delete-query-builder.js +17 -0
  13. package/dist/cjs/delete-query-builder.js.map +1 -1
  14. package/dist/cjs/executor.d.ts +4 -1
  15. package/dist/cjs/executor.js +20 -35
  16. package/dist/cjs/executor.js.map +1 -1
  17. package/dist/cjs/insert-query-builder.d.ts +68 -0
  18. package/dist/cjs/insert-query-builder.js +71 -0
  19. package/dist/cjs/insert-query-builder.js.map +1 -1
  20. package/dist/cjs/query-builder.d.ts +224 -5
  21. package/dist/cjs/query-builder.js +219 -5
  22. package/dist/cjs/query-builder.js.map +1 -1
  23. package/dist/cjs/selection-builder.d.ts +11 -0
  24. package/dist/cjs/selection-builder.js +11 -0
  25. package/dist/cjs/selection-builder.js.map +1 -1
  26. package/dist/cjs/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
  27. package/dist/cjs/{subscription-manager.js → socket-connection.js} +55 -9
  28. package/dist/cjs/socket-connection.js.map +1 -0
  29. package/dist/cjs/update-query-builder.d.ts +32 -0
  30. package/dist/cjs/update-query-builder.js +32 -0
  31. package/dist/cjs/update-query-builder.js.map +1 -1
  32. package/dist/cjs/where-query-builder.d.ts +59 -0
  33. package/dist/cjs/where-query-builder.js +6 -0
  34. package/dist/cjs/where-query-builder.js.map +1 -1
  35. package/dist/cjs/with-resolver.d.ts +5 -0
  36. package/dist/cjs/with-resolver.js +17 -0
  37. package/dist/cjs/with-resolver.js.map +1 -0
  38. package/dist/esm/__tests__/query-builder.spec.js +126 -23
  39. package/dist/esm/__tests__/query-builder.spec.js.map +1 -1
  40. package/dist/esm/aggregation-query-builder.d.ts +92 -0
  41. package/dist/esm/aggregation-query-builder.js +92 -0
  42. package/dist/esm/aggregation-query-builder.js.map +1 -1
  43. package/dist/esm/batch-query-builder.d.ts +36 -0
  44. package/dist/esm/batch-query-builder.js +36 -0
  45. package/dist/esm/batch-query-builder.js.map +1 -1
  46. package/dist/esm/delete-query-builder.d.ts +17 -0
  47. package/dist/esm/delete-query-builder.js +17 -0
  48. package/dist/esm/delete-query-builder.js.map +1 -1
  49. package/dist/esm/executor.d.ts +4 -1
  50. package/dist/esm/executor.js +20 -35
  51. package/dist/esm/executor.js.map +1 -1
  52. package/dist/esm/insert-query-builder.d.ts +68 -0
  53. package/dist/esm/insert-query-builder.js +71 -0
  54. package/dist/esm/insert-query-builder.js.map +1 -1
  55. package/dist/esm/query-builder.d.ts +224 -5
  56. package/dist/esm/query-builder.js +217 -4
  57. package/dist/esm/query-builder.js.map +1 -1
  58. package/dist/esm/selection-builder.d.ts +11 -0
  59. package/dist/esm/selection-builder.js +11 -0
  60. package/dist/esm/selection-builder.js.map +1 -1
  61. package/dist/esm/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
  62. package/dist/esm/{subscription-manager.js → socket-connection.js} +53 -7
  63. package/dist/esm/socket-connection.js.map +1 -0
  64. package/dist/esm/update-query-builder.d.ts +32 -0
  65. package/dist/esm/update-query-builder.js +32 -0
  66. package/dist/esm/update-query-builder.js.map +1 -1
  67. package/dist/esm/where-query-builder.d.ts +59 -0
  68. package/dist/esm/where-query-builder.js +6 -0
  69. package/dist/esm/where-query-builder.js.map +1 -1
  70. package/dist/esm/with-resolver.d.ts +5 -0
  71. package/dist/esm/with-resolver.js +14 -0
  72. package/dist/esm/with-resolver.js.map +1 -0
  73. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  74. package/package.json +4 -2
  75. package/dist/cjs/subscription-manager.js.map +0 -1
  76. package/dist/esm/subscription-manager.js.map +0 -1
@@ -1,21 +1,22 @@
1
- import { Executor } from './executor.js';
1
+ import EventEmitter from 'eventemitter3';
2
2
  export type DriverSubscriptionResponse = {
3
3
  id: string;
4
4
  delta: object[];
5
5
  tableName: string;
6
6
  subscriptionId: string;
7
7
  };
8
- export declare class SubscriptionManager {
8
+ export declare class SocketConnection extends EventEmitter {
9
9
  #private;
10
- private executor;
11
10
  private config;
12
- constructor(executor: Executor, config: {
11
+ constructor(config: {
13
12
  baseUrl: string;
14
13
  apiKey: string;
15
14
  timeZone?: string;
16
15
  clientId?: string;
17
16
  });
17
+ rawRequest<T>(query: string, variables: Record<string, any>, headers?: Record<string, string>, transactionId?: string): Promise<T>;
18
18
  subscribe<TResult>(metadatas: any[], callback: (...results: TResult[]) => void): Promise<{
19
19
  unsubscribe: () => Promise<void>;
20
20
  }>;
21
+ emit(event: string | symbol, ...args: any[]): boolean;
21
22
  }
@@ -3,17 +3,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.SubscriptionManager = void 0;
6
+ exports.SocketConnection = void 0;
7
+ const eventemitter3_1 = __importDefault(require("eventemitter3"));
7
8
  const fast_json_patch_1 = __importDefault(require("fast-json-patch"));
8
9
  const socket_io_client_1 = require("socket.io-client");
9
- class SubscriptionManager {
10
- executor;
10
+ const with_resolver_js_1 = require("./with-resolver.js");
11
+ const generateUUID = () => {
12
+ if (globalThis.crypto && globalThis.crypto.randomUUID) {
13
+ return globalThis.crypto.randomUUID();
14
+ }
15
+ // A simple fallback for environments without crypto.randomUUID
16
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
17
+ const r = (Math.random() * 16) | 0;
18
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
19
+ return v.toString(16);
20
+ });
21
+ };
22
+ class SocketConnection extends eventemitter3_1.default {
11
23
  config;
12
24
  #socket = null;
13
25
  #subscriptions = new Map();
14
26
  #isConnecting = false;
15
- constructor(executor, config) {
16
- this.executor = executor;
27
+ constructor(config) {
28
+ super();
17
29
  this.config = config;
18
30
  }
19
31
  async #connect() {
@@ -29,6 +41,7 @@ class SubscriptionManager {
29
41
  auth: {
30
42
  token: this.config.apiKey,
31
43
  'time-zone': this.config.timeZone || 'UTC',
44
+ schema: 'readable',
32
45
  'client-id': this.config.clientId,
33
46
  },
34
47
  query: {},
@@ -44,6 +57,9 @@ class SubscriptionManager {
44
57
  this.#socket.on('connect_error', err => {
45
58
  reject(err);
46
59
  });
60
+ this.#socket.on('query-response', (response) => {
61
+ this.emit(response.queryId, response.data);
62
+ });
47
63
  });
48
64
  this.#socket.emit('subscribe', { clientId: this.config.clientId });
49
65
  }
@@ -51,6 +67,29 @@ class SubscriptionManager {
51
67
  this.#isConnecting = false;
52
68
  }
53
69
  }
70
+ async rawRequest(query, variables, headers, transactionId) {
71
+ await this.#connect();
72
+ const queryId = generateUUID();
73
+ const { promise, resolve } = (0, with_resolver_js_1.withResolver)();
74
+ this.once(queryId, (response) => {
75
+ resolve(response);
76
+ });
77
+ if (!headers) {
78
+ headers = {};
79
+ }
80
+ headers = {
81
+ ...headers,
82
+ schema: 'readable',
83
+ };
84
+ this.emit('query', {
85
+ query,
86
+ variables,
87
+ queryId,
88
+ ...(transactionId ? { transactionId } : {}),
89
+ ...(headers ? { options: { ...headers } } : {}),
90
+ });
91
+ return promise;
92
+ }
54
93
  async subscribe(metadatas, callback) {
55
94
  await this.#connect();
56
95
  const param = metadatas.map(metadata => ({
@@ -59,7 +98,7 @@ class SubscriptionManager {
59
98
  returns: ['patch', 'affectedFields'],
60
99
  },
61
100
  }));
62
- const result = await this.executor.rawRequest(`
101
+ const result = await this.rawRequest(`
63
102
  query ($param: [SubscriptionMetadataInput]!) {
64
103
  plugins {
65
104
  subscriptions {
@@ -94,7 +133,7 @@ class SubscriptionManager {
94
133
  for (const id of subscriptionIds) {
95
134
  this.#subscriptions.delete(id);
96
135
  }
97
- await this.executor.rawRequest(`query RemoveSubscription ($subscriptionIds: [String]) {
136
+ await this.rawRequest(`query RemoveSubscription ($subscriptionIds: [String]) {
98
137
  plugins {
99
138
  subscriptions {
100
139
  unsubscribe(subscriptionIds: $subscriptionIds)
@@ -104,6 +143,13 @@ class SubscriptionManager {
104
143
  },
105
144
  };
106
145
  }
146
+ emit(event, ...args) {
147
+ if (event === 'query') {
148
+ this.#socket?.emit('query', ...args);
149
+ return true;
150
+ }
151
+ return super.emit(event, ...args);
152
+ }
107
153
  #handlePatch(response) {
108
154
  for (const patch of response.patches) {
109
155
  const sub = this.#subscriptions.get(patch.subscriptionId);
@@ -116,5 +162,5 @@ class SubscriptionManager {
116
162
  }
117
163
  }
118
164
  }
119
- exports.SubscriptionManager = SubscriptionManager;
120
- //# sourceMappingURL=subscription-manager.js.map
165
+ exports.SocketConnection = SocketConnection;
166
+ //# sourceMappingURL=socket-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-connection.js","sourceRoot":"","sources":["../../src/socket-connection.ts"],"names":[],"mappings":"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"}
@@ -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,12 +2,71 @@ 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);
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
+ */
9
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;
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
+ */
11
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
  }
@@ -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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"}
@@ -0,0 +1,5 @@
1
+ export declare function withResolver<T>(): {
2
+ promise: Promise<T>;
3
+ resolve: (value: T) => void;
4
+ reject: (reason?: any) => void;
5
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withResolver = withResolver;
4
+ function withResolver() {
5
+ let resolve;
6
+ let reject;
7
+ const promise = new Promise((res, rej) => {
8
+ resolve = res;
9
+ reject = rej;
10
+ });
11
+ return {
12
+ promise,
13
+ resolve,
14
+ reject,
15
+ };
16
+ }
17
+ //# sourceMappingURL=with-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-resolver.js","sourceRoot":"","sources":["../../src/with-resolver.ts"],"names":[],"mappings":";;AAAA,oCAcC;AAdD,SAAgB,YAAY;IAC1B,IAAI,OAA2B,CAAC;IAChC,IAAI,MAA8B,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,OAAO,GAAG,GAAG,CAAC;QACd,MAAM,GAAG,GAAG,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -1,18 +1,36 @@
1
1
  import { createQueryBuilder } from '../index.js';
2
+ import { SocketConnection } from '../socket-connection.js';
3
+ jest.mock('socket.io-client', () => {
4
+ const mockSocket = {
5
+ on: jest.fn(),
6
+ emit: jest.fn(),
7
+ once: jest.fn(),
8
+ };
9
+ return {
10
+ io: jest.fn(() => mockSocket),
11
+ };
12
+ });
2
13
  describe('QueryBuilder', () => {
14
+ let mockRawRequest;
15
+ beforeEach(() => {
16
+ mockRawRequest = jest.fn().mockResolvedValue({ execute: [] });
17
+ SocketConnection.prototype.rawRequest = mockRawRequest;
18
+ });
3
19
  // @ts-ignore
4
20
  const qb = createQueryBuilder({
5
21
  baseUrl: 'http://localhost',
6
22
  apiKey: 'test',
7
23
  });
8
- it('should compile a select query', () => {
9
- const { variables } = qb
24
+ it('should compile a select query and execute', async () => {
25
+ await qb
10
26
  .selectFrom('customers')
11
27
  .select(['firstName', 'lastName'])
12
28
  .where('firstName', '=', 'John')
13
29
  .orderBy('lastName', 'asc')
14
30
  .paginate(1, 10)
15
- .compile();
31
+ .execute();
32
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
33
+ const variables = mockRawRequest.mock.calls[0][1];
16
34
  expect(variables.metadata[0]).toMatchObject({
17
35
  type: 'select',
18
36
  tableName: 'customers',
@@ -31,26 +49,30 @@ describe('QueryBuilder', () => {
31
49
  pagination: { offset: 0, limit: 10 },
32
50
  });
33
51
  });
34
- it('should compile an insert query', () => {
35
- const { variables } = qb
52
+ it('should compile an insert query and execute', async () => {
53
+ await qb
36
54
  .insertInto('customers')
37
55
  .values({
38
56
  firstName: 'Jane',
39
57
  lastName: 'Doe',
40
58
  })
41
- .compile();
59
+ .execute();
60
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
61
+ const variables = mockRawRequest.mock.calls[0][1];
42
62
  expect(variables.metadata[0]).toMatchObject({
43
63
  type: 'create',
44
64
  tableName: 'customers',
45
65
  createdRecords: [{ firstName: 'Jane', lastName: 'Doe' }],
46
66
  });
47
67
  });
48
- it('should compile an update query', () => {
49
- const { variables } = qb
68
+ it('should compile an update query and execute', async () => {
69
+ await qb
50
70
  .update('customers')
51
71
  .set({ lastName: 'Smith' })
52
72
  .where('id', '=', 1)
53
- .compile();
73
+ .execute();
74
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
75
+ const variables = mockRawRequest.mock.calls[0][1];
54
76
  expect(variables.metadata[0]).toMatchObject({
55
77
  type: 'update',
56
78
  tableName: 'customers',
@@ -67,11 +89,10 @@ describe('QueryBuilder', () => {
67
89
  },
68
90
  });
69
91
  });
70
- it('should compile a delete query', () => {
71
- const { variables } = qb
72
- .deleteFrom('customers')
73
- .where('id', '=', 1)
74
- .compile();
92
+ it('should compile a delete query and execute', async () => {
93
+ await qb.deleteFrom('customers').where('id', '=', 1).execute();
94
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
95
+ const variables = mockRawRequest.mock.calls[0][1];
75
96
  expect(variables.metadata[0]).toMatchObject({
76
97
  type: 'delete',
77
98
  tableName: 'customers',
@@ -87,15 +108,17 @@ describe('QueryBuilder', () => {
87
108
  },
88
109
  });
89
110
  });
90
- it('should compile a batch query', async () => {
91
- const { variables } = qb
111
+ it('should compile a batch query and execute', async () => {
112
+ await qb
92
113
  .batch([
93
114
  qb.selectFrom('customers').select(['firstName', 'lastName']),
94
115
  qb
95
116
  .insertInto('customers')
96
117
  .values({ firstName: 'John', lastName: 'Doe' }),
97
118
  ])
98
- .compile();
119
+ .execute();
120
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
121
+ const variables = mockRawRequest.mock.calls[0][1];
99
122
  expect(variables.metadata).toHaveLength(2);
100
123
  expect(variables.metadata[0]).toMatchObject({
101
124
  type: 'select',
@@ -106,14 +129,16 @@ describe('QueryBuilder', () => {
106
129
  tableName: 'customers',
107
130
  });
108
131
  });
109
- it('should compile an aggregate query', () => {
110
- const { variables } = qb
132
+ it('should compile an aggregate query and execute', async () => {
133
+ await qb
111
134
  .aggregateFrom('customers')
112
135
  .groupBy('firstName', 'asc')
113
136
  .withAggregates({
114
137
  id: ['sum'],
115
138
  })
116
- .compile();
139
+ .execute();
140
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
141
+ const variables = mockRawRequest.mock.calls[0][1];
117
142
  expect(variables.metadata[0]).toMatchObject({
118
143
  type: 'aggregation',
119
144
  tableName: 'customers',
@@ -123,11 +148,13 @@ describe('QueryBuilder', () => {
123
148
  },
124
149
  });
125
150
  });
126
- it('should compile a cross-table query', () => {
127
- const { variables } = qb
151
+ it('should compile a cross-table query and execute', async () => {
152
+ await qb
128
153
  .selectFrom('customers')
129
154
  .where('orders', 'hasAnyOf', qb => qb.where('amount', '>', 100))
130
- .compile();
155
+ .execute();
156
+ expect(mockRawRequest).toHaveBeenCalledTimes(1);
157
+ const variables = mockRawRequest.mock.calls[0][1];
131
158
  expect(variables.metadata[0]).toMatchObject({
132
159
  type: 'select',
133
160
  tableName: 'customers',
@@ -155,5 +182,81 @@ describe('QueryBuilder', () => {
155
182
  },
156
183
  });
157
184
  });
185
+ it('should handle a successful transaction', async () => {
186
+ const mockRawRequest = jest
187
+ .fn()
188
+ .mockResolvedValueOnce({
189
+ startTransaction: 'test-transaction-id',
190
+ })
191
+ .mockResolvedValueOnce({ execute: [] })
192
+ .mockResolvedValueOnce({ commitTransaction: true });
193
+ SocketConnection.prototype.rawRequest = mockRawRequest;
194
+ // @ts-ignore
195
+ const qb = createQueryBuilder({
196
+ baseUrl: 'http://localhost',
197
+ apiKey: 'test',
198
+ });
199
+ await qb.transaction(txQb => {
200
+ return txQb
201
+ .insertInto('customers')
202
+ .values({ firstName: 'John', lastName: 'Doe' })
203
+ .execute();
204
+ });
205
+ expect(mockRawRequest).toHaveBeenCalledTimes(3);
206
+ const startTransactionCall = mockRawRequest.mock.calls[0];
207
+ expect(startTransactionCall[0]).toContain('startTransaction');
208
+ const executeCall = mockRawRequest.mock.calls[1];
209
+ expect(executeCall[3]).toBe('test-transaction-id');
210
+ const commitTransactionCall = mockRawRequest.mock.calls[2];
211
+ expect(commitTransactionCall[0]).toContain('commitTransaction');
212
+ expect(commitTransactionCall[3]).toBe('test-transaction-id');
213
+ });
214
+ it('should handle a failed transaction and rollback', async () => {
215
+ const transactionId = 'test-transaction-id-fail';
216
+ const errorMessage = 'Something went wrong';
217
+ const mockRawRequest = jest
218
+ .fn()
219
+ .mockResolvedValueOnce({ startTransaction: transactionId })
220
+ .mockRejectedValueOnce(new Error(errorMessage))
221
+ .mockResolvedValueOnce({ rollbackTransaction: true });
222
+ SocketConnection.prototype.rawRequest = mockRawRequest;
223
+ // @ts-ignore
224
+ const qb = createQueryBuilder({
225
+ baseUrl: 'http://localhost',
226
+ apiKey: 'test',
227
+ });
228
+ await expect(qb.transaction(txQb => {
229
+ return txQb
230
+ .insertInto('customers')
231
+ .values({ firstName: 'John', lastName: 'Doe' })
232
+ .execute();
233
+ })).rejects.toThrow(errorMessage);
234
+ expect(mockRawRequest).toHaveBeenCalledTimes(3);
235
+ const startTransactionCall = mockRawRequest.mock.calls[0];
236
+ expect(startTransactionCall[0]).toContain('startTransaction');
237
+ const executeCall = mockRawRequest.mock.calls[1];
238
+ expect(executeCall[3]).toBe(transactionId);
239
+ const rollbackTransactionCall = mockRawRequest.mock.calls[2];
240
+ expect(rollbackTransactionCall[0]).toContain('rollbackTransaction');
241
+ expect(rollbackTransactionCall[3]).toBe(transactionId);
242
+ });
243
+ it('should not have transaction method within a transaction', async () => {
244
+ const mockRawRequest = jest
245
+ .fn()
246
+ .mockResolvedValueOnce({
247
+ startTransaction: 'test-transaction-id-no-nested',
248
+ })
249
+ .mockResolvedValueOnce({ commitTransaction: true });
250
+ SocketConnection.prototype.rawRequest = mockRawRequest;
251
+ // @ts-ignore
252
+ const qb = createQueryBuilder({
253
+ baseUrl: 'http://localhost',
254
+ apiKey: 'test',
255
+ });
256
+ await qb.transaction(async (txQb) => {
257
+ expect(txQb).not.toHaveProperty('transaction');
258
+ });
259
+ expect(mockRawRequest).toHaveBeenCalledTimes(2);
260
+ });
158
261
  });
159
262
  //# sourceMappingURL=query-builder.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.spec.js","sourceRoot":"","sources":["../../../src/__tests__/query-builder.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.spec.js","sourceRoot":"","sources":["../../../src/__tests__/query-builder.spec.ts"],"names":[],"mappings":"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"}