@duckcodeailabs/dql-core 0.3.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/lineage/builder.d.ts +43 -0
  6. package/dist/lineage/builder.d.ts.map +1 -0
  7. package/dist/lineage/builder.js +192 -0
  8. package/dist/lineage/builder.js.map +1 -0
  9. package/dist/lineage/dependency-resolver.d.ts +44 -0
  10. package/dist/lineage/dependency-resolver.d.ts.map +1 -0
  11. package/dist/lineage/dependency-resolver.js +168 -0
  12. package/dist/lineage/dependency-resolver.js.map +1 -0
  13. package/dist/lineage/domain-lineage.d.ts +96 -0
  14. package/dist/lineage/domain-lineage.d.ts.map +1 -0
  15. package/dist/lineage/domain-lineage.js +140 -0
  16. package/dist/lineage/domain-lineage.js.map +1 -0
  17. package/dist/lineage/index.d.ts +6 -0
  18. package/dist/lineage/index.d.ts.map +1 -0
  19. package/dist/lineage/index.js +7 -0
  20. package/dist/lineage/index.js.map +1 -0
  21. package/dist/lineage/lineage-graph.d.ts +97 -0
  22. package/dist/lineage/lineage-graph.d.ts.map +1 -0
  23. package/dist/lineage/lineage-graph.js +198 -0
  24. package/dist/lineage/lineage-graph.js.map +1 -0
  25. package/dist/lineage/sql-parser.d.ts +23 -0
  26. package/dist/lineage/sql-parser.d.ts.map +1 -0
  27. package/dist/lineage/sql-parser.js +126 -0
  28. package/dist/lineage/sql-parser.js.map +1 -0
  29. package/dist/manifest/builder.d.ts +22 -0
  30. package/dist/manifest/builder.d.ts.map +1 -0
  31. package/dist/manifest/builder.js +538 -0
  32. package/dist/manifest/builder.js.map +1 -0
  33. package/dist/manifest/index.d.ts +3 -0
  34. package/dist/manifest/index.d.ts.map +1 -0
  35. package/dist/manifest/index.js +3 -0
  36. package/dist/manifest/index.js.map +1 -0
  37. package/dist/manifest/types.d.ts +168 -0
  38. package/dist/manifest/types.d.ts.map +1 -0
  39. package/dist/manifest/types.js +10 -0
  40. package/dist/manifest/types.js.map +1 -0
  41. package/dist/semantic/index.d.ts +1 -1
  42. package/dist/semantic/index.d.ts.map +1 -1
  43. package/dist/semantic/index.js +1 -1
  44. package/dist/semantic/index.js.map +1 -1
  45. package/dist/semantic/providers/index.d.ts +1 -1
  46. package/dist/semantic/providers/index.d.ts.map +1 -1
  47. package/dist/semantic/providers/index.js +1 -1
  48. package/dist/semantic/providers/index.js.map +1 -1
  49. package/dist/semantic/providers/registry.d.ts +7 -0
  50. package/dist/semantic/providers/registry.d.ts.map +1 -1
  51. package/dist/semantic/providers/registry.js +30 -0
  52. package/dist/semantic/providers/registry.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Manifest Builder — scans a DQL project and produces a DQLManifest.
3
+ *
4
+ * This is the core compilation step: discovers all blocks, notebooks,
5
+ * semantic layer definitions, extracts dependencies, builds lineage,
6
+ * and optionally imports dbt manifest data.
7
+ */
8
+ import type { DQLManifest } from './types.js';
9
+ export interface ManifestBuildOptions {
10
+ /** Project root directory (must contain dql.config.json) */
11
+ projectRoot: string;
12
+ /** DQL CLI version string */
13
+ dqlVersion?: string;
14
+ /** Path to dbt manifest.json for import */
15
+ dbtManifestPath?: string;
16
+ /** Additional directories to scan for .dql files */
17
+ extraBlockDirs?: string[];
18
+ /** Additional directories to scan for .dqlnb files */
19
+ extraNotebookDirs?: string[];
20
+ }
21
+ export declare function buildManifest(options: ManifestBuildOptions): DQLManifest;
22
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/manifest/builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,WAAW,EASZ,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,oBAAoB;IACnC,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CAmDxE"}
@@ -0,0 +1,538 @@
1
+ /**
2
+ * Manifest Builder — scans a DQL project and produces a DQLManifest.
3
+ *
4
+ * This is the core compilation step: discovers all blocks, notebooks,
5
+ * semantic layer definitions, extracts dependencies, builds lineage,
6
+ * and optionally imports dbt manifest data.
7
+ */
8
+ import { readdirSync, readFileSync, existsSync } from 'node:fs';
9
+ import { join, extname, relative } from 'node:path';
10
+ import { Parser } from '../parser/index.js';
11
+ import { extractTablesFromSql } from '../lineage/sql-parser.js';
12
+ import { buildLineageGraph } from '../lineage/builder.js';
13
+ import { detectDomainFlows, getDomainTrustOverview } from '../lineage/domain-lineage.js';
14
+ import { loadSemanticLayerFromDir } from '../semantic/index.js';
15
+ export function buildManifest(options) {
16
+ const { projectRoot, dqlVersion = '0.6.0' } = options;
17
+ // Load project config
18
+ const config = loadProjectConfig(projectRoot);
19
+ const projectName = config.project ?? 'dql-project';
20
+ // Scan blocks
21
+ const blockDirs = ['blocks', 'dashboards', 'workbooks', ...(options.extraBlockDirs ?? [])];
22
+ const blocks = scanBlocks(projectRoot, blockDirs);
23
+ // Scan notebooks
24
+ const notebookDirs = ['notebooks', 'blocks', 'dashboards', 'workbooks', ...(options.extraNotebookDirs ?? [])];
25
+ const notebooks = scanNotebooks(projectRoot, notebookDirs);
26
+ // Extract blocks declared inside notebook DQL cells
27
+ const notebookBlocks = extractNotebookBlocks(notebooks, projectRoot);
28
+ for (const [name, block] of Object.entries(notebookBlocks)) {
29
+ if (!blocks[name])
30
+ blocks[name] = block;
31
+ }
32
+ // Load semantic layer
33
+ const semanticDir = resolveSemanticPath(projectRoot, config);
34
+ const { metrics, dimensions } = loadSemanticDefinitions(projectRoot, semanticDir);
35
+ // Collect all source tables
36
+ const sources = collectSources(blocks, notebooks, metrics, dimensions);
37
+ // Import dbt manifest if provided
38
+ let dbtImport;
39
+ if (options.dbtManifestPath) {
40
+ dbtImport = importDbtManifest(options.dbtManifestPath, sources);
41
+ }
42
+ // Build lineage
43
+ const lineage = buildManifestLineage(blocks, metrics, dimensions);
44
+ return {
45
+ manifestVersion: 1,
46
+ dqlVersion,
47
+ generatedAt: new Date().toISOString(),
48
+ project: projectName,
49
+ projectRoot,
50
+ blocks,
51
+ notebooks,
52
+ metrics,
53
+ dimensions,
54
+ sources,
55
+ lineage,
56
+ dbtImport,
57
+ };
58
+ }
59
+ function loadProjectConfig(projectRoot) {
60
+ const configPath = join(projectRoot, 'dql.config.json');
61
+ if (!existsSync(configPath))
62
+ return {};
63
+ try {
64
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
65
+ }
66
+ catch {
67
+ return {};
68
+ }
69
+ }
70
+ function resolveSemanticPath(projectRoot, config) {
71
+ const customPath = config.semanticLayer?.path;
72
+ if (customPath)
73
+ return join(projectRoot, customPath);
74
+ return join(projectRoot, 'semantic-layer');
75
+ }
76
+ // ---- Recursive File Scanner ----
77
+ function scanFilesRecursive(dir, extensions) {
78
+ const results = [];
79
+ if (!existsSync(dir))
80
+ return results;
81
+ const entries = readdirSync(dir, { withFileTypes: true });
82
+ for (const entry of entries) {
83
+ const fullPath = join(dir, entry.name);
84
+ if (entry.isDirectory()) {
85
+ // Skip hidden dirs and node_modules
86
+ if (entry.name.startsWith('.') || entry.name === 'node_modules')
87
+ continue;
88
+ results.push(...scanFilesRecursive(fullPath, extensions));
89
+ }
90
+ else if (entry.isFile() && extensions.includes(extname(entry.name))) {
91
+ results.push(fullPath);
92
+ }
93
+ }
94
+ return results;
95
+ }
96
+ // ---- Block Scanning ----
97
+ function scanBlocks(projectRoot, dirs) {
98
+ const blocks = {};
99
+ for (const dir of dirs) {
100
+ const dirPath = join(projectRoot, dir);
101
+ const files = scanFilesRecursive(dirPath, ['.dql']);
102
+ for (const filePath of files) {
103
+ try {
104
+ const source = readFileSync(filePath, 'utf-8');
105
+ const relPath = relative(projectRoot, filePath);
106
+ const parser = new Parser(source, relPath);
107
+ const ast = parser.parse();
108
+ for (const stmt of ast.statements) {
109
+ const block = stmt;
110
+ if (block.kind !== 'BlockDecl')
111
+ continue;
112
+ const sql = block.query?.rawSQL ?? '';
113
+ const parseResult = extractTablesFromSql(sql);
114
+ const domain = extractProp(block, 'domain');
115
+ const owner = extractProp(block, 'owner');
116
+ const description = extractProp(block, 'description');
117
+ const tags = extractTags(block);
118
+ const tests = extractTests(block);
119
+ blocks[block.name] = {
120
+ name: block.name,
121
+ filePath: relPath,
122
+ domain,
123
+ owner,
124
+ status: extractProp(block, 'status'),
125
+ blockType: block.blockType,
126
+ sql,
127
+ rawTableRefs: parseResult.tables,
128
+ tableDependencies: parseResult.tables.map(normalizeTableName),
129
+ refDependencies: parseResult.refs,
130
+ allDependencies: [
131
+ ...parseResult.refs,
132
+ ...parseResult.tables.map(normalizeTableName),
133
+ ],
134
+ chartType: extractVisualizationChart(block),
135
+ metricRef: block.metricRef,
136
+ tests,
137
+ tags,
138
+ description,
139
+ };
140
+ }
141
+ }
142
+ catch {
143
+ // Skip unparseable files
144
+ }
145
+ }
146
+ }
147
+ return blocks;
148
+ }
149
+ // ---- Notebook Scanning ----
150
+ function scanNotebooks(projectRoot, dirs) {
151
+ const notebooks = {};
152
+ const seen = new Set();
153
+ for (const dir of dirs) {
154
+ const dirPath = join(projectRoot, dir);
155
+ const files = scanFilesRecursive(dirPath, ['.dqlnb']);
156
+ for (const filePath of files) {
157
+ if (seen.has(filePath))
158
+ continue;
159
+ seen.add(filePath);
160
+ try {
161
+ const raw = readFileSync(filePath, 'utf-8');
162
+ const relPath = relative(projectRoot, filePath);
163
+ const doc = JSON.parse(raw);
164
+ if (doc.version !== 1 || !Array.isArray(doc.cells))
165
+ continue;
166
+ const cells = [];
167
+ for (const cell of doc.cells) {
168
+ const type = cell.type;
169
+ if (type !== 'sql' && type !== 'dql')
170
+ continue;
171
+ const source = cell.source ?? cell.content ?? '';
172
+ if (!source.trim())
173
+ continue;
174
+ let sqlToAnalyze = source;
175
+ let blockName;
176
+ // For DQL cells, try to extract the block's SQL
177
+ if (type === 'dql') {
178
+ try {
179
+ const parser = new Parser(source, `${relPath}:${cell.id}`);
180
+ const ast = parser.parse();
181
+ for (const stmt of ast.statements) {
182
+ if (stmt.kind === 'BlockDecl') {
183
+ blockName = stmt.name;
184
+ sqlToAnalyze = stmt.query?.rawSQL ?? source;
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ catch {
190
+ // Fall back to analyzing the raw source as SQL
191
+ }
192
+ }
193
+ const parseResult = extractTablesFromSql(sqlToAnalyze);
194
+ // Find if any chart cell references this cell
195
+ const chartCell = doc.cells.find((c) => c.type === 'chart' && c.config?.sourceCellId === cell.id);
196
+ cells.push({
197
+ id: cell.id ?? `cell-${cells.length}`,
198
+ type,
199
+ title: cell.title ?? cell.name,
200
+ source,
201
+ tableDependencies: parseResult.tables.map(normalizeTableName),
202
+ refDependencies: parseResult.refs,
203
+ blockName,
204
+ chartType: chartCell?.config?.chart,
205
+ });
206
+ }
207
+ if (cells.length > 0) {
208
+ notebooks[relPath] = {
209
+ title: doc.metadata?.title ?? doc.title ?? relPath,
210
+ filePath: relPath,
211
+ cells,
212
+ };
213
+ }
214
+ }
215
+ catch {
216
+ // Skip invalid notebooks
217
+ }
218
+ }
219
+ }
220
+ return notebooks;
221
+ }
222
+ /** Extract blocks declared inside notebook DQL cells into the blocks map. */
223
+ function extractNotebookBlocks(notebooks, projectRoot) {
224
+ const blocks = {};
225
+ for (const [nbPath, nb] of Object.entries(notebooks)) {
226
+ for (const cell of nb.cells) {
227
+ if (cell.type !== 'dql' || !cell.blockName)
228
+ continue;
229
+ // Only add if not already found as a standalone block file
230
+ if (!blocks[cell.blockName]) {
231
+ const parseResult = extractTablesFromSql(cell.source);
232
+ blocks[cell.blockName] = {
233
+ name: cell.blockName,
234
+ filePath: `${nbPath}#${cell.id}`,
235
+ sql: cell.source,
236
+ rawTableRefs: parseResult.tables,
237
+ tableDependencies: parseResult.tables.map(normalizeTableName),
238
+ refDependencies: parseResult.refs,
239
+ allDependencies: [...parseResult.refs, ...parseResult.tables.map(normalizeTableName)],
240
+ tests: [],
241
+ };
242
+ }
243
+ }
244
+ }
245
+ return blocks;
246
+ }
247
+ // ---- Semantic Layer ----
248
+ function loadSemanticDefinitions(projectRoot, semanticDir) {
249
+ const metrics = {};
250
+ const dimensions = {};
251
+ if (!existsSync(semanticDir))
252
+ return { metrics, dimensions };
253
+ try {
254
+ const layer = loadSemanticLayerFromDir(semanticDir);
255
+ for (const m of layer.listMetrics()) {
256
+ metrics[m.name] = {
257
+ name: m.name,
258
+ type: m.type,
259
+ table: m.table,
260
+ domain: m.domain,
261
+ description: m.description,
262
+ sql: m.sql,
263
+ };
264
+ }
265
+ for (const d of layer.listDimensions()) {
266
+ dimensions[d.name] = {
267
+ name: d.name,
268
+ table: d.table,
269
+ type: d.type,
270
+ description: d.description,
271
+ };
272
+ }
273
+ // Try to find file paths for metrics and dimensions
274
+ const metricFiles = scanFilesRecursive(join(semanticDir, 'metrics'), ['.yaml', '.yml']);
275
+ for (const f of metricFiles) {
276
+ try {
277
+ const content = JSON.parse(JSON.stringify(
278
+ // Simple YAML-like parse for name field
279
+ Object.fromEntries(readFileSync(f, 'utf-8')
280
+ .split('\n')
281
+ .filter((l) => l.includes(':') && !l.startsWith('#'))
282
+ .map((l) => {
283
+ const [k, ...v] = l.split(':');
284
+ return [k.trim(), v.join(':').trim()];
285
+ }))));
286
+ if (content.name && metrics[content.name]) {
287
+ metrics[content.name].filePath = relative(projectRoot, f);
288
+ }
289
+ }
290
+ catch { /* skip */ }
291
+ }
292
+ }
293
+ catch {
294
+ // Non-fatal — semantic layer may not exist or be misconfigured
295
+ }
296
+ return { metrics, dimensions };
297
+ }
298
+ // ---- Source Collection ----
299
+ function collectSources(blocks, notebooks, metrics, dimensions) {
300
+ const sources = {};
301
+ function ensureSource(name, origin, rawRef) {
302
+ if (!sources[name]) {
303
+ sources[name] = { name, origin, rawRef, referencedBy: [] };
304
+ }
305
+ return sources[name];
306
+ }
307
+ // From blocks
308
+ for (const block of Object.values(blocks)) {
309
+ for (let i = 0; i < block.tableDependencies.length; i++) {
310
+ const tableName = block.tableDependencies[i];
311
+ // Skip if it's actually a ref to another block
312
+ if (blocks[tableName])
313
+ continue;
314
+ const source = ensureSource(tableName, 'sql', block.rawTableRefs[i]);
315
+ source.referencedBy.push(`block:${block.name}`);
316
+ }
317
+ }
318
+ // From notebooks
319
+ for (const nb of Object.values(notebooks)) {
320
+ for (const cell of nb.cells) {
321
+ for (const tableName of cell.tableDependencies) {
322
+ if (blocks[tableName])
323
+ continue;
324
+ const source = ensureSource(tableName, 'sql');
325
+ source.referencedBy.push(`notebook:${nb.filePath}#${cell.id}`);
326
+ }
327
+ }
328
+ }
329
+ // From semantic layer
330
+ for (const metric of Object.values(metrics)) {
331
+ const source = ensureSource(metric.table, 'semantic');
332
+ if (!source.referencedBy.includes(`metric:${metric.name}`)) {
333
+ source.referencedBy.push(`metric:${metric.name}`);
334
+ }
335
+ }
336
+ for (const dim of Object.values(dimensions)) {
337
+ const source = ensureSource(dim.table, 'semantic');
338
+ if (!source.referencedBy.includes(`dimension:${dim.name}`)) {
339
+ source.referencedBy.push(`dimension:${dim.name}`);
340
+ }
341
+ }
342
+ return sources;
343
+ }
344
+ // ---- dbt Manifest Import ----
345
+ function importDbtManifest(manifestPath, sources) {
346
+ const raw = readFileSync(manifestPath, 'utf-8');
347
+ const manifest = JSON.parse(raw);
348
+ let modelsImported = 0;
349
+ let sourcesImported = 0;
350
+ const projectName = manifest.metadata?.project_name;
351
+ // Import models as source tables
352
+ const nodes = manifest.nodes ?? {};
353
+ for (const [uniqueId, node] of Object.entries(nodes)) {
354
+ if (node.resource_type !== 'model')
355
+ continue;
356
+ const tableName = node.alias ?? node.name;
357
+ if (!tableName)
358
+ continue;
359
+ // Create or update source entry
360
+ if (!sources[tableName]) {
361
+ sources[tableName] = {
362
+ name: tableName,
363
+ origin: 'dbt',
364
+ referencedBy: [],
365
+ };
366
+ sourcesImported++;
367
+ }
368
+ sources[tableName].dbtModel = {
369
+ uniqueId,
370
+ database: node.database,
371
+ schema: node.schema,
372
+ materializedAs: node.config?.materialized,
373
+ description: node.description,
374
+ columns: node.columns
375
+ ? Object.fromEntries(Object.entries(node.columns).map(([k, v]) => [
376
+ k,
377
+ { name: v.name, description: v.description, type: v.data_type },
378
+ ]))
379
+ : undefined,
380
+ };
381
+ if (sources[tableName].origin === 'sql') {
382
+ sources[tableName].origin = 'dbt';
383
+ }
384
+ modelsImported++;
385
+ }
386
+ // Import dbt sources
387
+ const dbtSources = manifest.sources ?? {};
388
+ for (const [uniqueId, src] of Object.entries(dbtSources)) {
389
+ const tableName = src.identifier ?? src.name;
390
+ if (!tableName)
391
+ continue;
392
+ if (!sources[tableName]) {
393
+ sources[tableName] = {
394
+ name: tableName,
395
+ origin: 'dbt',
396
+ referencedBy: [],
397
+ };
398
+ }
399
+ sources[tableName].dbtModel = {
400
+ uniqueId,
401
+ database: src.database,
402
+ schema: src.schema,
403
+ description: src.description,
404
+ };
405
+ sourcesImported++;
406
+ }
407
+ return {
408
+ manifestPath,
409
+ projectName,
410
+ modelsImported,
411
+ sourcesImported,
412
+ importedAt: new Date().toISOString(),
413
+ };
414
+ }
415
+ // ---- Lineage Builder ----
416
+ function buildManifestLineage(blocks, metrics, dimensions) {
417
+ // Convert to lineage builder input format
418
+ const lineageBlocks = Object.values(blocks).map((b) => ({
419
+ name: b.name,
420
+ sql: b.sql,
421
+ domain: b.domain,
422
+ owner: b.owner,
423
+ status: b.status,
424
+ blockType: b.blockType,
425
+ metricRef: b.metricRef,
426
+ chartType: b.chartType,
427
+ }));
428
+ const lineageMetrics = Object.values(metrics).map((m) => ({
429
+ name: m.name,
430
+ table: m.table,
431
+ domain: m.domain ?? '',
432
+ type: m.type,
433
+ }));
434
+ const lineageDimensions = Object.values(dimensions).map((d) => ({
435
+ name: d.name,
436
+ table: d.table,
437
+ }));
438
+ const graph = buildLineageGraph(lineageBlocks, lineageMetrics, lineageDimensions);
439
+ // Serialize to manifest format
440
+ const graphJson = graph.toJSON();
441
+ const domains = graph.getDomains();
442
+ const flows = detectDomainFlows(graph);
443
+ const domainTrust = {};
444
+ for (const domain of domains) {
445
+ const overview = getDomainTrustOverview(graph, domain);
446
+ domainTrust[domain] = {
447
+ total: overview.totalBlocks,
448
+ certified: overview.certified,
449
+ score: overview.trustScore,
450
+ };
451
+ }
452
+ return {
453
+ nodes: graphJson.nodes.map((n) => ({
454
+ id: n.id,
455
+ type: n.type,
456
+ name: n.name,
457
+ domain: n.domain,
458
+ owner: n.owner,
459
+ status: n.status,
460
+ filePath: blocks[n.name]?.filePath,
461
+ })),
462
+ edges: graphJson.edges.map((e) => ({
463
+ source: e.source,
464
+ target: e.target,
465
+ type: e.type,
466
+ sourceDomain: e.sourceDomain,
467
+ targetDomain: e.targetDomain,
468
+ })),
469
+ domains,
470
+ crossDomainFlows: flows.map((f) => ({
471
+ from: f.from,
472
+ to: f.to,
473
+ edgeCount: f.edges.length,
474
+ })),
475
+ domainTrust,
476
+ };
477
+ }
478
+ // ---- AST Helpers ----
479
+ function extractProp(block, propName) {
480
+ if (block[propName] !== undefined && block[propName] !== null) {
481
+ return String(block[propName]);
482
+ }
483
+ if (!block.properties)
484
+ return undefined;
485
+ for (const prop of block.properties) {
486
+ if (prop.key === propName && prop.value?.kind === 'Literal') {
487
+ return String(prop.value.value);
488
+ }
489
+ }
490
+ return undefined;
491
+ }
492
+ function extractVisualizationChart(block) {
493
+ if (!block.visualization)
494
+ return undefined;
495
+ for (const prop of block.visualization.properties ?? []) {
496
+ if (prop.key === 'chart' && prop.value?.kind === 'Literal') {
497
+ return String(prop.value.value);
498
+ }
499
+ }
500
+ return undefined;
501
+ }
502
+ function extractTags(block) {
503
+ if (Array.isArray(block.tags))
504
+ return block.tags;
505
+ if (!block.properties)
506
+ return undefined;
507
+ for (const prop of block.properties) {
508
+ if (prop.key === 'tags' && prop.value?.kind === 'ArrayLiteral') {
509
+ return prop.value.elements
510
+ ?.map((e) => (e.kind === 'Literal' ? String(e.value) : null))
511
+ .filter(Boolean);
512
+ }
513
+ }
514
+ return undefined;
515
+ }
516
+ function extractTests(block) {
517
+ if (!block.tests?.assertions)
518
+ return [];
519
+ return block.tests.assertions.map((a) => {
520
+ if (typeof a === 'string')
521
+ return a;
522
+ return `${a.field ?? ''} ${a.operator ?? ''} ${a.expected ?? ''}`.trim();
523
+ });
524
+ }
525
+ /**
526
+ * Normalize DuckDB reader function calls to plain table names.
527
+ * e.g., "read_csv_auto('./data/revenue.csv')" → "revenue"
528
+ */
529
+ function normalizeTableName(name) {
530
+ const readerMatch = name.match(/^(?:read_csv_auto|read_csv|read_parquet|read_json|read_json_auto)\s*\(\s*['"]([^'"]+)['"]\s*\)$/i);
531
+ if (readerMatch) {
532
+ const path = readerMatch[1];
533
+ const filename = path.split('/').pop() ?? path;
534
+ return filename.replace(/\.(csv|parquet|json)$/i, '');
535
+ }
536
+ return name;
537
+ }
538
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/manifest/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { buildManifest, type ManifestBuildOptions } from './builder.js';
2
+ export type { DQLManifest, ManifestBlock, ManifestNotebook, ManifestNotebookCell, ManifestMetric, ManifestDimension, ManifestSource, ManifestLineage, ManifestLineageNode, ManifestLineageEdge, ManifestDbtImport, } from './types.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAExE,YAAY,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Manifest — DQL project compilation artifact
2
+ export { buildManifest } from './builder.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,aAAa,EAA6B,MAAM,cAAc,CAAC"}