@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.
- package/README.md +7 -5
- package/dist/ast/nodes.d.ts +11 -0
- package/dist/ast/nodes.d.ts.map +1 -1
- package/dist/ast/printer.js +6 -0
- package/dist/ast/printer.js.map +1 -1
- package/dist/contracts/index.d.ts +11 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +11 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/contracts/registry.d.ts +59 -0
- package/dist/contracts/registry.d.ts.map +1 -0
- package/dist/contracts/registry.js +162 -0
- package/dist/contracts/registry.js.map +1 -0
- package/dist/contracts/types.d.ts +120 -0
- package/dist/contracts/types.d.ts.map +1 -0
- package/dist/contracts/types.js +35 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/formatter/formatter.js +11 -0
- package/dist/formatter/formatter.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lexer/token.d.ts +1 -0
- package/dist/lexer/token.d.ts.map +1 -1
- package/dist/lexer/token.js +2 -0
- package/dist/lexer/token.js.map +1 -1
- package/dist/lineage/builder.d.ts +4 -0
- package/dist/lineage/builder.d.ts.map +1 -1
- package/dist/lineage/builder.js +23 -10
- package/dist/lineage/builder.js.map +1 -1
- package/dist/lineage/column-lineage.d.ts +56 -0
- package/dist/lineage/column-lineage.d.ts.map +1 -0
- package/dist/lineage/column-lineage.js +263 -0
- package/dist/lineage/column-lineage.js.map +1 -0
- package/dist/lineage/index.d.ts +1 -0
- package/dist/lineage/index.d.ts.map +1 -1
- package/dist/lineage/index.js +1 -0
- package/dist/lineage/index.js.map +1 -1
- package/dist/manifest/builder.d.ts.map +1 -1
- package/dist/manifest/builder.js +18 -0
- package/dist/manifest/builder.js.map +1 -1
- package/dist/manifest/types.d.ts +29 -0
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +29 -1
- package/dist/parser/parser.js.map +1 -1
- package/dist/semantic/analyzer.d.ts +14 -2
- package/dist/semantic/analyzer.d.ts.map +1 -1
- package/dist/semantic/analyzer.js +31 -4
- package/dist/semantic/analyzer.js.map +1 -1
- package/dist/semantic/semantic-layer.d.ts.map +1 -1
- package/dist/semantic/semantic-layer.js +24 -2
- package/dist/semantic/semantic-layer.js.map +1 -1
- 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
|
|
19
|
+
block "Revenue by segment" {
|
|
20
|
+
domain = "finance"
|
|
20
21
|
type = "custom"
|
|
21
|
-
|
|
22
|
+
status = "draft"
|
|
23
|
+
description = "Revenue by segment."
|
|
22
24
|
|
|
23
|
-
query =
|
|
25
|
+
query = """
|
|
24
26
|
select segment, sum(revenue) as revenue
|
|
25
27
|
from revenue
|
|
26
28
|
group by 1
|
|
27
|
-
|
|
29
|
+
"""
|
|
28
30
|
}
|
|
29
31
|
`;
|
|
30
32
|
|
|
@@ -43,5 +45,5 @@ console.log(diagnostics);
|
|
|
43
45
|
|
|
44
46
|
## Learn More
|
|
45
47
|
|
|
46
|
-
- Language
|
|
48
|
+
- Language reference: [`../../docs/reference/language.md`](../../docs/reference/language.md)
|
|
47
49
|
- Root docs: [`../../README.md`](../../README.md)
|
package/dist/ast/nodes.d.ts
CHANGED
|
@@ -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;
|
package/dist/ast/nodes.d.ts.map
CHANGED
|
@@ -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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"}
|
package/dist/ast/printer.js
CHANGED
|
@@ -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) {
|
package/dist/ast/printer.js.map
CHANGED
|
@@ -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) {
|