@taylordb/query-builder 0.1.4 → 0.2.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 (133) hide show
  1. package/dist/{src → cjs}/__tests__/query-builder.spec.js +1 -1
  2. package/dist/{src → cjs}/__tests__/query-builder.spec.js.map +1 -1
  3. package/dist/{src → cjs}/aggregation-query-builder.d.ts +1 -0
  4. package/dist/{src → cjs}/aggregation-query-builder.js +4 -1
  5. package/dist/{src → cjs}/aggregation-query-builder.js.map +1 -1
  6. package/dist/cjs/batch-query-builder.d.ts +27 -0
  7. package/dist/{src → cjs}/batch-query-builder.js +10 -0
  8. package/dist/cjs/batch-query-builder.js.map +1 -0
  9. package/dist/cjs/executor.d.ts +15 -0
  10. package/dist/cjs/executor.js +67 -0
  11. package/dist/cjs/executor.js.map +1 -0
  12. package/dist/{src → cjs}/insert-query-builder.d.ts +8 -6
  13. package/dist/{src → cjs}/insert-query-builder.js +2 -1
  14. package/dist/cjs/insert-query-builder.js.map +1 -0
  15. package/dist/{src → cjs}/query-builder.d.ts +4 -2
  16. package/dist/{src → cjs}/query-builder.js +7 -0
  17. package/dist/cjs/query-builder.js.map +1 -0
  18. package/dist/cjs/subscription-manager.d.ts +19 -0
  19. package/dist/cjs/subscription-manager.js +105 -0
  20. package/dist/cjs/subscription-manager.js.map +1 -0
  21. package/dist/esm/@types/aggregate.d.ts +28 -0
  22. package/dist/esm/@types/aggregate.js +3 -0
  23. package/dist/esm/@types/aggregate.js.map +1 -0
  24. package/dist/esm/@types/delete.d.ts +2 -0
  25. package/dist/esm/@types/delete.js +3 -0
  26. package/dist/esm/@types/delete.js.map +1 -0
  27. package/dist/esm/@types/insert.d.ts +8 -0
  28. package/dist/esm/@types/insert.js +3 -0
  29. package/dist/esm/@types/insert.js.map +1 -0
  30. package/dist/esm/@types/internal-types.d.ts +24 -0
  31. package/dist/esm/@types/internal-types.js +3 -0
  32. package/dist/esm/@types/internal-types.js.map +1 -0
  33. package/dist/esm/@types/query-builder.d.ts +7 -0
  34. package/dist/esm/@types/query-builder.js +3 -0
  35. package/dist/esm/@types/query-builder.js.map +1 -0
  36. package/dist/esm/@types/type-helpers.d.ts +27 -0
  37. package/dist/esm/@types/type-helpers.js +3 -0
  38. package/dist/esm/@types/type-helpers.js.map +1 -0
  39. package/dist/esm/@types/update.d.ts +5 -0
  40. package/dist/esm/@types/update.js +3 -0
  41. package/dist/esm/@types/update.js.map +1 -0
  42. package/dist/esm/__tests__/query-builder.spec.js +129 -0
  43. package/dist/esm/__tests__/query-builder.spec.js.map +1 -0
  44. package/dist/{sample/sample-1 → esm/__tests__}/taylorclient.types.d.ts +0 -21
  45. package/dist/esm/__tests__/taylorclient.types.js.map +1 -0
  46. package/dist/esm/aggregation-query-builder.d.ts +28 -0
  47. package/dist/esm/aggregation-query-builder.js +83 -0
  48. package/dist/esm/aggregation-query-builder.js.map +1 -0
  49. package/dist/esm/batch-query-builder.d.ts +27 -0
  50. package/dist/esm/batch-query-builder.js +38 -0
  51. package/dist/esm/batch-query-builder.js.map +1 -0
  52. package/dist/esm/delete-query-builder.d.ts +16 -0
  53. package/dist/esm/delete-query-builder.js +36 -0
  54. package/dist/esm/delete-query-builder.js.map +1 -0
  55. package/dist/esm/executor.d.ts +15 -0
  56. package/dist/esm/executor.js +67 -0
  57. package/dist/esm/executor.js.map +1 -0
  58. package/dist/esm/index.d.ts +1 -0
  59. package/dist/esm/index.js +6 -0
  60. package/dist/esm/index.js.map +1 -0
  61. package/dist/esm/insert-query-builder.d.ts +19 -0
  62. package/dist/esm/insert-query-builder.js +69 -0
  63. package/dist/esm/insert-query-builder.js.map +1 -0
  64. package/dist/esm/query-builder.d.ts +54 -0
  65. package/dist/esm/query-builder.js +209 -0
  66. package/dist/esm/query-builder.js.map +1 -0
  67. package/dist/esm/selection-builder.d.ts +10 -0
  68. package/dist/esm/selection-builder.js +20 -0
  69. package/dist/esm/selection-builder.js.map +1 -0
  70. package/dist/esm/subscription-manager.d.ts +19 -0
  71. package/dist/esm/subscription-manager.js +105 -0
  72. package/dist/esm/subscription-manager.js.map +1 -0
  73. package/dist/esm/update-query-builder.d.ts +17 -0
  74. package/dist/esm/update-query-builder.js +43 -0
  75. package/dist/esm/update-query-builder.js.map +1 -0
  76. package/dist/esm/where-query-builder.d.ts +14 -0
  77. package/dist/esm/where-query-builder.js +68 -0
  78. package/dist/esm/where-query-builder.js.map +1 -0
  79. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  80. package/package.json +12 -9
  81. package/dist/sample/sample-1/index.js +0 -71
  82. package/dist/sample/sample-1/index.js.map +0 -1
  83. package/dist/sample/sample-1/taylorclient.types.js.map +0 -1
  84. package/dist/src/batch-query-builder.d.ts +0 -16
  85. package/dist/src/batch-query-builder.js.map +0 -1
  86. package/dist/src/executor.d.ts +0 -12
  87. package/dist/src/executor.js +0 -37
  88. package/dist/src/executor.js.map +0 -1
  89. package/dist/src/insert-query-builder.js.map +0 -1
  90. package/dist/src/query-builder.js.map +0 -1
  91. package/dist/tsconfig.tsbuildinfo +0 -1
  92. /package/dist/{src → cjs}/@types/aggregate.d.ts +0 -0
  93. /package/dist/{src → cjs}/@types/aggregate.js +0 -0
  94. /package/dist/{src → cjs}/@types/aggregate.js.map +0 -0
  95. /package/dist/{src → cjs}/@types/delete.d.ts +0 -0
  96. /package/dist/{src → cjs}/@types/delete.js +0 -0
  97. /package/dist/{src → cjs}/@types/delete.js.map +0 -0
  98. /package/dist/{src → cjs}/@types/insert.d.ts +0 -0
  99. /package/dist/{src → cjs}/@types/insert.js +0 -0
  100. /package/dist/{src → cjs}/@types/insert.js.map +0 -0
  101. /package/dist/{src → cjs}/@types/internal-types.d.ts +0 -0
  102. /package/dist/{src → cjs}/@types/internal-types.js +0 -0
  103. /package/dist/{src → cjs}/@types/internal-types.js.map +0 -0
  104. /package/dist/{src → cjs}/@types/query-builder.d.ts +0 -0
  105. /package/dist/{src → cjs}/@types/query-builder.js +0 -0
  106. /package/dist/{src → cjs}/@types/query-builder.js.map +0 -0
  107. /package/dist/{src → cjs}/@types/type-helpers.d.ts +0 -0
  108. /package/dist/{src → cjs}/@types/type-helpers.js +0 -0
  109. /package/dist/{src → cjs}/@types/type-helpers.js.map +0 -0
  110. /package/dist/{src → cjs}/@types/update.d.ts +0 -0
  111. /package/dist/{src → cjs}/@types/update.js +0 -0
  112. /package/dist/{src → cjs}/@types/update.js.map +0 -0
  113. /package/dist/{src → cjs}/__tests__/query-builder.spec.d.ts +0 -0
  114. /package/dist/{src → cjs}/__tests__/taylorclient.types.d.ts +0 -0
  115. /package/dist/{sample/sample-1 → cjs/__tests__}/taylorclient.types.js +0 -0
  116. /package/dist/{src → cjs}/__tests__/taylorclient.types.js.map +0 -0
  117. /package/dist/{src → cjs}/delete-query-builder.d.ts +0 -0
  118. /package/dist/{src → cjs}/delete-query-builder.js +0 -0
  119. /package/dist/{src → cjs}/delete-query-builder.js.map +0 -0
  120. /package/dist/{src → cjs}/index.d.ts +0 -0
  121. /package/dist/{src → cjs}/index.js +0 -0
  122. /package/dist/{src → cjs}/index.js.map +0 -0
  123. /package/dist/{src → cjs}/selection-builder.d.ts +0 -0
  124. /package/dist/{src → cjs}/selection-builder.js +0 -0
  125. /package/dist/{src → cjs}/selection-builder.js.map +0 -0
  126. /package/dist/{src → cjs}/update-query-builder.d.ts +0 -0
  127. /package/dist/{src → cjs}/update-query-builder.js +0 -0
  128. /package/dist/{src → cjs}/update-query-builder.js.map +0 -0
  129. /package/dist/{src → cjs}/where-query-builder.d.ts +0 -0
  130. /package/dist/{src → cjs}/where-query-builder.js +0 -0
  131. /package/dist/{src → cjs}/where-query-builder.js.map +0 -0
  132. /package/dist/{sample/sample-1/index.d.ts → esm/__tests__/query-builder.spec.d.ts} +0 -0
  133. /package/dist/{src → esm}/__tests__/taylorclient.types.js +0 -0
@@ -0,0 +1,54 @@
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, AreAllBuildersSubscribable, 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
+ executeTakeFirst(): Promise<Selection | null>;
29
+ subscribe(callback: (result: Selection[]) => void): Promise<void>;
30
+ compile(): {
31
+ query: string;
32
+ variables: Record<string, any>;
33
+ };
34
+ _prepareMetadata(): any;
35
+ isSelectionQueryNode(node: QueryNode): node is SelectionQueryNode;
36
+ isRootQueryNode(node: QueryNode): node is RootQueryNode;
37
+ }
38
+ export declare class RootQueryBuilder<DB extends AnyDB> {
39
+ #private;
40
+ constructor(config: {
41
+ baseUrl: string;
42
+ apiKey: string;
43
+ });
44
+ selectFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(from: TableName): QueryBuilder<DB, TableName>;
45
+ insertInto<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(into: TableName): InsertQueryBuilder<DB, TableName>;
46
+ update<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): UpdateQueryBuilder<DB, TableName>;
47
+ deleteFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): DeleteQueryBuilder<DB, TableName>;
48
+ batch<const TBuilders extends readonly AnyQueryBuilder[]>(builders: TBuilders): AreAllBuildersSubscribable<TBuilders> extends true ? BatchQueryBuilder<TBuilders> : Omit<BatchQueryBuilder<TBuilders>, 'subscribe'>;
49
+ aggregateFrom<TableName extends keyof Omit<DB['tables'], 'selectTable' | 'attachmentTable' | 'collaboratorsTable'> & string>(tableName: TableName): AggregationQueryBuilder<DB, TableName>;
50
+ }
51
+ export declare function createQueryBuilder<DB extends AnyDB>(config: {
52
+ baseUrl: string;
53
+ apiKey: string;
54
+ }): RootQueryBuilder<DB>;
@@ -0,0 +1,209 @@
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
+ async executeTakeFirst() {
88
+ const response = await this._executor.execute(this);
89
+ return response[0]?.[0] ?? null;
90
+ }
91
+ subscribe(callback) {
92
+ return this._executor.subscribe([this], callback);
93
+ }
94
+ compile() {
95
+ const query = 'mutation ($metadata: JSON) { execute(metadata: $metadata) }';
96
+ const metadata = [this._prepareMetadata()];
97
+ return {
98
+ query,
99
+ variables: {
100
+ metadata,
101
+ },
102
+ };
103
+ }
104
+ _prepareMetadata() {
105
+ if (this.isSelectionQueryNode(this._node)) {
106
+ return {
107
+ field: this._node.field,
108
+ fields: this._node.fields.map(field => {
109
+ if (typeof field === 'string') {
110
+ return field;
111
+ }
112
+ return new QueryBuilder(field, this._executor)._prepareMetadata();
113
+ }),
114
+ ...(this._node.filtersSet.filtersSet.length > 0
115
+ ? { filtersSet: this._node.filtersSet }
116
+ : {}),
117
+ ...(this._node.pagination ? { pagination: this._node.pagination } : {}),
118
+ ...(this._node.sorting ? { sorting: this._node.sorting } : {}),
119
+ };
120
+ }
121
+ if (this.isRootQueryNode(this._node)) {
122
+ return {
123
+ type: 'select',
124
+ tableName: this._node.tableName,
125
+ fields: this._node.fields.map(field => {
126
+ if (typeof field === 'string') {
127
+ return field;
128
+ }
129
+ return new QueryBuilder(field, this._executor)._prepareMetadata();
130
+ }),
131
+ ...(this._node.filtersSet.filtersSet.length > 0
132
+ ? { filtersSet: this._node.filtersSet }
133
+ : {}),
134
+ ...(this._node.pagination ? { pagination: this._node.pagination } : {}),
135
+ ...(this._node.sorting ? { sorting: this._node.sorting } : {}),
136
+ };
137
+ }
138
+ throw new Error('Invalid query node');
139
+ }
140
+ isSelectionQueryNode(node) {
141
+ return node.queryType === 'link';
142
+ }
143
+ isRootQueryNode(node) {
144
+ return node.queryType === 'root';
145
+ }
146
+ }
147
+ exports.QueryBuilder = QueryBuilder;
148
+ class RootQueryBuilder {
149
+ #executor;
150
+ constructor(config) {
151
+ this.#executor = new executor_js_1.Executor(config.baseUrl, config.apiKey);
152
+ }
153
+ selectFrom(from) {
154
+ return new QueryBuilder({
155
+ tableName: from,
156
+ fields: [],
157
+ filtersSet: { conjunction: 'and', filtersSet: [] },
158
+ type: 'select',
159
+ queryType: 'root',
160
+ }, this.#executor);
161
+ }
162
+ insertInto(into) {
163
+ return new insert_query_builder_js_1.InsertQueryBuilder({
164
+ tableName: into,
165
+ createdRecords: [],
166
+ returning: [],
167
+ type: 'create',
168
+ }, this.#executor);
169
+ }
170
+ update(tableName) {
171
+ return new update_query_builder_js_1.UpdateQueryBuilder({
172
+ tableName: tableName,
173
+ values: {},
174
+ filtersSet: { conjunction: 'and', filtersSet: [] },
175
+ type: 'update',
176
+ }, this.#executor);
177
+ }
178
+ deleteFrom(tableName) {
179
+ return new delete_query_builder_js_1.DeleteQueryBuilder({
180
+ tableName: tableName,
181
+ deletedRecordIds: [],
182
+ filtersSet: { conjunction: 'and', filtersSet: [] },
183
+ type: 'delete',
184
+ }, this.#executor);
185
+ }
186
+ batch(builders) {
187
+ return new batch_query_builder_js_1.BatchQueryBuilder(builders, this.#executor);
188
+ }
189
+ aggregateFrom(tableName) {
190
+ const node = {
191
+ tableName: tableName,
192
+ type: 'aggregation',
193
+ filtersSet: { conjunction: 'and', filtersSet: [] },
194
+ groupings: [],
195
+ aggregations: {},
196
+ };
197
+ return new aggregation_query_builder_js_1.AggregationQueryBuilder(node, this.#executor);
198
+ }
199
+ }
200
+ exports.RootQueryBuilder = RootQueryBuilder;
201
+ const QBConfigSchema = zod_1.z.object({
202
+ baseUrl: zod_1.z.string().url(),
203
+ apiKey: zod_1.z.string().nonempty(),
204
+ });
205
+ function createQueryBuilder(config) {
206
+ QBConfigSchema.parse(config);
207
+ return new RootQueryBuilder(config);
208
+ }
209
+ //# 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,19 @@
1
+ import { Executor } from './executor.js';
2
+ export type DriverSubscriptionResponse = {
3
+ id: string;
4
+ delta: object[];
5
+ tableName: string;
6
+ subscriptionId: string;
7
+ };
8
+ export declare class SubscriptionManager {
9
+ #private;
10
+ private executor;
11
+ private config;
12
+ constructor(executor: Executor, config: {
13
+ baseUrl: string;
14
+ apiKey: string;
15
+ timeZone?: string;
16
+ clientId?: string;
17
+ });
18
+ subscribe<TResult>(metadatas: any[], callback: (...results: TResult[]) => void): Promise<void>;
19
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SubscriptionManager = void 0;
7
+ const fast_json_patch_1 = __importDefault(require("fast-json-patch"));
8
+ const socket_io_client_1 = require("socket.io-client");
9
+ class SubscriptionManager {
10
+ executor;
11
+ config;
12
+ #socket = null;
13
+ #subscriptions = new Map();
14
+ #isConnecting = false;
15
+ constructor(executor, config) {
16
+ this.executor = executor;
17
+ this.config = config;
18
+ }
19
+ async #connect() {
20
+ if (this.#socket || this.#isConnecting) {
21
+ return;
22
+ }
23
+ this.#isConnecting = true;
24
+ try {
25
+ const socketUrl = this.config.baseUrl
26
+ .replace(/^http/, 'ws')
27
+ .replace('api', 'bamboo');
28
+ this.#socket = (0, socket_io_client_1.io)(socketUrl, {
29
+ auth: {
30
+ token: this.config.apiKey,
31
+ 'time-zone': this.config.timeZone || 'UTC',
32
+ 'client-id': this.config.clientId,
33
+ },
34
+ query: {},
35
+ });
36
+ this.#socket.emit('listen', { clientId: this.config.clientId });
37
+ this.#socket.on('patch', this.#handlePatch.bind(this));
38
+ await new Promise((resolve, reject) => {
39
+ if (!this.#socket)
40
+ return reject('Socket not initialized');
41
+ this.#socket.on('connect', () => {
42
+ resolve();
43
+ });
44
+ this.#socket.on('connect_error', err => {
45
+ reject(err);
46
+ });
47
+ });
48
+ this.#socket.emit('subscribe', { clientId: this.config.clientId });
49
+ }
50
+ finally {
51
+ this.#isConnecting = false;
52
+ }
53
+ }
54
+ async subscribe(metadatas, callback) {
55
+ await this.#connect();
56
+ const param = metadatas.map(metadata => ({
57
+ metadata,
58
+ options: {
59
+ returns: ['patch', 'affectedFields'],
60
+ },
61
+ }));
62
+ const result = await this.executor.rawRequest(`
63
+ query ($param: [SubscriptionMetadataInput]!) {
64
+ plugins {
65
+ subscriptions {
66
+ subscribe(subscriptions: $param) {
67
+ subscriptionId
68
+ data
69
+ }
70
+ }
71
+ }
72
+ }
73
+ `, { param }, { 'client-id': this.config.clientId });
74
+ const subscriptions = result.plugins.subscriptions.subscribe;
75
+ const initialData = subscriptions.map(s => s.data);
76
+ for (const sub of subscriptions) {
77
+ this.#subscriptions.set(sub.subscriptionId, {
78
+ data: sub.data,
79
+ callback: (patchedData) => {
80
+ // This needs to be more robust for batching.
81
+ // For now, we'll just update the single data and call back.
82
+ const idx = subscriptions.findIndex(s => s.subscriptionId === sub.subscriptionId);
83
+ if (idx !== -1) {
84
+ initialData[idx] = patchedData;
85
+ callback(...initialData);
86
+ }
87
+ },
88
+ });
89
+ }
90
+ callback(...initialData);
91
+ }
92
+ #handlePatch(response) {
93
+ for (const patch of response.patches) {
94
+ const sub = this.#subscriptions.get(patch.subscriptionId);
95
+ if (sub) {
96
+ // @ts-ignore
97
+ const { newDocument } = fast_json_patch_1.default.applyPatch(sub.data, patch.delta);
98
+ sub.data = newDocument;
99
+ sub.callback(newDocument);
100
+ }
101
+ }
102
+ }
103
+ }
104
+ exports.SubscriptionManager = SubscriptionManager;
105
+ //# sourceMappingURL=subscription-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription-manager.js","sourceRoot":"","sources":["../../src/subscription-manager.ts"],"names":[],"mappings":"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"}
@@ -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
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhereQueryBuilder = exports.FilterableQueryBuilder = void 0;
4
+ class FilterableQueryBuilder {
5
+ _node;
6
+ _executor;
7
+ constructor(node, executor) {
8
+ this._node = node;
9
+ this._executor = executor;
10
+ }
11
+ where(column, operator, value) {
12
+ if (typeof column === 'function') {
13
+ const builder = new WhereQueryBuilder({
14
+ ...this._node,
15
+ filtersSet: { conjunction: 'and', filtersSet: [] },
16
+ }, this._executor);
17
+ const result = column(builder);
18
+ return new this.constructor({
19
+ ...this._node,
20
+ filtersSet: {
21
+ ...this._node.filtersSet,
22
+ filtersSet: [
23
+ ...this._node.filtersSet.filtersSet,
24
+ result._node.filtersSet,
25
+ ],
26
+ },
27
+ }, this._executor);
28
+ }
29
+ const newWhere = {
30
+ field: column,
31
+ operator,
32
+ value,
33
+ };
34
+ return new this.constructor({
35
+ ...this._node,
36
+ filtersSet: {
37
+ ...this._node.filtersSet,
38
+ filtersSet: [...this._node.filtersSet.filtersSet, newWhere],
39
+ },
40
+ }, this._executor);
41
+ }
42
+ orWhere(column, operator, value) {
43
+ const newFilters = this._node.filtersSet.filtersSet;
44
+ if (typeof column === 'function') {
45
+ const builder = new WhereQueryBuilder({
46
+ ...this._node,
47
+ filtersSet: { conjunction: 'and', filtersSet: [] },
48
+ }, this._executor);
49
+ const result = column(builder);
50
+ newFilters.push(result._node.filters);
51
+ }
52
+ else {
53
+ newFilters.push({ field: column, operator, value });
54
+ }
55
+ return new this.constructor({
56
+ ...this._node,
57
+ filtersSet: {
58
+ conjunction: 'or',
59
+ filtersSet: newFilters,
60
+ },
61
+ }, this._executor);
62
+ }
63
+ }
64
+ exports.FilterableQueryBuilder = FilterableQueryBuilder;
65
+ class WhereQueryBuilder extends FilterableQueryBuilder {
66
+ }
67
+ exports.WhereQueryBuilder = WhereQueryBuilder;
68
+ //# sourceMappingURL=where-query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":";;;AAIA,MAAa,sBAAsB;IAIjC,KAAK,CAAgC;IACrC,SAAS,CAAW;IAEpB,YAAY,IAAmC,EAAE,QAAkB;QACjE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B,CAAC;IA6BD,KAAK,CAAC,MAAW,EAAE,QAAc,EAAE,KAAW;QAC5C,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CACnC;gBACE,GAAG,IAAI,CAAC,KAAK;gBACb,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;aACnD,EACD,IAAI,CAAC,SAAS,CACf,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC;gBACE,GAAG,IAAI,CAAC,KAAK;gBACb,UAAU,EAAE;oBACV,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;oBACxB,UAAU,EAAE;wBACV,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;wBACnC,MAAM,CAAC,KAAK,CAAC,UAAU;qBACxB;iBACF;aACF,EACD,IAAI,CAAC,SAAS,CACf,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAoB;YAChC,KAAK,EAAE,MAAgB;YACvB,QAAQ;YACR,KAAK;SACN,CAAC;QAEF,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC;YACE,GAAG,IAAI,CAAC,KAAK;YACb,UAAU,EAAE;gBACV,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;gBACxB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC;aAC5D;SACF,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IA2BD,OAAO,CAAC,MAAW,EAAE,QAAc,EAAE,KAAW;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QAEpD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CACnC;gBACE,GAAG,IAAI,CAAC,KAAK;gBACb,UAAU,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;aACnD,EACD,IAAI,CAAC,SAAS,CACf,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,IAAK,IAAI,CAAC,WAAmB,CAClC;YACE,GAAG,IAAI,CAAC,KAAK;YACb,UAAU,EAAE;gBACV,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,UAAU;aACvB;SACF,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;AAvID,wDAuIC;AAED,MAAa,iBAGX,SAAQ,sBAAqC;CAAG;AAHlD,8CAGkD"}