@hypequery/datasets 0.20.0 → 0.21.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 (63) hide show
  1. package/dist/api.type-test.js +0 -1
  2. package/dist/catalog.d.ts +3 -3
  3. package/dist/catalog.d.ts.map +1 -1
  4. package/dist/catalog.js +5 -2
  5. package/dist/contract.d.ts +1 -1
  6. package/dist/contract.d.ts.map +1 -1
  7. package/dist/measure.d.ts +2 -2
  8. package/dist/measure.d.ts.map +1 -1
  9. package/dist/measure.js +2 -2
  10. package/dist/types.d.ts +4 -5
  11. package/dist/types.d.ts.map +1 -1
  12. package/dist/utils/approximate-measures.d.ts +1 -0
  13. package/dist/utils/approximate-measures.d.ts.map +1 -1
  14. package/dist/utils/approximate-measures.js +10 -4
  15. package/dist/utils/composite-time-measure-sql.d.ts +10 -0
  16. package/dist/utils/composite-time-measure-sql.d.ts.map +1 -0
  17. package/dist/utils/composite-time-measure-sql.js +60 -0
  18. package/dist/utils/dataset-derived-query.d.ts.map +1 -1
  19. package/dist/utils/dataset-derived-query.js +7 -7
  20. package/dist/utils/derived-measure-sql.d.ts +1 -0
  21. package/dist/utils/derived-measure-sql.d.ts.map +1 -1
  22. package/dist/utils/derived-measure-sql.js +9 -6
  23. package/dist/utils/derived-measure-validation.d.ts.map +1 -1
  24. package/dist/utils/derived-measure-validation.js +4 -25
  25. package/dist/utils/measure-dependencies.d.ts +8 -0
  26. package/dist/utils/measure-dependencies.d.ts.map +1 -0
  27. package/dist/utils/measure-dependencies.js +44 -0
  28. package/dist/utils/measure-evaluation-graph.d.ts +23 -0
  29. package/dist/utils/measure-evaluation-graph.d.ts.map +1 -0
  30. package/dist/utils/measure-evaluation-graph.js +38 -0
  31. package/dist/utils/measure-time-grains.d.ts.map +1 -1
  32. package/dist/utils/measure-time-grains.js +4 -2
  33. package/dist/utils/shift-measure-grains.d.ts +5 -0
  34. package/dist/utils/shift-measure-grains.d.ts.map +1 -0
  35. package/dist/utils/shift-measure-grains.js +10 -0
  36. package/dist/utils/shift-measure-sql.d.ts +5 -2
  37. package/dist/utils/shift-measure-sql.d.ts.map +1 -1
  38. package/dist/utils/shift-measure-sql.js +25 -8
  39. package/dist/utils/shift-measure-validation.js +3 -3
  40. package/dist/utils/shift-wall-time-sql.d.ts +4 -0
  41. package/dist/utils/shift-wall-time-sql.d.ts.map +1 -0
  42. package/dist/utils/shift-wall-time-sql.js +17 -0
  43. package/dist/utils/time-measure-axis-sql.d.ts +1 -0
  44. package/dist/utils/time-measure-axis-sql.d.ts.map +1 -1
  45. package/dist/utils/time-measure-axis-sql.js +5 -4
  46. package/dist/utils/time-measure-axis.d.ts.map +1 -1
  47. package/dist/utils/time-measure-axis.js +3 -2
  48. package/dist/utils/time-measure-context-sql.d.ts +6 -0
  49. package/dist/utils/time-measure-context-sql.d.ts.map +1 -0
  50. package/dist/utils/time-measure-context-sql.js +21 -0
  51. package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -1
  52. package/dist/utils/time-measure-dataset-sql.js +25 -8
  53. package/dist/utils/time-measure-leaf-sql.d.ts +14 -0
  54. package/dist/utils/time-measure-leaf-sql.d.ts.map +1 -0
  55. package/dist/utils/time-measure-leaf-sql.js +52 -0
  56. package/dist/utils/time-measure-result-sql.d.ts +1 -1
  57. package/dist/utils/time-measure-result-sql.d.ts.map +1 -1
  58. package/dist/utils/time-measure-result-sql.js +2 -2
  59. package/dist/utils/time-query-measures.d.ts.map +1 -1
  60. package/dist/utils/time-query-measures.js +4 -8
  61. package/dist/utils/window-query-signature.d.ts.map +1 -1
  62. package/dist/utils/window-query-signature.js +12 -2
  63. package/package.json +7 -7
@@ -1,3 +1,4 @@
1
+ import { measureDependencyNames } from './measure-dependencies.js';
1
2
  import { getBaseMeasure, getDerivedMeasure } from './dataset-measures.js';
2
3
  import { selectedTimeMeasures } from './time-query-measures.js';
3
4
  import { windowCatalogMetadata } from './window-catalog-metadata.js';
@@ -5,16 +6,25 @@ import { measureToAggregationSpec } from './dataset-normalization.js';
5
6
  /** Preserve existing cache keys; add execution dependencies for windows and shifts. */
6
7
  export function windowQuerySignature(ds, query) {
7
8
  const timeMeasures = selectedTimeMeasures(ds, query);
8
- if (!timeMeasures.size)
9
+ const dependencies = measureDependencyNames(ds.measures, query.measures ?? []);
10
+ const nestedFormula = dependencies.some(name => {
11
+ const formula = getDerivedMeasure(ds.measures, name);
12
+ return formula && Object.values(formula.uses).some(input => getDerivedMeasure(ds.measures, input));
13
+ });
14
+ if (!timeMeasures.size && !nestedFormula)
9
15
  return {};
10
16
  return {
11
17
  windowTimeKey: ds.timeKey,
12
18
  windowTimeDimension: ds.timeKey ? ds.dimensions[ds.timeKey] : undefined,
19
+ baseInputs: dependencies.flatMap(name => {
20
+ const base = getBaseMeasure(ds.measures, name);
21
+ return base ? [{ name, ...measureToAggregationSpec(name, base) }] : [];
22
+ }),
13
23
  windows: [...timeMeasures].sort(([a], [b]) => a.localeCompare(b)).map(([name, definition]) => {
14
24
  const base = getBaseMeasure(ds.measures, definition.measure);
15
25
  return { name, ...windowCatalogMetadata(definition), base: base ? measureToAggregationSpec(definition.measure, base) : undefined };
16
26
  }),
17
- windowFormulas: (query.measures ?? []).flatMap(name => {
27
+ windowFormulas: dependencies.flatMap(name => {
18
28
  const derived = getDerivedMeasure(ds.measures, name);
19
29
  if (!derived)
20
30
  return [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hypequery/datasets",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Code-first TypeScript semantic layer for ClickHouse datasets, metrics, multi-tenancy, and AI agents",
5
5
  "keywords": [
6
6
  "semantic-layer",
@@ -42,10 +42,10 @@
42
42
  "dist"
43
43
  ],
44
44
  "dependencies": {
45
- "@hypequery/protocol": "^0.17.0",
45
+ "@hypequery/protocol": "^0.18.0",
46
46
  "@noble/hashes": "^1.8.0",
47
47
  "zod": "^3.22.4",
48
- "zod-to-json-schema": "^3.23.5"
48
+ "zod-to-json-schema": "^3.25.2"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "zod": "^3.22.4"
@@ -58,9 +58,9 @@
58
58
  "devDependencies": {
59
59
  "@types/node": "^18.19.80",
60
60
  "typescript": "^5.7.3",
61
- "@vitest/coverage-v8": "^3.2.6",
62
- "vitest": "^3.2.6",
63
- "@hypequery/protocol-conformance": "^0.14.0"
61
+ "@vitest/coverage-v8": "^5.0.2",
62
+ "vitest": "^5.0.2",
63
+ "@hypequery/protocol-conformance": "^0.15.0"
64
64
  },
65
65
  "repository": {
66
66
  "type": "git",
@@ -83,6 +83,6 @@
83
83
  "test:types": "tsc --project tsconfig.type-tests.json",
84
84
  "test:watch": "vitest watch",
85
85
  "test:coverage": "vitest run --coverage",
86
- "lint": "eslint --ext .ts \"src/**/*.ts\""
86
+ "lint": "eslint \"src/**/*.ts\""
87
87
  }
88
88
  }