@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.
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lineage/builder.d.ts +43 -0
- package/dist/lineage/builder.d.ts.map +1 -0
- package/dist/lineage/builder.js +192 -0
- package/dist/lineage/builder.js.map +1 -0
- package/dist/lineage/dependency-resolver.d.ts +44 -0
- package/dist/lineage/dependency-resolver.d.ts.map +1 -0
- package/dist/lineage/dependency-resolver.js +168 -0
- package/dist/lineage/dependency-resolver.js.map +1 -0
- package/dist/lineage/domain-lineage.d.ts +96 -0
- package/dist/lineage/domain-lineage.d.ts.map +1 -0
- package/dist/lineage/domain-lineage.js +140 -0
- package/dist/lineage/domain-lineage.js.map +1 -0
- package/dist/lineage/index.d.ts +6 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +7 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/lineage-graph.d.ts +97 -0
- package/dist/lineage/lineage-graph.d.ts.map +1 -0
- package/dist/lineage/lineage-graph.js +198 -0
- package/dist/lineage/lineage-graph.js.map +1 -0
- package/dist/lineage/sql-parser.d.ts +23 -0
- package/dist/lineage/sql-parser.d.ts.map +1 -0
- package/dist/lineage/sql-parser.js +126 -0
- package/dist/lineage/sql-parser.js.map +1 -0
- package/dist/manifest/builder.d.ts +22 -0
- package/dist/manifest/builder.d.ts.map +1 -0
- package/dist/manifest/builder.js +538 -0
- package/dist/manifest/builder.js.map +1 -0
- package/dist/manifest/index.d.ts +3 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +3 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/types.d.ts +168 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +10 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/semantic/index.d.ts +1 -1
- package/dist/semantic/index.d.ts.map +1 -1
- package/dist/semantic/index.js +1 -1
- package/dist/semantic/index.js.map +1 -1
- package/dist/semantic/providers/index.d.ts +1 -1
- package/dist/semantic/providers/index.d.ts.map +1 -1
- package/dist/semantic/providers/index.js +1 -1
- package/dist/semantic/providers/index.js.map +1 -1
- package/dist/semantic/providers/registry.d.ts +7 -0
- package/dist/semantic/providers/registry.d.ts.map +1 -1
- package/dist/semantic/providers/registry.js +30 -0
- package/dist/semantic/providers/registry.js.map +1 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,OAAO,EAAE,aAAa,EAA6B,MAAM,cAAc,CAAC"}
|