@hypequery/clickhouse 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -14
- package/dist/cli/generate-types.js +5 -12
- package/dist/core/adapters/clickhouse-adapter.d.ts +14 -0
- package/dist/core/adapters/clickhouse-adapter.d.ts.map +1 -0
- package/dist/core/adapters/clickhouse-adapter.js +58 -0
- package/dist/core/adapters/database-adapter.d.ts +13 -0
- package/dist/core/adapters/database-adapter.d.ts.map +1 -0
- package/dist/core/adapters/database-adapter.js +1 -0
- package/dist/core/cache/cache-manager.d.ts.map +1 -1
- package/dist/core/cache/cache-manager.js +6 -5
- package/dist/core/dialects/clickhouse-dialect.d.ts +10 -0
- package/dist/core/dialects/clickhouse-dialect.d.ts.map +1 -0
- package/dist/core/dialects/clickhouse-dialect.js +47 -0
- package/dist/core/dialects/sql-dialect.d.ts +11 -0
- package/dist/core/dialects/sql-dialect.d.ts.map +1 -0
- package/dist/core/dialects/sql-dialect.js +1 -0
- package/dist/core/features/aggregations.d.ts +5 -5
- package/dist/core/features/analytics.d.ts +804 -5
- package/dist/core/features/analytics.d.ts.map +1 -1
- package/dist/core/features/analytics.js +6 -9
- package/dist/core/features/executor.d.ts.map +1 -1
- package/dist/core/features/executor.js +26 -53
- package/dist/core/features/filtering.d.ts +5 -5
- package/dist/core/features/joins.d.ts +1 -1
- package/dist/core/features/query-modifiers.d.ts +6 -6
- package/dist/core/query-builder.d.ts +17 -6
- package/dist/core/query-builder.d.ts.map +1 -1
- package/dist/core/query-builder.js +25 -32
- package/dist/core/tests/integration/setup.d.ts +3 -1
- package/dist/core/tests/integration/setup.d.ts.map +1 -1
- package/dist/core/tests/test-utils.d.ts.map +1 -1
- package/dist/core/tests/test-utils.js +12 -2
- package/dist/core/types/select-types.d.ts +1 -1
- package/dist/core/types/select-types.d.ts.map +1 -1
- package/dist/core/utils/streaming-helpers.d.ts.map +1 -1
- package/dist/core/utils/streaming-helpers.js +8 -0
- package/dist/core/utils.d.ts.map +1 -1
- package/dist/core/utils.js +3 -0
- package/dist/dataset/definition.d.ts +135 -0
- package/dist/dataset/definition.d.ts.map +1 -0
- package/dist/dataset/definition.js +265 -0
- package/dist/dataset/helpers.d.ts +136 -0
- package/dist/dataset/helpers.d.ts.map +1 -0
- package/dist/dataset/helpers.js +189 -0
- package/dist/dataset/index.d.ts +51 -0
- package/dist/dataset/index.d.ts.map +1 -0
- package/dist/dataset/index.js +59 -0
- package/dist/dataset/introspection.d.ts +133 -0
- package/dist/dataset/introspection.d.ts.map +1 -0
- package/dist/dataset/introspection.js +239 -0
- package/dist/dataset/sql-tag.d.ts +51 -0
- package/dist/dataset/sql-tag.d.ts.map +1 -0
- package/dist/dataset/sql-tag.js +86 -0
- package/dist/dataset/types.d.ts +300 -0
- package/dist/dataset/types.d.ts.map +1 -0
- package/dist/dataset/types.js +11 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -15
- package/dist/migrations/config/index.d.ts +3 -0
- package/dist/migrations/config/index.d.ts.map +1 -0
- package/dist/migrations/config/index.js +1 -0
- package/dist/migrations/config/types.d.ts +45 -0
- package/dist/migrations/config/types.d.ts.map +1 -0
- package/dist/migrations/config/types.js +28 -0
- package/dist/migrations/diff/diff.d.ts +11 -0
- package/dist/migrations/diff/diff.d.ts.map +1 -0
- package/dist/migrations/diff/diff.js +240 -0
- package/dist/migrations/diff/index.d.ts +3 -0
- package/dist/migrations/diff/index.d.ts.map +1 -0
- package/dist/migrations/diff/index.js +1 -0
- package/dist/migrations/diff/types.d.ts +74 -0
- package/dist/migrations/diff/types.d.ts.map +1 -0
- package/dist/migrations/diff/types.js +1 -0
- package/dist/migrations/schema/column.d.ts +71 -0
- package/dist/migrations/schema/column.d.ts.map +1 -0
- package/dist/migrations/schema/column.js +123 -0
- package/dist/migrations/schema/define.d.ts +24 -0
- package/dist/migrations/schema/define.d.ts.map +1 -0
- package/dist/migrations/schema/define.js +47 -0
- package/dist/migrations/schema/index.d.ts +4 -0
- package/dist/migrations/schema/index.d.ts.map +1 -0
- package/dist/migrations/schema/index.js +2 -0
- package/dist/migrations/schema/types.d.ts +74 -0
- package/dist/migrations/schema/types.d.ts.map +1 -0
- package/dist/migrations/schema/types.js +1 -0
- package/dist/migrations/snapshot/index.d.ts +3 -0
- package/dist/migrations/snapshot/index.d.ts.map +1 -0
- package/dist/migrations/snapshot/index.js +1 -0
- package/dist/migrations/snapshot/serialize.d.ts +21 -0
- package/dist/migrations/snapshot/serialize.d.ts.map +1 -0
- package/dist/migrations/snapshot/serialize.js +127 -0
- package/dist/migrations/snapshot/types.d.ts +47 -0
- package/dist/migrations/snapshot/types.d.ts.map +1 -0
- package/dist/migrations/snapshot/types.js +1 -0
- package/dist/migrations/sql/index.d.ts +4 -0
- package/dist/migrations/sql/index.d.ts.map +1 -0
- package/dist/migrations/sql/index.js +2 -0
- package/dist/migrations/sql/render.d.ts +11 -0
- package/dist/migrations/sql/render.d.ts.map +1 -0
- package/dist/migrations/sql/render.js +334 -0
- package/dist/migrations/sql/types.d.ts +48 -0
- package/dist/migrations/sql/types.d.ts.map +1 -0
- package/dist/migrations/sql/types.js +1 -0
- package/dist/migrations/sql/write.d.ts +9 -0
- package/dist/migrations/sql/write.d.ts.map +1 -0
- package/dist/migrations/sql/write.js +31 -0
- package/dist/types/base.d.ts +2 -1
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/clickhouse-types.d.ts +3 -1
- package/dist/types/clickhouse-types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-types.d.ts","sourceRoot":"","sources":["../../../src/core/types/select-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAElE,KAAK,gBAAgB,CAAC,KAAK,SAAS,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;AAEhF,KAAK,mBAAmB,CAAC,KAAK,SAAS,eAAe,EAAE,KAAK,SAAS,MAAM,IAC1E,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACjE,GAAG,KAAK,IAAI,OAAO,CAAC,MAAM,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,GACrE,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,CAAC,KAAK,SAAS,eAAe,IAAI;KAC9D,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC;CACtE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;AAE3B,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,eAAe,IAAI,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;AACjF,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,eAAe,IAAI,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;AACpF,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,eAAe,IAAI,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;AAErF,MAAM,MAAM,gBAAgB,CAAC,KAAK,SAAS,eAAe,IACtD,gBAAgB,CAAC,KAAK,CAAC,GACvB,gBAAgB,CAAC,KAAK,CAAC,GACvB,cAAc,CAAC,KAAK,CAAC,GACrB,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAE/B,KAAK,sBAAsB,CAAC,KAAK,SAAS,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACtG,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,KAAK,mBAAmB,CAAC,KAAK,SAAS,eAAe,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;AAEpH,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,eAAe,IACpD,gBAAgB,CAAC,KAAK,CAAC,GACvB,mBAAmB,CAAC,KAAK,CAAC,GAC1B,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"select-types.d.ts","sourceRoot":"","sources":["../../../src/core/types/select-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/utils/streaming-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"streaming-helpers.d.ts","sourceRoot":"","sources":["../../../src/core/utils/streaming-helpers.ts"],"names":[],"mappings":"AA8IA,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,CAwCnH"}
|
|
@@ -47,6 +47,14 @@ async function normalizeChunk(chunk, flush, append) {
|
|
|
47
47
|
append(chunk);
|
|
48
48
|
return flush();
|
|
49
49
|
}
|
|
50
|
+
if (chunk instanceof Uint8Array) {
|
|
51
|
+
append(Buffer.from(chunk));
|
|
52
|
+
return flush();
|
|
53
|
+
}
|
|
54
|
+
if (chunk instanceof ArrayBuffer) {
|
|
55
|
+
append(Buffer.from(chunk));
|
|
56
|
+
return flush();
|
|
57
|
+
}
|
|
50
58
|
if (typeof chunk === 'string') {
|
|
51
59
|
append(chunk);
|
|
52
60
|
return flush();
|
package/dist/core/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAa9C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAa9C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAgBvE"}
|
package/dist/core/utils.js
CHANGED
|
@@ -16,6 +16,9 @@ export function escapeValue(value) {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
export function substituteParameters(sql, params) {
|
|
19
|
+
if (!params.length) {
|
|
20
|
+
return sql;
|
|
21
|
+
}
|
|
19
22
|
const parts = sql.split('?');
|
|
20
23
|
if (parts.length - 1 !== params.length) {
|
|
21
24
|
throw new Error(`Mismatch between placeholders and parameters. Found ${parts.length - 1} placeholders but ${params.length} parameters.`);
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset Definition Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for creating and managing dataset definitions:
|
|
5
|
+
* - Dataset validation
|
|
6
|
+
* - Dimension/metric normalization
|
|
7
|
+
* - Type inference helpers
|
|
8
|
+
*/
|
|
9
|
+
import type { DatasetDefinition, DatasetsMap, DimensionsMap, Dimension, DimensionDefinition, DimensionType } from './types.js';
|
|
10
|
+
import { type SQLExpression } from './sql-tag.js';
|
|
11
|
+
/**
|
|
12
|
+
* Validate a complete dataset definition
|
|
13
|
+
*
|
|
14
|
+
* @param name - Dataset name
|
|
15
|
+
* @param definition - Dataset definition
|
|
16
|
+
* @throws Error if validation fails
|
|
17
|
+
*/
|
|
18
|
+
export declare function validateDatasetDefinition(name: string, definition: DatasetDefinition): void;
|
|
19
|
+
/**
|
|
20
|
+
* Validate all datasets in a datasets map
|
|
21
|
+
*
|
|
22
|
+
* @param datasets - Map of dataset definitions
|
|
23
|
+
* @throws Error if any dataset is invalid
|
|
24
|
+
*/
|
|
25
|
+
export declare function validateDatasets(datasets: DatasetsMap): void;
|
|
26
|
+
/**
|
|
27
|
+
* Normalize a dimension definition to full DimensionDefinition object
|
|
28
|
+
*
|
|
29
|
+
* @param dimension - Dimension definition (simple or complex)
|
|
30
|
+
* @returns Normalized DimensionDefinition
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeDimension(dimension: Dimension): DimensionDefinition;
|
|
33
|
+
/**
|
|
34
|
+
* Normalize all dimensions in a dimensions map
|
|
35
|
+
*
|
|
36
|
+
* @param dimensions - Map of dimension definitions
|
|
37
|
+
* @returns Map of normalized dimension definitions
|
|
38
|
+
*/
|
|
39
|
+
export declare function normalizeDimensions(dimensions: DimensionsMap): Record<string, DimensionDefinition>;
|
|
40
|
+
/**
|
|
41
|
+
* Infer the TypeScript type from a dimension definition
|
|
42
|
+
*
|
|
43
|
+
* @param dimension - Dimension definition
|
|
44
|
+
* @returns Inferred type name
|
|
45
|
+
*/
|
|
46
|
+
export declare function inferDimensionType(dimension: Dimension): DimensionType;
|
|
47
|
+
/**
|
|
48
|
+
* Get the SQL string from a dimension definition
|
|
49
|
+
*
|
|
50
|
+
* @param dimension - Dimension definition
|
|
51
|
+
* @returns SQL string
|
|
52
|
+
*/
|
|
53
|
+
export declare function getDimensionSQL(dimension: Dimension): string;
|
|
54
|
+
/**
|
|
55
|
+
* Get the SQL string from a metric definition
|
|
56
|
+
*
|
|
57
|
+
* @param metric - Metric definition
|
|
58
|
+
* @returns SQL string
|
|
59
|
+
*/
|
|
60
|
+
export declare function getMetricSQL(metric: {
|
|
61
|
+
sql: string | SQLExpression;
|
|
62
|
+
}): string;
|
|
63
|
+
/**
|
|
64
|
+
* Get a dataset definition by name
|
|
65
|
+
*
|
|
66
|
+
* @param datasets - Map of dataset definitions
|
|
67
|
+
* @param name - Dataset name
|
|
68
|
+
* @returns Dataset definition
|
|
69
|
+
* @throws Error if dataset not found
|
|
70
|
+
*/
|
|
71
|
+
export declare function getDataset(datasets: DatasetsMap, name: string): DatasetDefinition;
|
|
72
|
+
/**
|
|
73
|
+
* List all dataset names
|
|
74
|
+
*
|
|
75
|
+
* @param datasets - Map of dataset definitions
|
|
76
|
+
* @returns Array of dataset names
|
|
77
|
+
*/
|
|
78
|
+
export declare function listDatasets(datasets: DatasetsMap): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Check if a dataset exists
|
|
81
|
+
*
|
|
82
|
+
* @param datasets - Map of dataset definitions
|
|
83
|
+
* @param name - Dataset name
|
|
84
|
+
* @returns True if dataset exists
|
|
85
|
+
*/
|
|
86
|
+
export declare function hasDataset(datasets: DatasetsMap, name: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Get dimension names for a dataset
|
|
89
|
+
*
|
|
90
|
+
* @param dataset - Dataset definition
|
|
91
|
+
* @returns Array of dimension names
|
|
92
|
+
*/
|
|
93
|
+
export declare function getDimensionNames(dataset: DatasetDefinition): string[];
|
|
94
|
+
/**
|
|
95
|
+
* Get metric names for a dataset
|
|
96
|
+
*
|
|
97
|
+
* @param dataset - Dataset definition
|
|
98
|
+
* @returns Array of metric names
|
|
99
|
+
*/
|
|
100
|
+
export declare function getMetricNames(dataset: DatasetDefinition): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Check if a dimension exists in a dataset
|
|
103
|
+
*
|
|
104
|
+
* @param dataset - Dataset definition
|
|
105
|
+
* @param dimensionName - Dimension name
|
|
106
|
+
* @returns True if dimension exists
|
|
107
|
+
*/
|
|
108
|
+
export declare function hasDimension(dataset: DatasetDefinition, dimensionName: string): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Check if a metric exists in a dataset
|
|
111
|
+
*
|
|
112
|
+
* @param dataset - Dataset definition
|
|
113
|
+
* @param metricName - Metric name
|
|
114
|
+
* @returns True if metric exists
|
|
115
|
+
*/
|
|
116
|
+
export declare function hasMetric(dataset: DatasetDefinition, metricName: string): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Get a dimension definition from a dataset
|
|
119
|
+
*
|
|
120
|
+
* @param dataset - Dataset definition
|
|
121
|
+
* @param dimensionName - Dimension name
|
|
122
|
+
* @returns Normalized dimension definition
|
|
123
|
+
* @throws Error if dimension not found
|
|
124
|
+
*/
|
|
125
|
+
export declare function getDimension(dataset: DatasetDefinition, dimensionName: string): DimensionDefinition;
|
|
126
|
+
/**
|
|
127
|
+
* Get a metric definition from a dataset
|
|
128
|
+
*
|
|
129
|
+
* @param dataset - Dataset definition
|
|
130
|
+
* @param metricName - Metric name
|
|
131
|
+
* @returns Metric definition
|
|
132
|
+
* @throws Error if metric not found
|
|
133
|
+
*/
|
|
134
|
+
export declare function getMetric(dataset: DatasetDefinition, metricName: string): import("./types.js").MetricDefinition;
|
|
135
|
+
//# sourceMappingURL=definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/dataset/definition.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAUhF;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,GAC5B,IAAI,CA8EN;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAU5D;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,mBAAmB,CAqB5E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,aAAa,GACxB,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAQrC;AAMD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,CAGtE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAG5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAC7B,GAAG,MAAM,CAET;AAMD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,MAAM,GACX,iBAAiB,CAWnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,EAAE,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAET;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,GACjB,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAC1B,aAAa,EAAE,MAAM,GACpB,mBAAmB,CASrB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,MAAM,yCAUnB"}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset Definition Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for creating and managing dataset definitions:
|
|
5
|
+
* - Dataset validation
|
|
6
|
+
* - Dimension/metric normalization
|
|
7
|
+
* - Type inference helpers
|
|
8
|
+
*/
|
|
9
|
+
import { isSQLExpression, toSQLString } from './sql-tag.js';
|
|
10
|
+
import { validateDimensionDefinition, validateMetricDefinition, } from './helpers.js';
|
|
11
|
+
// =============================================================================
|
|
12
|
+
// DATASET VALIDATION
|
|
13
|
+
// =============================================================================
|
|
14
|
+
/**
|
|
15
|
+
* Validate a complete dataset definition
|
|
16
|
+
*
|
|
17
|
+
* @param name - Dataset name
|
|
18
|
+
* @param definition - Dataset definition
|
|
19
|
+
* @throws Error if validation fails
|
|
20
|
+
*/
|
|
21
|
+
export function validateDatasetDefinition(name, definition) {
|
|
22
|
+
// Validate required fields
|
|
23
|
+
if (!definition.name) {
|
|
24
|
+
throw new Error(`Dataset '${name}' is missing 'name' property.`);
|
|
25
|
+
}
|
|
26
|
+
if (!definition.description) {
|
|
27
|
+
console.warn(`⚠️ Dataset '${name}' is missing 'description'. ` +
|
|
28
|
+
`Descriptions help AI agents understand your data.`);
|
|
29
|
+
}
|
|
30
|
+
if (!definition.table) {
|
|
31
|
+
throw new Error(`Dataset '${name}' is missing 'table' property.`);
|
|
32
|
+
}
|
|
33
|
+
// Validate dimensions
|
|
34
|
+
if (!definition.dimensions || Object.keys(definition.dimensions).length === 0) {
|
|
35
|
+
throw new Error(`Dataset '${name}' must have at least one dimension. ` +
|
|
36
|
+
`Dimensions define the grouping keys for your data.`);
|
|
37
|
+
}
|
|
38
|
+
for (const [dimName, dimDef] of Object.entries(definition.dimensions)) {
|
|
39
|
+
validateDimensionDefinition(dimName, dimDef);
|
|
40
|
+
}
|
|
41
|
+
// Validate metrics
|
|
42
|
+
if (!definition.metrics || Object.keys(definition.metrics).length === 0) {
|
|
43
|
+
throw new Error(`Dataset '${name}' must have at least one metric. ` +
|
|
44
|
+
`Metrics define the aggregations for your data.`);
|
|
45
|
+
}
|
|
46
|
+
for (const [metricName, metricDef] of Object.entries(definition.metrics)) {
|
|
47
|
+
validateMetricDefinition(metricName, metricDef);
|
|
48
|
+
}
|
|
49
|
+
// Validate tenant config
|
|
50
|
+
if (definition.tenant) {
|
|
51
|
+
if (!definition.tenant.column) {
|
|
52
|
+
throw new Error(`Dataset '${name}' tenant config is missing 'column' property.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Validate limits
|
|
56
|
+
if (definition.limits) {
|
|
57
|
+
const limits = definition.limits;
|
|
58
|
+
if (limits.maxDimensions !== undefined && limits.maxDimensions < 1) {
|
|
59
|
+
throw new Error(`Dataset '${name}' limits.maxDimensions must be at least 1.`);
|
|
60
|
+
}
|
|
61
|
+
if (limits.maxMetrics !== undefined && limits.maxMetrics < 1) {
|
|
62
|
+
throw new Error(`Dataset '${name}' limits.maxMetrics must be at least 1.`);
|
|
63
|
+
}
|
|
64
|
+
if (limits.maxFilters !== undefined && limits.maxFilters < 0) {
|
|
65
|
+
throw new Error(`Dataset '${name}' limits.maxFilters must be non-negative.`);
|
|
66
|
+
}
|
|
67
|
+
if (limits.maxResultSize !== undefined && limits.maxResultSize < 1) {
|
|
68
|
+
throw new Error(`Dataset '${name}' limits.maxResultSize must be at least 1.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Validate all datasets in a datasets map
|
|
74
|
+
*
|
|
75
|
+
* @param datasets - Map of dataset definitions
|
|
76
|
+
* @throws Error if any dataset is invalid
|
|
77
|
+
*/
|
|
78
|
+
export function validateDatasets(datasets) {
|
|
79
|
+
if (!datasets || Object.keys(datasets).length === 0) {
|
|
80
|
+
throw new Error('No datasets defined. Please define at least one dataset.');
|
|
81
|
+
}
|
|
82
|
+
for (const [name, definition] of Object.entries(datasets)) {
|
|
83
|
+
validateDatasetDefinition(name, definition);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// =============================================================================
|
|
87
|
+
// DIMENSION NORMALIZATION
|
|
88
|
+
// =============================================================================
|
|
89
|
+
/**
|
|
90
|
+
* Normalize a dimension definition to full DimensionDefinition object
|
|
91
|
+
*
|
|
92
|
+
* @param dimension - Dimension definition (simple or complex)
|
|
93
|
+
* @returns Normalized DimensionDefinition
|
|
94
|
+
*/
|
|
95
|
+
export function normalizeDimension(dimension) {
|
|
96
|
+
// Simple string column reference
|
|
97
|
+
if (typeof dimension === 'string') {
|
|
98
|
+
return {
|
|
99
|
+
sql: dimension,
|
|
100
|
+
type: 'string', // Default type for simple columns
|
|
101
|
+
description: '', // Empty description (should be filled by user)
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// SQLExpression
|
|
105
|
+
if (isSQLExpression(dimension)) {
|
|
106
|
+
return {
|
|
107
|
+
sql: dimension,
|
|
108
|
+
type: 'string', // Default type for SQL expressions
|
|
109
|
+
description: '', // Empty description (should be filled by user)
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
// Already a full DimensionDefinition
|
|
113
|
+
return dimension;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Normalize all dimensions in a dimensions map
|
|
117
|
+
*
|
|
118
|
+
* @param dimensions - Map of dimension definitions
|
|
119
|
+
* @returns Map of normalized dimension definitions
|
|
120
|
+
*/
|
|
121
|
+
export function normalizeDimensions(dimensions) {
|
|
122
|
+
const normalized = {};
|
|
123
|
+
for (const [name, dimension] of Object.entries(dimensions)) {
|
|
124
|
+
normalized[name] = normalizeDimension(dimension);
|
|
125
|
+
}
|
|
126
|
+
return normalized;
|
|
127
|
+
}
|
|
128
|
+
// =============================================================================
|
|
129
|
+
// TYPE INFERENCE HELPERS
|
|
130
|
+
// =============================================================================
|
|
131
|
+
/**
|
|
132
|
+
* Infer the TypeScript type from a dimension definition
|
|
133
|
+
*
|
|
134
|
+
* @param dimension - Dimension definition
|
|
135
|
+
* @returns Inferred type name
|
|
136
|
+
*/
|
|
137
|
+
export function inferDimensionType(dimension) {
|
|
138
|
+
const normalized = normalizeDimension(dimension);
|
|
139
|
+
return normalized.type;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get the SQL string from a dimension definition
|
|
143
|
+
*
|
|
144
|
+
* @param dimension - Dimension definition
|
|
145
|
+
* @returns SQL string
|
|
146
|
+
*/
|
|
147
|
+
export function getDimensionSQL(dimension) {
|
|
148
|
+
const normalized = normalizeDimension(dimension);
|
|
149
|
+
return toSQLString(normalized.sql);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get the SQL string from a metric definition
|
|
153
|
+
*
|
|
154
|
+
* @param metric - Metric definition
|
|
155
|
+
* @returns SQL string
|
|
156
|
+
*/
|
|
157
|
+
export function getMetricSQL(metric) {
|
|
158
|
+
return toSQLString(metric.sql);
|
|
159
|
+
}
|
|
160
|
+
// =============================================================================
|
|
161
|
+
// DATASET UTILITIES
|
|
162
|
+
// =============================================================================
|
|
163
|
+
/**
|
|
164
|
+
* Get a dataset definition by name
|
|
165
|
+
*
|
|
166
|
+
* @param datasets - Map of dataset definitions
|
|
167
|
+
* @param name - Dataset name
|
|
168
|
+
* @returns Dataset definition
|
|
169
|
+
* @throws Error if dataset not found
|
|
170
|
+
*/
|
|
171
|
+
export function getDataset(datasets, name) {
|
|
172
|
+
const dataset = datasets[name];
|
|
173
|
+
if (!dataset) {
|
|
174
|
+
throw new Error(`Dataset '${name}' not found. ` +
|
|
175
|
+
`Available datasets: ${Object.keys(datasets).join(', ')}`);
|
|
176
|
+
}
|
|
177
|
+
return dataset;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* List all dataset names
|
|
181
|
+
*
|
|
182
|
+
* @param datasets - Map of dataset definitions
|
|
183
|
+
* @returns Array of dataset names
|
|
184
|
+
*/
|
|
185
|
+
export function listDatasets(datasets) {
|
|
186
|
+
return Object.keys(datasets);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if a dataset exists
|
|
190
|
+
*
|
|
191
|
+
* @param datasets - Map of dataset definitions
|
|
192
|
+
* @param name - Dataset name
|
|
193
|
+
* @returns True if dataset exists
|
|
194
|
+
*/
|
|
195
|
+
export function hasDataset(datasets, name) {
|
|
196
|
+
return name in datasets;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get dimension names for a dataset
|
|
200
|
+
*
|
|
201
|
+
* @param dataset - Dataset definition
|
|
202
|
+
* @returns Array of dimension names
|
|
203
|
+
*/
|
|
204
|
+
export function getDimensionNames(dataset) {
|
|
205
|
+
return Object.keys(dataset.dimensions);
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Get metric names for a dataset
|
|
209
|
+
*
|
|
210
|
+
* @param dataset - Dataset definition
|
|
211
|
+
* @returns Array of metric names
|
|
212
|
+
*/
|
|
213
|
+
export function getMetricNames(dataset) {
|
|
214
|
+
return Object.keys(dataset.metrics);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Check if a dimension exists in a dataset
|
|
218
|
+
*
|
|
219
|
+
* @param dataset - Dataset definition
|
|
220
|
+
* @param dimensionName - Dimension name
|
|
221
|
+
* @returns True if dimension exists
|
|
222
|
+
*/
|
|
223
|
+
export function hasDimension(dataset, dimensionName) {
|
|
224
|
+
return dimensionName in dataset.dimensions;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Check if a metric exists in a dataset
|
|
228
|
+
*
|
|
229
|
+
* @param dataset - Dataset definition
|
|
230
|
+
* @param metricName - Metric name
|
|
231
|
+
* @returns True if metric exists
|
|
232
|
+
*/
|
|
233
|
+
export function hasMetric(dataset, metricName) {
|
|
234
|
+
return metricName in dataset.metrics;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get a dimension definition from a dataset
|
|
238
|
+
*
|
|
239
|
+
* @param dataset - Dataset definition
|
|
240
|
+
* @param dimensionName - Dimension name
|
|
241
|
+
* @returns Normalized dimension definition
|
|
242
|
+
* @throws Error if dimension not found
|
|
243
|
+
*/
|
|
244
|
+
export function getDimension(dataset, dimensionName) {
|
|
245
|
+
if (!hasDimension(dataset, dimensionName)) {
|
|
246
|
+
throw new Error(`Dimension '${dimensionName}' not found in dataset '${dataset.name}'. ` +
|
|
247
|
+
`Available dimensions: ${getDimensionNames(dataset).join(', ')}`);
|
|
248
|
+
}
|
|
249
|
+
return normalizeDimension(dataset.dimensions[dimensionName]);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get a metric definition from a dataset
|
|
253
|
+
*
|
|
254
|
+
* @param dataset - Dataset definition
|
|
255
|
+
* @param metricName - Metric name
|
|
256
|
+
* @returns Metric definition
|
|
257
|
+
* @throws Error if metric not found
|
|
258
|
+
*/
|
|
259
|
+
export function getMetric(dataset, metricName) {
|
|
260
|
+
if (!hasMetric(dataset, metricName)) {
|
|
261
|
+
throw new Error(`Metric '${metricName}' not found in dataset '${dataset.name}'. ` +
|
|
262
|
+
`Available metrics: ${getMetricNames(dataset).join(', ')}`);
|
|
263
|
+
}
|
|
264
|
+
return dataset.metrics[metricName];
|
|
265
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dataset Helper Functions
|
|
3
|
+
*
|
|
4
|
+
* Provides declarative helper functions for defining dimensions and metrics:
|
|
5
|
+
* - dimension.string(), dimension.number(), dimension.date(), dimension.boolean()
|
|
6
|
+
* - metric.count(), metric.sum(), metric.avg(), metric.min(), metric.max(), metric.countDistinct(), metric.custom()
|
|
7
|
+
*/
|
|
8
|
+
import type { DimensionDefinition, MetricDefinition, MetricFormat } from './types.js';
|
|
9
|
+
import { type SQLExpression } from './sql-tag.js';
|
|
10
|
+
/**
|
|
11
|
+
* Options for dimension helpers
|
|
12
|
+
*/
|
|
13
|
+
export interface DimensionOptions {
|
|
14
|
+
/** Human-readable description (for AI agents) */
|
|
15
|
+
description: string;
|
|
16
|
+
/** Example values (for AI context) */
|
|
17
|
+
examples?: string[];
|
|
18
|
+
/** Join name (if dimension requires a join) */
|
|
19
|
+
join?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Dimension helper namespace
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* dimensions: {
|
|
27
|
+
* region: dimension.string('region', {
|
|
28
|
+
* description: 'Geographic region',
|
|
29
|
+
* examples: ['US', 'EU', 'APAC']
|
|
30
|
+
* }),
|
|
31
|
+
* orderDate: dimension.date(sql`DATE(created_at)`, {
|
|
32
|
+
* description: 'Order date'
|
|
33
|
+
* }),
|
|
34
|
+
* amount: dimension.number('amount', {
|
|
35
|
+
* description: 'Order amount'
|
|
36
|
+
* })
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare const dimension: {
|
|
41
|
+
/**
|
|
42
|
+
* Create a string dimension
|
|
43
|
+
*/
|
|
44
|
+
string: (columnOrExpression: string | SQLExpression, options: DimensionOptions) => DimensionDefinition;
|
|
45
|
+
/**
|
|
46
|
+
* Create a number dimension
|
|
47
|
+
*/
|
|
48
|
+
number: (columnOrExpression: string | SQLExpression, options: DimensionOptions) => DimensionDefinition;
|
|
49
|
+
/**
|
|
50
|
+
* Create a date dimension
|
|
51
|
+
*/
|
|
52
|
+
date: (columnOrExpression: string | SQLExpression, options: DimensionOptions) => DimensionDefinition;
|
|
53
|
+
/**
|
|
54
|
+
* Create a boolean dimension
|
|
55
|
+
*/
|
|
56
|
+
boolean: (columnOrExpression: string | SQLExpression, options: DimensionOptions) => DimensionDefinition;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Options for metric helpers
|
|
60
|
+
*/
|
|
61
|
+
export interface MetricOptions {
|
|
62
|
+
/** Human-readable description (for AI agents) */
|
|
63
|
+
description: string;
|
|
64
|
+
/** Format hint for display */
|
|
65
|
+
format?: MetricFormat;
|
|
66
|
+
/** Join name (if metric requires a join) */
|
|
67
|
+
join?: string;
|
|
68
|
+
/** Allow fan-out (for oneToMany joins) - advanced use only */
|
|
69
|
+
allowFanout?: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Metric helper namespace
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* metrics: {
|
|
77
|
+
* revenue: metric.sum('amount', {
|
|
78
|
+
* description: 'Total revenue',
|
|
79
|
+
* format: 'currency'
|
|
80
|
+
* }),
|
|
81
|
+
* orderCount: metric.count({
|
|
82
|
+
* description: 'Total number of orders'
|
|
83
|
+
* }),
|
|
84
|
+
* avgOrderValue: metric.avg('total_amount', {
|
|
85
|
+
* description: 'Average order value',
|
|
86
|
+
* format: 'currency'
|
|
87
|
+
* }),
|
|
88
|
+
* revenuePerCustomer: metric.custom(
|
|
89
|
+
* sql`sum(total_amount) / count(DISTINCT customer_id)`,
|
|
90
|
+
* {
|
|
91
|
+
* description: 'Average revenue per customer',
|
|
92
|
+
* format: 'currency'
|
|
93
|
+
* }
|
|
94
|
+
* )
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
export declare const metric: {
|
|
99
|
+
/**
|
|
100
|
+
* Create a COUNT(*) metric
|
|
101
|
+
*/
|
|
102
|
+
count: (options: MetricOptions) => MetricDefinition;
|
|
103
|
+
/**
|
|
104
|
+
* Create a SUM() metric
|
|
105
|
+
*/
|
|
106
|
+
sum: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
107
|
+
/**
|
|
108
|
+
* Create an AVG() metric
|
|
109
|
+
*/
|
|
110
|
+
avg: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
111
|
+
/**
|
|
112
|
+
* Create a MIN() metric
|
|
113
|
+
*/
|
|
114
|
+
min: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
115
|
+
/**
|
|
116
|
+
* Create a MAX() metric
|
|
117
|
+
*/
|
|
118
|
+
max: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
119
|
+
/**
|
|
120
|
+
* Create a COUNT(DISTINCT) metric
|
|
121
|
+
*/
|
|
122
|
+
countDistinct: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
123
|
+
/**
|
|
124
|
+
* Create a custom metric with a SQL expression
|
|
125
|
+
*/
|
|
126
|
+
custom: (columnOrExpression: string | SQLExpression, options: MetricOptions) => MetricDefinition;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Validate that a dimension definition has required metadata
|
|
130
|
+
*/
|
|
131
|
+
export declare function validateDimensionDefinition(name: string, definition: unknown): void;
|
|
132
|
+
/**
|
|
133
|
+
* Validate that a metric definition has required metadata
|
|
134
|
+
*/
|
|
135
|
+
export declare function validateMetricDefinition(name: string, definition: unknown): void;
|
|
136
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/dataset/helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAEnB,gBAAgB,EAEhB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAO,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAMvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAoBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;iCAnCmB,MAAM,GAAG,aAAa,WACjC,gBAAgB,KACxB,mBAAmB;IAoCtB;;OAEG;iCAxCmB,MAAM,GAAG,aAAa,WACjC,gBAAgB,KACxB,mBAAmB;IAyCtB;;OAEG;+BA7CmB,MAAM,GAAG,aAAa,WACjC,gBAAgB,KACxB,mBAAmB;IA8CtB;;OAEG;kCAlDmB,MAAM,GAAG,aAAa,WACjC,gBAAgB,KACxB,mBAAmB;CAkDvB,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqBD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;qBACc,aAAa,KAAG,gBAAgB;IAWjD;;OAEG;8BA1DmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;IA2DnB;;OAEG;8BA/DmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;IAgEnB;;OAEG;8BApEmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;IAqEnB;;OAEG;8BAzEmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;IA0EnB;;OAEG;wCA9EmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;IA+EnB;;OAEG;iCAnFmB,MAAM,GAAG,aAAa,WACjC,aAAa,KACrB,gBAAgB;CAmFpB,CAAC;AAMF;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,GAClB,IAAI,CA8BN;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,GAClB,IAAI,CA8BN"}
|