@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.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/cjs/__tests__/query-builder.spec.js +126 -23
- package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
- package/dist/cjs/aggregation-query-builder.d.ts +92 -0
- package/dist/cjs/aggregation-query-builder.js +92 -0
- package/dist/cjs/aggregation-query-builder.js.map +1 -1
- package/dist/cjs/batch-query-builder.d.ts +36 -0
- package/dist/cjs/batch-query-builder.js +36 -0
- package/dist/cjs/batch-query-builder.js.map +1 -1
- package/dist/cjs/delete-query-builder.d.ts +17 -0
- package/dist/cjs/delete-query-builder.js +17 -0
- package/dist/cjs/delete-query-builder.js.map +1 -1
- package/dist/cjs/executor.d.ts +4 -1
- package/dist/cjs/executor.js +20 -35
- package/dist/cjs/executor.js.map +1 -1
- package/dist/cjs/insert-query-builder.d.ts +68 -0
- package/dist/cjs/insert-query-builder.js +71 -0
- package/dist/cjs/insert-query-builder.js.map +1 -1
- package/dist/cjs/query-builder.d.ts +224 -5
- package/dist/cjs/query-builder.js +219 -5
- package/dist/cjs/query-builder.js.map +1 -1
- package/dist/cjs/selection-builder.d.ts +11 -0
- package/dist/cjs/selection-builder.js +11 -0
- package/dist/cjs/selection-builder.js.map +1 -1
- package/dist/cjs/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
- package/dist/cjs/{subscription-manager.js → socket-connection.js} +55 -9
- package/dist/cjs/socket-connection.js.map +1 -0
- package/dist/cjs/update-query-builder.d.ts +32 -0
- package/dist/cjs/update-query-builder.js +32 -0
- package/dist/cjs/update-query-builder.js.map +1 -1
- package/dist/cjs/where-query-builder.d.ts +59 -0
- package/dist/cjs/where-query-builder.js +6 -0
- package/dist/cjs/where-query-builder.js.map +1 -1
- package/dist/cjs/with-resolver.d.ts +5 -0
- package/dist/cjs/with-resolver.js +17 -0
- package/dist/cjs/with-resolver.js.map +1 -0
- package/dist/esm/__tests__/query-builder.spec.js +126 -23
- package/dist/esm/__tests__/query-builder.spec.js.map +1 -1
- package/dist/esm/aggregation-query-builder.d.ts +92 -0
- package/dist/esm/aggregation-query-builder.js +92 -0
- package/dist/esm/aggregation-query-builder.js.map +1 -1
- package/dist/esm/batch-query-builder.d.ts +36 -0
- package/dist/esm/batch-query-builder.js +36 -0
- package/dist/esm/batch-query-builder.js.map +1 -1
- package/dist/esm/delete-query-builder.d.ts +17 -0
- package/dist/esm/delete-query-builder.js +17 -0
- package/dist/esm/delete-query-builder.js.map +1 -1
- package/dist/esm/executor.d.ts +4 -1
- package/dist/esm/executor.js +20 -35
- package/dist/esm/executor.js.map +1 -1
- package/dist/esm/insert-query-builder.d.ts +68 -0
- package/dist/esm/insert-query-builder.js +71 -0
- package/dist/esm/insert-query-builder.js.map +1 -1
- package/dist/esm/query-builder.d.ts +224 -5
- package/dist/esm/query-builder.js +217 -4
- package/dist/esm/query-builder.js.map +1 -1
- package/dist/esm/selection-builder.d.ts +11 -0
- package/dist/esm/selection-builder.js +11 -0
- package/dist/esm/selection-builder.js.map +1 -1
- package/dist/esm/{subscription-manager.d.ts → socket-connection.d.ts} +5 -4
- package/dist/esm/{subscription-manager.js → socket-connection.js} +53 -7
- package/dist/esm/socket-connection.js.map +1 -0
- package/dist/esm/update-query-builder.d.ts +32 -0
- package/dist/esm/update-query-builder.js +32 -0
- package/dist/esm/update-query-builder.js.map +1 -1
- package/dist/esm/where-query-builder.d.ts +59 -0
- package/dist/esm/where-query-builder.js +6 -0
- package/dist/esm/where-query-builder.js.map +1 -1
- package/dist/esm/with-resolver.d.ts +5 -0
- package/dist/esm/with-resolver.js +14 -0
- package/dist/esm/with-resolver.js.map +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +4 -2
- package/dist/cjs/subscription-manager.js.map +0 -1
- package/dist/esm/subscription-manager.js.map +0 -1
|
@@ -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;
|
|
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;
|
|
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"}
|
package/dist/cjs/executor.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AnySubscribableQueryBuilder } from './batch-query-builder.js';
|
|
2
|
+
import { SocketConnection } from './socket-connection.js';
|
|
2
3
|
interface Compilable {
|
|
3
4
|
compile(): {
|
|
4
5
|
query: string;
|
|
@@ -7,7 +8,9 @@ interface Compilable {
|
|
|
7
8
|
}
|
|
8
9
|
export declare class Executor {
|
|
9
10
|
#private;
|
|
10
|
-
constructor(baseUrl: string, apiKey: string);
|
|
11
|
+
constructor(baseUrl: string, apiKey: string, transactionId?: string, socketConnection?: SocketConnection);
|
|
12
|
+
get isInTransaction(): boolean;
|
|
13
|
+
withTransactionId(transactionId: string): Executor;
|
|
11
14
|
execute<T>(builder: Compilable): Promise<T>;
|
|
12
15
|
rawRequest<T>(query: string, variables: Record<string, any>, headers?: Record<string, string>): Promise<T>;
|
|
13
16
|
subscribe<TResult>(builders: AnySubscribableQueryBuilder[], callback: (result: TResult) => void): Promise<{
|
package/dist/cjs/executor.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Executor = void 0;
|
|
4
|
-
const
|
|
4
|
+
const socket_connection_js_1 = require("./socket-connection.js");
|
|
5
5
|
const generateUUID = () => {
|
|
6
6
|
if (globalThis.crypto && globalThis.crypto.randomUUID) {
|
|
7
7
|
return globalThis.crypto.randomUUID();
|
|
@@ -16,51 +16,36 @@ const generateUUID = () => {
|
|
|
16
16
|
class Executor {
|
|
17
17
|
#baseUrl;
|
|
18
18
|
#apiKey;
|
|
19
|
-
#
|
|
20
|
-
|
|
19
|
+
#socketConnection;
|
|
20
|
+
#transactionId;
|
|
21
|
+
constructor(baseUrl, apiKey, transactionId, socketConnection) {
|
|
21
22
|
this.#baseUrl = baseUrl;
|
|
22
23
|
this.#apiKey = apiKey;
|
|
23
|
-
this.#
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
this.#transactionId = transactionId;
|
|
25
|
+
this.#socketConnection =
|
|
26
|
+
socketConnection ??
|
|
27
|
+
new socket_connection_js_1.SocketConnection({
|
|
28
|
+
baseUrl,
|
|
29
|
+
apiKey,
|
|
30
|
+
clientId: generateUUID(),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
get isInTransaction() {
|
|
34
|
+
return !!this.#transactionId;
|
|
35
|
+
}
|
|
36
|
+
withTransactionId(transactionId) {
|
|
37
|
+
return new Executor(this.#baseUrl, this.#apiKey, transactionId, this.#socketConnection);
|
|
28
38
|
}
|
|
29
39
|
async execute(builder) {
|
|
30
40
|
const { query, variables } = builder.compile();
|
|
31
41
|
return this.rawRequest(query, variables);
|
|
32
42
|
}
|
|
33
43
|
async rawRequest(query, variables, headers) {
|
|
34
|
-
|
|
35
|
-
method: 'POST',
|
|
36
|
-
headers: {
|
|
37
|
-
'Content-Type': 'application/json',
|
|
38
|
-
Authorization: `Bearer ${this.#apiKey}`,
|
|
39
|
-
schema: 'readable',
|
|
40
|
-
...(headers ? { ...headers } : {}),
|
|
41
|
-
},
|
|
42
|
-
body: JSON.stringify({ query, variables }),
|
|
43
|
-
});
|
|
44
|
-
if (!response.ok) {
|
|
45
|
-
const errorText = await response.text();
|
|
46
|
-
throw new Error(`Request failed with status ${response.status}: ${errorText}`);
|
|
47
|
-
}
|
|
48
|
-
const jsonResponse = await response.json();
|
|
49
|
-
if (jsonResponse.errors) {
|
|
50
|
-
throw new Error(`GraphQL errors: ${jsonResponse.errors.map(error => error.message).join('\n')}`);
|
|
51
|
-
}
|
|
52
|
-
if (jsonResponse.data) {
|
|
53
|
-
const [firstKey] = Object.keys(jsonResponse.data);
|
|
54
|
-
if (Array.isArray(jsonResponse.data[firstKey])) {
|
|
55
|
-
return jsonResponse.data[firstKey];
|
|
56
|
-
}
|
|
57
|
-
return jsonResponse.data;
|
|
58
|
-
}
|
|
59
|
-
throw new Error('Unexpected response format');
|
|
44
|
+
return this.#socketConnection.rawRequest(query, variables, headers, this.#transactionId);
|
|
60
45
|
}
|
|
61
46
|
subscribe(builders, callback) {
|
|
62
47
|
const metadatas = builders.map(b => b._prepareMetadata());
|
|
63
|
-
return this.#
|
|
48
|
+
return this.#socketConnection.subscribe(metadatas, callback);
|
|
64
49
|
}
|
|
65
50
|
}
|
|
66
51
|
exports.Executor = Executor;
|
package/dist/cjs/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":";;;AACA,iEAA0D;AAM1D,MAAM,YAAY,GAAG,GAAG,EAAE;IACxB,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACtD,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IACD,+DAA+D;IAC/D,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;QACjE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAa,QAAQ;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAChB,iBAAiB,CAAmB;IACpC,cAAc,CAAU;IAExB,YACE,OAAe,EACf,MAAc,EACd,aAAsB,EACtB,gBAAmC;QAEnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,iBAAiB;YACpB,gBAAgB;gBAChB,IAAI,uCAAgB,CAAC;oBACnB,OAAO;oBACP,MAAM;oBACN,QAAQ,EAAE,YAAY,EAAE;iBACzB,CAAC,CAAC;IACP,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,aAAqB;QACrC,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,aAAa,EACb,IAAI,CAAC,iBAAiB,CACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,OAAmB;QAClC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,UAAU,CACd,KAAa,EACb,SAA8B,EAC9B,OAAgC;QAEhC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CACtC,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED,SAAS,CACP,QAAuC,EACvC,QAAmC;QAEnC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;CACF;AA9DD,4BA8DC"}
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"insert-query-builder.js","sourceRoot":"","sources":["../../src/insert-query-builder.ts"],"names":[],"mappings":"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"}
|