@taylordb/query-builder 0.4.0 → 0.6.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 (60) hide show
  1. package/dist/cjs/@types/aggregate.d.ts +7 -7
  2. package/dist/cjs/@types/internal-types.d.ts +6 -14
  3. package/dist/cjs/@types/query-builder.d.ts +1 -0
  4. package/dist/cjs/@types/type-helpers.d.ts +6 -6
  5. package/dist/cjs/__tests__/query-builder.spec.js +32 -0
  6. package/dist/cjs/__tests__/query-builder.spec.js.map +1 -1
  7. package/dist/cjs/__tests__/taylorclient.types.d.ts +83 -94
  8. package/dist/cjs/aggregation-query-builder.d.ts +8 -6
  9. package/dist/cjs/aggregation-query-builder.js.map +1 -1
  10. package/dist/cjs/batch-query-builder.d.ts +3 -1
  11. package/dist/cjs/delete-query-builder.d.ts +1 -1
  12. package/dist/cjs/executor.d.ts +3 -1
  13. package/dist/cjs/executor.js +1 -1
  14. package/dist/cjs/executor.js.map +1 -1
  15. package/dist/cjs/insert-query-builder.d.ts +3 -3
  16. package/dist/cjs/insert-query-builder.js.map +1 -1
  17. package/dist/cjs/query-builder.d.ts +14 -12
  18. package/dist/cjs/query-builder.js +5 -1
  19. package/dist/cjs/query-builder.js.map +1 -1
  20. package/dist/cjs/selection-builder.d.ts +2 -2
  21. package/dist/cjs/selection-builder.js.map +1 -1
  22. package/dist/cjs/subscription-manager.d.ts +3 -1
  23. package/dist/cjs/subscription-manager.js +15 -0
  24. package/dist/cjs/subscription-manager.js.map +1 -1
  25. package/dist/cjs/update-query-builder.d.ts +2 -2
  26. package/dist/cjs/update-query-builder.js.map +1 -1
  27. package/dist/cjs/where-query-builder.d.ts +11 -10
  28. package/dist/cjs/where-query-builder.js +46 -17
  29. package/dist/cjs/where-query-builder.js.map +1 -1
  30. package/dist/esm/@types/aggregate.d.ts +7 -7
  31. package/dist/esm/@types/internal-types.d.ts +6 -14
  32. package/dist/esm/@types/query-builder.d.ts +1 -0
  33. package/dist/esm/@types/type-helpers.d.ts +6 -6
  34. package/dist/esm/__tests__/query-builder.spec.js +32 -0
  35. package/dist/esm/__tests__/query-builder.spec.js.map +1 -1
  36. package/dist/esm/__tests__/taylorclient.types.d.ts +83 -94
  37. package/dist/esm/aggregation-query-builder.d.ts +8 -6
  38. package/dist/esm/aggregation-query-builder.js.map +1 -1
  39. package/dist/esm/batch-query-builder.d.ts +3 -1
  40. package/dist/esm/delete-query-builder.d.ts +1 -1
  41. package/dist/esm/executor.d.ts +3 -1
  42. package/dist/esm/executor.js +1 -1
  43. package/dist/esm/executor.js.map +1 -1
  44. package/dist/esm/insert-query-builder.d.ts +3 -3
  45. package/dist/esm/insert-query-builder.js.map +1 -1
  46. package/dist/esm/query-builder.d.ts +14 -12
  47. package/dist/esm/query-builder.js +5 -1
  48. package/dist/esm/query-builder.js.map +1 -1
  49. package/dist/esm/selection-builder.d.ts +2 -2
  50. package/dist/esm/selection-builder.js.map +1 -1
  51. package/dist/esm/subscription-manager.d.ts +3 -1
  52. package/dist/esm/subscription-manager.js +15 -0
  53. package/dist/esm/subscription-manager.js.map +1 -1
  54. package/dist/esm/update-query-builder.d.ts +2 -2
  55. package/dist/esm/update-query-builder.js.map +1 -1
  56. package/dist/esm/where-query-builder.d.ts +11 -10
  57. package/dist/esm/where-query-builder.js +46 -17
  58. package/dist/esm/where-query-builder.js.map +1 -1
  59. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  60. package/package.json +1 -1
@@ -1 +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"}
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,CACL,IAAc;QAEd,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"}
@@ -15,5 +15,7 @@ export declare class SubscriptionManager {
15
15
  timeZone?: string;
16
16
  clientId?: string;
17
17
  });
18
- subscribe<TResult>(metadatas: any[], callback: (...results: TResult[]) => void): Promise<void>;
18
+ subscribe<TResult>(metadatas: any[], callback: (...results: TResult[]) => void): Promise<{
19
+ unsubscribe: () => Promise<void>;
20
+ }>;
19
21
  }
@@ -88,6 +88,21 @@ class SubscriptionManager {
88
88
  });
89
89
  }
90
90
  callback(...initialData);
91
+ return {
92
+ unsubscribe: async () => {
93
+ const subscriptionIds = subscriptions.map(s => s.subscriptionId);
94
+ for (const id of subscriptionIds) {
95
+ this.#subscriptions.delete(id);
96
+ }
97
+ await this.executor.rawRequest(`query RemoveSubscription ($subscriptionIds: [String]) {
98
+ plugins {
99
+ subscriptions {
100
+ unsubscribe(subscriptionIds: $subscriptionIds)
101
+ }
102
+ }
103
+ }`, { subscriptionIds });
104
+ },
105
+ };
91
106
  }
92
107
  #handlePatch(response) {
93
108
  for (const patch of response.patches) {
@@ -1 +1 @@
1
- {"version":3,"file":"subscription-manager.js","sourceRoot":"","sources":["../../src/subscription-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscription-manager.js","sourceRoot":"","sources":["../../src/subscription-manager.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ import type { AnyDB } from './@types/internal-types.js';
2
2
  import type { Updatable, UpdateNode } from './@types/update.js';
3
3
  import { Executor } from './executor.js';
4
4
  import { FilterableQueryBuilder } from './where-query-builder.js';
5
- export declare class UpdateQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> extends FilterableQueryBuilder<DB, TableName> {
5
+ export declare class UpdateQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
6
6
  #private;
7
7
  constructor(node: UpdateNode, executor: Executor);
8
- set(values: Updatable<DB['tables'][TableName]>): UpdateQueryBuilder<DB, TableName>;
8
+ set(values: Updatable<DB[TableName]>): UpdateQueryBuilder<DB, TableName>;
9
9
  execute(): Promise<{
10
10
  affectedRecords: number;
11
11
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,GAAG,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"}
1
+ {"version":3,"file":"update-query-builder.js","sourceRoot":"","sources":["../../src/update-query-builder.ts"],"names":[],"mappings":";;;AAGA,qEAAkE;AAElE,MAAa,kBAGX,SAAQ,+CAAqC;IAC7C,KAAK,CAAa;IAElB,YAAY,IAAgB,EAAE,QAAkB;QAC9C,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,MAAgC;QAClC,OAAO,IAAI,kBAAkB,CAC3B;YACE,GAAG,IAAI,CAAC,KAAK;YACb,MAAM;SACP,EACD,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAgC,IAAI,CAAC,CAAC;QAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,6DAA6D,CAAC;QAE5E,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,OAAO;YACL,KAAK;YACL,SAAS,EAAE;gBACT,QAAQ;aACT;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC7C,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;gBACvC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;CACF;AAnDD,gDAmDC"}
@@ -1,14 +1,15 @@
1
- import type { ColumnType } from '@taylordb/shared';
2
- import type { AnyDB, QueryNode } from './@types/internal-types.js';
1
+ import { LinkColumnType } from '@taylordb/shared';
2
+ import { AnyDB, FilterableNode } from './@types/internal-types.js';
3
+ import { ColumnNames } from './@types/query-builder.js';
3
4
  import { Executor } from './executor.js';
4
- export declare class FilterableQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> {
5
- _node: Pick<QueryNode, 'filtersSet'>;
5
+ export declare class FilterableQueryBuilder<DB extends AnyDB, TableName extends keyof DB> {
6
+ _node: FilterableNode;
6
7
  _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;
8
+ constructor(node: FilterableNode, executor: Executor);
9
+ where<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any> ? ((qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
10
+ where<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
11
+ orWhere<TField extends ColumnNames<DB[TableName]> & string, TOperator extends keyof DB[TableName][TField]['filters']>(field: TField, operator: TOperator, value: DB[TableName][TField] extends LinkColumnType<any> ? (qb: FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never>) => FilterableQueryBuilder<DB, DB[TableName][TField] extends LinkColumnType<any> ? DB[TableName][TField]['linkedTo'] : never> | DB[TableName][TField]['filters'][TOperator] : DB[TableName][TField]['filters'][TOperator]): this;
12
+ orWhere<C extends (builder: WhereQueryBuilder<DB, TableName>) => WhereQueryBuilder<DB, TableName>>(column: C): this;
12
13
  }
13
- export declare class WhereQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables']> extends FilterableQueryBuilder<DB, TableName> {
14
+ export declare class WhereQueryBuilder<DB extends AnyDB, TableName extends keyof DB> extends FilterableQueryBuilder<DB, TableName> {
14
15
  }
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WhereQueryBuilder = exports.FilterableQueryBuilder = void 0;
4
+ const selection_builder_js_1 = require("./selection-builder.js");
4
5
  class FilterableQueryBuilder {
5
- _node;
6
6
  _executor;
7
7
  constructor(node, executor) {
8
8
  this._node = node;
9
9
  this._executor = executor;
10
10
  }
11
- where(column, operator, value) {
12
- if (typeof column === 'function') {
11
+ where(fieldOrFn, operator, value) {
12
+ if (typeof fieldOrFn === 'function') {
13
13
  const builder = new WhereQueryBuilder({
14
14
  ...this._node,
15
15
  filtersSet: { conjunction: 'and', filtersSet: [] },
16
16
  }, this._executor);
17
- const result = column(builder);
18
- return new this.constructor({
17
+ const result = fieldOrFn(builder);
18
+ const newNode = {
19
19
  ...this._node,
20
20
  filtersSet: {
21
21
  ...this._node.filtersSet,
@@ -24,34 +24,63 @@ class FilterableQueryBuilder {
24
24
  result._node.filtersSet,
25
25
  ],
26
26
  },
27
- }, this._executor);
27
+ };
28
+ // @ts-expect-error cannot instantiate an abstract class
29
+ return new this.constructor(newNode, this._executor);
28
30
  }
29
- const newWhere = {
30
- field: column,
31
- operator,
31
+ if (typeof value === 'function') {
32
+ const selectionBuilder = new selection_builder_js_1.SelectionBuilder(this._executor);
33
+ const initialSubQueryBuilder = selectionBuilder.useLink(fieldOrFn);
34
+ const configuredSubQueryBuilder = value(initialSubQueryBuilder);
35
+ const newFilter = {
36
+ field: fieldOrFn,
37
+ operator: operator,
38
+ value: ['cross-filter', configuredSubQueryBuilder._node.filtersSet],
39
+ };
40
+ const newNode = {
41
+ ...this._node,
42
+ filtersSet: {
43
+ ...this._node.filtersSet,
44
+ filtersSet: [...this._node.filtersSet.filtersSet, newFilter],
45
+ },
46
+ };
47
+ // @ts-expect-error cannot instantiate an abstract class
48
+ return new this.constructor(newNode, this._executor);
49
+ }
50
+ const newFilter = {
51
+ field: fieldOrFn,
52
+ operator: operator,
32
53
  value,
33
54
  };
34
- return new this.constructor({
55
+ const newNode = {
35
56
  ...this._node,
36
57
  filtersSet: {
37
58
  ...this._node.filtersSet,
38
- filtersSet: [...this._node.filtersSet.filtersSet, newWhere],
59
+ filtersSet: [...this._node.filtersSet.filtersSet, newFilter],
39
60
  },
40
- }, this._executor);
61
+ };
62
+ // @ts-expect-error cannot instantiate an abstract class
63
+ return new this.constructor(newNode, this._executor);
41
64
  }
42
- orWhere(column, operator, value) {
65
+ orWhere(fieldOrFn, operator, value) {
66
+ // Keeping a basic implementation for orWhere from what was in the file
43
67
  const newFilters = this._node.filtersSet.filtersSet;
44
- if (typeof column === 'function') {
68
+ if (typeof fieldOrFn === 'function') {
45
69
  const builder = new WhereQueryBuilder({
46
70
  ...this._node,
47
71
  filtersSet: { conjunction: 'and', filtersSet: [] },
48
72
  }, this._executor);
49
- const result = column(builder);
50
- newFilters.push(result._node.filters);
73
+ const result = fieldOrFn(builder);
74
+ newFilters.push(result._node.filtersSet);
51
75
  }
52
76
  else {
53
- newFilters.push({ field: column, operator, value });
77
+ newFilters.push({
78
+ field: fieldOrFn,
79
+ operator: operator,
80
+ value,
81
+ });
54
82
  }
83
+ // @ts-expect-error cannot instantiate an abstract class
55
84
  return new this.constructor({
56
85
  ...this._node,
57
86
  filtersSet: {
@@ -1 +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"}
1
+ {"version":3,"file":"where-query-builder.js","sourceRoot":"","sources":["../../src/where-query-builder.ts"],"names":[],"mappings":"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"}
@@ -2,23 +2,23 @@ import { AggregationQueryMetaData, MetadataWithTableName } from '@taylordb/share
2
2
  import { AnyDB } from './internal-types.js';
3
3
  import { InferDataType } from './type-helpers.js';
4
4
  export type AggregationValue = number | null | object | undefined;
5
- export type Aggregates<DB extends AnyDB, TName extends keyof DB['tables'], TAggregations extends {
6
- [K in keyof DB['tables'][TName] & string]?: readonly (keyof DB['aggregates'][DB['tables'][TName][K]['type']])[];
5
+ export type Aggregates<DB extends AnyDB, TName extends keyof DB, TAggregations extends {
6
+ [K in keyof DB[TName] & string]?: readonly (keyof DB[TName][K]['aggregations'])[];
7
7
  }> = {
8
- -readonly [K in keyof TAggregations & keyof DB['tables'][TName]]: {
9
- -readonly [P in NonNullable<TAggregations[K]>[number]]: DB['aggregates'][DB['tables'][TName][K]['type']][P];
8
+ -readonly [K in keyof TAggregations & keyof DB[TName]]: {
9
+ -readonly [P in NonNullable<TAggregations[K]>[number]]: DB[TName][K]['aggregations'][P];
10
10
  };
11
11
  };
12
12
  type Head<T extends readonly any[]> = T extends readonly [infer H, ...any[]] ? H : never;
13
13
  type Tail<T extends readonly any[]> = T extends readonly [any, ...infer R] ? R : never;
14
- export type AggregateRecord<DB extends AnyDB, TName extends keyof DB['tables'], TGroupBy extends readonly (keyof DB['tables'][TName] & string)[], TAggregations extends {
15
- [K in keyof DB['tables'][TName] & string]?: readonly (keyof DB['aggregates'][DB['tables'][TName][K]['type']])[];
14
+ export type AggregateRecord<DB extends AnyDB, TName extends keyof DB, TGroupBy extends readonly (keyof DB[TName] & string)[], TAggregations extends {
15
+ [K in keyof DB[TName] & string]?: readonly (keyof DB[TName][K]['aggregations'])[];
16
16
  }> = TGroupBy extends readonly [] ? {
17
17
  count: number;
18
18
  aggregates: Aggregates<DB, TName, TAggregations>;
19
19
  } : {
20
20
  field: Head<TGroupBy>;
21
- value: InferDataType<DB['tables'][TName][Head<TGroupBy>]>;
21
+ value: InferDataType<DB[TName][Head<TGroupBy>]>;
22
22
  count: number;
23
23
  aggregates: Aggregates<DB, TName, TAggregations>;
24
24
  } & (Tail<TGroupBy> extends readonly [] ? object : {
@@ -1,18 +1,8 @@
1
- import { MetadataWithTableName, ObjConfigurationVisibleField, SelectQueryMetaData } from '@taylordb/shared';
2
- export type Filters = {
3
- [key: string]: {
4
- [key: string]: any;
5
- };
6
- };
7
- export type Aggregates = {
8
- [key: string]: {
9
- [key: string]: any;
10
- };
11
- };
1
+ import { ColumnType, Filters, MetadataWithTableName, ObjConfigurationVisibleField, SelectQueryMetaData } from '@taylordb/shared';
12
2
  export type AnyDB = {
13
- filters: Filters;
14
- aggregates: Aggregates;
15
- tables: any;
3
+ [key in keyof any]: {
4
+ [key in keyof any]: ColumnType<any, any, any, any, any, any>;
5
+ };
16
6
  };
17
7
  export type SelectionQueryNode = ObjConfigurationVisibleField<string> & {
18
8
  queryType: 'link';
@@ -22,3 +12,5 @@ export type RootQueryNode = Omit<MetadataWithTableName<SelectQueryMetaData>, 'fi
22
12
  queryType: 'root';
23
13
  };
24
14
  export type QueryNode = SelectionQueryNode | RootQueryNode;
15
+ export type FilterableNode = Pick<QueryNode, 'filtersSet'>;
16
+ export type Filter = Filters<string>;
@@ -5,3 +5,4 @@ export type NonLinkColumnNames<T> = {
5
5
  export type LinkColumnNames<T> = {
6
6
  [K in keyof T]: T[K] extends LinkColumnType<any> ? K : never;
7
7
  }[keyof T];
8
+ export type ColumnNames<T> = keyof T;
@@ -2,7 +2,7 @@ import { ColumnType, LinkColumnType } from '@taylordb/shared';
2
2
  import { QueryBuilder } from '../query-builder.js';
3
3
  import { AnyDB } from './internal-types.js';
4
4
  import { LinkColumnNames, NonLinkColumnNames } from './query-builder.js';
5
- export type InferDataType<TColumn> = TColumn extends ColumnType<any, any, any, infer D> ? D : never;
5
+ export type InferDataType<TColumn> = TColumn extends ColumnType<infer D, any, any, any> ? D : never;
6
6
  export type TableShape<TTable> = {
7
7
  [K in keyof TTable]: InferDataType<TTable[K]>;
8
8
  };
@@ -11,14 +11,14 @@ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (
11
11
  type InferSubqueryShape<TFunc> = TFunc extends (b: any) => QueryBuilder<any, any, infer SubSelection, infer LinkName> ? {
12
12
  [K in LinkName & string]: SubSelection[];
13
13
  } : object;
14
- export type ResolveSelection<DB extends AnyDB, TName extends keyof DB['tables'], TFields extends readonly any[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
15
- [I in keyof TFields]: TFields[I] extends NonLinkColumnNames<DB['tables'][TName]> ? {
16
- [K in TFields[I]]: InferDataType<DB['tables'][TName][K]>;
14
+ export type ResolveSelection<DB extends AnyDB, TName extends keyof DB, TFields extends readonly any[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
15
+ [I in keyof TFields]: TFields[I] extends NonLinkColumnNames<DB[TName]> ? {
16
+ [K in TFields[I]]: InferDataType<DB[TName][K]>;
17
17
  } : TFields[I] extends (b: any) => QueryBuilder<any, any, any, any> ? InferSubqueryShape<TFields[I]> : object;
18
18
  }[number]>;
19
- export type ResolveWithPlain<DB extends AnyDB, TName extends keyof DB['tables'], TRelations extends (LinkColumnNames<DB['tables'][TName]> & string) | readonly (LinkColumnNames<DB['tables'][TName]> & string)[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
19
+ export type ResolveWithPlain<DB extends AnyDB, TName extends keyof DB, TRelations extends (LinkColumnNames<DB[TName]> & string) | readonly (LinkColumnNames<DB[TName]> & string)[], TCurrentSelection> = TCurrentSelection & UnionToIntersection<{
20
20
  [K in TRelations extends readonly any[] ? TRelations[number] : TRelations]: {
21
- [P in K]: TableShape<DB['tables'][DB['tables'][TName][P] extends LinkColumnType<infer L> ? L : never]>[];
21
+ [P in K]: TableShape<DB[DB[TName][P] extends LinkColumnType<infer L> ? L : never]>[];
22
22
  };
23
23
  }[TRelations extends readonly any[] ? TRelations[number] : TRelations]>;
24
24
  export type ResolveWithObject<TRelations extends Record<string, (qb: any) => QueryBuilder<any, any, any, any>>, TCurrentSelection> = TCurrentSelection & {
@@ -123,5 +123,37 @@ describe('QueryBuilder', () => {
123
123
  },
124
124
  });
125
125
  });
126
+ it('should compile a cross-filter query', () => {
127
+ const { variables } = qb
128
+ .selectFrom('customers')
129
+ .where('orders', 'hasAnyOf', qb => qb.where('amount', '>', 100))
130
+ .compile();
131
+ expect(variables.metadata[0]).toMatchObject({
132
+ type: 'select',
133
+ tableName: 'customers',
134
+ filtersSet: {
135
+ conjunction: 'and',
136
+ filtersSet: [
137
+ {
138
+ field: 'orders',
139
+ operator: 'hasAnyOf',
140
+ value: [
141
+ 'cross-filter',
142
+ {
143
+ conjunction: 'and',
144
+ filtersSet: [
145
+ {
146
+ field: 'amount',
147
+ operator: '>',
148
+ value: 100,
149
+ },
150
+ ],
151
+ },
152
+ ],
153
+ },
154
+ ],
155
+ },
156
+ });
157
+ });
126
158
  });
127
159
  //# sourceMappingURL=query-builder.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.spec.js","sourceRoot":"","sources":["../../../src/__tests__/query-builder.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-builder.spec.js","sourceRoot":"","sources":["../../../src/__tests__/query-builder.spec.ts"],"names":[],"mappings":"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"}
@@ -6,104 +6,98 @@
6
6
  */
7
7
  type IsWithinOperatorValue = 'pastWeek' | 'pastMonth' | 'pastYear' | 'nextWeek' | 'nextMonth' | 'nextYear' | 'daysFromNow' | 'daysAgo' | 'currentWeek' | 'currentMonth' | 'currentYear';
8
8
  type DefaultDateFilterValue = ('today' | 'tomorrow' | 'yesterday' | 'oneWeekAgo' | 'oneWeekFromNow' | 'oneMonthAgo' | 'oneMonthFromNow') | ['exactDay' | 'exactTimestamp', string] | ['daysAgo' | 'daysFromNow', number];
9
- export type Filters = {
10
- text: {
11
- '=': string;
12
- '!=': string;
13
- caseEqual: string;
14
- hasAnyOf: string[];
15
- contains: string;
16
- startsWith: string;
17
- endsWith: string;
18
- doesNotContain: string;
19
- };
20
- number: {
21
- '=': number;
22
- '!=': number;
23
- '>': number;
24
- '>=': number;
25
- '<': number;
26
- '<=': number;
27
- hasAnyOf: number[];
28
- hasNoneOf: number[];
29
- };
30
- checkbox: {
31
- '=': number;
32
- };
33
- link: {
34
- hasAnyOf: number[];
35
- hasAllOf: number[];
36
- isExactly: number[];
37
- '=': number;
38
- hasNoneOf: number[];
39
- };
40
- date: {
41
- '=': DefaultDateFilterValue;
42
- '!=': DefaultDateFilterValue;
43
- '<': DefaultDateFilterValue;
44
- '>': DefaultDateFilterValue;
45
- '<=': DefaultDateFilterValue;
46
- '>=': DefaultDateFilterValue;
47
- isWithIn: IsWithinOperatorValue | {
48
- value: 'daysAgo' | 'daysFromNow';
49
- date: number;
50
- };
51
- isEmpty: boolean;
52
- isNotEmpty: boolean;
53
- };
54
- };
55
- type Aggregates = {
56
- number: {
57
- sum: number;
58
- average: number;
59
- median: number;
60
- min: number | null;
61
- max: number | null;
62
- range: number;
63
- standardDeviation: number;
64
- histogram: Record<string, number>;
65
- empty: number;
66
- filled: number;
67
- unique: number;
68
- percentEmpty: number;
69
- percentFilled: number;
70
- percentUnique: number;
71
- };
72
- date: {
73
- empty: number;
74
- filled: number;
75
- unique: number;
76
- percentEmpty: number;
77
- percentFilled: number;
78
- percentUnique: number;
79
- min: number | null;
80
- max: number | null;
81
- daysRange: number | null;
82
- monthRange: number | null;
83
- };
84
- link: {
85
- empty: number;
86
- filled: number;
87
- percentEmpty: number;
88
- percentFilled: number;
89
- };
90
- };
91
- export type ColumnType<S, U, I, T> = {
9
+ export type ColumnType<S, U, I, T, F extends {
10
+ [key: string]: any;
11
+ } = object, A extends {
12
+ [key: string]: any;
13
+ } = object> = {
92
14
  raw: S;
93
15
  insert: I;
94
16
  update: U;
95
17
  type: T;
18
+ filters: F;
19
+ aggregations: A;
96
20
  };
97
- export type DateColumnType = ColumnType<string | undefined, string | undefined, string | undefined, 'date'>;
98
- export type TextColumnType = ColumnType<string | undefined, string | undefined, string | null, 'text'>;
21
+ export type DateColumnType = ColumnType<string | undefined, string | undefined, string | undefined, 'date', {
22
+ '=': DefaultDateFilterValue;
23
+ '!=': DefaultDateFilterValue;
24
+ '<': DefaultDateFilterValue;
25
+ '>': DefaultDateFilterValue;
26
+ '<=': DefaultDateFilterValue;
27
+ '>=': DefaultDateFilterValue;
28
+ isWithIn: IsWithinOperatorValue | {
29
+ value: 'daysAgo' | 'daysFromNow';
30
+ date: number;
31
+ };
32
+ isEmpty: boolean;
33
+ isNotEmpty: boolean;
34
+ }, {
35
+ empty: number;
36
+ filled: number;
37
+ unique: number;
38
+ percentEmpty: number;
39
+ percentFilled: number;
40
+ percentUnique: number;
41
+ min: number | null;
42
+ max: number | null;
43
+ daysRange: number | null;
44
+ monthRange: number | null;
45
+ }>;
46
+ export type TextColumnType = ColumnType<string | undefined, string | undefined, string | null, 'text', {
47
+ '=': string;
48
+ '!=': string;
49
+ caseEqual: string;
50
+ hasAnyOf: string[];
51
+ contains: string;
52
+ startsWith: string;
53
+ endsWith: string;
54
+ doesNotContain: string;
55
+ }>;
99
56
  export type LinkColumnType<T extends string> = ColumnType<object, number[] | {
100
57
  newIds: number[];
101
58
  deletedIds: number[];
102
- } | undefined, number[] | undefined, 'link'> & {
59
+ } | undefined, number[] | undefined, 'link', {
60
+ hasAnyOf: number[];
61
+ hasAllOf: number[];
62
+ isExactly: number[];
63
+ '=': number;
64
+ hasNoneOf: number[];
65
+ }, {
66
+ empty: number;
67
+ filled: number;
68
+ percentEmpty: number;
69
+ percentFilled: number;
70
+ }> & {
103
71
  linkedTo: T;
104
72
  };
105
- export type NumberColumnType = ColumnType<number | undefined, number | undefined, number | undefined, 'number'>;
106
- export type CheckboxColumnType = ColumnType<boolean | undefined, boolean | undefined, boolean | undefined, 'checkbox'>;
73
+ export type NumberColumnType = ColumnType<number | undefined, number | undefined, number | undefined, 'number', {
74
+ '=': number;
75
+ '!=': number;
76
+ '>': number;
77
+ '>=': number;
78
+ '<': number;
79
+ '<=': number;
80
+ hasAnyOf: number[];
81
+ hasNoneOf: number[];
82
+ }, {
83
+ sum: number;
84
+ average: number;
85
+ median: number;
86
+ min: number | null;
87
+ max: number | null;
88
+ range: number;
89
+ standardDeviation: number;
90
+ histogram: Record<string, number>;
91
+ empty: number;
92
+ filled: number;
93
+ unique: number;
94
+ percentEmpty: number;
95
+ percentFilled: number;
96
+ percentUnique: number;
97
+ }>;
98
+ export type CheckboxColumnType = ColumnType<boolean | undefined, boolean | undefined, boolean | undefined, 'checkbox', {
99
+ '=': number;
100
+ }>;
107
101
  export type SelectTable = {
108
102
  id: NumberColumnType;
109
103
  name: TextColumnType;
@@ -123,7 +117,7 @@ export type CollaboratorsTable = {
123
117
  emailAddress: TextColumnType;
124
118
  avatar: TextColumnType;
125
119
  };
126
- export interface Tables {
120
+ export interface TaylorDatabase {
127
121
  /**
128
122
  *
129
123
  *
@@ -135,11 +129,6 @@ export interface Tables {
135
129
  collaboratorsTable: CollaboratorsTable;
136
130
  customers: CustomersTable;
137
131
  }
138
- export interface TaylorDatabase {
139
- filters: Filters;
140
- aggregates: Aggregates;
141
- tables: Tables;
142
- }
143
132
  interface CustomersTable {
144
133
  id: NumberColumnType;
145
134
  createdAt: DateColumnType;
@@ -2,24 +2,26 @@ import type { AggregateNode, AggregateRecord } from './@types/aggregate.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
- export declare class AggregationQueryBuilder<DB extends AnyDB, TableName extends keyof DB['tables'], TGroupBy extends readonly (keyof DB['tables'][TableName] & string)[] = [], TAggregations extends {
6
- [K in keyof DB['tables'][TableName] & string]?: readonly (keyof DB['aggregates'][DB['tables'][TableName][K]['type']])[];
5
+ export declare class AggregationQueryBuilder<DB extends AnyDB, TableName extends keyof DB, TGroupBy extends readonly (keyof DB[TableName] & string)[] = [], TAggregations extends {
6
+ [K in keyof DB[TableName] & string]?: readonly (keyof DB[TableName][K]['aggregations'])[];
7
7
  } = object> extends FilterableQueryBuilder<DB, TableName> {
8
8
  #private;
9
9
  constructor(node: AggregateNode, executor: Executor);
10
- groupBy<const TField extends keyof DB['tables'][TableName] & string>(field: TField, direction?: 'asc' | 'desc'): AggregationQueryBuilder<DB, TableName, [
10
+ groupBy<const TField extends keyof DB[TableName] & string>(field: TField, direction?: 'asc' | 'desc'): AggregationQueryBuilder<DB, TableName, [
11
11
  ...TGroupBy,
12
12
  TField
13
13
  ], TAggregations>;
14
14
  withAggregates<const T extends {
15
- [K in keyof DB['tables'][TableName] & string]?: readonly (keyof DB['aggregates'][DB['tables'][TableName][K]['type']])[];
15
+ [K in keyof DB[TableName] & string]?: readonly (keyof DB[TableName][K]['aggregations'])[];
16
16
  }>(aggregates: T): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations & T>;
17
17
  limit(count: number): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations>;
18
18
  offset(count: number): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations>;
19
19
  paginate(page: number, limit: number): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations>;
20
- orderBy(field: keyof DB['tables'][TableName], direction?: 'asc' | 'desc'): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations>;
20
+ orderBy(field: keyof DB[TableName], direction?: 'asc' | 'desc'): AggregationQueryBuilder<DB, TableName, TGroupBy, TAggregations>;
21
21
  execute(): Promise<AggregateRecord<DB, TableName, TGroupBy, TAggregations>[]>;
22
- subscribe(callback: (result: AggregateRecord<DB, TableName, TGroupBy, TAggregations>[]) => void): Promise<void>;
22
+ subscribe(callback: (result: AggregateRecord<DB, TableName, TGroupBy, TAggregations>[]) => void): Promise<{
23
+ unsubscribe: () => Promise<void>;
24
+ }>;
23
25
  compile(): {
24
26
  query: string;
25
27
  variables: Record<string, any>;