@hypequery/datasets 0.21.0 → 0.23.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 (174) hide show
  1. package/README.md +6 -0
  2. package/dist/api.type-test.js +7 -0
  3. package/dist/cache/protocol-cache-keys.d.ts.map +1 -1
  4. package/dist/cache/protocol-cache-keys.js +5 -0
  5. package/dist/cache/query-signature.d.ts.map +1 -1
  6. package/dist/cache/query-signature.js +9 -0
  7. package/dist/catalog.d.ts +12 -0
  8. package/dist/catalog.d.ts.map +1 -1
  9. package/dist/catalog.js +14 -1
  10. package/dist/constants.d.ts +12 -1
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +24 -0
  13. package/dist/contract.d.ts +4 -1
  14. package/dist/contract.d.ts.map +1 -1
  15. package/dist/contract.js +4 -0
  16. package/dist/dataset-compilation.d.ts +50 -0
  17. package/dist/dataset-compilation.d.ts.map +1 -0
  18. package/dist/dataset-compilation.js +1 -0
  19. package/dist/dataset-query.d.ts +3 -3
  20. package/dist/dataset-query.d.ts.map +1 -1
  21. package/dist/dataset-query.js +7 -71
  22. package/dist/dataset-sql-dialect.d.ts +11 -0
  23. package/dist/dataset-sql-dialect.d.ts.map +1 -0
  24. package/dist/dataset-sql-dialect.js +1 -0
  25. package/dist/dataset.d.ts +3 -2
  26. package/dist/dataset.d.ts.map +1 -1
  27. package/dist/execution-capabilities.d.ts +28 -0
  28. package/dist/execution-capabilities.d.ts.map +1 -0
  29. package/dist/execution-capabilities.js +17 -0
  30. package/dist/execution-capabilities.json +13 -0
  31. package/dist/executor.d.ts +17 -38
  32. package/dist/executor.d.ts.map +1 -1
  33. package/dist/executor.js +40 -400
  34. package/dist/index.d.ts +10 -5
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -3
  37. package/dist/internal.d.ts +3 -0
  38. package/dist/internal.d.ts.map +1 -1
  39. package/dist/internal.js +2 -0
  40. package/dist/measure.d.ts +54 -17
  41. package/dist/measure.d.ts.map +1 -1
  42. package/dist/measure.js +3 -63
  43. package/dist/metric-query-engine.d.ts +29 -0
  44. package/dist/metric-query-engine.d.ts.map +1 -0
  45. package/dist/metric-query-engine.js +106 -0
  46. package/dist/portable-executor.d.ts +20 -6
  47. package/dist/portable-executor.d.ts.map +1 -1
  48. package/dist/portable-executor.js +29 -9
  49. package/dist/protocol-adapter.d.ts.map +1 -1
  50. package/dist/protocol-adapter.js +1 -0
  51. package/dist/protocol-rehydrate.d.ts.map +1 -1
  52. package/dist/protocol-rehydrate.js +9 -2
  53. package/dist/query-builder-protocol.d.ts +11 -0
  54. package/dist/query-builder-protocol.d.ts.map +1 -1
  55. package/dist/query-helpers.d.ts +10 -10
  56. package/dist/query-helpers.d.ts.map +1 -1
  57. package/dist/query-helpers.js +1 -3
  58. package/dist/query-planner.d.ts +7 -3
  59. package/dist/query-planner.d.ts.map +1 -1
  60. package/dist/query-planner.js +10 -12
  61. package/dist/relationship-check.d.ts +3 -2
  62. package/dist/relationship-check.d.ts.map +1 -1
  63. package/dist/relationship-check.js +8 -3
  64. package/dist/relationships.d.ts +6 -16
  65. package/dist/relationships.d.ts.map +1 -1
  66. package/dist/relationships.js +3 -12
  67. package/dist/semantic-planner.d.ts.map +1 -1
  68. package/dist/semantic-planner.js +4 -0
  69. package/dist/semantic-query-schema.d.ts +6 -0
  70. package/dist/semantic-query-schema.d.ts.map +1 -1
  71. package/dist/semantic-query-schema.js +31 -4
  72. package/dist/types.d.ts +67 -11
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/utils/agent-catalog-projection.d.ts +1 -0
  75. package/dist/utils/agent-catalog-projection.d.ts.map +1 -1
  76. package/dist/utils/agent-catalog-projection.js +2 -1
  77. package/dist/utils/base-measure-definition.d.ts +23 -0
  78. package/dist/utils/base-measure-definition.d.ts.map +1 -0
  79. package/dist/utils/base-measure-definition.js +65 -0
  80. package/dist/utils/build-dataset-query-builder.d.ts +5 -0
  81. package/dist/utils/build-dataset-query-builder.d.ts.map +1 -0
  82. package/dist/utils/build-dataset-query-builder.js +65 -0
  83. package/dist/utils/calendar-shift-sql.d.ts +18 -0
  84. package/dist/utils/calendar-shift-sql.d.ts.map +1 -0
  85. package/dist/utils/calendar-shift-sql.js +21 -0
  86. package/dist/utils/clickhouse-dataset-sql-dialect.d.ts +4 -0
  87. package/dist/utils/clickhouse-dataset-sql-dialect.d.ts.map +1 -0
  88. package/dist/utils/clickhouse-dataset-sql-dialect.js +6 -0
  89. package/dist/utils/compile-dataset-query.d.ts +10 -0
  90. package/dist/utils/compile-dataset-query.d.ts.map +1 -0
  91. package/dist/utils/compile-dataset-query.js +72 -0
  92. package/dist/utils/composite-time-measure-sql.d.ts.map +1 -1
  93. package/dist/utils/composite-time-measure-sql.js +2 -1
  94. package/dist/utils/dataset-definition-validation.d.ts.map +1 -1
  95. package/dist/utils/dataset-definition-validation.js +52 -2
  96. package/dist/utils/dataset-derived-query.d.ts +6 -2
  97. package/dist/utils/dataset-derived-query.d.ts.map +1 -1
  98. package/dist/utils/dataset-derived-query.js +28 -26
  99. package/dist/utils/dataset-filter-types.d.ts +28 -0
  100. package/dist/utils/dataset-filter-types.d.ts.map +1 -0
  101. package/dist/utils/dataset-filter-types.js +1 -0
  102. package/dist/utils/dataset-having.d.ts +21 -0
  103. package/dist/utils/dataset-having.d.ts.map +1 -0
  104. package/dist/utils/dataset-having.js +106 -0
  105. package/dist/utils/dataset-normalization.d.ts.map +1 -1
  106. package/dist/utils/dataset-normalization.js +5 -1
  107. package/dist/utils/dataset-query-validation.d.ts.map +1 -1
  108. package/dist/utils/dataset-query-validation.js +17 -3
  109. package/dist/utils/dataset-sql-dialect.d.ts +5 -0
  110. package/dist/utils/dataset-sql-dialect.d.ts.map +1 -0
  111. package/dist/utils/dataset-sql-dialect.js +5 -0
  112. package/dist/utils/dataset-target.d.ts +3 -0
  113. package/dist/utils/dataset-target.d.ts.map +1 -0
  114. package/dist/utils/dataset-target.js +3 -0
  115. package/dist/utils/filter-definition.d.ts +3 -0
  116. package/dist/utils/filter-definition.d.ts.map +1 -0
  117. package/dist/utils/filter-definition.js +3 -0
  118. package/dist/utils/metric-derived-query.d.ts +8 -0
  119. package/dist/utils/metric-derived-query.d.ts.map +1 -0
  120. package/dist/utils/metric-derived-query.js +106 -0
  121. package/dist/utils/metric-query-builder.d.ts +5 -0
  122. package/dist/utils/metric-query-builder.d.ts.map +1 -0
  123. package/dist/utils/metric-query-builder.js +50 -0
  124. package/dist/utils/metric-query-result.d.ts +10 -0
  125. package/dist/utils/metric-query-result.d.ts.map +1 -0
  126. package/dist/utils/metric-query-result.js +18 -0
  127. package/dist/utils/metric-query-validation.d.ts +6 -0
  128. package/dist/utils/metric-query-validation.d.ts.map +1 -0
  129. package/dist/utils/metric-query-validation.js +116 -0
  130. package/dist/utils/protocol-metric-expressions.d.ts +8 -0
  131. package/dist/utils/protocol-metric-expressions.d.ts.map +1 -1
  132. package/dist/utils/protocol-metric-expressions.js +23 -11
  133. package/dist/utils/relationship-builder-plan.d.ts +6 -2
  134. package/dist/utils/relationship-builder-plan.d.ts.map +1 -1
  135. package/dist/utils/relationship-builder-plan.js +24 -15
  136. package/dist/utils/relationship-definition.d.ts +6 -0
  137. package/dist/utils/relationship-definition.d.ts.map +1 -0
  138. package/dist/utils/relationship-definition.js +9 -0
  139. package/dist/utils/relationship-key-check.d.ts +4 -0
  140. package/dist/utils/relationship-key-check.d.ts.map +1 -1
  141. package/dist/utils/relationship-key-check.js +19 -7
  142. package/dist/utils/relationship-keys.d.ts +17 -0
  143. package/dist/utils/relationship-keys.d.ts.map +1 -0
  144. package/dist/utils/relationship-keys.js +63 -0
  145. package/dist/utils/relationship-measure-sql.d.ts +14 -0
  146. package/dist/utils/relationship-measure-sql.d.ts.map +1 -0
  147. package/dist/utils/relationship-measure-sql.js +44 -0
  148. package/dist/utils/relationship-measure-types.d.ts +36 -0
  149. package/dist/utils/relationship-measure-types.d.ts.map +1 -0
  150. package/dist/utils/relationship-measure-types.js +1 -0
  151. package/dist/utils/relationship-measures.d.ts +23 -0
  152. package/dist/utils/relationship-measures.d.ts.map +1 -0
  153. package/dist/utils/relationship-measures.js +62 -0
  154. package/dist/utils/relationship-validation.d.ts +1 -1
  155. package/dist/utils/relationship-validation.d.ts.map +1 -1
  156. package/dist/utils/relationship-validation.js +3 -5
  157. package/dist/utils/semantic-query-syntax.d.ts +6 -0
  158. package/dist/utils/semantic-query-syntax.d.ts.map +1 -0
  159. package/dist/utils/semantic-query-syntax.js +24 -0
  160. package/dist/utils/shift-measure-sql.d.ts.map +1 -1
  161. package/dist/utils/shift-measure-sql.js +10 -3
  162. package/dist/utils/snapshot-execution-context.d.ts +4 -0
  163. package/dist/utils/snapshot-execution-context.d.ts.map +1 -0
  164. package/dist/utils/snapshot-execution-context.js +16 -0
  165. package/dist/utils/time-measure-context-sql.d.ts.map +1 -1
  166. package/dist/utils/time-measure-context-sql.js +8 -2
  167. package/dist/utils/time-measure-dataset-sql.d.ts.map +1 -1
  168. package/dist/utils/time-measure-dataset-sql.js +3 -2
  169. package/dist/utils/time-measure-result-sql.d.ts.map +1 -1
  170. package/dist/utils/time-measure-result-sql.js +2 -1
  171. package/dist/utils/time-measure-source-sql.d.ts.map +1 -1
  172. package/dist/utils/time-measure-source-sql.js +8 -4
  173. package/dist/validation.js +1 -1
  174. package/package.json +10 -5
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export { createDatasetRegistry } from './registry.js';
11
11
  export { publishDatasets } from './publishing/publisher.js';
12
12
  export type { DatasetPublisher } from './publishing/publisher.js';
13
13
  export type { PublishableMetric, PublishedMetricHandle, PublishedMetricMap, PublishedMetrics, PublishedDataset, PublishedDatasetRegistry, PublishDatasetOptions, } from './publishing/types.js';
14
- export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields } from './catalog.js';
14
+ export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields, getQueryableRelationshipMeasures } from './catalog.js';
15
15
  export { listQueryableRelationshipFields } from './utils/relationship-fields.js';
16
16
  export type { DatasetCatalog, DatasetCatalogMap, DatasetCatalogSource, DimensionCatalogEntry, MeasureCatalogEntry, SegmentCatalogEntry, MetricCatalogEntry, FilterCatalogEntry, RelationshipCatalogEntry, } from './catalog.js';
17
17
  export { DEFAULT_AGENT_CATALOG_MAX_BYTES, assertAgentSafeCatalogBudget, projectAgentSafeCatalog, projectTrustedDebugCatalog, } from './agent-catalog.js';
@@ -26,8 +26,8 @@ export { rehydrateProtocolDeploymentContract } from './protocol-rehydrate.js';
26
26
  export type { BuildProtocolDatasetContractOptions } from './protocol-adapter.js';
27
27
  export { publishToCloud } from './cloud-publishing.js';
28
28
  export type { CloudPublishingOptions } from './cloud-publishing.js';
29
- export { createPortableSemanticExecutor, PortableExecutionBudgetError, PortableExecutionTenantError, PortableExecutionUnsupportedError, } from './portable-executor.js';
30
- export type { PortableSemanticBudget, PortableSemanticExecutionInput, PortableSemanticExecutorOptions, } from './portable-executor.js';
29
+ export { createPortableSemanticExecutor, createPortableSemanticRuntime, PortableExecutionBudgetError, PortableExecutionTenantError, PortableExecutionUnsupportedError, } from './portable-executor.js';
30
+ export type { PortableSemanticBudget, PortableSemanticRuntime, PortableDatasetCompilation, PortableSemanticExecutionInput, PortableSemanticExecutorOptions, } from './portable-executor.js';
31
31
  export { compilePortableSqlExpression, DEFAULT_SQL_PORTABILITY_LIMITS, } from './sql-portability.js';
32
32
  export type { SqlPortabilityIssue, SqlPortabilityIssueCode, SqlPortabilityLimits, SqlPortabilityOptions, SqlPortabilityResult, } from './sql-portability.js';
33
33
  export type { SemanticContract, SerializeSemanticContractOptions, ContractDataset, ContractDimension, ContractMeasure, ContractMetric, ContractFilter, ContractRelationship, } from './contract.js';
@@ -36,6 +36,7 @@ export { buildDatasetInputSchema, buildMetricInputSchema, buildCanonicalSemantic
36
36
  export type { CanonicalSemanticQuerySchemas, SemanticMetricQueryContract, SemanticQuerySchemaLimits, SemanticQuerySchemaOptions, SemanticQuerySchemaSource, } from './semantic-query-schema.js';
37
37
  export type { AISDKToolDefinition, DatasetToolAnalytics, DatasetToolMode, GenerateDatasetToolsOptions, JsonSchema, McpToolDefinition, OpenAIToolDefinition, SemanticToolDefinition, } from './tools.js';
38
38
  export { createDatasetClient } from './executor.js';
39
+ export type { DatasetSqlDialect } from './dataset-sql-dialect.js';
39
40
  export type { DatasetClient, CreateDatasetClientOptions } from './executor.js';
40
41
  export { createMemoryCacheStore } from './cache/semantic-query-cache.js';
41
42
  export type { SemanticCacheEntry, SemanticCacheMetaInfo, SemanticCacheOptions, SemanticCacheRuntime, SemanticCacheStats, SemanticCacheStore, } from './cache/semantic-query-cache.js';
@@ -48,7 +49,11 @@ export { validateFilterValue, matchesFieldType } from './validation.js';
48
49
  export type { QueryBuilderLike, QueryBuilderFactoryLike, QueryBuilderFactoryCompatible, QueryBuilderFactoryInput, } from './query-builder-protocol.js';
49
50
  export { toQueryBuilderFactory } from './query-builder-protocol.js';
50
51
  export { validateSQLIdentifier, isSafeSQLIdentifier, quoteSQLIdentifier } from './sql-utils.js';
51
- export { GRAIN_FUNCTIONS, SEMANTIC_FILTER_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
52
- export type { FieldType, DimensionType, DimensionOptions, DimensionDefinition, MeasureOptions, MeasureDefinition, MeasureTimeInterval, WindowMeasureDefinition, ShiftMeasureDefinition, DatasetMeasureDefinition, DerivedMeasureDefinition, DerivedMeasureOptions, DerivedMeasureUses, InferDimensionType, RelationshipKind, RelationshipDefinition, AggregationType, MeasureAggregation, AggregationSpec, FormulaExpr, DerivedMetricSpec, TimeGrain, MetricRef, BaseMetricRef, DerivedMetricRef, GrainedMetricRef, MetricContract, MetricFilter, MetricOrderBy, MetricQuery, DatasetQuery, MetricResultMeta, MetricResult, DatasetQueryResult, MetricHandle, ExecutionContext, SemanticExecutionRuntime, SemanticTenantRuntime, SemanticFilterDefinition, SegmentDefinition, SemanticFiltersDefinition, DatasetConfig, DatasetDefaults, DatasetFreshness, DatasetLimits, DatasetCachePolicy, SemanticMetadata, SemanticSensitivity, DatasetInstance, AnyDatasetInstance, BaseMetricConfig, DerivedMetricConfig, DatasetRegistryInstance, DatasetFieldNames, DatasetDimensionNames, DatasetQueryableDimensions, DatasetMeasureNames, DatasetSegmentNames, DatasetOrderableNames, DatasetQueryFor, DatasetRow, DatasetRowFor, DatasetQueryResultFor, MetricQueryFor, MetricRow, MetricRowFor, MetricResultFor, KnownStringKeys, } from './types.js';
52
+ export { GRAIN_FUNCTIONS, SEMANTIC_FILTER_OPERATORS, SEMANTIC_HAVING_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
53
+ export type { FieldType, DimensionType, DimensionOptions, DimensionDefinition, MeasureOptions, MeasureDefinition, MeasureTimeInterval, WindowMeasureDefinition, ShiftMeasureDefinition, DatasetMeasureDefinition, DerivedMeasureDefinition, DerivedMeasureOptions, DerivedMeasureUses, InferDimensionType, RelationshipKind, RelationshipDefinition, RelationshipKey, RelationshipJoin, AggregationType, MeasureAggregation, AggregationSpec, FormulaExpr, DerivedMetricSpec, TimeGrain, MetricRef, BaseMetricRef, DerivedMetricRef, GrainedMetricRef, MetricContract, MetricFilter, MetricFilterOperator, MetricOrderBy, MetricQuery, DatasetQuery, MetricResultMeta, MetricResult, DatasetQueryResult, MetricHandle, ExecutionContext, SemanticExecutionRuntime, SemanticTenantRuntime, SemanticFilterDefinition, SegmentDefinition, SemanticFiltersDefinition, DatasetConfig, DatasetDefaults, DatasetFreshness, DatasetLimits, DatasetCachePolicy, SemanticMetadata, SemanticSensitivity, DatasetInstance, AnyDatasetInstance, BaseMetricConfig, DerivedMetricConfig, DatasetRegistryInstance, DatasetFieldNames, DatasetDimensionNames, DatasetQueryableDimensions, DatasetQueryableMeasures, DatasetMeasureNames, DatasetSegmentNames, DatasetOrderableNames, DatasetQueryFor, DatasetHavingCondition, DatasetHavingFor, DatasetHavingOperator, DatasetRow, DatasetRowFor, DatasetQueryResultFor, MetricQueryFor, MetricRow, MetricRowFor, MetricResultFor, KnownStringKeys, } from './types.js';
53
54
  export { ProtocolSchemaAdapterError, zodToProtocolSchema } from './protocol-schema-adapter.js';
55
+ export type { DatasetCompilation, DatasetCompiledStatement, DatasetCompilationDescription, } from './dataset-compilation.js';
56
+ export { DATASET_EXECUTION_CAPABILITIES } from './execution-capabilities.js';
57
+ export type { DatasetFeature, DatasetFeatureSupport, DatasetExecutionCapabilities } from './execution-capabilities.js';
58
+ export type { DatasetFilterNames, DatasetFilterFor } from './utils/dataset-filter-types.js';
54
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ export { createDatasetRegistry } from './registry.js';
18
18
  // First-class publication builder for Serve, MCP, and agent consumers.
19
19
  export { publishDatasets } from './publishing/publisher.js';
20
20
  // Catalog
21
- export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields } from './catalog.js';
21
+ export { getDatasetCatalog, getDatasetCatalogs, getQueryableRelationshipFields, getQueryableRelationshipMeasures } from './catalog.js';
22
22
  export { listQueryableRelationshipFields } from './utils/relationship-fields.js';
23
23
  // Agent-safe and separately authorized trusted-debug catalog projections.
24
24
  export { DEFAULT_AGENT_CATALOG_MAX_BYTES, assertAgentSafeCatalogBudget, projectAgentSafeCatalog, projectTrustedDebugCatalog, } from './agent-catalog.js';
@@ -31,7 +31,7 @@ export { buildProtocolDeploymentContract } from './protocol-deployment-adapter.j
31
31
  export { rehydrateProtocolDeploymentContract } from './protocol-rehydrate.js';
32
32
  export { publishToCloud } from './cloud-publishing.js';
33
33
  // Portable native execution of a semantic invocation (decision 0005).
34
- export { createPortableSemanticExecutor, PortableExecutionBudgetError, PortableExecutionTenantError, PortableExecutionUnsupportedError, } from './portable-executor.js';
34
+ export { createPortableSemanticExecutor, createPortableSemanticRuntime, PortableExecutionBudgetError, PortableExecutionTenantError, PortableExecutionUnsupportedError, } from './portable-executor.js';
35
35
  // SQL portability compiler (R1A-07)
36
36
  export { compilePortableSqlExpression, DEFAULT_SQL_PORTABILITY_LIMITS, } from './sql-portability.js';
37
37
  // Agent/tool metadata
@@ -52,5 +52,6 @@ export { toQueryBuilderFactory } from './query-builder-protocol.js';
52
52
  // SQL utilities
53
53
  export { validateSQLIdentifier, isSafeSQLIdentifier, quoteSQLIdentifier } from './sql-utils.js';
54
54
  // Constants
55
- export { GRAIN_FUNCTIONS, SEMANTIC_FILTER_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
55
+ export { GRAIN_FUNCTIONS, SEMANTIC_FILTER_OPERATORS, SEMANTIC_HAVING_OPERATORS, SUPPORTED_TIME_GRAINS } from './constants.js';
56
56
  export { ProtocolSchemaAdapterError, zodToProtocolSchema } from './protocol-schema-adapter.js';
57
+ export { DATASET_EXECUTION_CAPABILITIES } from './execution-capabilities.js';
@@ -12,6 +12,9 @@ export type { DatasetClient, CreateDatasetClientOptions, MetricQueryEngineOption
12
12
  export { createInMemoryBackend } from './in-memory-backend.js';
13
13
  export type { InMemoryTable, InMemoryTables } from './in-memory-backend.js';
14
14
  export type { PlanNode, SemanticBackend, SemanticBackendResult, SemanticExpression, SemanticAggregationPlan, SemanticDimensionPlan, SemanticGrainPlan, } from './semantic-plan.js';
15
+ export type { DatasetSqlDialect } from './dataset-sql-dialect.js';
16
+ export { clickhouseDatasetSqlDialect } from './utils/clickhouse-dataset-sql-dialect.js';
17
+ export { resolveDatasetSqlDialect } from './utils/dataset-sql-dialect.js';
15
18
  export type { QueryBuilderLike, QueryBuilderFactoryLike } from './query-builder-protocol.js';
16
19
  export type { ValidationResult } from './validation.js';
17
20
  export { validateFilterValue, matchesFieldType } from './validation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1F,YAAY,EAAE,aAAa,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC1F,YAAY,EAAE,aAAa,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC5E,YAAY,EACV,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxE,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
package/dist/internal.js CHANGED
@@ -10,6 +10,8 @@
10
10
  // Dataset client internals - used by serve to create metric/dataset endpoints
11
11
  export { createDatasetClient, DatasetClientImpl, MetricQueryEngine } from './executor.js';
12
12
  export { createInMemoryBackend } from './in-memory-backend.js';
13
+ export { clickhouseDatasetSqlDialect } from './utils/clickhouse-dataset-sql-dialect.js';
14
+ export { resolveDatasetSqlDialect } from './utils/dataset-sql-dialect.js';
13
15
  export { validateFilterValue, matchesFieldType } from './validation.js';
14
16
  // SQL utilities - used by serve for SQL generation
15
17
  export { validateSQLIdentifier, isSafeSQLIdentifier, quoteSQLIdentifier } from './sql-utils.js';
package/dist/measure.d.ts CHANGED
@@ -1,38 +1,76 @@
1
+ import { createPercentileMeasure, createMedianMeasure, createDerivedMeasure } from './utils/base-measure-definition.js';
2
+ export { validatePercentileLevel } from './utils/base-measure-definition.js';
1
3
  import { type ShiftMeasureOptions } from './utils/shift-measure-definition.js';
2
- import type { DerivedMeasureDefinition, DerivedMeasureOptions, DerivedMeasureUses, MeasureDefinition, MeasureOptions, MeasureTimeInterval, TimeGrain, WindowMeasureDefinition, ShiftMeasureDefinition } from './types.js';
4
+ import type { MeasureTimeInterval, TimeGrain, WindowMeasureDefinition, ShiftMeasureDefinition } from './types.js';
3
5
  import { type WindowMeasureOptions } from './utils/window-measure-definition.js';
4
- export declare function validatePercentileLevel(level: number): void;
5
- declare function createPercentileMeasure(field: string, level: number, opts?: MeasureOptions): MeasureDefinition;
6
- declare function createDerivedMeasure<const TUses extends DerivedMeasureUses>(options: DerivedMeasureOptions<TUses>): DerivedMeasureDefinition<TUses>;
7
6
  export declare const measure: {
8
- readonly sum: (field: string, opts?: MeasureOptions) => MeasureDefinition;
9
- readonly count: (field: string, opts?: MeasureOptions) => MeasureDefinition;
10
- readonly countDistinct: (field: string, opts?: MeasureOptions) => MeasureDefinition;
7
+ readonly sum: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
8
+ aggregation: "sum";
9
+ field: TField;
10
+ } & TOptions;
11
+ readonly count: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
12
+ aggregation: "count";
13
+ field: TField;
14
+ } & TOptions;
15
+ readonly countDistinct: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
16
+ aggregation: "countDistinct";
17
+ field: TField;
18
+ } & TOptions;
11
19
  /**
12
20
  * Estimated number of distinct values (ClickHouse `uniq`). Uses bounded
13
21
  * memory on high-cardinality columns; catalogs mark it `approximate`.
14
22
  */
15
- readonly approxCountDistinct: (field: string, opts?: MeasureOptions) => MeasureDefinition;
16
- readonly avg: (field: string, opts?: MeasureOptions) => MeasureDefinition;
17
- readonly min: (field: string, opts?: MeasureOptions) => MeasureDefinition;
18
- readonly max: (field: string, opts?: MeasureOptions) => MeasureDefinition;
23
+ readonly approxCountDistinct: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
24
+ aggregation: "approxCountDistinct";
25
+ field: TField;
26
+ } & TOptions;
27
+ readonly avg: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
28
+ aggregation: "avg";
29
+ field: TField;
30
+ } & TOptions;
31
+ readonly min: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
32
+ aggregation: "min";
33
+ field: TField;
34
+ } & TOptions;
35
+ readonly max: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
36
+ aggregation: "max";
37
+ field: TField;
38
+ } & TOptions;
19
39
  /** Approximate percentile of a numeric field (ClickHouse `quantile(level)`). */
20
40
  readonly percentile: typeof createPercentileMeasure;
21
41
  /** Median — sugar for `percentile(field, 0.5)`. */
22
- readonly median: (field: string, opts?: MeasureOptions) => MeasureDefinition;
42
+ readonly median: typeof createMedianMeasure;
23
43
  /**
24
44
  * Value of `field` on the row where `by` is greatest (ClickHouse `argMax`).
25
45
  * The runtime value follows `field`'s type; aggregate result columns are
26
46
  * exposed as strings to match the dataset result contract.
27
47
  * Measure filters are not supported on argMax/argMin.
28
48
  */
29
- readonly argMax: (field: string, by: string, opts?: Omit<MeasureOptions, "filters">) => MeasureDefinition;
49
+ readonly argMax: <const TField extends string, const TArg extends string, const TOptions extends Omit<import("./types.js").MeasureOptions, "filters"> = Omit<import("./types.js").MeasureOptions, "filters">>(field: TField, by: TArg, opts?: (TOptions & {
50
+ filters?: never;
51
+ }) | undefined) => import("./types.js").MeasureDefinition & {
52
+ aggregation: "argMax";
53
+ field: TField;
54
+ argField: TArg;
55
+ } & TOptions;
30
56
  /** Value of `field` on the row where `by` is smallest (ClickHouse `argMin`). */
31
- readonly argMin: (field: string, by: string, opts?: Omit<MeasureOptions, "filters">) => MeasureDefinition;
57
+ readonly argMin: <const TField extends string, const TArg extends string, const TOptions extends Omit<import("./types.js").MeasureOptions, "filters"> = Omit<import("./types.js").MeasureOptions, "filters">>(field: TField, by: TArg, opts?: (TOptions & {
58
+ filters?: never;
59
+ }) | undefined) => import("./types.js").MeasureDefinition & {
60
+ aggregation: "argMin";
61
+ field: TField;
62
+ argField: TArg;
63
+ } & TOptions;
32
64
  /** Sample standard deviation (ClickHouse `stddevSamp`). */
33
- readonly stddev: (field: string, opts?: MeasureOptions) => MeasureDefinition;
65
+ readonly stddev: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
66
+ aggregation: "stddev";
67
+ field: TField;
68
+ } & TOptions;
34
69
  /** Sample variance (ClickHouse `varSamp`). */
35
- readonly variance: (field: string, opts?: MeasureOptions) => MeasureDefinition;
70
+ readonly variance: <const TField extends string, const TOptions extends import("./types.js").MeasureOptions = import("./types.js").MeasureOptions>(field: TField, opts?: TOptions | undefined) => import("./types.js").MeasureDefinition & {
71
+ aggregation: "variance";
72
+ field: TField;
73
+ } & TOptions;
36
74
  /** A formula over measures owned by this dataset. */
37
75
  readonly derived: typeof createDerivedMeasure;
38
76
  /** Evaluate a measure and its dependencies in an earlier aligned period. */
@@ -44,5 +82,4 @@ export declare const measure: {
44
82
  /** Running sum/count/minimum/maximum over all rows through each bucket. */
45
83
  readonly cumulative: <const TMeasureName extends string>(baseMeasure: TMeasureName, options?: WindowMeasureOptions) => WindowMeasureDefinition<TMeasureName>;
46
84
  };
47
- export {};
48
85
  //# sourceMappingURL=measure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAgBtG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI3D;AAqBD,iBAAS,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,iBAAiB,CAcvG;AAED,iBAAS,oBAAoB,CAAC,KAAK,CAAC,KAAK,SAAS,kBAAkB,EAClE,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,GACpC,wBAAwB,CAAC,KAAK,CAAC,CASjC;AAED,eAAO,MAAM,OAAO;0BAnEH,MAAM,SAAS,cAAc,KAAG,iBAAiB;4BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;oCAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAuEhE;;;OAGG;0CA1EY,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;0BAAjD,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA+EhE,gFAAgF;;IAEhF,mDAAmD;6BACnC,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAEjE;;;;;OAKG;6BArEY,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAuE7F,gFAAgF;6BAvEjE,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,KAAG,iBAAiB;IAyE7F,2DAA2D;6BA7F5C,MAAM,SAAS,cAAc,KAAG,iBAAiB;IA+FhE,8CAA8C;+BA/F/B,MAAM,SAAS,cAAc,KAAG,iBAAiB;IAiGhE,qDAAqD;;IAErD,4EAA4E;2BAC9D,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,mBAAmB,KAAG,sBAAsB,CAAC,YAAY,CAAC;IAEzK,yEAAyE;8BACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAE9K,+EAA+E;4BAChE,YAAY,SAAS,MAAM,eAAe,YAAY,SAAS,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAElL,2EAA2E;gCACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;CAEzI,CAAC"}
1
+ {"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AACrK,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAsB,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AACnG,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEtG,eAAO,MAAM,OAAO;;;;;;;;;;;;;IAIlB;;;OAGG;;;;;;;;;;;;;;;;;IAKH,gFAAgF;;IAEhF,mDAAmD;;IAEnD;;;;;OAKG;;;;;;;;IAEH,gFAAgF;;;;;;;;IAEhF,2DAA2D;;;;;IAE3D,8CAA8C;;;;;IAE9C,qDAAqD;;IAErD,4EAA4E;2BAC9D,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,mBAAmB,KAAG,sBAAsB,CAAC,YAAY,CAAC;IAEzK,yEAAyE;8BACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,mBAAmB,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAE9K,+EAA+E;4BAChE,YAAY,SAAS,MAAM,eAAe,YAAY,SAAS,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;IAElL,2EAA2E;gCACxD,YAAY,SAAS,MAAM,eAAe,YAAY,YAAY,oBAAoB,KAAG,uBAAuB,CAAC,YAAY,CAAC;CAEzI,CAAC"}
package/dist/measure.js CHANGED
@@ -1,67 +1,7 @@
1
+ import { createMeasureHelper, createArgMeasureHelper, createPercentileMeasure, createMedianMeasure, createDerivedMeasure } from './utils/base-measure-definition.js';
2
+ export { validatePercentileLevel } from './utils/base-measure-definition.js';
1
3
  import { createShiftMeasure } from './utils/shift-measure-definition.js';
2
- import { snapshotSemanticMetadata } from './utils/semantic-metadata.js';
3
4
  import { createWindowMeasure } from './utils/window-measure-definition.js';
4
- function createMeasureHelper(aggregation) {
5
- return (field, opts) => ({
6
- __type: 'measure_definition',
7
- aggregation,
8
- field,
9
- sql: opts?.sql,
10
- dependencies: opts?.dependencies,
11
- label: opts?.label,
12
- description: opts?.description,
13
- ...snapshotSemanticMetadata(opts ?? {}),
14
- filters: opts?.filters,
15
- });
16
- }
17
- export function validatePercentileLevel(level) {
18
- if (typeof level !== 'number' || !Number.isFinite(level) || level < 0 || level > 1) {
19
- throw new Error(`Invalid percentile level ${level}: expected a number between 0 and 1.`);
20
- }
21
- }
22
- function createArgMeasureHelper(aggregation) {
23
- return (field, by, opts) => {
24
- if (typeof by !== 'string' || by.trim().length === 0) {
25
- throw new Error(`measure.${aggregation}("${field}", by) requires a "by" field.`);
26
- }
27
- return {
28
- __type: 'measure_definition',
29
- aggregation,
30
- field,
31
- argField: by,
32
- sql: opts?.sql,
33
- dependencies: opts?.dependencies,
34
- label: opts?.label,
35
- description: opts?.description,
36
- ...snapshotSemanticMetadata(opts ?? {}),
37
- };
38
- };
39
- }
40
- function createPercentileMeasure(field, level, opts) {
41
- validatePercentileLevel(level);
42
- return {
43
- __type: 'measure_definition',
44
- aggregation: 'percentile',
45
- field,
46
- level,
47
- sql: opts?.sql,
48
- dependencies: opts?.dependencies,
49
- label: opts?.label,
50
- description: opts?.description,
51
- ...snapshotSemanticMetadata(opts ?? {}),
52
- filters: opts?.filters,
53
- };
54
- }
55
- function createDerivedMeasure(options) {
56
- return {
57
- __type: 'derived_measure_definition',
58
- uses: { ...options.uses },
59
- formula: options.formula,
60
- label: options.label,
61
- description: options.description,
62
- ...snapshotSemanticMetadata(options),
63
- };
64
- }
65
5
  export const measure = {
66
6
  sum: createMeasureHelper('sum'),
67
7
  count: createMeasureHelper('count'),
@@ -77,7 +17,7 @@ export const measure = {
77
17
  /** Approximate percentile of a numeric field (ClickHouse `quantile(level)`). */
78
18
  percentile: createPercentileMeasure,
79
19
  /** Median — sugar for `percentile(field, 0.5)`. */
80
- median: (field, opts) => createPercentileMeasure(field, 0.5, opts),
20
+ median: createMedianMeasure,
81
21
  /**
82
22
  * Value of `field` on the row where `by` is greatest (ClickHouse `argMax`).
83
23
  * The runtime value follows `field`'s type; aggregate result columns are
@@ -0,0 +1,29 @@
1
+ /** Metric validation, compilation orchestration and execution. */
2
+ import type { MetricRef, GrainedMetricRef, MetricQuery, MetricResult, ExecutionContext } from './types.js';
3
+ import type { QueryBuilderFactoryLike, QueryBuilderFactoryInput } from './query-builder-protocol.js';
4
+ import type { ValidationResult } from './validation.js';
5
+ export interface MetricQueryEngineOptions {
6
+ /** Query builder factory for executing metrics. */
7
+ builderFactory: QueryBuilderFactoryInput;
8
+ }
9
+ export declare class MetricQueryEngine {
10
+ private readonly builderFactory;
11
+ constructor(options: MetricQueryEngineOptions);
12
+ protected getBuilderFactory(): QueryBuilderFactoryLike;
13
+ /** Resolve a per-call override against this engine's default factory. */
14
+ protected resolveBuilderFactory(context?: ExecutionContext): QueryBuilderFactoryLike;
15
+ /**
16
+ * Execute a metric query. Generates SQL, applies tenant/filter context, executes.
17
+ */
18
+ run<T = Record<string, unknown>>(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): Promise<MetricResult<T>>;
19
+ /**
20
+ * Generate SQL without executing.
21
+ */
22
+ toSQL(metric: MetricRef | GrainedMetricRef, query?: MetricQuery, context?: ExecutionContext): string;
23
+ /**
24
+ * Validate a metric query against the metric's contract.
25
+ */
26
+ validate(metric: MetricRef | GrainedMetricRef, query: MetricQuery, context?: ExecutionContext): ValidationResult;
27
+ private runViaBuilder;
28
+ }
29
+ //# sourceMappingURL=metric-query-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-query-engine.d.ts","sourceRoot":"","sources":["../src/metric-query-engine.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,KAAK,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAErG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQxD,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,cAAc,EAAE,wBAAwB,CAAC;CAC1C;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;gBAE7C,OAAO,EAAE,wBAAwB;IAI7C,SAAS,CAAC,iBAAiB,IAAI,uBAAuB;IAItD,yEAAyE;IACzE,SAAS,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,uBAAuB;IAKpF;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAW3B;;OAEG;IACH,KAAK,CACH,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,GAAE,WAAgB,EACvB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM;IAmBT;;OAEG;IACH,QAAQ,CACN,MAAM,EAAE,SAAS,GAAG,gBAAgB,EACpC,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB;YA+BL,aAAa;CAiC5B"}
@@ -0,0 +1,106 @@
1
+ import { toQueryBuilderFactory } from './query-builder-protocol.js';
2
+ import { assertMetricHandle, getMetricRef, getMetricGrain } from './utils/metric-handle.js';
3
+ import { validateMetricQueryInput } from './utils/metric-query-validation.js';
4
+ import { buildMetricQueryBuilder } from './utils/metric-query-builder.js';
5
+ import { buildDerivedMetricSql } from './utils/metric-derived-query.js';
6
+ import { overfetchLimit } from './utils/pagination.js';
7
+ import { toMetricQueryResult } from './utils/metric-query-result.js';
8
+ export class MetricQueryEngine {
9
+ builderFactory;
10
+ constructor(options) {
11
+ this.builderFactory = toQueryBuilderFactory(options.builderFactory);
12
+ }
13
+ getBuilderFactory() {
14
+ return this.builderFactory;
15
+ }
16
+ /** Resolve a per-call override against this engine's default factory. */
17
+ resolveBuilderFactory(context) {
18
+ const override = context?.runtime?.builderFactory;
19
+ return override ? toQueryBuilderFactory(override) : this.getBuilderFactory();
20
+ }
21
+ /**
22
+ * Execute a metric query. Generates SQL, applies tenant/filter context, executes.
23
+ */
24
+ async run(metric, query = {}, context) {
25
+ assertMetricHandle(metric);
26
+ const validation = this.validate(metric, query, context);
27
+ if (!validation.valid) {
28
+ throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
29
+ }
30
+ const start = Date.now();
31
+ return this.runViaBuilder(metric, query, context, start);
32
+ }
33
+ /**
34
+ * Generate SQL without executing.
35
+ */
36
+ toSQL(metric, query = {}, context) {
37
+ assertMetricHandle(metric);
38
+ const validation = this.validate(metric, query, context);
39
+ if (!validation.valid) {
40
+ throw new Error(`Invalid metric query: ${validation.errors.join('; ')}`);
41
+ }
42
+ const ref = getMetricRef(metric);
43
+ const grain = getMetricGrain(metric, query);
44
+ const spec = ref.spec;
45
+ if (spec.__type === 'derived_metric_spec') {
46
+ return buildDerivedMetricSql(ref, spec, query, grain, this.resolveBuilderFactory(context), context).sql;
47
+ }
48
+ const builder = buildMetricQueryBuilder(ref, spec, ref.dataset, query, grain, this.resolveBuilderFactory(context), context);
49
+ return builder.toSQLWithParams().sql;
50
+ }
51
+ /**
52
+ * Validate a metric query against the metric's contract.
53
+ */
54
+ validate(metric, query, context) {
55
+ assertMetricHandle(metric);
56
+ const queryValidation = validateMetricQueryInput(metric, query, context);
57
+ if (!queryValidation.valid) {
58
+ return queryValidation;
59
+ }
60
+ const ref = getMetricRef(metric);
61
+ const grain = getMetricGrain(metric, query);
62
+ try {
63
+ if (ref.spec.__type === 'derived_metric_spec') {
64
+ buildDerivedMetricSql(ref, ref.spec, query, grain, this.resolveBuilderFactory(context), context);
65
+ }
66
+ else {
67
+ buildMetricQueryBuilder(ref, ref.spec, ref.dataset, query, grain, this.resolveBuilderFactory(context), context).toSQLWithParams();
68
+ }
69
+ }
70
+ catch (error) {
71
+ return {
72
+ valid: false,
73
+ errors: [error instanceof Error ? error.message : String(error)],
74
+ };
75
+ }
76
+ return queryValidation;
77
+ }
78
+ // ---------------------------------------------------------------------------
79
+ // Query builder path
80
+ // ---------------------------------------------------------------------------
81
+ async runViaBuilder(metric, query, context, start) {
82
+ const ref = getMetricRef(metric);
83
+ const grain = getMetricGrain(metric, query);
84
+ const spec = ref.spec;
85
+ const activeBuilderFactory = this.resolveBuilderFactory(context);
86
+ // Over-fetch one row so we can report `hasMore` without a count query.
87
+ const buildQuery = { ...query, limit: overfetchLimit(query.limit) };
88
+ if (spec.__type === 'derived_metric_spec') {
89
+ // Derived metrics: build CTE via builder, outer query via string, execute via rawQuery
90
+ const { sql, params } = buildDerivedMetricSql(ref, spec, buildQuery, grain, activeBuilderFactory, context);
91
+ const rows = await activeBuilderFactory.rawQuery(sql, params, {
92
+ abortSignal: context?.abortSignal,
93
+ });
94
+ return toMetricQueryResult(rows, {
95
+ metric: ref.name, query, sql, timingMs: Date.now() - start, context,
96
+ });
97
+ }
98
+ // Base metrics: fully use the builder's execute()
99
+ const builder = buildMetricQueryBuilder(ref, spec, ref.dataset, buildQuery, grain, activeBuilderFactory, context);
100
+ const { sql } = builder.toSQLWithParams();
101
+ const rows = await builder.execute({ abortSignal: context?.abortSignal });
102
+ return toMetricQueryResult(rows, {
103
+ metric: ref.name, query, sql, timingMs: Date.now() - start, context,
104
+ });
105
+ }
106
+ }
@@ -15,6 +15,7 @@ export { PortableExecutionUnsupportedError, PortableExecutionBudgetError, Portab
15
15
  * `execute` slot.
16
16
  */
17
17
  import type { ProtocolDeploymentDataset, ProtocolSemanticInvocationResult, ProtocolSemanticQuery } from '@hypequery/protocol';
18
+ import type { DatasetCompilation, DatasetCompilationDescription } from './dataset-compilation.js';
18
19
  import type { QueryBuilderFactoryInput } from './query-builder-protocol.js';
19
20
  /** Ceilings the data plane already reduced to the most restrictive value. */
20
21
  export interface PortableSemanticBudget {
@@ -50,11 +51,24 @@ export interface PortableSemanticExecutorOptions {
50
51
  */
51
52
  readonly cacheRebuiltCatalogs?: boolean;
52
53
  }
53
- /**
54
- * Build the executor the deployment data plane injects.
55
- *
56
- * Returns the portable result record; the data plane validates it before it
57
- * reaches a caller.
58
- */
54
+ export interface PortableDatasetCompilation extends DatasetCompilation {
55
+ readonly activationRevision: string;
56
+ describe(): DatasetCompilationDescription & {
57
+ readonly activationRevision: string;
58
+ };
59
+ toJSON(): DatasetCompilationDescription & {
60
+ readonly activationRevision: string;
61
+ };
62
+ }
63
+ export interface PortableSemanticRuntime {
64
+ /** Trusted preview: the same catalog, tenant mapping and budgets as execute.
65
+ * The caller must enforce deployment access before calling either operation.
66
+ */
67
+ compile(input: PortableSemanticExecutionInput): PortableDatasetCompilation;
68
+ execute(input: PortableSemanticExecutionInput): Promise<ProtocolSemanticInvocationResult>;
69
+ }
70
+ /** Shared portable runtime for provider-side authoring preview and execution. */
71
+ export declare function createPortableSemanticRuntime(options: PortableSemanticExecutorOptions): PortableSemanticRuntime;
72
+ /** Backwards-compatible executor adapter for the deployment data plane. */
59
73
  export declare function createPortableSemanticExecutor(options: PortableSemanticExecutorOptions): (input: PortableSemanticExecutionInput) => Promise<ProtocolSemanticInvocationResult>;
60
74
  //# sourceMappingURL=portable-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portable-executor.d.ts","sourceRoot":"","sources":["../src/portable-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAK/I;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAID;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CA4EtF"}
1
+ {"version":3,"file":"portable-executor.d.ts","sourceRoot":"","sources":["../src/portable-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAK/I;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAChC,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAQlG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,6EAA6E;AAC7E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,yBAAyB,EAAE,CAAA;KAAE,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;IAC1C,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;IAChD;;;;;OAKG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAID,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,IAAI,6BAA6B,GAAG;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;IACpF,MAAM,IAAI,6BAA6B,GAAG;QAAE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE,CAAC;CACnF;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,8BAA8B,GAAG,0BAA0B,CAAC;IAC3E,OAAO,CAAC,KAAK,EAAE,8BAA8B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;CAC3F;AAED,iFAAiF;AACjF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,+BAA+B,GACvC,uBAAuB,CAiGzB;AAED,2EAA2E;AAC3E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAEtF"}
@@ -5,13 +5,8 @@ import { bounded } from './utils/portable-result-budget.js';
5
5
  import { withDeadline } from './utils/portable-execution-deadline.js';
6
6
  import { createDatasetClient } from './executor.js';
7
7
  import { rehydrateProtocolDatasets, UNSUPPORTED_CONTRACT_REASONS, UnsupportedContractFeatureError, } from './protocol-rehydrate.js';
8
- /**
9
- * Build the executor the deployment data plane injects.
10
- *
11
- * Returns the portable result record; the data plane validates it before it
12
- * reaches a caller.
13
- */
14
- export function createPortableSemanticExecutor(options) {
8
+ /** Shared portable runtime for provider-side authoring preview and execution. */
9
+ export function createPortableSemanticRuntime(options) {
15
10
  const client = createDatasetClient({ queryBuilder: options.queryBuilder });
16
11
  let memo;
17
12
  function registryFor(input) {
@@ -36,7 +31,7 @@ export function createPortableSemanticExecutor(options) {
36
31
  memo = { revision: input.activationRevision, registry };
37
32
  return registry;
38
33
  }
39
- return async function execute(input) {
34
+ function resolve(input) {
40
35
  const registry = registryFor(input);
41
36
  const rebuilt = registry[String(input.dataset.name)];
42
37
  if (rebuilt === undefined) {
@@ -55,9 +50,14 @@ export function createPortableSemanticExecutor(options) {
55
50
  + 'cannot be applied to it.');
56
51
  }
57
52
  const query = semanticQuery(input.operation, input.budget.maxRows);
53
+ const context = tenant === undefined ? {} : { runtime: { tenant } };
54
+ return { target, query, context };
55
+ }
56
+ async function execute(input) {
57
+ const { target, query, context } = resolve(input);
58
58
  const output = await withDeadline(input.budget, input.signal, async (signal) => (await client.execute(target, query, {
59
59
  abortSignal: signal,
60
- ...(tenant === undefined ? {} : { runtime: { tenant } }),
60
+ ...context,
61
61
  })));
62
62
  const rows = output.data ?? [];
63
63
  const pagination = output.meta?.pagination;
@@ -71,5 +71,25 @@ export function createPortableSemanticExecutor(options) {
71
71
  ...(pagination === undefined ? {} : { pagination }),
72
72
  },
73
73
  }), input.budget);
74
+ }
75
+ return {
76
+ compile(input) {
77
+ const { target, query, context } = resolve(input);
78
+ const compilation = client.compileDataset(target, query, context);
79
+ const description = Object.freeze({
80
+ ...compilation.describe(), activationRevision: input.activationRevision,
81
+ });
82
+ return Object.freeze({
83
+ ...compilation,
84
+ activationRevision: input.activationRevision,
85
+ describe: () => description,
86
+ toJSON: () => description,
87
+ });
88
+ },
89
+ execute,
74
90
  };
75
91
  }
92
+ /** Backwards-compatible executor adapter for the deployment data plane. */
93
+ export function createPortableSemanticExecutor(options) {
94
+ return createPortableSemanticRuntime(options).execute;
95
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../src/protocol-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,uBAAuB,EAE5B,KAAK,sBAAsB,EAI5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EAEb,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAC7E;AAuFD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CAmIzB"}
1
+ {"version":3,"file":"protocol-adapter.d.ts","sourceRoot":"","sources":["../src/protocol-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,uBAAuB,EAE5B,KAAK,sBAAsB,EAI5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EAEb,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC;CAC7E;AAuFD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,mCAAwC,GAChD,uBAAuB,CAoIzB"}
@@ -161,6 +161,7 @@ export function buildProtocolDatasetContract(dataset, options = {}) {
161
161
  target: relationship.target().name,
162
162
  from: relationship.from,
163
163
  to: relationship.to,
164
+ ...(relationship.keys ? { keys: relationship.keys.map(key => ({ ...key })) } : {}),
164
165
  queryable: relationship.kind !== 'hasMany',
165
166
  })).sort(byName),
166
167
  ...(dataset.limits !== undefined
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-rehydrate.d.ts","sourceRoot":"","sources":["../src/protocol-rehydrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,uBAAuB,EAEvB,yBAAyB,EAM1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAMlB,YAAY,EAIb,MAAM,YAAY,CAAC;AAMpB,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,4BAA4B,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,yCAAyC,CAAC;AAEjD,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG;IACnD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;;;;;;OAQG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACjD;AAED;;;;;GAKG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC;gBAGrD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,yBAAyB;CAQrC;AAoQD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,EAAE,EAC3E,OAAO,GAAE,gCAAqC,GAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAwF7C;AAED,gFAAgF;AAChF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gCAAqC,GAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAG7C"}
1
+ {"version":3,"file":"protocol-rehydrate.d.ts","sourceRoot":"","sources":["../src/protocol-rehydrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,uBAAuB,EAEvB,yBAAyB,EAM1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAMlB,YAAY,EAIb,MAAM,YAAY,CAAC;AAOpB,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACL,4BAA4B,EAC5B,KAAK,yBAAyB,GAC/B,MAAM,yCAAyC,CAAC;AAEjD,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,GAAG;IACnD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;CAC1D,CAAC;AAEF,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;IACpC;;;;;;;;OAQG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACjD;AAED;;;;;GAKG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC;gBAGrD,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,yBAAyB;CAQrC;AA8QD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,EAAE,EAC3E,OAAO,GAAE,gCAAqC,GAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAwF7C;AAED,gFAAgF;AAChF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,gCAAqC,GAC7C,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAG7C"}