@uwdata/mosaic-core 0.17.0 → 0.19.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 (178) hide show
  1. package/LICENSE +47 -0
  2. package/README.md +0 -1
  3. package/dist/src/Coordinator.d.ts +159 -0
  4. package/dist/src/Coordinator.d.ts.map +1 -0
  5. package/dist/src/Coordinator.js +250 -0
  6. package/dist/src/Coordinator.js.map +1 -0
  7. package/dist/src/MosaicClient.d.ts +138 -0
  8. package/dist/src/MosaicClient.d.ts.map +1 -0
  9. package/dist/src/MosaicClient.js +214 -0
  10. package/dist/src/MosaicClient.js.map +1 -0
  11. package/dist/src/Param.d.ts +56 -0
  12. package/dist/src/Param.d.ts.map +1 -0
  13. package/dist/src/Param.js +89 -0
  14. package/dist/src/Param.js.map +1 -0
  15. package/dist/src/QueryConsolidator.d.ts +11 -0
  16. package/dist/src/QueryConsolidator.d.ts.map +1 -0
  17. package/dist/src/QueryConsolidator.js +249 -0
  18. package/dist/src/QueryConsolidator.js.map +1 -0
  19. package/dist/src/QueryManager.d.ts +77 -0
  20. package/dist/src/QueryManager.d.ts.map +1 -0
  21. package/dist/src/QueryManager.js +174 -0
  22. package/dist/src/QueryManager.js.map +1 -0
  23. package/dist/src/Selection.d.ts +222 -0
  24. package/dist/src/Selection.d.ts.map +1 -0
  25. package/dist/src/Selection.js +322 -0
  26. package/dist/src/Selection.js.map +1 -0
  27. package/dist/src/SelectionClause.d.ts +222 -0
  28. package/dist/src/SelectionClause.d.ts.map +1 -0
  29. package/dist/src/SelectionClause.js +168 -0
  30. package/dist/src/SelectionClause.js.map +1 -0
  31. package/dist/src/connectors/Connector.d.ts +26 -0
  32. package/dist/src/connectors/Connector.d.ts.map +1 -0
  33. package/dist/src/connectors/Connector.js +2 -0
  34. package/dist/src/connectors/Connector.js.map +1 -0
  35. package/dist/src/connectors/rest.d.ts +24 -0
  36. package/dist/src/connectors/rest.d.ts.map +1 -0
  37. package/dist/src/connectors/rest.js +37 -0
  38. package/dist/src/connectors/rest.js.map +1 -0
  39. package/dist/src/connectors/socket.d.ts +40 -0
  40. package/dist/src/connectors/socket.d.ts.map +1 -0
  41. package/dist/src/connectors/socket.js +115 -0
  42. package/dist/src/connectors/socket.js.map +1 -0
  43. package/dist/src/connectors/wasm.d.ts +56 -0
  44. package/dist/src/connectors/wasm.d.ts.map +1 -0
  45. package/dist/src/connectors/wasm.js +116 -0
  46. package/dist/src/connectors/wasm.js.map +1 -0
  47. package/dist/src/index.d.ts +28 -0
  48. package/dist/src/index.d.ts.map +1 -0
  49. package/{src → dist/src}/index.js +8 -11
  50. package/dist/src/index.js.map +1 -0
  51. package/dist/src/make-client.d.ts +33 -0
  52. package/dist/src/make-client.d.ts.map +1 -0
  53. package/dist/src/make-client.js +52 -0
  54. package/dist/src/make-client.js.map +1 -0
  55. package/dist/src/preagg/PreAggregator.d.ts +150 -0
  56. package/dist/src/preagg/PreAggregator.d.ts.map +1 -0
  57. package/dist/src/preagg/PreAggregator.js +382 -0
  58. package/dist/src/preagg/PreAggregator.js.map +1 -0
  59. package/dist/src/preagg/preagg-columns.d.ts +16 -0
  60. package/dist/src/preagg/preagg-columns.d.ts.map +1 -0
  61. package/dist/src/preagg/preagg-columns.js +95 -0
  62. package/dist/src/preagg/preagg-columns.js.map +1 -0
  63. package/dist/src/preagg/sufficient-statistics.d.ts +14 -0
  64. package/dist/src/preagg/sufficient-statistics.d.ts.map +1 -0
  65. package/dist/src/preagg/sufficient-statistics.js +446 -0
  66. package/dist/src/preagg/sufficient-statistics.js.map +1 -0
  67. package/dist/src/types.d.ts +77 -0
  68. package/dist/src/types.d.ts.map +1 -0
  69. package/dist/src/types.js +2 -0
  70. package/dist/src/types.js.map +1 -0
  71. package/dist/src/util/AsyncDispatch.d.ts +121 -0
  72. package/dist/src/util/AsyncDispatch.d.ts.map +1 -0
  73. package/dist/src/util/AsyncDispatch.js +188 -0
  74. package/dist/src/util/AsyncDispatch.js.map +1 -0
  75. package/dist/src/util/cache.d.ts +19 -0
  76. package/dist/src/util/cache.d.ts.map +1 -0
  77. package/dist/src/util/cache.js +66 -0
  78. package/dist/src/util/cache.js.map +1 -0
  79. package/dist/src/util/decode-ipc.d.ts +12 -0
  80. package/dist/src/util/decode-ipc.d.ts.map +1 -0
  81. package/{src → dist/src}/util/decode-ipc.js +5 -6
  82. package/dist/src/util/decode-ipc.js.map +1 -0
  83. package/dist/src/util/distinct.d.ts +3 -0
  84. package/dist/src/util/distinct.d.ts.map +1 -0
  85. package/dist/src/util/distinct.js +16 -0
  86. package/dist/src/util/distinct.js.map +1 -0
  87. package/dist/src/util/field-info.d.ts +26 -0
  88. package/dist/src/util/field-info.d.ts.map +1 -0
  89. package/dist/src/util/field-info.js +91 -0
  90. package/dist/src/util/field-info.js.map +1 -0
  91. package/dist/src/util/hash.d.ts +2 -0
  92. package/dist/src/util/hash.d.ts.map +1 -0
  93. package/dist/src/util/hash.js +26 -0
  94. package/dist/src/util/hash.js.map +1 -0
  95. package/dist/src/util/is-activatable.d.ts +8 -0
  96. package/dist/src/util/is-activatable.d.ts.map +1 -0
  97. package/dist/src/util/is-activatable.js +10 -0
  98. package/dist/src/util/is-activatable.js.map +1 -0
  99. package/dist/src/util/is-arrow-table.d.ts +9 -0
  100. package/dist/src/util/is-arrow-table.d.ts.map +1 -0
  101. package/dist/src/util/is-arrow-table.js +11 -0
  102. package/dist/src/util/is-arrow-table.js.map +1 -0
  103. package/dist/src/util/js-type.d.ts +9 -0
  104. package/dist/src/util/js-type.d.ts.map +1 -0
  105. package/dist/src/util/js-type.js +59 -0
  106. package/dist/src/util/js-type.js.map +1 -0
  107. package/dist/src/util/priority-queue.d.ts +35 -0
  108. package/dist/src/util/priority-queue.d.ts.map +1 -0
  109. package/dist/src/util/priority-queue.js +81 -0
  110. package/dist/src/util/priority-queue.js.map +1 -0
  111. package/dist/src/util/query-result.d.ts +47 -0
  112. package/dist/src/util/query-result.d.ts.map +1 -0
  113. package/dist/src/util/query-result.js +83 -0
  114. package/dist/src/util/query-result.js.map +1 -0
  115. package/dist/src/util/synchronizer.d.ts +36 -0
  116. package/dist/src/util/synchronizer.d.ts.map +1 -0
  117. package/dist/src/util/synchronizer.js +52 -0
  118. package/dist/src/util/synchronizer.js.map +1 -0
  119. package/dist/src/util/throttle.d.ts +12 -0
  120. package/dist/src/util/throttle.d.ts.map +1 -0
  121. package/dist/src/util/throttle.js +51 -0
  122. package/dist/src/util/throttle.js.map +1 -0
  123. package/dist/src/util/to-data-columns.d.ts +22 -0
  124. package/dist/src/util/to-data-columns.d.ts.map +1 -0
  125. package/dist/src/util/to-data-columns.js +51 -0
  126. package/dist/src/util/to-data-columns.js.map +1 -0
  127. package/dist/src/util/void-logger.d.ts +13 -0
  128. package/dist/src/util/void-logger.d.ts.map +1 -0
  129. package/dist/src/util/void-logger.js +13 -0
  130. package/dist/src/util/void-logger.js.map +1 -0
  131. package/package.json +17 -11
  132. package/src/Coordinator.ts +396 -0
  133. package/src/{MosaicClient.js → MosaicClient.ts} +50 -43
  134. package/src/{Param.js → Param.ts} +29 -28
  135. package/src/{QueryConsolidator.js → QueryConsolidator.ts} +85 -62
  136. package/src/{QueryManager.js → QueryManager.ts} +61 -54
  137. package/src/Selection.ts +391 -0
  138. package/src/SelectionClause.ts +357 -0
  139. package/src/connectors/Connector.ts +6 -6
  140. package/src/connectors/rest.ts +56 -0
  141. package/src/connectors/{socket.js → socket.ts} +53 -42
  142. package/src/connectors/{wasm.js → wasm.ts} +52 -63
  143. package/src/index.ts +42 -0
  144. package/src/make-client.ts +93 -0
  145. package/src/preagg/{PreAggregator.js → PreAggregator.ts} +164 -145
  146. package/src/preagg/{preagg-columns.js → preagg-columns.ts} +27 -24
  147. package/src/preagg/{sufficient-statistics.js → sufficient-statistics.ts} +160 -110
  148. package/src/types.ts +24 -9
  149. package/src/util/{AsyncDispatch.js → AsyncDispatch.ts} +62 -43
  150. package/src/util/{cache.js → cache.ts} +25 -15
  151. package/src/util/decode-ipc.ts +15 -0
  152. package/src/util/{distinct.js → distinct.ts} +3 -3
  153. package/src/util/{field-info.js → field-info.ts} +30 -31
  154. package/src/util/{hash.js → hash.ts} +4 -4
  155. package/src/util/is-activatable.ts +11 -0
  156. package/src/util/is-arrow-table.ts +12 -0
  157. package/src/util/{js-type.js → js-type.ts} +7 -5
  158. package/src/util/{priority-queue.js → priority-queue.ts} +32 -20
  159. package/src/util/{query-result.js → query-result.ts} +24 -17
  160. package/src/util/synchronizer.ts +56 -0
  161. package/src/util/throttle.ts +59 -0
  162. package/src/util/to-data-columns.ts +65 -0
  163. package/src/util/void-logger.ts +23 -0
  164. package/src/Coordinator.js +0 -313
  165. package/src/Selection.js +0 -380
  166. package/src/SelectionClause.js +0 -159
  167. package/src/connectors/rest.js +0 -38
  168. package/src/index-types.ts +0 -5
  169. package/src/make-client.js +0 -101
  170. package/src/util/is-activatable.js +0 -8
  171. package/src/util/is-arrow-table.js +0 -10
  172. package/src/util/selection-types.ts +0 -137
  173. package/src/util/synchronizer.js +0 -47
  174. package/src/util/throttle.js +0 -54
  175. package/src/util/to-data-columns.js +0 -60
  176. package/src/util/void-logger.js +0 -13
  177. package/tsconfig.json +0 -9
  178. package/vitest.config.ts +0 -3
@@ -0,0 +1,28 @@
1
+ export { MosaicClient } from './MosaicClient.js';
2
+ export { makeClient } from './make-client.js';
3
+ export { Coordinator, coordinator } from './Coordinator.js';
4
+ export { Selection, isSelection } from './Selection.js';
5
+ export { Param, isParam } from './Param.js';
6
+ export { Priority } from './QueryManager.js';
7
+ export { restConnector } from './connectors/rest.js';
8
+ export { socketConnector } from './connectors/socket.js';
9
+ export { wasmConnector } from './connectors/wasm.js';
10
+ export { RestConnector } from './connectors/rest.js';
11
+ export { SocketConnector } from './connectors/socket.js';
12
+ export { DuckDBWASMConnector } from './connectors/wasm.js';
13
+ export { clauseInterval, clauseIntervals, clauseList, clausePoint, clausePoints, clauseMatch, clauseMatchAny } from './SelectionClause.js';
14
+ export { decodeIPC } from './util/decode-ipc.js';
15
+ export { distinct } from './util/distinct.js';
16
+ export { isArrowTable } from './util/is-arrow-table.js';
17
+ export { Synchronizer } from './util/synchronizer.js';
18
+ export { throttle } from './util/throttle.js';
19
+ export { toDataColumns } from './util/to-data-columns.js';
20
+ export { queryFieldInfo } from './util/field-info.js';
21
+ export { jsType } from './util/js-type.js';
22
+ export { isActivatable } from './util/is-activatable.js';
23
+ export type { QueryResult } from './util/query-result.js';
24
+ export * from './types.js';
25
+ export type * from './connectors/Connector.js';
26
+ export type * from './Selection.js';
27
+ export type * from './SelectionClause.js';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,cAAc,YAAY,CAAC;AAE3B,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,sBAAsB,CAAC"}
@@ -4,25 +4,22 @@ export { Coordinator, coordinator } from './Coordinator.js';
4
4
  export { Selection, isSelection } from './Selection.js';
5
5
  export { Param, isParam } from './Param.js';
6
6
  export { Priority } from './QueryManager.js';
7
-
7
+ // deprecated in favor of constructors
8
8
  export { restConnector } from './connectors/rest.js';
9
9
  export { socketConnector } from './connectors/socket.js';
10
10
  export { wasmConnector } from './connectors/wasm.js';
11
-
12
- export {
13
- clauseInterval,
14
- clauseIntervals,
15
- clausePoint,
16
- clausePoints,
17
- clauseMatch
18
- } from './SelectionClause.js';
19
-
11
+ export { RestConnector } from './connectors/rest.js';
12
+ export { SocketConnector } from './connectors/socket.js';
13
+ export { DuckDBWASMConnector } from './connectors/wasm.js';
14
+ export { clauseInterval, clauseIntervals, clauseList, clausePoint, clausePoints, clauseMatch, clauseMatchAny } from './SelectionClause.js';
20
15
  export { decodeIPC } from './util/decode-ipc.js';
21
16
  export { distinct } from './util/distinct.js';
22
17
  export { isArrowTable } from './util/is-arrow-table.js';
23
- export { synchronizer } from './util/synchronizer.js';
18
+ export { Synchronizer } from './util/synchronizer.js';
24
19
  export { throttle } from './util/throttle.js';
25
20
  export { toDataColumns } from './util/to-data-columns.js';
26
21
  export { queryFieldInfo } from './util/field-info.js';
27
22
  export { jsType } from './util/js-type.js';
28
23
  export { isActivatable } from './util/is-activatable.js';
24
+ export * from './types.js';
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,sCAAsC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACf,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,cAAc,YAAY,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { Coordinator } from './Coordinator.js';
2
+ import type { Selection } from './Selection.js';
3
+ import type { FilterExpr } from '@uwdata/mosaic-sql';
4
+ import { type ClientQuery, MosaicClient } from './MosaicClient.js';
5
+ export interface MakeClientOptions {
6
+ /** Mosaic coordinator. Defaults to the global coordinator. */
7
+ coordinator?: Coordinator;
8
+ /** A selection whose predicates are fed into the query function to produce the SQL query. */
9
+ selection?: Selection;
10
+ /** A flag (default `true`) indicating if the client should initially be enabled or not. */
11
+ enabled?: boolean;
12
+ /** A flag (default `true`) indicating if client queries can be sped up using pre-aggregated data.
13
+ * Should be set to `false` if filtering changes the groupby domain of the query. */
14
+ filterStable?: boolean;
15
+ /** An async function to prepare the client before running queries. */
16
+ prepare?: () => Promise<void>;
17
+ /** A function that returns a query from a list of selection predicates. */
18
+ query?: (filter: FilterExpr) => ClientQuery;
19
+ /** Called by the coordinator to return a query result. */
20
+ queryResult?: (data: unknown) => void;
21
+ /** Called by the coordinator to inform the client that a query is pending. */
22
+ queryPending?: () => void;
23
+ /** Called by the coordinator to report a query execution error. */
24
+ queryError?: (error: Error) => void;
25
+ }
26
+ /**
27
+ * Make a new client with the given options, and connect the client to the
28
+ * provided coordinator.
29
+ * @param options The options for making the client.
30
+ * @returns The resulting client.
31
+ */
32
+ export declare function makeClient(options: MakeClientOptions): MosaicClient;
33
+ //# sourceMappingURL=make-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-client.d.ts","sourceRoot":"","sources":["../../src/make-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnE,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,6FAA6F;IAC7F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;wFACoF;IACpF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,WAAW,CAAC;IAC5C,0DAA0D;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAQnE"}
@@ -0,0 +1,52 @@
1
+ import { MosaicClient } from './MosaicClient.js';
2
+ import { coordinator as defaultCoordinator } from './Coordinator.js';
3
+ /**
4
+ * Make a new client with the given options, and connect the client to the
5
+ * provided coordinator.
6
+ * @param options The options for making the client.
7
+ * @returns The resulting client.
8
+ */
9
+ export function makeClient(options) {
10
+ const { coordinator = defaultCoordinator(), ...clientOptions } = options;
11
+ const client = new ProxyClient(clientOptions);
12
+ coordinator.connect(client);
13
+ return client;
14
+ }
15
+ /**
16
+ * An internal class used to implement the makeClient API.
17
+ */
18
+ class ProxyClient extends MosaicClient {
19
+ _methods;
20
+ _filterStable;
21
+ /**
22
+ * @param options The options for making the client.
23
+ */
24
+ constructor({ selection = undefined, enabled = true, filterStable = true, ...methods }) {
25
+ super(selection);
26
+ this.enabled = enabled;
27
+ this._methods = methods;
28
+ this._filterStable = filterStable;
29
+ }
30
+ get filterStable() {
31
+ return this._filterStable;
32
+ }
33
+ async prepare() {
34
+ await this._methods.prepare?.();
35
+ }
36
+ query(filter) {
37
+ return this._methods.query?.(filter) ?? null;
38
+ }
39
+ queryResult(data) {
40
+ this._methods.queryResult?.(data);
41
+ return this;
42
+ }
43
+ queryPending() {
44
+ this._methods.queryPending?.();
45
+ return this;
46
+ }
47
+ queryError(error) {
48
+ this._methods.queryError?.(error);
49
+ return this;
50
+ }
51
+ }
52
+ //# sourceMappingURL=make-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-client.js","sourceRoot":"","sources":["../../src/make-client.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAwBrE;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,MAAM,EACJ,WAAW,GAAG,kBAAkB,EAAE,EAClC,GAAG,aAAa,EACjB,GAAG,OAAO,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,WAAY,SAAQ,YAAY;IACnB,QAAQ,CAAoF;IAC5F,aAAa,CAAU;IAExC;;OAEG;IACH,YAAY,EACV,SAAS,GAAG,SAAS,EACrB,OAAO,GAAG,IAAI,EACd,YAAY,GAAG,IAAI,EACnB,GAAG,OAAO,EAC6B;QACvC,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAkB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,IAAa;QACvB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,KAAY;QACrB,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,150 @@
1
+ import { ExprNode, SelectQuery, MaybeArray } from '@uwdata/mosaic-sql';
2
+ import type { Coordinator } from '../Coordinator.js';
3
+ import type { MosaicClient } from '../MosaicClient.js';
4
+ import type { Selection } from '../Selection.js';
5
+ import type { ClauseSource, SelectionClause } from '../SelectionClause.js';
6
+ declare const Skip: {
7
+ skip: boolean;
8
+ result: null;
9
+ };
10
+ export interface PreAggregateOptions {
11
+ /** Database schema (namespace) in which to write pre-aggregated materialized views (default 'mosaic'). */
12
+ schema?: string;
13
+ /** Flag to enable or disable the pre-aggregation. This flag can be updated later via the `enabled` property. */
14
+ enabled?: boolean;
15
+ }
16
+ type ActivePredicate = (p?: ExprNode) => MaybeArray<ExprNode> | undefined;
17
+ interface ActiveColumnsResult {
18
+ source: ClauseSource | null;
19
+ columns?: Record<string, ExprNode>;
20
+ predicate?: ActivePredicate;
21
+ }
22
+ interface PreAggregateInfoOptions {
23
+ table: string;
24
+ create: string;
25
+ active: ActiveColumnsResult;
26
+ select: SelectQuery;
27
+ }
28
+ /**
29
+ * Build and query optimized pre-aggregated materaialized views, for fast
30
+ * computation of groupby aggregate queries over compatible client queries
31
+ * and selections. The materialized views contains pre-aggregated data for a
32
+ * Mosaic client, subdivided by possible query values from an active selection
33
+ * clause. These materialized views are database tables that can be queried
34
+ * for rapid updates.
35
+ *
36
+ * Compatible client queries must consist of only groupby dimensions and
37
+ * supported aggregate functions. Compatible selections must contain an active
38
+ * clause that exposes metadata for an interval or point value predicate.
39
+ *
40
+ * Materialized views are written to a dedicated schema (namespace) that
41
+ * can be set using the *schema* constructor option. This schema acts as a
42
+ * persistent cache, and materialized view tables may be used across sessions.
43
+ * The `dropSchema` method issues a query to remove *all* tables within this
44
+ * schema. This may be needed if the original tables have updated data, but
45
+ * should be used with care.
46
+ */
47
+ export declare class PreAggregator {
48
+ entries: Map<MosaicClient, PreAggregateInfo | typeof Skip | null>;
49
+ private active;
50
+ private mc;
51
+ private _schema;
52
+ private _enabled;
53
+ /**
54
+ * Create a new manager of materialized views of pre-aggregated data.
55
+ * @param coordinator A Mosaic coordinator.
56
+ * @param options Pre-aggregation options.
57
+ */
58
+ constructor(coordinator: Coordinator, { schema, enabled }?: PreAggregateOptions);
59
+ /**
60
+ * Set the enabled state of this manager. If false, any local state is
61
+ * cleared and subsequent request calls will return null until re-enabled.
62
+ * This method has no effect on any pre-aggregated tables already in the
63
+ * database.
64
+ * @param state The enabled state to set.
65
+ */
66
+ set enabled(state: boolean);
67
+ /**
68
+ * Get the enabled state of this manager.
69
+ * @returns The current enabled state.
70
+ */
71
+ get enabled(): boolean;
72
+ /**
73
+ * Set the database schema used for pre-aggregated materialized view tables.
74
+ * Upon changes, any local state is cleared. This method does _not_ drop any
75
+ * existing materialized views, use `dropSchema` before changing the schema
76
+ * to also remove existing materalized views in the database.
77
+ * @param schema The schema name to set.
78
+ */
79
+ set schema(schema: string);
80
+ /**
81
+ * Get the database schema used for pre-aggregated materialized view tables.
82
+ * @returns The current schema name.
83
+ */
84
+ get schema(): string;
85
+ /**
86
+ * Issues a query through the coordinator to drop the current schema for
87
+ * pre-aggregated materialized views. *All* materialized view tables in the
88
+ * schema will be removed and local state is cleared. Call this method if
89
+ * the underlying base tables have been updated, causing materialized view
90
+ * to become stale and inaccurate. Use this method with care! Once dropped,
91
+ * the schema will be repopulated by future pre-aggregation requests.
92
+ * @returns A query result promise.
93
+ */
94
+ dropSchema(): Promise<unknown>;
95
+ /**
96
+ * Clear the cache of pre-aggregation entries for the current active
97
+ * selection clause. This method does _not_ drop any existing materialized
98
+ * views. Use `dropSchema` to remove existing materialized view tables from
99
+ * the database.
100
+ */
101
+ clear(): void;
102
+ /**
103
+ * Return pre-aggregation information for the active state of a
104
+ * client-selection pair, or null if the client has unstable filters.
105
+ * This method has multiple possible side effects, including materialized
106
+ * view creation and updating internal caches.
107
+ * @param client A Mosaic client.
108
+ * @param selection A Mosaic selection to filter the client by.
109
+ * @param activeClause A representative active selection
110
+ * clause for which to generate materialized views of pre-aggregates.
111
+ * @returns Information and query generator
112
+ * for pre-aggregated tables, or null if the client has unstable filters.
113
+ */
114
+ request(client: MosaicClient, selection: Selection, activeClause: SelectionClause | null): PreAggregateInfo | typeof Skip | null;
115
+ }
116
+ /**
117
+ * Metadata and query generator for materialized views of pre-aggregated data.
118
+ * This object provides the information needed to generate and query the
119
+ * materialized views for a client-selection pair relative to a specific
120
+ * active clause and selection state.
121
+ */
122
+ export declare class PreAggregateInfo {
123
+ /** The name of the materialized view. */
124
+ table: string;
125
+ /** The SQL query used to generate the materialized view. */
126
+ create: string;
127
+ /** A result promise returned for the materialized view creation query. */
128
+ result: Promise<unknown> | null;
129
+ /** Definitions and predicate function for the active columns,
130
+ * which are dynamically filtered by the active clause. */
131
+ active: ActiveColumnsResult;
132
+ /** Select query (sans where clause) for materialized views. */
133
+ select: SelectQuery;
134
+ /** Boolean flag indicating a client that should be skipped.
135
+ * This value is always false for a created materialized view. */
136
+ skip: boolean;
137
+ /**
138
+ * Create a new pre-aggregation information instance.
139
+ * @param options Options object.
140
+ */
141
+ constructor({ table, create, active, select }: PreAggregateInfoOptions);
142
+ /**
143
+ * Generate a materialized view query for the given predicate.
144
+ * @param predicate The current active clause predicate.
145
+ * @returns A materialized view query.
146
+ */
147
+ query(predicate: ExprNode): SelectQuery;
148
+ }
149
+ export {};
150
+ //# sourceMappingURL=PreAggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PreAggregator.d.ts","sourceRoot":"","sources":["../../../src/preagg/PreAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,WAAW,EAAoB,UAAU,EAAwC,MAAM,oBAAoB,CAAC;AAC7I,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAa,YAAY,EAAoB,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxG,QAAA,MAAM,IAAI;;;CAA+B,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,0GAA0G;IAC1G,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gHAAgH;IAChH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,eAAe,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,UAAU,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;AAE1E,UAAU,mBAAmB;IAC3B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACjB,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;IACzE,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAU;IAE1B;;;;OAIG;gBACS,WAAW,EAAE,WAAW,EAAE,EACpC,MAAiB,EACjB,OAAc,EACf,GAAE,mBAAwB;IAQ3B;;;;;;OAMG;IACH,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAKzB;IAED;;;OAGG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;OAMG;IACH,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAKxB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;;;;;;OAQG;IACH,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAK9B;;;;;OAKG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,GAAG,IAAI,GAAG,gBAAgB,GAAG,OAAO,IAAI,GAAG,IAAI;CAoEjI;AA8LD;;;;;GAKG;AACH,qBAAa,gBAAgB;IAC3B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChC;8DAC0D;IAC1D,MAAM,EAAE,mBAAmB,CAAC;IAC5B,+DAA+D;IAC/D,MAAM,EAAE,WAAW,CAAC;IACpB;qEACiE;IACjE,IAAI,EAAE,OAAO,CAAC;IAEd;;;OAGG;gBACS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,uBAAuB;IAStE;;;;OAIG;IACH,KAAK,CAAC,SAAS,EAAE,QAAQ,GAAG,WAAW;CAGxC"}