@duckcodeailabs/dql-core 1.5.3 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +7 -5
  2. package/dist/ast/nodes.d.ts +11 -0
  3. package/dist/ast/nodes.d.ts.map +1 -1
  4. package/dist/ast/printer.js +6 -0
  5. package/dist/ast/printer.js.map +1 -1
  6. package/dist/contracts/index.d.ts +11 -0
  7. package/dist/contracts/index.d.ts.map +1 -0
  8. package/dist/contracts/index.js +11 -0
  9. package/dist/contracts/index.js.map +1 -0
  10. package/dist/contracts/registry.d.ts +59 -0
  11. package/dist/contracts/registry.d.ts.map +1 -0
  12. package/dist/contracts/registry.js +162 -0
  13. package/dist/contracts/registry.js.map +1 -0
  14. package/dist/contracts/types.d.ts +120 -0
  15. package/dist/contracts/types.d.ts.map +1 -0
  16. package/dist/contracts/types.js +35 -0
  17. package/dist/contracts/types.js.map +1 -0
  18. package/dist/formatter/formatter.js +11 -0
  19. package/dist/formatter/formatter.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/lexer/token.d.ts +1 -0
  25. package/dist/lexer/token.d.ts.map +1 -1
  26. package/dist/lexer/token.js +2 -0
  27. package/dist/lexer/token.js.map +1 -1
  28. package/dist/lineage/builder.d.ts +4 -0
  29. package/dist/lineage/builder.d.ts.map +1 -1
  30. package/dist/lineage/builder.js +23 -10
  31. package/dist/lineage/builder.js.map +1 -1
  32. package/dist/lineage/column-lineage.d.ts +56 -0
  33. package/dist/lineage/column-lineage.d.ts.map +1 -0
  34. package/dist/lineage/column-lineage.js +263 -0
  35. package/dist/lineage/column-lineage.js.map +1 -0
  36. package/dist/lineage/index.d.ts +1 -0
  37. package/dist/lineage/index.d.ts.map +1 -1
  38. package/dist/lineage/index.js +1 -0
  39. package/dist/lineage/index.js.map +1 -1
  40. package/dist/manifest/builder.d.ts.map +1 -1
  41. package/dist/manifest/builder.js +18 -0
  42. package/dist/manifest/builder.js.map +1 -1
  43. package/dist/manifest/types.d.ts +29 -0
  44. package/dist/manifest/types.d.ts.map +1 -1
  45. package/dist/parser/parser.d.ts.map +1 -1
  46. package/dist/parser/parser.js +29 -1
  47. package/dist/parser/parser.js.map +1 -1
  48. package/dist/semantic/analyzer.d.ts +14 -2
  49. package/dist/semantic/analyzer.d.ts.map +1 -1
  50. package/dist/semantic/analyzer.js +31 -4
  51. package/dist/semantic/analyzer.js.map +1 -1
  52. package/dist/semantic/semantic-layer.d.ts.map +1 -1
  53. package/dist/semantic/semantic-layer.js +24 -2
  54. package/dist/semantic/semantic-layer.js.map +1 -1
  55. package/package.json +2 -2
package/README.md CHANGED
@@ -16,15 +16,17 @@ pnpm add @duckcodeailabs/dql-core
16
16
  import { parse, analyze } from '@duckcodeailabs/dql-core';
17
17
 
18
18
  const source = `
19
- block revenue_by_segment {
19
+ block "Revenue by segment" {
20
+ domain = "finance"
20
21
  type = "custom"
21
- title = "Revenue by Segment"
22
+ status = "draft"
23
+ description = "Revenue by segment."
22
24
 
23
- query = <<SQL
25
+ query = """
24
26
  select segment, sum(revenue) as revenue
25
27
  from revenue
26
28
  group by 1
27
- SQL
29
+ """
28
30
  }
29
31
  `;
30
32
 
@@ -43,5 +45,5 @@ console.log(diagnostics);
43
45
 
44
46
  ## Learn More
45
47
 
46
- - Language spec: [`../../docs/dql-language-spec.md`](../../docs/dql-language-spec.md)
48
+ - Language reference: [`../../docs/reference/language.md`](../../docs/reference/language.md)
47
49
  - Root docs: [`../../README.md`](../../README.md)
@@ -175,6 +175,8 @@ export interface BlockDeclNode extends BaseNode {
175
175
  metricRef?: string;
176
176
  /** For blockType 'semantic': multiple metric references. Takes precedence over metricRef when present. */
177
177
  metricsRef?: string[];
178
+ /** For blockType 'semantic': semantic dimension references used to group the metric query. */
179
+ dimensionsRef?: string[];
178
180
  description?: string;
179
181
  tags?: string[];
180
182
  owner?: string;
@@ -210,6 +212,15 @@ export interface BlockDeclNode extends BaseNode {
210
212
  * agent's "block-first" matcher all read this.
211
213
  */
212
214
  status?: string;
215
+ /**
216
+ * v1.6 — DataLex contract reference. Format:
217
+ * `<domain>.<Entity>.<contract_name>` with optional `@<version>` suffix.
218
+ * The compile-time check resolves this against the project's DataLex
219
+ * manifest (see contracts/registry.ts) and emits diagnostics for
220
+ * not_found / version_mismatch / malformed_ref. Required link to the
221
+ * manifest-spec interop pattern; see docs/interop.md.
222
+ */
223
+ datalexContract?: string;
213
224
  }
214
225
  export interface BlockParamsNode extends BaseNode {
215
226
  kind: NodeKind.BlockParams;
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"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"}
@@ -117,6 +117,12 @@ function printBlockDecl(node, indent) {
117
117
  result += `${prefix} description = "${node.description}"\n`;
118
118
  if (node.tags)
119
119
  result += `${prefix} tags = [${node.tags.map(t => `"${t}"`).join(', ')}]\n`;
120
+ if (node.metricRef !== undefined)
121
+ result += `${prefix} metric = "${node.metricRef}"\n`;
122
+ if (node.metricsRef)
123
+ result += `${prefix} metrics = [${node.metricsRef.map(t => `"${t}"`).join(', ')}]\n`;
124
+ if (node.dimensionsRef)
125
+ result += `${prefix} dimensions = [${node.dimensionsRef.map(t => `"${t}"`).join(', ')}]\n`;
120
126
  if (node.query)
121
127
  result += `${prefix} SQL: ${node.query.rawSQL.substring(0, 60)}...\n`;
122
128
  if (node.visualization) {
@@ -1 +1 @@
1
- {"version":3,"file":"printer.js","sourceRoot":"","sources":["../../src/ast/printer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printer.js","sourceRoot":"","sources":["../../src/ast/printer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * DataLex contract resolution for DQL.
3
+ *
4
+ * Public surface for the consumer side of the manifest-spec
5
+ * `datalex_contract` interop pattern. Keeps DQL's compile-time check on
6
+ * `datalex_contract = "..."` references decoupled from DataLex's compiler:
7
+ * we only depend on the published manifest schema.
8
+ */
9
+ export { DataLexContractRegistry } from './registry.js';
10
+ export { parseContractRef, type ContractId, type ContractParam, type ContractRef, type ContractResolution, type ContractSignature, type DataLexBinding, type DataLexContract, type DataLexDiagnostic, type DataLexDomain, type DataLexEntity, type DataLexField, type DataLexGlossaryTerm, type DataLexManifest, type DataLexManifestProject, } from './types.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC5B,MAAM,YAAY,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * DataLex contract resolution for DQL.
3
+ *
4
+ * Public surface for the consumer side of the manifest-spec
5
+ * `datalex_contract` interop pattern. Keeps DQL's compile-time check on
6
+ * `datalex_contract = "..."` references decoupled from DataLex's compiler:
7
+ * we only depend on the published manifest schema.
8
+ */
9
+ export { DataLexContractRegistry } from './registry.js';
10
+ export { parseContractRef, } from './types.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EACL,gBAAgB,GAejB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * DataLex contract registry — the consumer side of the manifest-spec
3
+ * `datalex_contract` interop pattern.
4
+ *
5
+ * Reads a DataLex manifest (JSON file) and indexes its contracts by id so
6
+ * the DQL compiler can resolve `datalex_contract = "domain.Entity.name@1"`
7
+ * references at compile time. Resolution failures are returned as
8
+ * structured `ContractResolution` values; they become DQL compiler
9
+ * diagnostics in the analyzer wiring (Phase 2.1 follow-up).
10
+ *
11
+ * See:
12
+ * - manifest-spec/docs/interop.md (resolution rules)
13
+ * - manifest-spec/schemas/v1/datalex-manifest.schema.json (source of truth)
14
+ */
15
+ import { type ContractRef, type ContractResolution, type DataLexContract, type DataLexManifest } from './types.js';
16
+ interface IndexedContract {
17
+ contract: DataLexContract;
18
+ domain: string;
19
+ entity: string;
20
+ }
21
+ /**
22
+ * Loads a DataLex manifest into an indexed contract lookup. One registry
23
+ * instance per DQL project. Re-create or call `reload()` between
24
+ * compilation runs if the manifest changes on disk.
25
+ */
26
+ export declare class DataLexContractRegistry {
27
+ private readonly source;
28
+ private readonly byId;
29
+ private readonly diagnostics;
30
+ constructor(source?: {
31
+ manifestPath?: string;
32
+ manifest?: DataLexManifest;
33
+ });
34
+ /** Reload from the configured source. Useful when the manifest is regenerated mid-session. */
35
+ reload(): void;
36
+ /**
37
+ * Resolve a `datalex_contract` reference from a DQL block.
38
+ *
39
+ * The resolution rules match `manifest-spec/docs/interop.md`:
40
+ * - The ref MUST parse as `<domain>.<Entity>.<contract_name>` with an
41
+ * optional `@<version>` suffix. Otherwise: `malformed_ref`.
42
+ * - The id MUST exist in the registry. Otherwise: `not_found`.
43
+ * - If a version is pinned, a contract with that version MUST exist
44
+ * under the id. Otherwise: `version_mismatch`.
45
+ * - If no version is pinned, the highest version wins; the caller may
46
+ * emit a "version-pinning recommended" warning separately.
47
+ */
48
+ resolve(ref: ContractRef): ContractResolution;
49
+ /** All contracts known to this registry, in stable id-then-version order. */
50
+ list(): IndexedContract[];
51
+ /** True when the registry was constructed from a real source. */
52
+ isLoaded(): boolean;
53
+ /** Diagnostics emitted while loading the manifest (parse errors, schema drift, etc.). */
54
+ loadDiagnostics(): string[];
55
+ private loadFromDisk;
56
+ private indexManifest;
57
+ }
58
+ export {};
59
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAEpB,UAAU,eAAe;IACvB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,qBAAa,uBAAuB;IAItB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4C;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;gBAEf,MAAM,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;KAAO;IAI/F,8FAA8F;IAC9F,MAAM,IAAI,IAAI;IAcd;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,kBAAkB;IA6C7C,6EAA6E;IAC7E,IAAI,IAAI,eAAe,EAAE;IAWzB,iEAAiE;IACjE,QAAQ,IAAI,OAAO;IAInB,yFAAyF;IACzF,eAAe,IAAI,MAAM,EAAE;IAI3B,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,aAAa;CAetB"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * DataLex contract registry — the consumer side of the manifest-spec
3
+ * `datalex_contract` interop pattern.
4
+ *
5
+ * Reads a DataLex manifest (JSON file) and indexes its contracts by id so
6
+ * the DQL compiler can resolve `datalex_contract = "domain.Entity.name@1"`
7
+ * references at compile time. Resolution failures are returned as
8
+ * structured `ContractResolution` values; they become DQL compiler
9
+ * diagnostics in the analyzer wiring (Phase 2.1 follow-up).
10
+ *
11
+ * See:
12
+ * - manifest-spec/docs/interop.md (resolution rules)
13
+ * - manifest-spec/schemas/v1/datalex-manifest.schema.json (source of truth)
14
+ */
15
+ import { existsSync, readFileSync } from 'node:fs';
16
+ import { parseContractRef, } from './types.js';
17
+ /**
18
+ * Loads a DataLex manifest into an indexed contract lookup. One registry
19
+ * instance per DQL project. Re-create or call `reload()` between
20
+ * compilation runs if the manifest changes on disk.
21
+ */
22
+ export class DataLexContractRegistry {
23
+ source;
24
+ byId = new Map();
25
+ diagnostics = [];
26
+ constructor(source = {}) {
27
+ this.source = source;
28
+ this.reload();
29
+ }
30
+ /** Reload from the configured source. Useful when the manifest is regenerated mid-session. */
31
+ reload() {
32
+ this.byId.clear();
33
+ this.diagnostics.length = 0;
34
+ let manifest = null;
35
+ if (this.source.manifest) {
36
+ manifest = this.source.manifest;
37
+ }
38
+ else if (this.source.manifestPath) {
39
+ manifest = this.loadFromDisk(this.source.manifestPath);
40
+ }
41
+ if (!manifest)
42
+ return;
43
+ this.indexManifest(manifest);
44
+ }
45
+ /**
46
+ * Resolve a `datalex_contract` reference from a DQL block.
47
+ *
48
+ * The resolution rules match `manifest-spec/docs/interop.md`:
49
+ * - The ref MUST parse as `<domain>.<Entity>.<contract_name>` with an
50
+ * optional `@<version>` suffix. Otherwise: `malformed_ref`.
51
+ * - The id MUST exist in the registry. Otherwise: `not_found`.
52
+ * - If a version is pinned, a contract with that version MUST exist
53
+ * under the id. Otherwise: `version_mismatch`.
54
+ * - If no version is pinned, the highest version wins; the caller may
55
+ * emit a "version-pinning recommended" warning separately.
56
+ */
57
+ resolve(ref) {
58
+ const parsed = parseContractRef(ref);
59
+ if (!parsed.ok || !parsed.id) {
60
+ return {
61
+ ok: false,
62
+ reason: 'malformed_ref',
63
+ message: parsed.reason ?? 'invalid contract reference',
64
+ requestedRef: ref,
65
+ };
66
+ }
67
+ const indexed = this.byId.get(parsed.id);
68
+ if (!indexed || indexed.length === 0) {
69
+ return {
70
+ ok: false,
71
+ reason: 'not_found',
72
+ message: `No DataLex contract with id "${parsed.id}" found in the loaded manifest.`,
73
+ requestedRef: ref,
74
+ requestedVersion: parsed.version,
75
+ };
76
+ }
77
+ if (parsed.version === undefined) {
78
+ const winner = indexed.reduce((best, candidate) => candidate.contract.version > best.contract.version ? candidate : best);
79
+ return {
80
+ ok: true,
81
+ contract: winner.contract,
82
+ domain: winner.domain,
83
+ entity: winner.entity,
84
+ };
85
+ }
86
+ const match = indexed.find((c) => c.contract.version === parsed.version);
87
+ if (!match) {
88
+ return {
89
+ ok: false,
90
+ reason: 'version_mismatch',
91
+ message: `DataLex contract "${parsed.id}" has no version ${parsed.version} in the loaded manifest.`,
92
+ requestedRef: ref,
93
+ requestedVersion: parsed.version,
94
+ availableVersions: indexed.map((c) => c.contract.version).sort((a, b) => a - b),
95
+ };
96
+ }
97
+ return { ok: true, contract: match.contract, domain: match.domain, entity: match.entity };
98
+ }
99
+ /** All contracts known to this registry, in stable id-then-version order. */
100
+ list() {
101
+ const out = [];
102
+ for (const id of Array.from(this.byId.keys()).sort()) {
103
+ const versions = this.byId.get(id) ?? [];
104
+ out.push(...[...versions].sort((a, b) => a.contract.version - b.contract.version));
105
+ }
106
+ return out;
107
+ }
108
+ /** True when the registry was constructed from a real source. */
109
+ isLoaded() {
110
+ return this.byId.size > 0;
111
+ }
112
+ /** Diagnostics emitted while loading the manifest (parse errors, schema drift, etc.). */
113
+ loadDiagnostics() {
114
+ return [...this.diagnostics];
115
+ }
116
+ loadFromDisk(path) {
117
+ if (!existsSync(path)) {
118
+ this.diagnostics.push(`DataLex manifest not found at ${path}.`);
119
+ return null;
120
+ }
121
+ let raw;
122
+ try {
123
+ raw = readFileSync(path, 'utf-8');
124
+ }
125
+ catch (err) {
126
+ this.diagnostics.push(`Failed to read DataLex manifest at ${path}: ${err instanceof Error ? err.message : String(err)}`);
127
+ return null;
128
+ }
129
+ try {
130
+ const parsed = JSON.parse(raw);
131
+ if (!parsed || typeof parsed !== 'object') {
132
+ this.diagnostics.push(`DataLex manifest at ${path} is not a JSON object.`);
133
+ return null;
134
+ }
135
+ return parsed;
136
+ }
137
+ catch (err) {
138
+ this.diagnostics.push(`Failed to parse DataLex manifest at ${path}: ${err instanceof Error ? err.message : String(err)}`);
139
+ return null;
140
+ }
141
+ }
142
+ indexManifest(manifest) {
143
+ if (!Array.isArray(manifest.domains))
144
+ return;
145
+ for (const domain of manifest.domains) {
146
+ if (!domain || !Array.isArray(domain.entities))
147
+ continue;
148
+ for (const entity of domain.entities) {
149
+ if (!entity || !Array.isArray(entity.contracts))
150
+ continue;
151
+ for (const contract of entity.contracts) {
152
+ if (!contract || typeof contract.id !== 'string')
153
+ continue;
154
+ const list = this.byId.get(contract.id) ?? [];
155
+ list.push({ contract, domain: domain.name, entity: entity.name });
156
+ this.byId.set(contract.id, list);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/contracts/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * TypeScript types for the DataLex manifest, mirroring the v1 schema published
3
+ * at duckcode-ai/manifest-spec
4
+ * (`schemas/v1/datalex-manifest.schema.json`).
5
+ *
6
+ * These types are the consumer-side contract: dql-core treats incoming
7
+ * DataLex manifests as untrusted input and validates them before use. The
8
+ * source of truth is the JSON Schema; if these types drift, the schema wins.
9
+ */
10
+ /** Identifier of a DataLex contract, e.g. `commerce.Customer.monthly_active_customers`. */
11
+ export type ContractId = string;
12
+ /**
13
+ * Pinned reference to a contract from a DQL block. May include a major
14
+ * version pin like `commerce.Customer.monthly_active_customers@1`.
15
+ */
16
+ export type ContractRef = string;
17
+ export interface ContractParam {
18
+ name: string;
19
+ type: string;
20
+ description?: string;
21
+ constraints?: string[];
22
+ }
23
+ export interface ContractSignature {
24
+ inputs?: ContractParam[];
25
+ outputs?: ContractParam[];
26
+ }
27
+ export interface DataLexContract {
28
+ id: ContractId;
29
+ name: string;
30
+ description?: string;
31
+ /** Integer version, monotonic per contract id. */
32
+ version: number;
33
+ signature?: ContractSignature;
34
+ owner?: string;
35
+ tags?: string[];
36
+ }
37
+ export interface DataLexBinding {
38
+ kind: 'dbt_model' | 'dbt_source' | 'view' | 'table' | 'external';
39
+ ref: string;
40
+ }
41
+ export interface DataLexField {
42
+ name: string;
43
+ type?: string;
44
+ description?: string;
45
+ primary_key?: boolean;
46
+ nullable?: boolean;
47
+ unique?: boolean;
48
+ tags?: string[];
49
+ classification?: string;
50
+ }
51
+ export interface DataLexEntity {
52
+ name: string;
53
+ description?: string;
54
+ tags?: string[];
55
+ fields?: DataLexField[];
56
+ contracts?: DataLexContract[];
57
+ binding?: DataLexBinding;
58
+ }
59
+ export interface DataLexGlossaryTerm {
60
+ term: string;
61
+ definition: string;
62
+ tags?: string[];
63
+ related_fields?: string[];
64
+ }
65
+ export interface DataLexDomain {
66
+ name: string;
67
+ description?: string;
68
+ owners?: string[];
69
+ entities: DataLexEntity[];
70
+ glossary?: DataLexGlossaryTerm[];
71
+ }
72
+ export interface DataLexManifestProject {
73
+ name: string;
74
+ description?: string;
75
+ dialect?: string;
76
+ owners?: string[];
77
+ }
78
+ export interface DataLexDiagnostic {
79
+ severity: 'info' | 'warning' | 'error';
80
+ message: string;
81
+ path?: string;
82
+ code?: string;
83
+ }
84
+ export interface DataLexManifest {
85
+ /** Manifest spec major.minor.patch this artifact validates against (v1.x). */
86
+ manifestSpecVersion: string;
87
+ /** DataLex compiler version that produced this manifest. */
88
+ datalexVersion: string;
89
+ /** RFC3339 timestamp when the manifest was emitted. */
90
+ generatedAt: string;
91
+ project: DataLexManifestProject;
92
+ domains: DataLexDomain[];
93
+ diagnostics?: DataLexDiagnostic[];
94
+ }
95
+ /**
96
+ * Result of resolving a contract id against a registry. Carries either the
97
+ * resolved contract + its location in the manifest, or a structured error
98
+ * suitable for emitting as a DQL compiler diagnostic.
99
+ */
100
+ export type ContractResolution = {
101
+ ok: true;
102
+ contract: DataLexContract;
103
+ domain: string;
104
+ entity: string;
105
+ } | {
106
+ ok: false;
107
+ reason: 'not_found' | 'version_mismatch' | 'malformed_ref';
108
+ message: string;
109
+ requestedRef: ContractRef;
110
+ requestedVersion?: number;
111
+ availableVersions?: number[];
112
+ };
113
+ /** Parse a contract reference like `domain.Entity.contract@1` into its parts. */
114
+ export declare function parseContractRef(ref: ContractRef): {
115
+ ok: boolean;
116
+ id?: ContractId;
117
+ version?: number;
118
+ reason?: string;
119
+ };
120
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * TypeScript types for the DataLex manifest, mirroring the v1 schema published
3
+ * at duckcode-ai/manifest-spec
4
+ * (`schemas/v1/datalex-manifest.schema.json`).
5
+ *
6
+ * These types are the consumer-side contract: dql-core treats incoming
7
+ * DataLex manifests as untrusted input and validates them before use. The
8
+ * source of truth is the JSON Schema; if these types drift, the schema wins.
9
+ */
10
+ /** Parse a contract reference like `domain.Entity.contract@1` into its parts. */
11
+ export function parseContractRef(ref) {
12
+ if (typeof ref !== 'string' || ref.trim() === '') {
13
+ return { ok: false, reason: 'empty contract reference' };
14
+ }
15
+ const [idPart, versionPart] = ref.split('@', 2);
16
+ const idMatch = /^[a-zA-Z][a-zA-Z0-9_]*\.[A-Z][A-Za-z0-9]*\.[a-z][a-z0-9_]*$/.test(idPart);
17
+ if (!idMatch) {
18
+ return {
19
+ ok: false,
20
+ reason: `contract id must be <domain>.<Entity>.<contract_name>; got "${idPart}"`,
21
+ };
22
+ }
23
+ if (versionPart === undefined) {
24
+ return { ok: true, id: idPart };
25
+ }
26
+ const version = Number.parseInt(versionPart, 10);
27
+ if (!Number.isInteger(version) || version < 1 || String(version) !== versionPart) {
28
+ return {
29
+ ok: false,
30
+ reason: `contract version must be a positive integer; got "${versionPart}"`,
31
+ };
32
+ }
33
+ return { ok: true, id: idPart, version };
34
+ }
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/contracts/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyHH,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,GAAgB;IAM/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC;IAC3D,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,6DAA6D,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3F,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,+DAA+D,MAAM,GAAG;SACjF,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,EAAE,CAAC;QACjF,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,qDAAqD,WAAW,GAAG;SAC5E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC"}
@@ -199,6 +199,17 @@ function formatBlock(node, level, state) {
199
199
  if (node.invariants && node.invariants.length > 0) {
200
200
  lines.push(`${indent(level + 1, state)}invariants = [${node.invariants.map(quote).join(', ')}]`);
201
201
  }
202
+ if (node.blockType === 'semantic') {
203
+ if (node.metricsRef && node.metricsRef.length > 0) {
204
+ lines.push(`${indent(level + 1, state)}metrics = [${node.metricsRef.map(quote).join(', ')}]`);
205
+ }
206
+ else if (node.metricRef !== undefined) {
207
+ lines.push(`${indent(level + 1, state)}metric = ${quote(node.metricRef)}`);
208
+ }
209
+ if (node.dimensionsRef !== undefined) {
210
+ lines.push(`${indent(level + 1, state)}dimensions = [${node.dimensionsRef.map(quote).join(', ')}]`);
211
+ }
212
+ }
202
213
  if (node.params) {
203
214
  lines.push(`${indent(level + 1, state)}params {`);
204
215
  for (const entry of node.params.params) {