@openplait/adapter-clickhouse 0.1.0-alpha.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.
@@ -0,0 +1,5 @@
1
+ import type { SemanticQuery } from "@openplait/core";
2
+ import { type CompileContext, type CompiledQuery } from "@openplait/adapter-sdk";
3
+ import type { ClickHouseAdapterConfig, ClickHouseCompiledStatement } from "./types.js";
4
+ export declare function compileClickHouseQuery(query: SemanticQuery, config: ClickHouseAdapterConfig, context?: CompileContext): CompiledQuery<ClickHouseCompiledStatement>;
5
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,aAAa,EAEd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAG5B,MAAM,YAAY,CAAC;AAslBpB,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,GAAE,cAAmB,GAC3B,aAAa,CAAC,2BAA2B,CAAC,CA+H5C"}
@@ -0,0 +1,449 @@
1
+ import { validateQuery } from "@openplait/core";
2
+ import { AdapterError, } from "@openplait/adapter-sdk";
3
+ import { createDatasetRegistry } from "./datasets.js";
4
+ import { resolveParameterValue, scalarClickHouseType, } from "./parameters.js";
5
+ const DEFAULT_MAX_RESULT_ROWS = 10_000;
6
+ const DEFAULT_MAX_TIME_RANGE_MS = 31 * 24 * 60 * 60 * 1_000;
7
+ const SAFE_OUTPUT_NAME = /^[A-Za-z_][A-Za-z0-9_.]*$/;
8
+ const SAFE_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
9
+ class ParameterBinder {
10
+ parameters = {};
11
+ nextId = 0;
12
+ bind(value, clickhouseType) {
13
+ const name = `op_${this.nextId++}`;
14
+ this.parameters[name] = value;
15
+ return `{${name}:${clickhouseType}}`;
16
+ }
17
+ }
18
+ function adapterError(code, message, path, details) {
19
+ return new AdapterError(code, message, {
20
+ path,
21
+ ...(details === undefined ? {} : { details }),
22
+ });
23
+ }
24
+ function quoteOutputName(value, path) {
25
+ if (!SAFE_OUTPUT_NAME.test(value)) {
26
+ throw adapterError("QUERY_VALIDATION_FAILED", `Output name '${value}' is not a safe ClickHouse alias.`, path);
27
+ }
28
+ return `\`${value}\``;
29
+ }
30
+ function quoteTable(value) {
31
+ const parts = value.split(".");
32
+ if (parts.length > 2 || parts.some((part) => !SAFE_IDENTIFIER.test(part))) {
33
+ throw adapterError("QUERY_VALIDATION_FAILED", `Table '${value}' is not a safe ClickHouse identifier.`, "/spec/input/entity");
34
+ }
35
+ return parts.map((part) => `\`${part}\``).join(".");
36
+ }
37
+ function fieldMapping(dataset, field, path) {
38
+ const mapping = dataset.fields[field];
39
+ if (!mapping) {
40
+ throw adapterError("FIELD_NOT_FOUND", `Field '${field}' is not defined by dataset '${dataset.name}'.`, path, { dataset: dataset.name, field });
41
+ }
42
+ return mapping;
43
+ }
44
+ function compileComparison(expression, state, path) {
45
+ const mapping = fieldMapping(state.dataset, expression.field, `${path}/field`);
46
+ const field = mapping.expression;
47
+ if (expression.operator === "isNull")
48
+ return `isNull(${field})`;
49
+ if (expression.operator === "isNotNull")
50
+ return `isNotNull(${field})`;
51
+ if (!("value" in expression)) {
52
+ throw adapterError("QUERY_VALIDATION_FAILED", `Operator '${expression.operator}' requires a value.`, path);
53
+ }
54
+ if (["contains", "notContains", "startsWith", "endsWith", "matches"].includes(expression.operator) &&
55
+ mapping.type !== "string") {
56
+ throw adapterError("UNSUPPORTED_OPERATION", `Operator '${expression.operator}' requires a string field.`, `${path}/operator`);
57
+ }
58
+ const value = resolveParameterValue(expression.value, state.parameters, state.context.variables, `${path}/value`);
59
+ if (value === null) {
60
+ if (expression.operator === "equals")
61
+ return `isNull(${field})`;
62
+ if (expression.operator === "notEquals")
63
+ return `isNotNull(${field})`;
64
+ throw adapterError("INVALID_PARAMETER", `Operator '${expression.operator}' cannot compare against null.`, `${path}/value`);
65
+ }
66
+ if (expression.operator === "in" || expression.operator === "notIn") {
67
+ if (!Array.isArray(value)) {
68
+ throw adapterError("INVALID_PARAMETER", `Operator '${expression.operator}' requires an array value.`, `${path}/value`);
69
+ }
70
+ const parameter = state.binder.bind(value, `Array(${mapping.clickhouseType})`);
71
+ return `${field} ${expression.operator === "in" ? "IN" : "NOT IN"} ${parameter}`;
72
+ }
73
+ if (Array.isArray(value)) {
74
+ throw adapterError("INVALID_PARAMETER", `Operator '${expression.operator}' requires a scalar value.`, `${path}/value`);
75
+ }
76
+ const parameter = state.binder.bind(value, mapping.clickhouseType);
77
+ switch (expression.operator) {
78
+ case "equals":
79
+ return `${field} = ${parameter}`;
80
+ case "notEquals":
81
+ return `${field} != ${parameter}`;
82
+ case "greaterThan":
83
+ return `${field} > ${parameter}`;
84
+ case "greaterThanOrEqual":
85
+ return `${field} >= ${parameter}`;
86
+ case "lessThan":
87
+ return `${field} < ${parameter}`;
88
+ case "lessThanOrEqual":
89
+ return `${field} <= ${parameter}`;
90
+ case "contains":
91
+ return `position(${field}, ${parameter}) > 0`;
92
+ case "notContains":
93
+ return `position(${field}, ${parameter}) = 0`;
94
+ case "startsWith":
95
+ return `startsWith(${field}, ${parameter})`;
96
+ case "endsWith":
97
+ return `endsWith(${field}, ${parameter})`;
98
+ case "matches":
99
+ return `match(${field}, ${parameter})`;
100
+ }
101
+ }
102
+ function compileBoolean(expression, state, path) {
103
+ if ("and" in expression) {
104
+ return `(${expression.and
105
+ .map((item, index) => compileBoolean(item, state, `${path}/and/${index}`))
106
+ .join(" AND ")})`;
107
+ }
108
+ if ("or" in expression) {
109
+ return `(${expression.or
110
+ .map((item, index) => compileBoolean(item, state, `${path}/or/${index}`))
111
+ .join(" OR ")})`;
112
+ }
113
+ if ("not" in expression) {
114
+ return `(NOT ${compileBoolean(expression.not, state, `${path}/not`)})`;
115
+ }
116
+ return compileComparison(expression, state, path);
117
+ }
118
+ function compileValueExpression(expression, state, path) {
119
+ if ("field" in expression) {
120
+ const mapping = fieldMapping(state.dataset, expression.field, `${path}/field`);
121
+ if (mapping.type !== "number" && mapping.type !== "duration") {
122
+ throw adapterError("UNSUPPORTED_OPERATION", `Arithmetic requires numeric fields; '${expression.field}' is '${mapping.type}'.`, `${path}/field`);
123
+ }
124
+ return mapping.expression;
125
+ }
126
+ if ("value" in expression) {
127
+ const value = resolveParameterValue(expression.value, state.parameters, state.context.variables, `${path}/value`);
128
+ if (Array.isArray(value)) {
129
+ throw adapterError("INVALID_PARAMETER", "Arithmetic expressions cannot contain array values.", `${path}/value`);
130
+ }
131
+ return state.binder.bind(value, scalarClickHouseType(value));
132
+ }
133
+ let operator;
134
+ let operands;
135
+ let sqlOperator;
136
+ if ("add" in expression) {
137
+ operator = "add";
138
+ operands = expression.add;
139
+ sqlOperator = "+";
140
+ }
141
+ else if ("subtract" in expression) {
142
+ operator = "subtract";
143
+ operands = expression.subtract;
144
+ sqlOperator = "-";
145
+ }
146
+ else if ("multiply" in expression) {
147
+ operator = "multiply";
148
+ operands = expression.multiply;
149
+ sqlOperator = "*";
150
+ }
151
+ else {
152
+ operator = "divide";
153
+ operands = expression.divide;
154
+ sqlOperator = "/";
155
+ }
156
+ return `(${operands
157
+ .map((operand, index) => compileValueExpression(operand, state, `${path}/${operator}/${index}`))
158
+ .join(` ${sqlOperator} `)})`;
159
+ }
160
+ function parseInterval(interval, path) {
161
+ const match = /^(\d+)(ms|s|m|h|d)$/.exec(interval);
162
+ if (!match || Number(match[1]) < 1) {
163
+ throw adapterError("INVALID_PARAMETER", `Interval '${interval}' must be a positive integer followed by ms, s, m, h, or d.`, path);
164
+ }
165
+ const unit = {
166
+ ms: "MILLISECOND",
167
+ s: "SECOND",
168
+ m: "MINUTE",
169
+ h: "HOUR",
170
+ d: "DAY",
171
+ }[match[2]];
172
+ return `INTERVAL ${match[1]} ${unit}`;
173
+ }
174
+ function compileGroupBy(group, state, path) {
175
+ if ("field" in group) {
176
+ return fieldMapping(state.dataset, group.field, `${path}/field`).expression;
177
+ }
178
+ const field = fieldMapping(state.dataset, group.timeBucket.field, `${path}/timeBucket/field`);
179
+ const interval = parseInterval(group.timeBucket.interval, `${path}/timeBucket/interval`);
180
+ return `toStartOfInterval(${field.expression}, ${interval})`;
181
+ }
182
+ function timeBucketForField(field, groups) {
183
+ return groups?.find((group) => "timeBucket" in group && group.timeBucket.field === field);
184
+ }
185
+ function compileAggregate(aggregate, state, path) {
186
+ const mapping = aggregate.field
187
+ ? fieldMapping(state.dataset, aggregate.field, `${path}/field`)
188
+ : undefined;
189
+ const field = mapping?.expression;
190
+ if (mapping &&
191
+ ["sum", "avg", "min", "max", "percentile", "rate", "histogram"].includes(aggregate.function) &&
192
+ mapping.type !== "number" &&
193
+ mapping.type !== "duration") {
194
+ throw adapterError("UNSUPPORTED_OPERATION", `Aggregate '${aggregate.function}' requires a numeric field.`, `${path}/field`);
195
+ }
196
+ switch (aggregate.function) {
197
+ case "count":
198
+ return { expression: field ? `count(${field})` : "count()", type: "number" };
199
+ case "sum":
200
+ case "avg":
201
+ case "min":
202
+ case "max":
203
+ if (!field) {
204
+ throw adapterError("QUERY_VALIDATION_FAILED", `Aggregate '${aggregate.function}' requires a field.`, path);
205
+ }
206
+ return {
207
+ expression: `${aggregate.function}(${field})`,
208
+ type: "number",
209
+ ...(mapping?.unit === undefined ? {} : { unit: mapping.unit }),
210
+ };
211
+ case "percentile": {
212
+ if (!field || aggregate.percentile === undefined) {
213
+ throw adapterError("QUERY_VALIDATION_FAILED", "Percentile requires a field and percentile value.", path);
214
+ }
215
+ return {
216
+ expression: `quantile(${aggregate.percentile / 100})(${field})`,
217
+ type: "number",
218
+ ...(mapping?.unit === undefined ? {} : { unit: mapping.unit }),
219
+ };
220
+ }
221
+ case "distinctCount":
222
+ if (!field) {
223
+ throw adapterError("QUERY_VALIDATION_FAILED", "Distinct count requires a field.", path);
224
+ }
225
+ return { expression: `uniqExact(${field})`, type: "number" };
226
+ case "rate": {
227
+ if (!field) {
228
+ throw adapterError("QUERY_VALIDATION_FAILED", "Rate requires a field.", path);
229
+ }
230
+ const timestamp = fieldMapping(state.dataset, state.dataset.timeField, "/spec/input/entity").expression;
231
+ return {
232
+ expression: `sum(${field}) / greatest(dateDiff('second', min(${timestamp}), max(${timestamp})), 1)`,
233
+ type: "number",
234
+ ...(mapping?.unit === undefined ? {} : { unit: `${mapping.unit}/s` }),
235
+ };
236
+ }
237
+ case "histogram": {
238
+ if (!field || !aggregate.interval || !/^\d+$/.test(aggregate.interval)) {
239
+ throw adapterError("INVALID_PARAMETER", "Histogram requires a field and a positive integer bin count in interval.", `${path}/interval`);
240
+ }
241
+ const bins = Number(aggregate.interval);
242
+ if (bins < 1 || bins > 1_000) {
243
+ throw adapterError("INVALID_PARAMETER", "Histogram bin count must be between 1 and 1000.", `${path}/interval`);
244
+ }
245
+ return { expression: `histogram(${bins})(${field})`, type: "json" };
246
+ }
247
+ }
248
+ }
249
+ function selectOutputName(select) {
250
+ if ("as" in select && select.as)
251
+ return select.as;
252
+ if ("field" in select)
253
+ return select.field;
254
+ throw new AdapterError("QUERY_VALIDATION_FAILED", "Calculated and aggregate fields require an output alias.");
255
+ }
256
+ function valueExpressionFields(expression) {
257
+ if ("field" in expression)
258
+ return [expression.field];
259
+ if ("value" in expression)
260
+ return [];
261
+ if ("add" in expression)
262
+ return expression.add.flatMap(valueExpressionFields);
263
+ if ("subtract" in expression)
264
+ return expression.subtract.flatMap(valueExpressionFields);
265
+ if ("multiply" in expression)
266
+ return expression.multiply.flatMap(valueExpressionFields);
267
+ return expression.divide.flatMap(valueExpressionFields);
268
+ }
269
+ function validateGrouping(query) {
270
+ const groupedFields = new Set((query.spec.groupBy ?? []).map((group) => "field" in group ? group.field : group.timeBucket.field));
271
+ const hasAggregate = query.spec.select.some((select) => "aggregate" in select);
272
+ for (const [index, select] of query.spec.select.entries()) {
273
+ if ("aggregate" in select)
274
+ continue;
275
+ const fields = "field" in select
276
+ ? [select.field]
277
+ : valueExpressionFields(select.expression);
278
+ if ((hasAggregate || groupedFields.size > 0) && fields.some((field) => !groupedFields.has(field))) {
279
+ throw adapterError("QUERY_VALIDATION_FAILED", "Every non-aggregate selected field must appear in groupBy when grouping or aggregation is used.", `/spec/select/${index}`, { fields, groupedFields: [...groupedFields] });
280
+ }
281
+ }
282
+ }
283
+ function compileSelect(select, index, query, state) {
284
+ const path = `/spec/select/${index}`;
285
+ const name = selectOutputName(select);
286
+ const alias = quoteOutputName(name, `${path}/as`);
287
+ if ("field" in select) {
288
+ const mapping = fieldMapping(state.dataset, select.field, `${path}/field`);
289
+ const bucket = timeBucketForField(select.field, query.spec.groupBy);
290
+ const expression = bucket
291
+ ? compileGroupBy(bucket, state, "/spec/groupBy")
292
+ : mapping.expression;
293
+ return {
294
+ sql: `${expression} AS ${alias}`,
295
+ field: {
296
+ name,
297
+ type: mapping.type,
298
+ source: select.field,
299
+ ...(mapping.unit === undefined ? {} : { unit: mapping.unit }),
300
+ },
301
+ };
302
+ }
303
+ if ("aggregate" in select) {
304
+ const aggregate = compileAggregate(select.aggregate, state, `${path}/aggregate`);
305
+ return {
306
+ sql: `${aggregate.expression} AS ${alias}`,
307
+ field: {
308
+ name,
309
+ type: aggregate.type,
310
+ ...(aggregate.unit === undefined ? {} : { unit: aggregate.unit }),
311
+ },
312
+ };
313
+ }
314
+ return {
315
+ sql: `${compileValueExpression(select.expression, state, `${path}/expression`)} AS ${alias}`,
316
+ field: { name, type: "number" },
317
+ };
318
+ }
319
+ function resolvedTime(value, path) {
320
+ if (Array.isArray(value) || value === null || typeof value === "boolean") {
321
+ throw adapterError("INVALID_PARAMETER", "Time values must be strings or numbers.", path);
322
+ }
323
+ const milliseconds = typeof value === "number" ? value : Date.parse(value);
324
+ if (!Number.isFinite(milliseconds)) {
325
+ throw adapterError("INVALID_PARAMETER", `Time value '${value}' is invalid.`, path);
326
+ }
327
+ return milliseconds;
328
+ }
329
+ function compileTimeRange(query, state, maxTimeRangeMs, requireTimeRange) {
330
+ const range = query.spec.timeRange;
331
+ if (!range) {
332
+ if (requireTimeRange) {
333
+ throw adapterError("TIME_RANGE_REQUIRED", `Dataset '${state.dataset.name}' requires a time range.`, "/spec/timeRange");
334
+ }
335
+ return undefined;
336
+ }
337
+ const mapping = fieldMapping(state.dataset, range.field, "/spec/timeRange/field");
338
+ if (mapping.type !== "time") {
339
+ throw adapterError("QUERY_VALIDATION_FAILED", `Time range field '${range.field}' is not a time field.`, "/spec/timeRange/field");
340
+ }
341
+ const from = resolveParameterValue(range.from, state.parameters, state.context.variables, "/spec/timeRange/from");
342
+ const to = resolveParameterValue(range.to, state.parameters, state.context.variables, "/spec/timeRange/to");
343
+ const fromMs = resolvedTime(from, "/spec/timeRange/from");
344
+ const toMs = resolvedTime(to, "/spec/timeRange/to");
345
+ if (toMs < fromMs) {
346
+ throw adapterError("INVALID_PARAMETER", "Time range end must not precede its start.", "/spec/timeRange");
347
+ }
348
+ if (toMs - fromMs > maxTimeRangeMs) {
349
+ throw adapterError("TIME_RANGE_TOO_LARGE", `Time range exceeds the configured maximum of ${maxTimeRangeMs}ms.`, "/spec/timeRange", { requestedMs: toMs - fromMs, maxTimeRangeMs });
350
+ }
351
+ const fromParameter = state.binder.bind(from, "DateTime64(9)");
352
+ const toParameter = state.binder.bind(to, "DateTime64(9)");
353
+ return `${mapping.expression} BETWEEN ${fromParameter} AND ${toParameter}`;
354
+ }
355
+ function resolveLimit(query, config, context) {
356
+ const configured = config.maxResultRows ?? DEFAULT_MAX_RESULT_ROWS;
357
+ const contextual = context.maxResultRows ?? configured;
358
+ const maximum = Math.min(configured, contextual);
359
+ const requested = query.spec.limit ?? maximum;
360
+ if (!Number.isInteger(requested) || requested < 1 || requested > maximum) {
361
+ throw adapterError("QUERY_LIMIT_EXCEEDED", `Query limit ${requested} exceeds the allowed maximum of ${maximum}.`, "/spec/limit", { requested, maximum });
362
+ }
363
+ return requested;
364
+ }
365
+ export function compileClickHouseQuery(query, config, context = {}) {
366
+ const validation = validateQuery(query);
367
+ if (!validation.valid) {
368
+ throw new AdapterError("QUERY_VALIDATION_FAILED", "The semantic query is not valid.", { details: { errors: validation.errors } });
369
+ }
370
+ if (query.spec.mode !== "semantic") {
371
+ throw new AdapterError("QUERY_VALIDATION_FAILED", "The ClickHouse semantic compiler only accepts semantic queries.");
372
+ }
373
+ if (query.spec.joins?.length) {
374
+ throw adapterError("UNSUPPORTED_OPERATION", "ClickHouse semantic joins are not supported in this release.", "/spec/joins");
375
+ }
376
+ validateGrouping(query);
377
+ const datasets = createDatasetRegistry(config.datasets ?? []);
378
+ const dataset = datasets.get(query.spec.input.entity);
379
+ if (!dataset) {
380
+ throw adapterError("DATASET_NOT_FOUND", `Dataset '${query.spec.input.entity}' is not registered.`, "/spec/input/entity");
381
+ }
382
+ if (dataset.signal !== query.spec.input.signal) {
383
+ throw adapterError("QUERY_VALIDATION_FAILED", `Dataset '${dataset.name}' carries '${dataset.signal}', not '${query.spec.input.signal}'.`, "/spec/input/signal");
384
+ }
385
+ const state = {
386
+ binder: new ParameterBinder(),
387
+ context,
388
+ dataset,
389
+ parameters: query.spec.parameters ?? {},
390
+ };
391
+ const selected = query.spec.select.map((select, index) => compileSelect(select, index, query, state));
392
+ const filters = [];
393
+ const timeFilter = compileTimeRange(query, state, config.maxTimeRangeMs ?? DEFAULT_MAX_TIME_RANGE_MS, config.requireTimeRange ?? true);
394
+ if (timeFilter)
395
+ filters.push(timeFilter);
396
+ if (dataset.defaultFilter) {
397
+ filters.push(compileBoolean(dataset.defaultFilter, state, "/dataset/defaultFilter"));
398
+ }
399
+ if (config.tenant) {
400
+ filters.push(compileBoolean({
401
+ field: config.tenant.field,
402
+ operator: "equals",
403
+ value: config.tenant.value,
404
+ }, state, "/config/tenant"));
405
+ }
406
+ if (query.spec.where) {
407
+ filters.push(compileBoolean(query.spec.where, state, "/spec/where"));
408
+ }
409
+ const groups = query.spec.groupBy?.map((group, index) => compileGroupBy(group, state, `/spec/groupBy/${index}`));
410
+ const outputNames = new Set(selected.map(({ field }) => field.name));
411
+ const order = query.spec.orderBy?.map((item, index) => {
412
+ const expression = outputNames.has(item.field)
413
+ ? quoteOutputName(item.field, `/spec/orderBy/${index}/field`)
414
+ : fieldMapping(dataset, item.field, `/spec/orderBy/${index}/field`).expression;
415
+ return `${expression} ${item.direction.toUpperCase()}`;
416
+ });
417
+ const limit = resolveLimit(query, config, context);
418
+ const lines = [
419
+ "SELECT",
420
+ selected.map(({ sql }) => ` ${sql}`).join(",\n"),
421
+ `FROM ${quoteTable(dataset.table)}`,
422
+ ];
423
+ if (dataset.arrayJoin) {
424
+ if (!SAFE_IDENTIFIER.test(dataset.arrayJoin)) {
425
+ throw adapterError("QUERY_VALIDATION_FAILED", `Array join '${dataset.arrayJoin}' is not a safe identifier.`, "/spec/input/entity");
426
+ }
427
+ lines.push(`ARRAY JOIN \`${dataset.arrayJoin}\``);
428
+ }
429
+ if (filters.length)
430
+ lines.push(`WHERE ${filters.join("\n AND ")}`);
431
+ if (groups?.length)
432
+ lines.push(`GROUP BY ${groups.join(", ")}`);
433
+ if (order?.length)
434
+ lines.push(`ORDER BY ${order.join(", ")}`);
435
+ lines.push(`LIMIT ${limit}`);
436
+ return {
437
+ kind: "CompiledQuery",
438
+ language: "sql",
439
+ compiled: { statement: lines.join("\n") },
440
+ parameters: state.binder.parameters,
441
+ fields: selected.map(({ field }) => field),
442
+ source: {
443
+ resourceName: query.metadata.name,
444
+ dataset: dataset.name,
445
+ },
446
+ warnings: [],
447
+ };
448
+ }
449
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { SemanticSchema } from "@openplait/core";
2
+ import type { ClickHouseDataset } from "./types.js";
3
+ export declare const OTEL_CLICKHOUSE_DATASETS: readonly ClickHouseDataset[];
4
+ export declare const OPENLIT_CLICKHOUSE_DATASETS: readonly ClickHouseDataset[];
5
+ export declare function createDatasetRegistry(overrides?: readonly ClickHouseDataset[]): ReadonlyMap<string, ClickHouseDataset>;
6
+ export declare function datasetsToSemanticSchema(datasets: ReadonlyMap<string, ClickHouseDataset>): SemanticSchema;
7
+ //# sourceMappingURL=datasets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datasets.d.ts","sourceRoot":"","sources":["../../src/datasets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,iBAAiB,EAA0B,MAAM,YAAY,CAAC;AAuD5E,eAAO,MAAM,wBAAwB,EAAE,SAAS,iBAAiB,EAuFhE,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,SAAS,iBAAiB,EA+D1D,CAAC;AAEX,wBAAgB,qBAAqB,CACnC,SAAS,GAAE,SAAS,iBAAiB,EAAO,GAC3C,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAMxC;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC/C,cAAc,CA2BhB"}