@hypequery/datasets 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +498 -0
  2. package/dist/api.type-test.d.ts +2 -0
  3. package/dist/api.type-test.d.ts.map +1 -0
  4. package/dist/api.type-test.js +103 -0
  5. package/dist/constants.d.ts +9 -0
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/constants.js +11 -0
  8. package/dist/dataset-query.d.ts +16 -0
  9. package/dist/dataset-query.d.ts.map +1 -0
  10. package/dist/dataset-query.js +56 -0
  11. package/dist/dataset.d.ts +1 -1
  12. package/dist/dataset.d.ts.map +1 -1
  13. package/dist/dataset.js +22 -157
  14. package/dist/executor.d.ts +42 -14
  15. package/dist/executor.d.ts.map +1 -1
  16. package/dist/executor.js +188 -36
  17. package/dist/formulas.d.ts +1 -1
  18. package/dist/formulas.d.ts.map +1 -1
  19. package/dist/formulas.js +27 -12
  20. package/dist/in-memory-backend.d.ts +5 -0
  21. package/dist/in-memory-backend.d.ts.map +1 -0
  22. package/dist/in-memory-backend.js +221 -0
  23. package/dist/index.d.ts +6 -4
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -4
  26. package/dist/internal.d.ts +23 -0
  27. package/dist/internal.d.ts.map +1 -0
  28. package/dist/internal.js +19 -0
  29. package/dist/measure.d.ts.map +1 -1
  30. package/dist/measure.js +1 -0
  31. package/dist/query-builder-protocol.d.ts +2 -2
  32. package/dist/query-builder-protocol.d.ts.map +1 -1
  33. package/dist/query-builder-protocol.js +1 -1
  34. package/dist/query-helpers.d.ts +12 -12
  35. package/dist/query-helpers.d.ts.map +1 -1
  36. package/dist/query-planner.d.ts +9 -7
  37. package/dist/query-planner.d.ts.map +1 -1
  38. package/dist/query-planner.js +26 -9
  39. package/dist/registry.d.ts +1 -1
  40. package/dist/registry.js +1 -1
  41. package/dist/relationships.d.ts +1 -1
  42. package/dist/relationships.js +1 -1
  43. package/dist/semantic-plan.d.ts +82 -0
  44. package/dist/semantic-plan.d.ts.map +1 -0
  45. package/dist/semantic-plan.js +1 -0
  46. package/dist/semantic-planner.d.ts +5 -0
  47. package/dist/semantic-planner.d.ts.map +1 -0
  48. package/dist/semantic-planner.js +155 -0
  49. package/dist/sql-utils.d.ts +1 -1
  50. package/dist/sql-utils.js +4 -4
  51. package/dist/types.d.ts +130 -52
  52. package/dist/types.d.ts.map +1 -1
  53. package/dist/utils/dataset-contract.d.ts +3 -0
  54. package/dist/utils/dataset-contract.d.ts.map +1 -0
  55. package/dist/utils/dataset-contract.js +30 -0
  56. package/dist/utils/dataset-metric-ref.d.ts +9 -0
  57. package/dist/utils/dataset-metric-ref.d.ts.map +1 -0
  58. package/dist/utils/dataset-metric-ref.js +39 -0
  59. package/dist/utils/dataset-normalization.d.ts +10 -0
  60. package/dist/utils/dataset-normalization.d.ts.map +1 -0
  61. package/dist/utils/dataset-normalization.js +35 -0
  62. package/dist/utils/dataset-query-validation.d.ts +4 -0
  63. package/dist/utils/dataset-query-validation.d.ts.map +1 -0
  64. package/dist/utils/dataset-query-validation.js +96 -0
  65. package/dist/utils/dataset-validation.d.ts +6 -0
  66. package/dist/utils/dataset-validation.d.ts.map +1 -0
  67. package/dist/utils/dataset-validation.js +42 -0
  68. package/dist/utils/derived-cte-validation.d.ts +3 -0
  69. package/dist/utils/derived-cte-validation.d.ts.map +1 -0
  70. package/dist/utils/derived-cte-validation.js +32 -0
  71. package/dist/utils/filtered-aggregation-sql.d.ts +5 -0
  72. package/dist/utils/filtered-aggregation-sql.d.ts.map +1 -0
  73. package/dist/utils/filtered-aggregation-sql.js +73 -0
  74. package/dist/utils/metric-handle.d.ts +11 -0
  75. package/dist/utils/metric-handle.d.ts.map +1 -0
  76. package/dist/utils/metric-handle.js +36 -0
  77. package/dist/utils/pagination.d.ts +17 -0
  78. package/dist/utils/pagination.d.ts.map +1 -0
  79. package/dist/utils/pagination.js +23 -0
  80. package/dist/utils/tenant-runtime.d.ts +14 -0
  81. package/dist/utils/tenant-runtime.d.ts.map +1 -0
  82. package/dist/utils/tenant-runtime.js +36 -0
  83. package/package.json +14 -2
@@ -0,0 +1,82 @@
1
+ import type { AggregationType, FieldType, MetricFilter, MetricOrderBy, TimeGrain } from './types.js';
2
+ export type SemanticBinaryOperator = 'add' | 'subtract' | 'multiply' | 'divide';
3
+ export type SemanticFunctionName = 'nullIfZero' | 'coalesce' | 'round' | 'floor' | 'ceil';
4
+ export type SemanticExpression = {
5
+ kind: 'ref';
6
+ name: string;
7
+ } | {
8
+ kind: 'literal';
9
+ value: string | number | boolean | null;
10
+ } | {
11
+ kind: 'binary';
12
+ operator: SemanticBinaryOperator;
13
+ left: SemanticExpression;
14
+ right: SemanticExpression;
15
+ } | {
16
+ kind: 'function';
17
+ name: SemanticFunctionName;
18
+ args: SemanticExpression[];
19
+ };
20
+ export interface SemanticDimensionPlan {
21
+ name: string;
22
+ field: string;
23
+ fieldType?: FieldType;
24
+ }
25
+ export interface SemanticAggregationPlan {
26
+ name: string;
27
+ aggregation: AggregationType;
28
+ field: string;
29
+ filters?: MetricFilter[];
30
+ }
31
+ export interface SemanticGrainPlan {
32
+ field: string;
33
+ unit: TimeGrain;
34
+ output: 'period';
35
+ timezone?: string;
36
+ weekStart?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
37
+ }
38
+ export type PlanNode = {
39
+ kind: 'aggregate';
40
+ source: string;
41
+ dimensions: SemanticDimensionPlan[];
42
+ aggregations: SemanticAggregationPlan[];
43
+ filters: MetricFilter[];
44
+ grain?: SemanticGrainPlan;
45
+ orderBy?: MetricOrderBy[];
46
+ limit?: number;
47
+ offset?: number;
48
+ tenant?: {
49
+ field: string;
50
+ operator: 'eq';
51
+ value: string;
52
+ } | {
53
+ field: string;
54
+ operator: 'in';
55
+ value: string[];
56
+ };
57
+ } | {
58
+ kind: 'derive';
59
+ input: PlanNode;
60
+ metrics: Array<{
61
+ name: string;
62
+ expression: SemanticExpression;
63
+ }>;
64
+ orderBy?: MetricOrderBy[];
65
+ limit?: number;
66
+ offset?: number;
67
+ };
68
+ export interface SemanticBackendResult<T = Record<string, unknown>> {
69
+ data: T[];
70
+ meta?: {
71
+ timingMs?: number;
72
+ sql?: string;
73
+ tenant?: string;
74
+ };
75
+ }
76
+ export interface SemanticBackend {
77
+ execute<T = Record<string, unknown>>(plan: PlanNode): Promise<SemanticBackendResult<T>>;
78
+ explain?(plan: PlanNode): Promise<{
79
+ sql?: string;
80
+ }>;
81
+ }
82
+ //# sourceMappingURL=semantic-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-plan.d.ts","sourceRoot":"","sources":["../src/semantic-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { AnyDatasetInstance, DatasetQuery, ExecutionContext, MetricQuery, MetricRef, GrainedMetricRef } from './types.js';
2
+ import type { PlanNode } from './semantic-plan.js';
3
+ export declare function buildDatasetPlan(ds: AnyDatasetInstance, query?: DatasetQuery, context?: ExecutionContext): PlanNode;
4
+ export declare function buildMetricPlan(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): PlanNode;
5
+ //# sourceMappingURL=semantic-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-planner.d.ts","sourceRoot":"","sources":["../src/semantic-planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAEhB,WAAW,EACX,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,oBAAoB,CAAC;AAgH5B,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,kBAAkB,EACtB,KAAK,GAAE,YAAiB,EACxB,OAAO,CAAC,EAAE,gBAAgB,GACzB,QAAQ,CAaV;AAuFD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,QAAQ,CAUV"}
@@ -0,0 +1,155 @@
1
+ import { getMetricGrain, getMetricRef, } from './utils/metric-handle.js';
2
+ import { validateDatasetQuery } from './dataset-query.js';
3
+ import { isSupportedTimeGrain } from './constants.js';
4
+ import { getRuntimeTenantPredicate } from './utils/tenant-runtime.js';
5
+ function resolveField(ds, field) {
6
+ const dimension = ds.dimensions[field];
7
+ if (dimension?.sql) {
8
+ throw new Error(`Semantic backend plans do not support SQL-backed dimension "${field}". ` +
9
+ 'Use a backend-specific query builder for raw SQL expressions.');
10
+ }
11
+ return dimension?.column ?? field;
12
+ }
13
+ function dimensionsForQuery(ds, dimensions = []) {
14
+ return dimensions.map((name) => ({
15
+ name,
16
+ field: resolveField(ds, name),
17
+ fieldType: ds.dimensions[name]?.fieldType,
18
+ }));
19
+ }
20
+ function normalizeFilters(ds, filters = []) {
21
+ return filters.map((filter) => {
22
+ const resolvedField = ds.filters[filter.field]?.field ?? filter.field;
23
+ return {
24
+ ...filter,
25
+ field: resolveField(ds, resolvedField),
26
+ };
27
+ });
28
+ }
29
+ function aggregationForMeasure(ds, name) {
30
+ const measure = ds.measures[name];
31
+ if (!measure) {
32
+ throw new Error(`Unknown measure "${name}" on dataset "${ds.name}".`);
33
+ }
34
+ if (measure.sql) {
35
+ throw new Error(`Semantic backend plans do not support SQL-backed measure "${name}". ` +
36
+ 'Use a backend-specific query builder for raw SQL expressions.');
37
+ }
38
+ return {
39
+ name,
40
+ aggregation: measure.aggregation,
41
+ field: resolveField(ds, measure.field),
42
+ filters: normalizeFilters(ds, measure.filters),
43
+ };
44
+ }
45
+ function tenantForContext(ds, context) {
46
+ const tenantPredicate = getRuntimeTenantPredicate(context);
47
+ if (!tenantPredicate || !ds.tenantKey) {
48
+ return undefined;
49
+ }
50
+ return { field: ds.tenantKey, ...tenantPredicate };
51
+ }
52
+ function grainForQuery(ds, unit) {
53
+ if (!unit) {
54
+ return undefined;
55
+ }
56
+ if (!ds.timeKey) {
57
+ throw new Error(`Cannot use grain "${unit}" because dataset "${ds.name}" has no timeKey.`);
58
+ }
59
+ if (!isSupportedTimeGrain(unit)) {
60
+ throw new Error(`Unsupported time grain "${unit}".`);
61
+ }
62
+ return {
63
+ field: ds.timeKey,
64
+ unit,
65
+ output: 'period',
66
+ };
67
+ }
68
+ function aggregatePlan(ds, query, aggregations, context) {
69
+ return {
70
+ kind: 'aggregate',
71
+ source: ds.source,
72
+ dimensions: dimensionsForQuery(ds, query.dimensions),
73
+ aggregations,
74
+ filters: normalizeFilters(ds, query.filters),
75
+ grain: grainForQuery(ds, query.by),
76
+ orderBy: query.orderBy,
77
+ limit: query.limit,
78
+ offset: query.offset,
79
+ tenant: tenantForContext(ds, context),
80
+ };
81
+ }
82
+ export function buildDatasetPlan(ds, query = {}, context) {
83
+ const validation = validateDatasetQuery(ds, query, context);
84
+ if (!validation.valid) {
85
+ throw new Error(`Invalid dataset query: ${validation.errors.join('; ')}`);
86
+ }
87
+ const measures = query.measures ?? Object.keys(ds.measures);
88
+ return aggregatePlan(ds, query, measures.map((name) => aggregationForMeasure(ds, name)), context);
89
+ }
90
+ function buildBaseMetricPlan(metric, query, context) {
91
+ const spec = metric.spec;
92
+ if (spec.__type !== 'aggregation_spec') {
93
+ throw new Error(`Metric "${metric.name}" is not a base metric.`);
94
+ }
95
+ if (spec.sql) {
96
+ throw new Error(`Semantic backend plans do not support SQL-backed metric "${metric.name}". ` +
97
+ 'Use a backend-specific query builder for raw SQL expressions.');
98
+ }
99
+ return aggregatePlan(metric.dataset, {
100
+ ...query,
101
+ by: query.by,
102
+ measures: [],
103
+ }, [{
104
+ name: metric.name,
105
+ aggregation: spec.aggregation,
106
+ field: resolveField(metric.dataset, spec.field),
107
+ filters: normalizeFilters(metric.dataset, spec.filters),
108
+ }], context);
109
+ }
110
+ function buildDerivedMetricPlan(metric, query, context) {
111
+ const spec = metric.spec;
112
+ if (spec.__type !== 'derived_metric_spec') {
113
+ throw new Error(`Metric "${metric.name}" is not a derived metric.`);
114
+ }
115
+ const inputAggregations = Object.entries(spec.uses).map(([alias, baseMetric]) => {
116
+ const baseSpec = baseMetric.spec;
117
+ if (baseSpec.__type !== 'aggregation_spec') {
118
+ throw new Error(`Derived metric "${metric.name}" references non-base metric "${alias}".`);
119
+ }
120
+ if (baseSpec.sql) {
121
+ throw new Error(`Semantic backend plans do not support SQL-backed metric "${alias}" used by derived metric "${metric.name}". ` +
122
+ 'Use a backend-specific query builder for raw SQL expressions.');
123
+ }
124
+ return {
125
+ name: alias,
126
+ aggregation: baseSpec.aggregation,
127
+ field: resolveField(metric.dataset, baseSpec.field),
128
+ filters: baseSpec.filters,
129
+ };
130
+ });
131
+ const inputs = Object.fromEntries(Object.keys(spec.uses).map((alias) => [alias, alias]));
132
+ const expression = spec.formula(inputs).expression;
133
+ return {
134
+ kind: 'derive',
135
+ input: aggregatePlan(metric.dataset, {
136
+ ...query,
137
+ orderBy: undefined,
138
+ limit: undefined,
139
+ offset: undefined,
140
+ }, inputAggregations, context),
141
+ metrics: [{ name: metric.name, expression }],
142
+ orderBy: query.orderBy,
143
+ limit: query.limit,
144
+ offset: query.offset,
145
+ };
146
+ }
147
+ export function buildMetricPlan(metric, query = {}, context) {
148
+ const ref = getMetricRef(metric);
149
+ const grain = getMetricGrain(metric, query);
150
+ const plannedQuery = { ...query, by: grain };
151
+ if (ref.spec.__type === 'derived_metric_spec') {
152
+ return buildDerivedMetricPlan(ref, plannedQuery, context);
153
+ }
154
+ return buildBaseMetricPlan(ref, plannedQuery, context);
155
+ }
@@ -19,7 +19,7 @@ export declare function isSafeSQLIdentifier(identifier: string): boolean;
19
19
  export declare function validateSQLIdentifier(identifier: string, context: string): void;
20
20
  /**
21
21
  * Quotes a SQL identifier for safe use in queries.
22
- * Uses double quotes which is standard SQL.
22
+ * Uses backticks, which is how ClickHouse quotes identifiers.
23
23
  *
24
24
  * @param identifier - The identifier to quote
25
25
  * @returns Quoted identifier
package/dist/sql-utils.js CHANGED
@@ -26,13 +26,13 @@ export function validateSQLIdentifier(identifier, context) {
26
26
  }
27
27
  /**
28
28
  * Quotes a SQL identifier for safe use in queries.
29
- * Uses double quotes which is standard SQL.
29
+ * Uses backticks, which is how ClickHouse quotes identifiers.
30
30
  *
31
31
  * @param identifier - The identifier to quote
32
32
  * @returns Quoted identifier
33
33
  */
34
34
  export function quoteSQLIdentifier(identifier) {
35
- // Escape any existing double quotes by doubling them
36
- const escaped = identifier.replace(/"/g, '""');
37
- return `"${escaped}"`;
35
+ // Escape any existing backticks by doubling them
36
+ const escaped = identifier.replace(/`/g, '``');
37
+ return `\`${escaped}\``;
38
38
  }
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { QueryBuilderFactoryLike } from './query-builder-protocol.js';
2
+ import type { SemanticExpression } from './semantic-plan.js';
2
3
  export type FieldType = 'string' | 'number' | 'boolean' | 'timestamp';
3
4
  export type DimensionType = FieldType;
4
5
  export interface DimensionOptions {
@@ -37,11 +38,14 @@ export interface AggregationSpec {
37
38
  __type: 'aggregation_spec';
38
39
  aggregation: AggregationType;
39
40
  field: string;
41
+ sql?: string;
42
+ filters?: MetricFilter[];
40
43
  }
41
44
  export interface MeasureOptions {
42
45
  sql?: string;
43
46
  label?: string;
44
47
  description?: string;
48
+ filters?: MetricFilter[];
45
49
  }
46
50
  export interface MeasureDefinition {
47
51
  __type: 'measure_definition';
@@ -50,34 +54,44 @@ export interface MeasureDefinition {
50
54
  sql?: string;
51
55
  label?: string;
52
56
  description?: string;
57
+ filters?: MetricFilter[];
53
58
  }
54
59
  export type FormulaExpr = {
55
60
  __type: 'formula_expr';
61
+ expression: SemanticExpression;
56
62
  toSQL: () => string;
57
63
  };
58
- export interface MetricRef<TDatasetName extends string = string, TMetricName extends string = string> {
64
+ export interface DerivedMetricSpec<TDatasetName extends string = string> {
65
+ __type: 'derived_metric_spec';
66
+ uses: Record<string, BaseMetricRef<TDatasetName>>;
67
+ formula: (inputs: Record<string, string>) => FormulaExpr;
68
+ }
69
+ /**
70
+ * The wide dataset instance used as the default `TDataset` for a metric ref.
71
+ * Refs created via `DatasetInstance.metric()` carry their dataset's concrete
72
+ * dimension/measure types instead, enabling field-level typing downstream.
73
+ */
74
+ export type DefaultMetricDataset<TDatasetName extends string = string> = DatasetInstance<Record<string, DimensionDefinition>, Record<string, MeasureDefinition>, Record<string, RelationshipDefinition>, TDatasetName>;
75
+ export interface MetricRef<TDatasetName extends string = string, TMetricName extends string = string, TSpec extends AggregationSpec | DerivedMetricSpec<TDatasetName> = AggregationSpec | DerivedMetricSpec<TDatasetName>, TDataset extends DatasetInstance<any, any, any, TDatasetName> = DefaultMetricDataset<TDatasetName>> {
59
76
  __type: 'metric_ref';
60
77
  datasetName: TDatasetName;
61
78
  name: TMetricName;
62
- spec: AggregationSpec | DerivedMetricSpec;
79
+ spec: TSpec;
63
80
  label?: string;
64
81
  description?: string;
65
- dataset: DatasetInstance<any, any, any>;
66
- by(grain: TimeGrain): GrainedMetricRef<TDatasetName, TMetricName>;
82
+ dataset: TDataset;
83
+ by(grain: TimeGrain): GrainedMetricRef<TDatasetName, TMetricName, TSpec, TDataset>;
67
84
  contract(): MetricContract;
68
85
  }
69
- export interface DerivedMetricSpec {
70
- __type: 'derived_metric_spec';
71
- uses: Record<string, MetricRef>;
72
- formula: (inputs: Record<string, string>) => FormulaExpr;
73
- }
74
- export interface GrainedMetricRef<TDatasetName extends string = string, TMetricName extends string = string> {
86
+ export type BaseMetricRef<TDatasetName extends string = string, TMetricName extends string = string, TDataset extends DatasetInstance<any, any, any, TDatasetName> = DefaultMetricDataset<TDatasetName>> = MetricRef<TDatasetName, TMetricName, AggregationSpec, TDataset>;
87
+ export type DerivedMetricRef<TDatasetName extends string = string, TMetricName extends string = string, TDataset extends DatasetInstance<any, any, any, TDatasetName> = DefaultMetricDataset<TDatasetName>> = MetricRef<TDatasetName, TMetricName, DerivedMetricSpec<TDatasetName>, TDataset>;
88
+ export interface GrainedMetricRef<TDatasetName extends string = string, TMetricName extends string = string, TSpec extends AggregationSpec | DerivedMetricSpec<TDatasetName> = AggregationSpec | DerivedMetricSpec<TDatasetName>, TDataset extends DatasetInstance<any, any, any, TDatasetName> = DefaultMetricDataset<TDatasetName>> {
75
89
  __type: 'grained_metric_ref';
76
- metric: MetricRef<TDatasetName, TMetricName>;
90
+ metric: MetricRef<TDatasetName, TMetricName, TSpec, TDataset>;
77
91
  grain: TimeGrain;
78
92
  contract(): MetricContract;
79
93
  }
80
- export type MetricHandle<TDatasetName extends string = string, TMetricName extends string = string> = MetricRef<TDatasetName, TMetricName> | GrainedMetricRef<TDatasetName, TMetricName>;
94
+ export type MetricHandle<TDatasetName extends string = string, TMetricName extends string = string, TSpec extends AggregationSpec | DerivedMetricSpec<TDatasetName> = AggregationSpec | DerivedMetricSpec<TDatasetName>, TDataset extends DatasetInstance<any, any, any, TDatasetName> = DefaultMetricDataset<TDatasetName>> = MetricRef<TDatasetName, TMetricName, TSpec, TDataset> | GrainedMetricRef<TDatasetName, TMetricName, TSpec, TDataset>;
81
95
  export type TimeGrain = 'day' | 'week' | 'month' | 'quarter' | 'year';
82
96
  export interface MetricContract {
83
97
  kind: 'metric' | 'derived_metric' | 'grained_metric';
@@ -94,13 +108,13 @@ export interface MetricContract {
94
108
  requires?: string[];
95
109
  tenantScoped: boolean;
96
110
  }
97
- export interface MetricFilter {
98
- field: string;
111
+ export interface MetricFilter<TField extends string = string, TValue = unknown> {
112
+ field: TField;
99
113
  operator: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'notIn' | 'between' | 'like';
100
- value: unknown;
114
+ value: TValue;
101
115
  }
102
- export interface MetricOrderBy {
103
- field: string;
116
+ export interface MetricOrderBy<TField extends string = string> {
117
+ field: TField;
104
118
  direction: 'asc' | 'desc';
105
119
  }
106
120
  export interface MetricQuery {
@@ -111,20 +125,47 @@ export interface MetricQuery {
111
125
  offset?: number;
112
126
  by?: TimeGrain;
113
127
  }
128
+ export interface DatasetQuery {
129
+ dimensions?: string[];
130
+ measures?: string[];
131
+ filters?: MetricFilter[];
132
+ orderBy?: MetricOrderBy[];
133
+ limit?: number;
134
+ offset?: number;
135
+ by?: TimeGrain;
136
+ }
114
137
  export interface MetricResultMeta {
115
138
  timingMs?: number;
116
139
  sql?: string;
117
140
  tenant?: string;
141
+ /** Number of rows returned in `data`. */
142
+ rowCount?: number;
143
+ /**
144
+ * Offset pagination state. Present when the query specified a `limit`.
145
+ * `hasMore` is derived by over-fetching one row, so it is exact without a
146
+ * separate count query.
147
+ */
148
+ pagination?: {
149
+ limit: number;
150
+ offset: number;
151
+ hasMore: boolean;
152
+ };
118
153
  }
119
154
  export interface MetricResult<T = Record<string, unknown>> {
120
155
  data: T[];
121
156
  meta?: MetricResultMeta;
122
157
  }
123
- export interface SemanticTenantRuntime {
124
- id: string;
125
- column: string;
126
- handledByBuilder: boolean;
158
+ export interface DatasetQueryResult<T = Record<string, unknown>> {
159
+ data: T[];
160
+ meta?: MetricResultMeta;
127
161
  }
162
+ export type SemanticTenantRuntime = string | {
163
+ id: string;
164
+ } | {
165
+ in: string[];
166
+ } | {
167
+ scope: 'all';
168
+ };
128
169
  export interface SemanticExecutionRuntime {
129
170
  builderFactory?: QueryBuilderFactoryLike;
130
171
  tenant?: SemanticTenantRuntime;
@@ -146,40 +187,17 @@ export interface DatasetLimits {
146
187
  maxFilters?: number;
147
188
  maxResultSize?: number;
148
189
  }
149
- export interface BaseMetricConfig<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>> {
190
+ export interface BaseMetricConfig<TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>> {
150
191
  measure: keyof TMeasures & string;
151
192
  label?: string;
152
193
  description?: string;
153
194
  }
154
- export interface DerivedMetricConfig {
155
- uses: Record<string, MetricRef>;
195
+ export interface DerivedMetricConfig<TDatasetName extends string = string> {
196
+ uses: Record<string, BaseMetricRef<TDatasetName>>;
156
197
  formula: (inputs: Record<string, string>) => FormulaExpr;
157
198
  label?: string;
158
199
  description?: string;
159
200
  }
160
- export interface DatasetQueryConfig<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>> {
161
- dimensions?: Array<keyof TDimensions & string>;
162
- measures?: Array<keyof TMeasures & string>;
163
- filters?: MetricFilter[];
164
- orderBy?: MetricOrderBy[];
165
- limit?: number;
166
- offset?: number;
167
- by?: TimeGrain;
168
- }
169
- export interface DatasetQueryContract {
170
- dataset: string;
171
- dimensions: string[];
172
- measures: string[];
173
- filters: string[];
174
- grains: TimeGrain[];
175
- tenantScoped: boolean;
176
- }
177
- export interface DatasetQueryRef<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>> {
178
- __type: 'dataset_query_ref';
179
- dataset: DatasetInstance<TDimensions, TMeasures, any>;
180
- config: DatasetQueryConfig<TDimensions, TMeasures>;
181
- contract(): DatasetQueryContract;
182
- }
183
201
  export interface DatasetConfig<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>, TRelationships extends Record<string, RelationshipDefinition> = Record<string, never>> {
184
202
  source: string;
185
203
  tenantKey?: string;
@@ -190,9 +208,9 @@ export interface DatasetConfig<TDimensions extends Record<string, DimensionDefin
190
208
  relationships?: TRelationships;
191
209
  limits?: DatasetLimits;
192
210
  }
193
- export interface DatasetInstance<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>, TRelationships extends Record<string, RelationshipDefinition> = Record<string, never>> {
211
+ export interface DatasetInstance<TDimensions extends Record<string, DimensionDefinition> = Record<string, DimensionDefinition>, TMeasures extends Record<string, MeasureDefinition> = Record<string, MeasureDefinition>, TRelationships extends Record<string, RelationshipDefinition> = Record<string, never>, TDatasetName extends string = string> {
194
212
  __type: 'dataset';
195
- name: string;
213
+ name: TDatasetName;
196
214
  source: string;
197
215
  tenantKey?: string;
198
216
  timeKey?: string;
@@ -201,8 +219,8 @@ export interface DatasetInstance<TDimensions extends Record<string, DimensionDef
201
219
  filters: SemanticFiltersDefinition;
202
220
  relationships: TRelationships;
203
221
  limits?: DatasetLimits;
204
- metric<TName extends string>(metricName: TName, metricConfig: BaseMetricConfig<TDimensions, TMeasures> | DerivedMetricConfig): MetricRef<string, TName>;
205
- query(config: DatasetQueryConfig<TDimensions, TMeasures>): DatasetQueryRef<TDimensions, TMeasures>;
222
+ metric<TName extends string>(metricName: TName, metricConfig: BaseMetricConfig<TMeasures>): BaseMetricRef<TDatasetName, TName, DatasetInstance<TDimensions, TMeasures, TRelationships, TDatasetName>>;
223
+ metric<TName extends string>(metricName: TName, metricConfig: DerivedMetricConfig<TDatasetName>): DerivedMetricRef<TDatasetName, TName, DatasetInstance<TDimensions, TMeasures, TRelationships, TDatasetName>>;
206
224
  }
207
225
  export interface DatasetRegistryInstance {
208
226
  register(ds: DatasetInstance): void;
@@ -210,5 +228,65 @@ export interface DatasetRegistryInstance {
210
228
  getAll(): DatasetInstance[];
211
229
  has(name: string): boolean;
212
230
  }
213
- export type DatasetFieldNames<TDataset extends DatasetInstance> = keyof TDataset['dimensions'] & string;
231
+ export type AnyDatasetInstance = DatasetInstance<Record<string, DimensionDefinition>, Record<string, MeasureDefinition>, Record<string, RelationshipDefinition>, string>;
232
+ export type DatasetFieldNames<TDataset extends DatasetInstance<any, any, any, any>> = keyof TDataset['dimensions'] & string;
233
+ type NonNeverStringKeys<T extends Record<string, unknown>> = {
234
+ [K in keyof T]: [T[K]] extends [never] ? never : K;
235
+ }[keyof T] & string;
236
+ /** Dimension names declared by a dataset. */
237
+ export type DatasetDimensionNames<TDataset extends DatasetInstance<any, any, any, any>> = NonNeverStringKeys<TDataset['dimensions']>;
238
+ /** Measure names declared by a dataset. */
239
+ export type DatasetMeasureNames<TDataset extends DatasetInstance<any, any, any, any>> = NonNeverStringKeys<TDataset['measures']>;
240
+ /**
241
+ * Fields a result can be ordered by. This is the selection-independent superset
242
+ * (every dimension + measure, plus the synthetic `period` column for grained
243
+ * queries); the runtime validator additionally requires the field to be selected.
244
+ */
245
+ export type DatasetOrderableNames<TDataset extends DatasetInstance<any, any, any, any>> = DatasetDimensionNames<TDataset> | DatasetMeasureNames<TDataset> | 'period';
246
+ /** A dataset query whose fields are constrained to the dataset's contract. */
247
+ export interface DatasetQueryFor<TDataset extends DatasetInstance<any, any, any, any>> {
248
+ dimensions?: DatasetDimensionNames<TDataset>[];
249
+ measures?: DatasetMeasureNames<TDataset>[];
250
+ filters?: MetricFilter[];
251
+ orderBy?: MetricOrderBy<DatasetOrderableNames<TDataset>>[];
252
+ limit?: number;
253
+ offset?: number;
254
+ by?: TimeGrain;
255
+ includeMeta?: boolean;
256
+ }
257
+ /** A best-effort typed result row for a dataset query. */
258
+ export type DatasetRow<TDataset extends DatasetInstance<any, any, any, any>> = {
259
+ [K in DatasetDimensionNames<TDataset>]?: InferDimensionType<TDataset['dimensions'][K]>;
260
+ } & {
261
+ [K in DatasetMeasureNames<TDataset>]?: number;
262
+ } & {
263
+ period?: string;
264
+ };
265
+ export interface DatasetQueryResultFor<TDataset extends DatasetInstance<any, any, any, any>> {
266
+ data: DatasetRow<TDataset>[];
267
+ meta?: MetricResultMeta;
268
+ }
269
+ /** A metric query whose fields are constrained to the metric's dataset + value column. */
270
+ export interface MetricQueryFor<TDataset extends DatasetInstance<any, any, any, any>, TMetricName extends string> {
271
+ dimensions?: DatasetDimensionNames<TDataset>[];
272
+ filters?: MetricFilter[];
273
+ orderBy?: MetricOrderBy<DatasetDimensionNames<TDataset> | TMetricName | 'period'>[];
274
+ limit?: number;
275
+ offset?: number;
276
+ by?: TimeGrain;
277
+ includeMeta?: boolean;
278
+ }
279
+ /** A best-effort typed result row for a metric query (dimensions + the metric value). */
280
+ export type MetricRow<TDataset extends DatasetInstance<any, any, any, any>, TMetricName extends string> = {
281
+ [K in DatasetDimensionNames<TDataset>]?: InferDimensionType<TDataset['dimensions'][K]>;
282
+ } & {
283
+ [K in TMetricName]?: number;
284
+ } & {
285
+ period?: string;
286
+ };
287
+ export interface MetricResultFor<TDataset extends DatasetInstance<any, any, any, any>, TMetricName extends string> {
288
+ data: MetricRow<TDataset, TMetricName>[];
289
+ meta?: MetricResultMeta;
290
+ }
291
+ export {};
214
292
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AggregationSpec, AnyDatasetInstance, DerivedMetricSpec, MetricContract, TimeGrain } from '../types.js';
2
+ export declare function buildMetricContract(metricName: string, ds: AnyDatasetInstance, spec: AggregationSpec | DerivedMetricSpec, label?: string, description?: string, grain?: TimeGrain): MetricContract;
3
+ //# sourceMappingURL=dataset-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-contract.d.ts","sourceRoot":"","sources":["../../src/utils/dataset-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,SAAS,EACV,MAAM,aAAa,CAAC;AAIrB,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,eAAe,GAAG,iBAAiB,EACzC,KAAK,CAAC,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,SAAS,GAChB,cAAc,CA6BhB"}
@@ -0,0 +1,30 @@
1
+ const ALL_GRAINS = ['day', 'week', 'month', 'quarter', 'year'];
2
+ export function buildMetricContract(metricName, ds, spec, label, description, grain) {
3
+ const dimensionNames = Object.keys(ds.dimensions);
4
+ const measureNames = Object.keys(ds.measures);
5
+ const filterNames = Object.keys(ds.filters).length > 0
6
+ ? Object.keys(ds.filters)
7
+ : dimensionNames.filter(name => ds.dimensions[name]?.filterable !== false);
8
+ const kind = grain
9
+ ? 'grained_metric'
10
+ : spec.__type === 'derived_metric_spec'
11
+ ? 'derived_metric'
12
+ : 'metric';
13
+ return {
14
+ kind,
15
+ name: metricName,
16
+ dataset: ds.name,
17
+ valueType: 'number',
18
+ label,
19
+ description,
20
+ dimensions: dimensionNames,
21
+ measures: measureNames,
22
+ filters: filterNames,
23
+ grains: ds.timeKey ? ALL_GRAINS : [],
24
+ grain,
25
+ requires: spec.__type === 'derived_metric_spec'
26
+ ? Object.keys(spec.uses)
27
+ : undefined,
28
+ tenantScoped: !!ds.tenantKey,
29
+ };
30
+ }