@duckcodeailabs/dql-core 1.5.3 → 1.6.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.
- package/dist/ast/nodes.d.ts +9 -0
- package/dist/ast/nodes.d.ts.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/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/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 +12 -0
- package/dist/manifest/builder.js.map +1 -1
- package/dist/manifest/types.d.ts +25 -0
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/parser/parser.d.ts.map +1 -1
- package/dist/parser/parser.js +17 -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/package.json +1 -1
package/dist/ast/nodes.d.ts
CHANGED
|
@@ -210,6 +210,15 @@ export interface BlockDeclNode extends BaseNode {
|
|
|
210
210
|
* agent's "block-first" matcher all read this.
|
|
211
211
|
*/
|
|
212
212
|
status?: string;
|
|
213
|
+
/**
|
|
214
|
+
* v1.6 — DataLex contract reference. Format:
|
|
215
|
+
* `<domain>.<Entity>.<contract_name>` with optional `@<version>` suffix.
|
|
216
|
+
* The compile-time check resolves this against the project's DataLex
|
|
217
|
+
* manifest (see contracts/registry.ts) and emits diagnostics for
|
|
218
|
+
* not_found / version_mismatch / malformed_ref. Required link to the
|
|
219
|
+
* manifest-spec interop pattern; see docs/interop.md.
|
|
220
|
+
*/
|
|
221
|
+
datalexContract?: string;
|
|
213
222
|
}
|
|
214
223
|
export interface BlockParamsNode extends BaseNode {
|
|
215
224
|
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":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAID,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,SAAS,GACT,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,aAAa,GACb,aAAa,GACb,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,OAAO,GACP,WAAW,GACX,SAAS,GACT,KAAK,CAAC;AAIV,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,CAAC;AAIvH,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAOlI,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAID,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC;AAIvF,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,qBAAqB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB;AAID,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,cAAc,CAAC;CAC7B;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACvB;AAID,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAID,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAID,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,SAAS,EAAE,UAAU,GAAG,QAAQ,CAAC;IACjC,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,uFAAuF;IACvF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../src/ast/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAID,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;CAClB;AAID,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,SAAS,GACT,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,aAAa,GACb,aAAa,GACb,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,WAAW,GACX,iBAAiB,GACjB,OAAO,GACP,WAAW,GACX,SAAS,GACT,KAAK,CAAC;AAIV,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,UAAU,CAAC;AAIvH,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,aAAa,GAAG,aAAa,GAAG,cAAc,GAAG,WAAW,GAAG,eAAe,CAAC;AAOlI,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAID,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC;AAIvF,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,qBAAqB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;CAClB;AAID,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,cAAc,CAAC;CAC7B;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;CACvB;AAID,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,QAAQ;IACjD,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,QAAQ,EAAE,GAAG,GAAG,GAAG,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAiB,SAAQ,QAAQ;IAChD,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC;IAC9B,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,QAAS,SAAQ,QAAQ;IACxC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAID,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAID,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6GAA6G;IAC7G,SAAS,EAAE,UAAU,GAAG,QAAQ,CAAC;IACjC,wGAAwG;IACxG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0GAA0G;IAC1G,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,uFAAuF;IACvF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,cAAc,CAAC;IAC5B,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,QAAQ;IACtD,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IAClC,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACvD,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAID,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,GAAG,cAAc,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,wCAAwC;AAExC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,wCAAwC;AAExC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column-level lineage extractor.
|
|
3
|
+
*
|
|
4
|
+
* Parses a DQL block's SQL with `node-sql-parser` to produce a list of
|
|
5
|
+
* output columns each tagged with the source `table.column` (or columns)
|
|
6
|
+
* they derive from. Used by the manifest builder to populate the
|
|
7
|
+
* `outputs[*].lineage` field documented in
|
|
8
|
+
* manifest-spec/schemas/v1/dql-manifest.schema.json.
|
|
9
|
+
*
|
|
10
|
+
* Scope of v1:
|
|
11
|
+
* - Single-SELECT statements (no UNION / no top-level CTE chains yet).
|
|
12
|
+
* - Common shapes: `SELECT col`, `SELECT t.col`, `SELECT col AS alias`,
|
|
13
|
+
* `SELECT SUM(col) AS metric`, `SELECT a + b AS c`.
|
|
14
|
+
* - Star expansion is reported as a single `*` entry with `unresolved`.
|
|
15
|
+
* - Anything else (subqueries in select list, complex CASE,
|
|
16
|
+
* window functions, UNION) parses cleanly but the column entry is
|
|
17
|
+
* marked `unresolved: true`. The caller falls back to table-level
|
|
18
|
+
* lineage in that case.
|
|
19
|
+
*
|
|
20
|
+
* Phase 2.4 follow-up will expand to CTEs and joins with alias chains.
|
|
21
|
+
*/
|
|
22
|
+
export interface ColumnSource {
|
|
23
|
+
table: string;
|
|
24
|
+
column: string;
|
|
25
|
+
}
|
|
26
|
+
export interface ColumnLineageEntry {
|
|
27
|
+
/** Output column name; alias when present, else the bare source column. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** True if the column is an aggregate (SUM, COUNT, AVG, MIN, MAX, COUNT(DISTINCT), …). */
|
|
30
|
+
isAggregate?: boolean;
|
|
31
|
+
/** The aggregate function name when isAggregate is true. */
|
|
32
|
+
aggregateFn?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Source bindings (one per source column the output references). May be
|
|
35
|
+
* empty when the column is a literal or fully-computed expression.
|
|
36
|
+
*/
|
|
37
|
+
sources: ColumnSource[];
|
|
38
|
+
/**
|
|
39
|
+
* True when the entry could not be fully resolved (e.g. star expansion,
|
|
40
|
+
* subquery, deeply nested CASE). The caller should fall back to
|
|
41
|
+
* table-level lineage for unresolved entries.
|
|
42
|
+
*/
|
|
43
|
+
unresolved?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export interface ColumnLineageResult {
|
|
46
|
+
/** True if SQL parsed AND we extracted at least one column entry. */
|
|
47
|
+
parsed: boolean;
|
|
48
|
+
/** Output columns in the order they appear in the SELECT list. */
|
|
49
|
+
columns: ColumnLineageEntry[];
|
|
50
|
+
/** Tables resolved from the FROM/JOIN clauses (best-effort, alias-aware). */
|
|
51
|
+
tables: string[];
|
|
52
|
+
/** Parse-error message when `parsed === false`. */
|
|
53
|
+
error?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function extractColumnLineage(sql: string, dialect?: string): ColumnLineageResult;
|
|
56
|
+
//# sourceMappingURL=column-lineage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-lineage.d.ts","sourceRoot":"","sources":["../../src/lineage/column-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkCD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAkB,GAAG,mBAAmB,CA2ChG"}
|