@taylordb/query-builder 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +113 -0
  2. package/dist/example.d.ts +1 -0
  3. package/dist/example.js +51 -0
  4. package/dist/example.js.map +1 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +2 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/insert-query-builder.d.ts +6 -0
  9. package/dist/insert-query-builder.js +9 -0
  10. package/dist/insert-query-builder.js.map +1 -0
  11. package/dist/internal-types.d.ts +19 -0
  12. package/dist/internal-types.js +2 -0
  13. package/dist/internal-types.js.map +1 -0
  14. package/dist/query-builder.d.ts +15 -0
  15. package/dist/query-builder.js +101 -0
  16. package/dist/query-builder.js.map +1 -0
  17. package/dist/sample/basic-example.d.ts +1 -0
  18. package/dist/sample/basic-example.js +55 -0
  19. package/dist/sample/basic-example.js.map +1 -0
  20. package/dist/sample/sample-1/index.d.ts +1 -0
  21. package/dist/sample/sample-1/index.js +68 -0
  22. package/dist/sample/sample-1/index.js.map +1 -0
  23. package/dist/sample/sample-1/taylorclient.types.d.ts +150 -0
  24. package/dist/sample/sample-1/taylorclient.types.js +9 -0
  25. package/dist/sample/sample-1/taylorclient.types.js.map +1 -0
  26. package/dist/src/@types/aggregate.d.ts +28 -0
  27. package/dist/src/@types/aggregate.js +3 -0
  28. package/dist/src/@types/aggregate.js.map +1 -0
  29. package/dist/src/@types/delete.d.ts +2 -0
  30. package/dist/src/@types/delete.js +3 -0
  31. package/dist/src/@types/delete.js.map +1 -0
  32. package/dist/src/@types/insert.d.ts +8 -0
  33. package/dist/src/@types/insert.js +3 -0
  34. package/dist/src/@types/insert.js.map +1 -0
  35. package/dist/src/@types/internal-types.d.ts +24 -0
  36. package/dist/src/@types/internal-types.js +3 -0
  37. package/dist/src/@types/internal-types.js.map +1 -0
  38. package/dist/src/@types/query-builder.d.ts +7 -0
  39. package/dist/src/@types/query-builder.js +3 -0
  40. package/dist/src/@types/query-builder.js.map +1 -0
  41. package/dist/src/@types/type-helpers.d.ts +27 -0
  42. package/dist/src/@types/type-helpers.js +3 -0
  43. package/dist/src/@types/type-helpers.js.map +1 -0
  44. package/dist/src/@types/update.d.ts +5 -0
  45. package/dist/src/@types/update.js +3 -0
  46. package/dist/src/@types/update.js.map +1 -0
  47. package/dist/src/__tests__/query-builder.spec.d.ts +1 -0
  48. package/dist/src/__tests__/query-builder.spec.js +129 -0
  49. package/dist/src/__tests__/query-builder.spec.js.map +1 -0
  50. package/dist/src/__tests__/taylorclient.types.d.ts +150 -0
  51. package/dist/src/__tests__/taylorclient.types.js +9 -0
  52. package/dist/src/__tests__/taylorclient.types.js.map +1 -0
  53. package/dist/src/aggregation-query-builder.d.ts +27 -0
  54. package/dist/src/aggregation-query-builder.js +80 -0
  55. package/dist/src/aggregation-query-builder.js.map +1 -0
  56. package/dist/src/batch-query-builder.d.ts +16 -0
  57. package/dist/src/batch-query-builder.js +28 -0
  58. package/dist/src/batch-query-builder.js.map +1 -0
  59. package/dist/src/delete-query-builder.d.ts +16 -0
  60. package/dist/src/delete-query-builder.js +36 -0
  61. package/dist/src/delete-query-builder.js.map +1 -0
  62. package/dist/src/executor.d.ts +12 -0
  63. package/dist/src/executor.js +37 -0
  64. package/dist/src/executor.js.map +1 -0
  65. package/dist/src/index.d.ts +1 -0
  66. package/dist/src/index.js +6 -0
  67. package/dist/src/index.js.map +1 -0
  68. package/dist/src/insert-query-builder.d.ts +17 -0
  69. package/dist/src/insert-query-builder.js +68 -0
  70. package/dist/src/insert-query-builder.js.map +1 -0
  71. package/dist/src/query-builder.d.ts +52 -0
  72. package/dist/src/query-builder.js +202 -0
  73. package/dist/src/query-builder.js.map +1 -0
  74. package/dist/src/selection-builder.d.ts +10 -0
  75. package/dist/src/selection-builder.js +20 -0
  76. package/dist/src/selection-builder.js.map +1 -0
  77. package/dist/src/update-query-builder.d.ts +17 -0
  78. package/dist/src/update-query-builder.js +43 -0
  79. package/dist/src/update-query-builder.js.map +1 -0
  80. package/dist/src/where-query-builder.d.ts +14 -0
  81. package/dist/src/where-query-builder.js +68 -0
  82. package/dist/src/where-query-builder.js.map +1 -0
  83. package/dist/tsconfig.tsbuildinfo +1 -0
  84. package/dist/where-query-builder.d.ts +12 -0
  85. package/dist/where-query-builder.js +55 -0
  86. package/dist/where-query-builder.js.map +1 -0
  87. package/package.json +30 -0
@@ -0,0 +1,16 @@
1
+ import type { DeleteNode } from './@types/delete.js';
2
+ import type { AnyDB } from './@types/internal-types.js';
3
+ import { Executor } from './executor.js';
4
+ import { FilterableQueryBuilder } from './where-query-builder.js';
5
+ export declare class DeleteQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> extends FilterableQueryBuilder<DB, TableName> {
6
+ #private;
7
+ constructor(node: DeleteNode, executor: Executor);
8
+ execute(): Promise<{
9
+ affectedRecords: number;
10
+ }>;
11
+ compile(): {
12
+ query: string;
13
+ variables: Record<string, any>;
14
+ };
15
+ _prepareMetadata(): any;
16
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeleteQueryBuilder = void 0;
4
+ const where_query_builder_js_1 = require("./where-query-builder.js");
5
+ class DeleteQueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
6
+ #node;
7
+ constructor(node, executor) {
8
+ super(node, executor);
9
+ this.#node = node;
10
+ }
11
+ async execute() {
12
+ const response = await this._executor.execute(this);
13
+ return response[0];
14
+ }
15
+ compile() {
16
+ const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
17
+ const metadata = [this._prepareMetadata()];
18
+ return {
19
+ query,
20
+ variables: {
21
+ metadata,
22
+ },
23
+ };
24
+ }
25
+ _prepareMetadata() {
26
+ return {
27
+ type: 'delete',
28
+ tableName: this.#node.tableName,
29
+ ...(this.#node.filtersSet.filtersSet.length > 0
30
+ ? { filtersSet: this.#node.filtersSet }
31
+ : {}),
32
+ };
33
+ }
34
+ }
35
+ exports.DeleteQueryBuilder = DeleteQueryBuilder;
36
+ //# sourceMappingURL=delete-query-builder.js.map
@@ -0,0 +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"}
@@ -0,0 +1,12 @@
1
+ interface Compilable {
2
+ compile(): {
3
+ query: string;
4
+ variables: Record<string, any>;
5
+ };
6
+ }
7
+ export declare class Executor {
8
+ #private;
9
+ constructor(baseUrl: string, apiKey: string);
10
+ execute<T>(builder: Compilable): Promise<T>;
11
+ }
12
+ export {};
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Executor = void 0;
4
+ class Executor {
5
+ #baseUrl;
6
+ #apiKey;
7
+ constructor(baseUrl, apiKey) {
8
+ this.#baseUrl = baseUrl;
9
+ this.#apiKey = apiKey;
10
+ }
11
+ async execute(builder) {
12
+ const { query, variables } = builder.compile();
13
+ const response = await fetch(this.#baseUrl, {
14
+ method: 'POST',
15
+ headers: {
16
+ 'Content-Type': 'application/json',
17
+ Authorization: `Bearer ${this.#apiKey}`,
18
+ schema: 'readable',
19
+ },
20
+ body: JSON.stringify({ query, variables }),
21
+ });
22
+ if (!response.ok) {
23
+ const errorText = await response.text();
24
+ throw new Error(`Request failed with status ${response.status}: ${errorText}`);
25
+ }
26
+ const jsonResponse = await response.json();
27
+ if (jsonResponse.errors) {
28
+ throw new Error(`GraphQL errors: ${JSON.stringify(jsonResponse.errors)}`);
29
+ }
30
+ if (jsonResponse.data && Array.isArray(jsonResponse.data.execute)) {
31
+ return jsonResponse.data.execute;
32
+ }
33
+ throw new Error('Unexpected response format');
34
+ }
35
+ }
36
+ exports.Executor = Executor;
37
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor.ts"],"names":[],"mappings":";;;AAIA,MAAa,QAAQ;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAS;IAEhB,YAAY,OAAe,EAAE,MAAc;QACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,OAAmB;QAClC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,EAAE;gBACvC,MAAM,EAAE,UAAU;aACnB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC3C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAC9D,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE3C,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;QACnC,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;CACF;AAzCD,4BAyCC"}
@@ -0,0 +1 @@
1
+ export { createQueryBuilder } from './query-builder.js';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createQueryBuilder = void 0;
4
+ var query_builder_js_1 = require("./query-builder.js");
5
+ Object.defineProperty(exports, "createQueryBuilder", { enumerable: true, get: function () { return query_builder_js_1.createQueryBuilder; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,uDAAwD;AAA/C,sHAAA,kBAAkB,OAAA"}
@@ -0,0 +1,17 @@
1
+ import type { Insertable, InsertNode } from './@types/insert.js';
2
+ import type { AnyDB } from './@types/internal-types.js';
3
+ import { Executor } from './executor.js';
4
+ import { QueryBuilder } from './query-builder.js';
5
+ import { SelectionBuilder } from './selection-builder.js';
6
+ export declare class InsertQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> {
7
+ #private;
8
+ constructor(node: InsertNode, executor: Executor);
9
+ values(values: Insertable<DB['tables'][TableName]> | Insertable<DB['tables'][TableName]>[]): InsertQueryBuilder<DB, TableName>;
10
+ returning<K extends keyof DB['tables'][TableName] | ((builder: SelectionBuilder<DB, TableName>) => QueryBuilder<DB, any>)>(fields: K[]): InsertQueryBuilder<DB, TableName>;
11
+ execute<T>(): Promise<T>;
12
+ compile(): {
13
+ query: string;
14
+ variables: Record<string, any>;
15
+ };
16
+ _prepareMetadata(): any;
17
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InsertQueryBuilder = void 0;
4
+ const query_builder_js_1 = require("./query-builder.js");
5
+ const selection_builder_js_1 = require("./selection-builder.js");
6
+ class InsertQueryBuilder {
7
+ #node;
8
+ #executor;
9
+ constructor(node, executor) {
10
+ this.#node = node;
11
+ this.#executor = executor;
12
+ }
13
+ values(values) {
14
+ return new InsertQueryBuilder({
15
+ ...this.#node,
16
+ createdRecords: Array.isArray(values) ? values : [values],
17
+ }, this.#executor);
18
+ }
19
+ returning(fields) {
20
+ const newSelects = fields.map(field => {
21
+ if (typeof field === 'function') {
22
+ const builder = new selection_builder_js_1.SelectionBuilder(this.#executor);
23
+ const subQuery = field(builder);
24
+ return subQuery._node;
25
+ }
26
+ return field;
27
+ });
28
+ return new InsertQueryBuilder({
29
+ ...this.#node,
30
+ returning: [...this.#node.returning, ...newSelects],
31
+ }, this.#executor);
32
+ }
33
+ async execute() {
34
+ return this.#executor.execute(this);
35
+ }
36
+ compile() {
37
+ const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
38
+ const metadata = [this._prepareMetadata()];
39
+ return {
40
+ query,
41
+ variables: {
42
+ metadata,
43
+ },
44
+ };
45
+ }
46
+ _prepareMetadata() {
47
+ const buildSelects = (selects) => {
48
+ return selects.map(field => {
49
+ if (typeof field === 'string') {
50
+ return field;
51
+ }
52
+ const subQueryBuilder = new query_builder_js_1.QueryBuilder(field, this.#executor);
53
+ return subQueryBuilder._prepareMetadata();
54
+ });
55
+ };
56
+ const returningSelection = this.#node.returning.length
57
+ ? buildSelects(this.#node.returning)
58
+ : ['id'];
59
+ return {
60
+ type: 'create',
61
+ tableName: this.#node.tableName,
62
+ createdRecords: this.#node.createdRecords,
63
+ returning: returningSelection,
64
+ };
65
+ }
66
+ }
67
+ exports.InsertQueryBuilder = InsertQueryBuilder;
68
+ //# sourceMappingURL=insert-query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-query-builder.js","sourceRoot":"","sources":["../../src/insert-query-builder.ts"],"names":[],"mappings":";;;AAGA,yDAAkD;AAClD,iEAA0D;AAE1D,MAAa,kBAAkB;IAI7B,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,MAEyC;QAEzC,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,CAIP,MAAW;QACX,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,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,IAAI,CAAC,SAAS,CAAC,OAAO,CAAI,IAAI,CAAC,CAAC;IACzC,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;AA3FD,gDA2FC"}
@@ -0,0 +1,52 @@
1
+ import { LinkColumnType } from '@taylordb/shared';
2
+ import { AnyDB, QueryNode, RootQueryNode, SelectionQueryNode } from './@types/internal-types.js';
3
+ import { LinkColumnNames, NonLinkColumnNames } from './@types/query-builder.js';
4
+ import { InferDataType, ResolveSelection, ResolveWithObject, ResolveWithPlain } from './@types/type-helpers.js';
5
+ import { AggregationQueryBuilder } from './aggregation-query-builder.js';
6
+ import { AnyQueryBuilder, BatchQueryBuilder } from './batch-query-builder.js';
7
+ import { DeleteQueryBuilder } from './delete-query-builder.js';
8
+ import { Executor } from './executor.js';
9
+ import { InsertQueryBuilder } from './insert-query-builder.js';
10
+ import { UpdateQueryBuilder } from './update-query-builder.js';
11
+ import { FilterableQueryBuilder } from './where-query-builder.js';
12
+ export declare class QueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables'], Selection = object, LinkName = null> extends FilterableQueryBuilder<DB, TableName> {
13
+ _node: QueryNode;
14
+ constructor(node: QueryNode, executor: Executor);
15
+ select<const TFields extends readonly NonLinkColumnNames<DB['tables'][TableName]>[]>(fields: TFields): QueryBuilder<DB, TableName, ResolveSelection<DB, TableName, TFields, Selection>>;
16
+ selectAll(): QueryBuilder<DB, TableName, Selection & {
17
+ [K in keyof DB['tables'][TableName]]: InferDataType<DB['tables'][TableName][K]>;
18
+ }>;
19
+ with<const TArg extends (LinkColumnNames<DB['tables'][TableName]> & string) | readonly (LinkColumnNames<DB['tables'][TableName]> & string)[]>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithPlain<DB, TableName, TArg, Selection>>;
20
+ with<const TArg extends {
21
+ [K in LinkColumnNames<DB['tables'][TableName]>]?: (qb: QueryBuilder<DB, DB['tables'][TableName][K] extends LinkColumnType<any> ? DB['tables'][TableName][K]['linkedTo'] : never, object, K>) => QueryBuilder<DB, any, any, any>;
22
+ }>(relations: TArg): QueryBuilder<DB, TableName, ResolveWithObject<TArg, Selection>>;
23
+ limit(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
24
+ offset(count: number): QueryBuilder<DB, TableName, Selection, LinkName>;
25
+ paginate(page: number, limit: number): QueryBuilder<DB, TableName, Selection, LinkName>;
26
+ orderBy(field: keyof DB['tables'][TableName], direction?: 'asc' | 'desc'): QueryBuilder<DB, TableName, Selection, LinkName>;
27
+ execute(): Promise<Selection[]>;
28
+ compile(): {
29
+ query: string;
30
+ variables: Record<string, any>;
31
+ };
32
+ _prepareMetadata(): any;
33
+ isSelectionQueryNode(node: QueryNode): node is SelectionQueryNode;
34
+ isRootQueryNode(node: QueryNode): node is RootQueryNode;
35
+ }
36
+ export declare class RootQueryBuilder<DB extends AnyDB> {
37
+ #private;
38
+ constructor(config: {
39
+ baseUrl: string;
40
+ apiKey: string;
41
+ });
42
+ selectFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(from: TableName): QueryBuilder<DB, TableName>;
43
+ insertInto<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(into: TableName): InsertQueryBuilder<DB, TableName>;
44
+ update<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): UpdateQueryBuilder<DB, TableName>;
45
+ deleteFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): DeleteQueryBuilder<DB, TableName>;
46
+ batch(builders: AnyQueryBuilder[]): BatchQueryBuilder;
47
+ aggregateFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): AggregationQueryBuilder<DB, TableName>;
48
+ }
49
+ export declare function createQueryBuilder<DB extends AnyDB>(config: {
50
+ baseUrl: string;
51
+ apiKey: string;
52
+ }): RootQueryBuilder<DB>;
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RootQueryBuilder = exports.QueryBuilder = void 0;
4
+ exports.createQueryBuilder = createQueryBuilder;
5
+ const zod_1 = require("zod");
6
+ const aggregation_query_builder_js_1 = require("./aggregation-query-builder.js");
7
+ const batch_query_builder_js_1 = require("./batch-query-builder.js");
8
+ const delete_query_builder_js_1 = require("./delete-query-builder.js");
9
+ const executor_js_1 = require("./executor.js");
10
+ const insert_query_builder_js_1 = require("./insert-query-builder.js");
11
+ const selection_builder_js_1 = require("./selection-builder.js");
12
+ const update_query_builder_js_1 = require("./update-query-builder.js");
13
+ const where_query_builder_js_1 = require("./where-query-builder.js");
14
+ class QueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
15
+ constructor(node, executor) {
16
+ super(node, executor);
17
+ this._node = node;
18
+ }
19
+ select(fields) {
20
+ return new QueryBuilder({
21
+ ...this._node,
22
+ fields: [...this._node.fields, ...fields],
23
+ }, this._executor);
24
+ }
25
+ selectAll() {
26
+ return new QueryBuilder({
27
+ ...this._node,
28
+ fields: ['*'],
29
+ }, this._executor);
30
+ }
31
+ with(arg) {
32
+ if (typeof arg === 'string' || Array.isArray(arg)) {
33
+ const relationNames = (Array.isArray(arg) ? arg : [arg]);
34
+ const newSelects = relationNames.map(relationName => {
35
+ const selectionBuilder = new selection_builder_js_1.SelectionBuilder(this._executor);
36
+ const subQuery = selectionBuilder
37
+ .useLink(relationName)
38
+ .selectAll();
39
+ return subQuery._node;
40
+ });
41
+ return new QueryBuilder({
42
+ ...this._node,
43
+ fields: [...this._node.fields, ...newSelects],
44
+ }, this._executor);
45
+ }
46
+ const relations = arg;
47
+ const newSelects = Object.entries(relations).map(([relationName, configFn]) => {
48
+ const selectionBuilder = new selection_builder_js_1.SelectionBuilder(this._executor);
49
+ const initialSubQueryBuilder = selectionBuilder.useLink(relationName);
50
+ const configuredSubQueryBuilder = configFn(initialSubQueryBuilder);
51
+ return configuredSubQueryBuilder._node;
52
+ });
53
+ return new QueryBuilder({
54
+ ...this._node,
55
+ fields: [...this._node.fields, ...newSelects],
56
+ }, this._executor);
57
+ }
58
+ limit(count) {
59
+ return new QueryBuilder({
60
+ ...this._node,
61
+ pagination: { ...this._node.pagination, limit: count },
62
+ }, this._executor);
63
+ }
64
+ offset(count) {
65
+ return new QueryBuilder({
66
+ ...this._node,
67
+ pagination: { ...this._node.pagination, offset: count },
68
+ }, this._executor);
69
+ }
70
+ paginate(page, limit) {
71
+ return this.offset((page - 1) * limit).limit(limit);
72
+ }
73
+ orderBy(field, direction = 'asc') {
74
+ const newSorting = {
75
+ field: field,
76
+ direction,
77
+ };
78
+ return new QueryBuilder({
79
+ ...this._node,
80
+ sorting: [...(this._node.sorting || []), newSorting],
81
+ }, this._executor);
82
+ }
83
+ async execute() {
84
+ const response = await this._executor.execute(this);
85
+ return response[0];
86
+ }
87
+ compile() {
88
+ const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
89
+ const metadata = [this._prepareMetadata()];
90
+ return {
91
+ query,
92
+ variables: {
93
+ metadata,
94
+ },
95
+ };
96
+ }
97
+ _prepareMetadata() {
98
+ if (this.isSelectionQueryNode(this._node)) {
99
+ return {
100
+ field: this._node.field,
101
+ fields: this._node.fields.map(field => {
102
+ if (typeof field === 'string') {
103
+ return field;
104
+ }
105
+ return new QueryBuilder(field, this._executor)._prepareMetadata();
106
+ }),
107
+ ...(this._node.filtersSet.filtersSet.length > 0
108
+ ? { filtersSet: this._node.filtersSet }
109
+ : {}),
110
+ ...(this._node.pagination ? { pagination: this._node.pagination } : {}),
111
+ ...(this._node.sorting ? { sorting: this._node.sorting } : {}),
112
+ };
113
+ }
114
+ if (this.isRootQueryNode(this._node)) {
115
+ return {
116
+ type: 'select',
117
+ tableName: this._node.tableName,
118
+ fields: this._node.fields.map(field => {
119
+ if (typeof field === 'string') {
120
+ return field;
121
+ }
122
+ return new QueryBuilder(field, this._executor)._prepareMetadata();
123
+ }),
124
+ ...(this._node.filtersSet.filtersSet.length > 0
125
+ ? { filtersSet: this._node.filtersSet }
126
+ : {}),
127
+ ...(this._node.pagination ? { pagination: this._node.pagination } : {}),
128
+ ...(this._node.sorting ? { sorting: this._node.sorting } : {}),
129
+ };
130
+ }
131
+ throw new Error('Invalid query node');
132
+ }
133
+ isSelectionQueryNode(node) {
134
+ return node.queryType === 'link';
135
+ }
136
+ isRootQueryNode(node) {
137
+ return node.queryType === 'root';
138
+ }
139
+ }
140
+ exports.QueryBuilder = QueryBuilder;
141
+ class RootQueryBuilder {
142
+ #executor;
143
+ constructor(config) {
144
+ this.#executor = new executor_js_1.Executor(config.baseUrl, config.apiKey);
145
+ }
146
+ selectFrom(from) {
147
+ return new QueryBuilder({
148
+ tableName: from,
149
+ fields: [],
150
+ filtersSet: { conjunction: 'and', filtersSet: [] },
151
+ type: 'select',
152
+ queryType: 'root',
153
+ }, this.#executor);
154
+ }
155
+ insertInto(into) {
156
+ return new insert_query_builder_js_1.InsertQueryBuilder({
157
+ tableName: into,
158
+ createdRecords: [],
159
+ returning: [],
160
+ type: 'create',
161
+ }, this.#executor);
162
+ }
163
+ update(tableName) {
164
+ return new update_query_builder_js_1.UpdateQueryBuilder({
165
+ tableName: tableName,
166
+ values: {},
167
+ filtersSet: { conjunction: 'and', filtersSet: [] },
168
+ type: 'update',
169
+ }, this.#executor);
170
+ }
171
+ deleteFrom(tableName) {
172
+ return new delete_query_builder_js_1.DeleteQueryBuilder({
173
+ tableName: tableName,
174
+ deletedRecordIds: [],
175
+ filtersSet: { conjunction: 'and', filtersSet: [] },
176
+ type: 'delete',
177
+ }, this.#executor);
178
+ }
179
+ batch(builders) {
180
+ return new batch_query_builder_js_1.BatchQueryBuilder(builders, this.#executor);
181
+ }
182
+ aggregateFrom(tableName) {
183
+ const node = {
184
+ tableName: tableName,
185
+ type: 'aggregation',
186
+ filtersSet: { conjunction: 'and', filtersSet: [] },
187
+ groupings: [],
188
+ aggregations: {},
189
+ };
190
+ return new aggregation_query_builder_js_1.AggregationQueryBuilder(node, this.#executor);
191
+ }
192
+ }
193
+ exports.RootQueryBuilder = RootQueryBuilder;
194
+ const QBConfigSchema = zod_1.z.object({
195
+ baseUrl: zod_1.z.string().url(),
196
+ apiKey: zod_1.z.string().nonempty(),
197
+ });
198
+ function createQueryBuilder(config) {
199
+ QBConfigSchema.parse(config);
200
+ return new RootQueryBuilder(config);
201
+ }
202
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { LinkColumnType } from '@taylordb/shared';
2
+ import type { AnyDB } from './@types/internal-types.js';
3
+ import { LinkColumnNames } from './@types/query-builder.js';
4
+ import { Executor } from './executor.js';
5
+ import { QueryBuilder } from './query-builder.js';
6
+ export declare class SelectionBuilder<DB extends AnyDB, CurrentTableName extends keyof DB['tables']> {
7
+ _executor: Executor;
8
+ constructor(executor: Executor);
9
+ useLink<LinkName extends LinkColumnNames<DB['tables'][CurrentTableName]> & string>(from: LinkName): QueryBuilder<DB, DB["tables"][CurrentTableName][LinkName] extends LinkColumnType<any> ? DB["tables"][CurrentTableName][LinkName]["linkedTo"] : never, object, LinkName>;
10
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectionBuilder = void 0;
4
+ const query_builder_js_1 = require("./query-builder.js");
5
+ class SelectionBuilder {
6
+ _executor;
7
+ constructor(executor) {
8
+ this._executor = executor;
9
+ }
10
+ useLink(from) {
11
+ return new query_builder_js_1.QueryBuilder({
12
+ field: from,
13
+ fields: [],
14
+ filtersSet: { conjunction: 'and', filtersSet: [] },
15
+ queryType: 'link',
16
+ }, this._executor);
17
+ }
18
+ }
19
+ exports.SelectionBuilder = SelectionBuilder;
20
+ //# sourceMappingURL=selection-builder.js.map
@@ -0,0 +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,CAEL,IAAc;QACd,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"}
@@ -0,0 +1,17 @@
1
+ import type { AnyDB } from './@types/internal-types.js';
2
+ import type { Updatable, UpdateNode } from './@types/update.js';
3
+ import { Executor } from './executor.js';
4
+ import { FilterableQueryBuilder } from './where-query-builder.js';
5
+ export declare class UpdateQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> extends FilterableQueryBuilder<DB, TableName> {
6
+ #private;
7
+ constructor(node: UpdateNode, executor: Executor);
8
+ set(values: Updatable<DB['tables'][TableName]>): UpdateQueryBuilder<DB, TableName>;
9
+ execute(): Promise<{
10
+ affectedRecords: number;
11
+ }>;
12
+ compile(): {
13
+ query: string;
14
+ variables: Record<string, any>;
15
+ };
16
+ _prepareMetadata(): any;
17
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateQueryBuilder = void 0;
4
+ const where_query_builder_js_1 = require("./where-query-builder.js");
5
+ class UpdateQueryBuilder extends where_query_builder_js_1.FilterableQueryBuilder {
6
+ #node;
7
+ constructor(node, executor) {
8
+ super(node, executor);
9
+ this.#node = node;
10
+ }
11
+ set(values) {
12
+ return new UpdateQueryBuilder({
13
+ ...this.#node,
14
+ values,
15
+ }, this._executor);
16
+ }
17
+ async execute() {
18
+ const response = await this._executor.execute(this);
19
+ return response[0];
20
+ }
21
+ compile() {
22
+ const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
23
+ const metadata = [this._prepareMetadata()];
24
+ return {
25
+ query,
26
+ variables: {
27
+ metadata,
28
+ },
29
+ };
30
+ }
31
+ _prepareMetadata() {
32
+ return {
33
+ type: 'update',
34
+ tableName: this.#node.tableName,
35
+ values: this.#node.values,
36
+ ...(this.#node.filtersSet.filtersSet.length > 0
37
+ ? { filtersSet: this.#node.filtersSet }
38
+ : {}),
39
+ };
40
+ }
41
+ }
42
+ exports.UpdateQueryBuilder = UpdateQueryBuilder;
43
+ //# sourceMappingURL=update-query-builder.js.map
@@ -0,0 +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,CACD,MAA0C;QAE1C,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;AArDD,gDAqDC"}
@@ -0,0 +1,14 @@
1
+ import type { ColumnType } from '@taylordb/shared';
2
+ import type { AnyDB, QueryNode } from './@types/internal-types.js';
3
+ import { Executor } from './executor.js';
4
+ export declare class FilterableQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> {
5
+ _node: Pick<QueryNode, 'filtersSet'>;
6
+ _executor: Executor;
7
+ constructor(node: Pick<QueryNode, 'filtersSet'>, executor: Executor);
8
+ where<C extends keyof DB['tables'][TableName], O extends keyof DB['filters'][DB['tables'][TableName][C] extends ColumnType<any, any, any, infer T> ? T & keyof DB['filters'] : never]>(column: C, operator: O, value: DB['filters'][DB['tables'][TableName][C] extends ColumnType<any, any, any, infer T> ? T & keyof DB['filters'] : never][O]): this;
9
+ where<C extends (builder: WhereQueryBuilder<DB, TableName>) => FilterableQueryBuilder<DB, TableName>>(column: C): this;
10
+ orWhere<C extends keyof DB['tables'][TableName], O extends keyof DB['filters'][DB['tables'][TableName][C] extends ColumnType<any, any, any, infer T> ? T & keyof DB['filters'] : never]>(column: C, operator: O, value: DB['filters'][DB['tables'][TableName][C] extends ColumnType<any, any, any, infer T> ? T & keyof DB['filters'] : never][O]): this;
11
+ orWhere<C extends (builder: WhereQueryBuilder<DB, TableName>) => any>(column: C): this;
12
+ }
13
+ export declare class WhereQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> extends FilterableQueryBuilder<DB, TableName> {
14
+ }