@duckcodeailabs/dql-cli 1.6.1 → 1.6.3

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 (121) hide show
  1. package/dist/apps-api.d.ts +20 -0
  2. package/dist/apps-api.d.ts.map +1 -1
  3. package/dist/apps-api.js +71 -0
  4. package/dist/apps-api.js.map +1 -1
  5. package/dist/args.d.ts +2 -0
  6. package/dist/args.d.ts.map +1 -1
  7. package/dist/args.js +3 -0
  8. package/dist/args.js.map +1 -1
  9. package/dist/assets/dql-notebook/assets/index-CIMLd3Cb.js +3289 -0
  10. package/dist/assets/dql-notebook/assets/index-RaDW1A5g.css +1 -0
  11. package/dist/assets/dql-notebook/index.html +3 -3
  12. package/dist/commands/app.d.ts +4 -3
  13. package/dist/commands/app.d.ts.map +1 -1
  14. package/dist/commands/app.js +161 -75
  15. package/dist/commands/app.js.map +1 -1
  16. package/dist/commands/build.d.ts.map +1 -1
  17. package/dist/commands/build.js +7 -1
  18. package/dist/commands/build.js.map +1 -1
  19. package/dist/commands/compile.d.ts +1 -1
  20. package/dist/commands/compile.d.ts.map +1 -1
  21. package/dist/commands/compile.js +40 -4
  22. package/dist/commands/compile.js.map +1 -1
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +3 -1
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/lineage.d.ts +3 -0
  27. package/dist/commands/lineage.d.ts.map +1 -1
  28. package/dist/commands/lineage.js +230 -2
  29. package/dist/commands/lineage.js.map +1 -1
  30. package/dist/commands/new.js +61 -2
  31. package/dist/commands/new.js.map +1 -1
  32. package/dist/commands/parse.d.ts.map +1 -1
  33. package/dist/commands/parse.js +13 -3
  34. package/dist/commands/parse.js.map +1 -1
  35. package/dist/commands/preview.d.ts.map +1 -1
  36. package/dist/commands/preview.js +7 -1
  37. package/dist/commands/preview.js.map +1 -1
  38. package/dist/commands/validate.d.ts.map +1 -1
  39. package/dist/commands/validate.js +49 -3
  40. package/dist/commands/validate.js.map +1 -1
  41. package/dist/commands/verify.d.ts.map +1 -1
  42. package/dist/commands/verify.js +6 -2
  43. package/dist/commands/verify.js.map +1 -1
  44. package/dist/index.js +79 -68
  45. package/dist/index.js.map +1 -1
  46. package/dist/llm/providers/dql-agent-provider.d.ts.map +1 -1
  47. package/dist/llm/providers/dql-agent-provider.js +95 -19
  48. package/dist/llm/providers/dql-agent-provider.js.map +1 -1
  49. package/dist/llm/tools.d.ts.map +1 -1
  50. package/dist/llm/tools.js +29 -1
  51. package/dist/llm/tools.js.map +1 -1
  52. package/dist/llm/types.d.ts +3 -1
  53. package/dist/llm/types.d.ts.map +1 -1
  54. package/dist/local-runtime.d.ts +12 -0
  55. package/dist/local-runtime.d.ts.map +1 -1
  56. package/dist/local-runtime.js +724 -46
  57. package/dist/local-runtime.js.map +1 -1
  58. package/dist/package.json +44 -0
  59. package/package.json +12 -12
  60. package/dist/apps-api.test.d.ts +0 -2
  61. package/dist/apps-api.test.d.ts.map +0 -1
  62. package/dist/apps-api.test.js +0 -154
  63. package/dist/apps-api.test.js.map +0 -1
  64. package/dist/args.test.d.ts +0 -2
  65. package/dist/args.test.d.ts.map +0 -1
  66. package/dist/args.test.js +0 -41
  67. package/dist/args.test.js.map +0 -1
  68. package/dist/assets/dql-notebook/assets/index-C-s-OCLW.css +0 -1
  69. package/dist/assets/dql-notebook/assets/index-DZ_5zsCw.js +0 -869
  70. package/dist/block-studio-import.test.d.ts +0 -2
  71. package/dist/block-studio-import.test.d.ts.map +0 -1
  72. package/dist/block-studio-import.test.js +0 -168
  73. package/dist/block-studio-import.test.js.map +0 -1
  74. package/dist/commands/build.test.d.ts +0 -2
  75. package/dist/commands/build.test.d.ts.map +0 -1
  76. package/dist/commands/build.test.js +0 -44
  77. package/dist/commands/build.test.js.map +0 -1
  78. package/dist/commands/compile.test.d.ts +0 -2
  79. package/dist/commands/compile.test.d.ts.map +0 -1
  80. package/dist/commands/compile.test.js +0 -115
  81. package/dist/commands/compile.test.js.map +0 -1
  82. package/dist/commands/doctor.test.d.ts +0 -2
  83. package/dist/commands/doctor.test.d.ts.map +0 -1
  84. package/dist/commands/doctor.test.js +0 -44
  85. package/dist/commands/doctor.test.js.map +0 -1
  86. package/dist/commands/init.test.d.ts +0 -2
  87. package/dist/commands/init.test.d.ts.map +0 -1
  88. package/dist/commands/init.test.js +0 -178
  89. package/dist/commands/init.test.js.map +0 -1
  90. package/dist/commands/new.test.d.ts +0 -2
  91. package/dist/commands/new.test.d.ts.map +0 -1
  92. package/dist/commands/new.test.js +0 -191
  93. package/dist/commands/new.test.js.map +0 -1
  94. package/dist/commands/sync.test.d.ts +0 -2
  95. package/dist/commands/sync.test.d.ts.map +0 -1
  96. package/dist/commands/sync.test.js +0 -147
  97. package/dist/commands/sync.test.js.map +0 -1
  98. package/dist/commands/validate.test.d.ts +0 -2
  99. package/dist/commands/validate.test.d.ts.map +0 -1
  100. package/dist/commands/validate.test.js +0 -55
  101. package/dist/commands/validate.test.js.map +0 -1
  102. package/dist/local-runtime.test.d.ts +0 -2
  103. package/dist/local-runtime.test.d.ts.map +0 -1
  104. package/dist/local-runtime.test.js +0 -300
  105. package/dist/local-runtime.test.js.map +0 -1
  106. package/dist/metricflow.test.d.ts +0 -2
  107. package/dist/metricflow.test.d.ts.map +0 -1
  108. package/dist/metricflow.test.js +0 -54
  109. package/dist/metricflow.test.js.map +0 -1
  110. package/dist/promote-from-draft.test.d.ts +0 -2
  111. package/dist/promote-from-draft.test.d.ts.map +0 -1
  112. package/dist/promote-from-draft.test.js +0 -149
  113. package/dist/promote-from-draft.test.js.map +0 -1
  114. package/dist/semantic-import.test.d.ts +0 -2
  115. package/dist/semantic-import.test.d.ts.map +0 -1
  116. package/dist/semantic-import.test.js +0 -95
  117. package/dist/semantic-import.test.js.map +0 -1
  118. package/dist/template-adoption.test.d.ts +0 -2
  119. package/dist/template-adoption.test.d.ts.map +0 -1
  120. package/dist/template-adoption.test.js +0 -102
  121. package/dist/template-adoption.test.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=block-studio-import.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-studio-import.test.d.ts","sourceRoot":"","sources":["../src/block-studio-import.test.ts"],"names":[],"mappings":""}
@@ -1,168 +0,0 @@
1
- import { describe, expect, it, afterEach } from 'vitest';
2
- import { mkdtempSync, readFileSync, rmSync, writeFileSync, mkdirSync } from 'node:fs';
3
- import { join } from 'node:path';
4
- import { tmpdir } from 'node:os';
5
- import { candidateToDqlSource, clearBlockStudioImportSessions, createBlockStudioImportSession, deleteBlockStudioImportSession, listBlockStudioImportSessions, loadBlockStudioImportSession, updateBlockStudioImportCandidate, } from './block-studio-import.js';
6
- const tempDirs = [];
7
- afterEach(() => {
8
- while (tempDirs.length > 0) {
9
- const dir = tempDirs.pop();
10
- if (dir)
11
- rmSync(dir, { recursive: true, force: true });
12
- }
13
- });
14
- function tempProject() {
15
- const dir = mkdtempSync(join(tmpdir(), 'dql-import-'));
16
- tempDirs.push(dir);
17
- return dir;
18
- }
19
- describe('Block Studio SQL import', () => {
20
- it('previews a single SQL file as a draft block candidate', () => {
21
- const root = tempProject();
22
- writeFileSync(join(root, 'revenue.sql'), `-- name: revenue by region
23
- -- description: Revenue by region from legacy BI
24
- -- domain: finance
25
- -- tags: dashboard, migration
26
- select region, sum(revenue) as total_revenue
27
- from marts.orders
28
- group by region;
29
- `);
30
- const session = createBlockStudioImportSession(root, {
31
- inputPath: 'revenue.sql',
32
- domain: 'finance',
33
- owner: 'analytics',
34
- });
35
- expect(session.candidates).toHaveLength(1);
36
- const candidate = session.candidates[0];
37
- expect(candidate.sourceKind).toBe('raw-sql-file');
38
- expect(candidate.name).toBe('Revenue By Region');
39
- expect(candidate.domain).toBe('finance');
40
- expect(candidate.owner).toBe('analytics');
41
- expect(candidate.description).toBe('Revenue by region from legacy BI');
42
- expect(candidate.tags).toEqual(['imported', 'raw-sql', 'dashboard', 'migration']);
43
- expect(candidate.lineage.sourceTables).toEqual(['marts.orders']);
44
- expect(candidate.dqlSource).toContain('block "Revenue By Region"');
45
- expect(candidate.dqlSource).toContain('status = "draft"');
46
- expect(candidate.dqlSource).toContain('query = """');
47
- expect(candidate.reviewStatus).toBe('review');
48
- expect(candidate.conversionNotes?.[0]).toMatch(/Deterministic SQL extraction/);
49
- expect(readFileSync(join(root, '.dql', 'imports', session.id, 'manifest.json'), 'utf-8')).toContain(candidate.id);
50
- });
51
- it('splits multi-statement SQL without breaking semicolons inside strings', () => {
52
- const root = tempProject();
53
- writeFileSync(join(root, 'legacy.sql'), `
54
- select 'a;b' as label, count(*) as n from raw.events;
55
- select region, count(*) as n from raw.accounts group by region;
56
- `);
57
- const session = createBlockStudioImportSession(root, {
58
- inputPath: 'legacy.sql',
59
- domain: 'ops',
60
- });
61
- expect(session.candidates).toHaveLength(2);
62
- expect(session.candidates[0].sql).toContain("'a;b'");
63
- expect(session.candidates[0].lineage.sourceTables).toEqual(['raw.events']);
64
- expect(session.candidates[1].lineage.sourceTables).toEqual(['raw.accounts']);
65
- expect(session.candidates[0].lineage.totalStatements).toBe(2);
66
- });
67
- it('splits SQL Server style GO batches', () => {
68
- const root = tempProject();
69
- writeFileSync(join(root, 'legacy-go.sql'), `
70
- select count(*) as n from raw.events
71
- GO
72
- select region, count(*) as n from raw.accounts group by region
73
- go
74
- `);
75
- const session = createBlockStudioImportSession(root, {
76
- inputPath: 'legacy-go.sql',
77
- domain: 'ops',
78
- });
79
- expect(session.candidates).toHaveLength(2);
80
- expect(session.candidates[0].lineage.sourceTables).toEqual(['raw.events']);
81
- expect(session.candidates[1].lineage.sourceTables).toEqual(['raw.accounts']);
82
- expect(session.candidates[0].splitStrategy).toBe('semicolon-go');
83
- });
84
- it('warns when one candidate likely contains several undelimited scripts', () => {
85
- const root = tempProject();
86
- writeFileSync(join(root, 'missing-delimiters.sql'), 'select * from raw.events select * from raw.accounts');
87
- const session = createBlockStudioImportSession(root, {
88
- inputPath: 'missing-delimiters.sql',
89
- domain: 'ops',
90
- });
91
- expect(session.candidates).toHaveLength(1);
92
- expect(session.candidates[0].warnings.join(' ')).toMatch(/multiple SELECT\/WITH clauses/i);
93
- });
94
- it('imports every SQL file in a folder and reloads the persisted session', () => {
95
- const root = tempProject();
96
- mkdirSync(join(root, 'queries'));
97
- writeFileSync(join(root, 'queries', 'a.sql'), 'select * from source_a;');
98
- writeFileSync(join(root, 'queries', 'b.sql'), 'select * from source_b;');
99
- const session = createBlockStudioImportSession(root, {
100
- inputPath: 'queries',
101
- domain: 'shared reporting',
102
- });
103
- const reloaded = loadBlockStudioImportSession(root, session.id);
104
- expect(reloaded.sourceKind).toBe('raw-sql-folder');
105
- expect(reloaded.candidates.map((candidate) => candidate.lineage.sourceTables[0]).sort()).toEqual(['source_a', 'source_b']);
106
- expect(reloaded.defaults.domain).toBe('shared-reporting');
107
- });
108
- it('creates sessions from pasted or uploaded SQL sources and lists summaries', () => {
109
- const root = tempProject();
110
- const session = createBlockStudioImportSession(root, {
111
- inputMode: 'paste',
112
- sources: [{ path: 'manual.sql', content: 'select * from raw.events; select * from raw.accounts;' }],
113
- domain: 'ops',
114
- });
115
- const summaries = listBlockStudioImportSessions(root);
116
- expect(session.inputMode).toBe('paste');
117
- expect(session.sourceFiles).toEqual(['manual.sql']);
118
- expect(session.candidates).toHaveLength(2);
119
- expect(summaries).toHaveLength(1);
120
- expect(summaries[0].candidateCount).toBe(2);
121
- });
122
- it('deletes one import session or clears all import history', () => {
123
- const root = tempProject();
124
- const first = createBlockStudioImportSession(root, {
125
- inputMode: 'paste',
126
- sources: [{ path: 'first.sql', content: 'select * from first_table;' }],
127
- });
128
- createBlockStudioImportSession(root, {
129
- inputMode: 'paste',
130
- sources: [{ path: 'second.sql', content: 'select * from second_table;' }],
131
- });
132
- expect(listBlockStudioImportSessions(root)).toHaveLength(2);
133
- deleteBlockStudioImportSession(root, first.id);
134
- expect(listBlockStudioImportSessions(root)).toHaveLength(1);
135
- expect(clearBlockStudioImportSessions(root)).toBe(1);
136
- expect(listBlockStudioImportSessions(root)).toHaveLength(0);
137
- });
138
- it('detects parameters and refreshes generated DQL when a candidate is updated', () => {
139
- const root = tempProject();
140
- writeFileSync(join(root, 'parameterized.sql'), 'select * from orders where region = :region and dt >= {{ start_date }};');
141
- const session = createBlockStudioImportSession(root, { inputPath: 'parameterized.sql' });
142
- expect(session.candidates[0].lineage.parameters.sort()).toEqual(['region', 'start_date']);
143
- const updated = updateBlockStudioImportCandidate(root, session.id, session.candidates[0].id, {
144
- name: 'Orders Filtered',
145
- domain: 'sales',
146
- sql: 'select * from orders where region = :region;',
147
- });
148
- expect(updated.name).toBe('Orders Filtered');
149
- expect(updated.domain).toBe('sales');
150
- expect(updated.dqlSource).toContain('block "Orders Filtered"');
151
- expect(updated.lineage.parameters).toEqual(['region']);
152
- });
153
- it('generates a valid DQL block shape from a candidate', () => {
154
- const source = candidateToDqlSource({
155
- name: 'Legacy Query',
156
- domain: 'finance',
157
- description: 'Imported legacy SQL',
158
- owner: 'owner',
159
- tags: ['imported', 'raw-sql'],
160
- sql: 'select * from finance.orders',
161
- });
162
- expect(source).toContain('domain = "finance"');
163
- expect(source).toContain('tags = ["imported", "raw-sql"]');
164
- expect(source).toContain('visualization {');
165
- expect(source).toContain('chart = "table"');
166
- });
167
- });
168
- //# sourceMappingURL=block-studio-import.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"block-studio-import.test.js","sourceRoot":"","sources":["../src/block-studio-import.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=build.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.test.d.ts","sourceRoot":"","sources":["../../src/commands/build.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { mkdtempSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { tmpdir } from 'node:os';
4
- import { describe, expect, it } from 'vitest';
5
- import { runBuild } from './build.js';
6
- describe('runBuild', () => {
7
- it('writes an HTML bundle and metadata for a standalone block', async () => {
8
- const projectDir = mkdtempSync(join(tmpdir(), 'dql-build-'));
9
- const sourcePath = join(projectDir, 'sample.dql');
10
- const outDir = join(projectDir, 'out');
11
- writeFileSync(sourcePath, `block "Revenue Preview" {
12
- domain = "revenue"
13
- type = "custom"
14
- query = """
15
- SELECT 'Enterprise' AS segment, 100 AS revenue
16
- """
17
- visualization {
18
- chart = "bar"
19
- x = segment
20
- y = revenue
21
- }
22
- }`);
23
- await runBuild(sourcePath, {
24
- check: false,
25
- chart: '',
26
- domain: '',
27
- format: 'json',
28
- help: false,
29
- open: null,
30
- input: '',
31
- outDir,
32
- owner: '',
33
- port: null,
34
- queryOnly: false,
35
- template: 'starter',
36
- connection: '',
37
- verbose: false,
38
- skipTests: false, version: false,
39
- });
40
- expect(readFileSync(join(outDir, 'index.html'), 'utf-8')).toContain('Revenue Preview');
41
- expect(readFileSync(join(outDir, 'dql-metadata.json'), 'utf-8')).toContain('Revenue Preview');
42
- });
43
- });
44
- //# sourceMappingURL=build.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.test.js","sourceRoot":"","sources":["../../src/commands/build.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAEvC,aAAa,CAAC,UAAU,EAAE;;;;;;;;;;;EAW5B,CAAC,CAAC;QAEA,MAAM,QAAQ,CAAC,UAAU,EAAE;YACzB,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE;YACT,MAAM;YACN,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACvF,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAChG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=compile.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile.test.d.ts","sourceRoot":"","sources":["../../src/commands/compile.test.ts"],"names":[],"mappings":""}
@@ -1,115 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { mkdtempSync, writeFileSync, readFileSync, mkdirSync, rmSync } from 'node:fs';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { ManifestCache } from '@duckcodeailabs/dql-project';
6
- import { collectInputFiles } from '@duckcodeailabs/dql-core';
7
- import { runCompile } from './compile.js';
8
- const baseFlags = {
9
- format: 'text',
10
- verbose: false,
11
- help: false,
12
- version: false,
13
- check: false,
14
- open: null,
15
- input: '',
16
- outDir: '',
17
- port: null,
18
- chart: '',
19
- domain: '',
20
- owner: '',
21
- queryOnly: false,
22
- template: '',
23
- connection: '',
24
- skipTests: false,
25
- };
26
- function seedProject() {
27
- const projectRoot = mkdtempSync(join(tmpdir(), 'dql-compile-'));
28
- writeFileSync(join(projectRoot, 'dql.config.json'), JSON.stringify({ project: 'demo' }));
29
- mkdirSync(join(projectRoot, 'blocks'), { recursive: true });
30
- writeFileSync(join(projectRoot, 'blocks', 'revenue.dql'), `block "Revenue" {
31
- domain = "sales"
32
- type = "custom"
33
- query = """SELECT SUM(amount) AS revenue FROM orders"""
34
- }`);
35
- return projectRoot;
36
- }
37
- describe('runCompile cache integration', () => {
38
- it('populates the SQLite cache and serves the next compile from it', async () => {
39
- const projectRoot = seedProject();
40
- try {
41
- // First compile — cold miss, builds and writes to cache.
42
- await runCompile(projectRoot, [], baseFlags);
43
- const manifestPath = join(projectRoot, 'dql-manifest.json');
44
- const firstManifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
45
- expect(firstManifest.blocks).toHaveProperty('Revenue');
46
- // Cache file should exist and contain a hit for the current fingerprint.
47
- const cachePath = join(projectRoot, '.dql', 'cache', 'manifest.sqlite');
48
- const cache = new ManifestCache({ path: cachePath });
49
- try {
50
- const files = collectInputFiles({ projectRoot }).map((path) => ({ path }));
51
- const fp = cache.fingerprint(files);
52
- const lookup = cache.lookup(fp, files);
53
- expect(lookup.hit).toBe(true);
54
- if (lookup.hit) {
55
- expect(lookup.value.blocks).toHaveProperty('Revenue');
56
- }
57
- }
58
- finally {
59
- cache.close();
60
- }
61
- }
62
- finally {
63
- rmSync(projectRoot, { recursive: true, force: true });
64
- }
65
- });
66
- it('invalidates the cache entry when a tracked file changes', async () => {
67
- const projectRoot = seedProject();
68
- try {
69
- await runCompile(projectRoot, [], baseFlags);
70
- const cachePath = join(projectRoot, '.dql', 'cache', 'manifest.sqlite');
71
- const files1 = collectInputFiles({ projectRoot }).map((path) => ({ path }));
72
- let fp1;
73
- {
74
- const cache = new ManifestCache({ path: cachePath });
75
- fp1 = cache.fingerprint(files1);
76
- expect(cache.lookup(fp1, files1).hit).toBe(true);
77
- cache.close();
78
- }
79
- // Mutate a tracked block — fingerprint must change → miss under fp1.
80
- writeFileSync(join(projectRoot, 'blocks', 'revenue.dql'), `block "Revenue" {
81
- domain = "sales"
82
- type = "custom"
83
- query = """SELECT COUNT(*) AS revenue FROM orders"""
84
- }`);
85
- {
86
- const cache = new ManifestCache({ path: cachePath });
87
- const files2 = collectInputFiles({ projectRoot }).map((path) => ({ path }));
88
- const fp2 = cache.fingerprint(files2);
89
- expect(fp2).not.toBe(fp1);
90
- const lookup = cache.lookup(fp2, files2);
91
- expect(lookup.hit).toBe(false);
92
- if (!lookup.hit) {
93
- // Diff should report the block file as changed.
94
- expect(lookup.changedFiles).toContain(join(projectRoot, 'blocks', 'revenue.dql'));
95
- }
96
- cache.close();
97
- }
98
- }
99
- finally {
100
- rmSync(projectRoot, { recursive: true, force: true });
101
- }
102
- });
103
- it('--no-cache skips the cache entirely (no .dql/cache directory created)', async () => {
104
- const projectRoot = seedProject();
105
- try {
106
- await runCompile(projectRoot, ['--no-cache'], baseFlags);
107
- expect(() => readFileSync(join(projectRoot, '.dql', 'cache', 'manifest.sqlite')))
108
- .toThrow();
109
- }
110
- finally {
111
- rmSync(projectRoot, { recursive: true, force: true });
112
- }
113
- });
114
- });
115
- //# sourceMappingURL=compile.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile.test.js","sourceRoot":"","sources":["../../src/commands/compile.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=doctor.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.test.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { mkdtempSync, mkdirSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { tmpdir } from 'node:os';
4
- import { describe, expect, it, vi } from 'vitest';
5
- import { runDoctor } from './doctor.js';
6
- describe('runDoctor', () => {
7
- it('reports health for a starter-like project', async () => {
8
- const projectDir = mkdtempSync(join(tmpdir(), 'dql-doctor-'));
9
- mkdirSync(join(projectDir, 'blocks'));
10
- mkdirSync(join(projectDir, 'semantic-layer'));
11
- mkdirSync(join(projectDir, 'data'));
12
- writeFileSync(join(projectDir, 'dql.config.json'), JSON.stringify({
13
- defaultConnection: { driver: 'file', filepath: ':memory:' },
14
- }, null, 2));
15
- writeFileSync(join(projectDir, 'package.json'), JSON.stringify({
16
- dependencies: { duckdb: '^1.1.0' },
17
- }, null, 2));
18
- const spy = vi.spyOn(console, 'log').mockImplementation(() => { });
19
- await runDoctor(projectDir, {
20
- check: false,
21
- chart: '',
22
- domain: '',
23
- format: 'text',
24
- help: false,
25
- open: null,
26
- input: '',
27
- outDir: '',
28
- owner: '',
29
- port: null,
30
- queryOnly: false,
31
- template: 'starter',
32
- connection: '',
33
- verbose: false,
34
- skipTests: false, version: false,
35
- });
36
- expect(spy).toHaveBeenCalled();
37
- const output = spy.mock.calls.flat().join('\n');
38
- expect(output).toContain('DQL Doctor');
39
- expect(output).toContain('blocks/');
40
- expect(output).not.toContain('add duckdb for file/duckdb local preview support');
41
- spy.mockRestore();
42
- });
43
- });
44
- //# sourceMappingURL=doctor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.test.js","sourceRoot":"","sources":["../../src/commands/doctor.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAC9D,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC9C,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YAChE,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;SAC5D,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YAC7D,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;SACnC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAElE,MAAM,SAAS,CAAC,UAAU,EAAE;YAC1B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;SACjC,CAAC,CAAC;QAEH,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kDAAkD,CAAC,CAAC;QACjF,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=init.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":""}
@@ -1,178 +0,0 @@
1
- import { mkdirSync, mkdtempSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { tmpdir } from 'node:os';
4
- import { describe, expect, it } from 'vitest';
5
- import { runInit } from './init.js';
6
- const DBT_SEMANTIC_YAML = `semantic_models:
7
- - name: orders
8
- model: ref('fct_orders')
9
- defaults:
10
- agg_time_dimension: ordered_at
11
- entities:
12
- - name: order
13
- type: primary
14
- expr: order_id
15
- dimensions:
16
- - name: ordered_at
17
- type: time
18
- type_params:
19
- time_granularity: day
20
- measures:
21
- - name: order_total
22
- agg: sum
23
- expr: order_total
24
- metrics:
25
- - name: order_total
26
- type: simple
27
- type_params:
28
- measure: order_total
29
- `;
30
- describe('runInit', () => {
31
- it('scaffolds a DQL project with config, blocks dir, and notebook', async () => {
32
- const targetDir = mkdtempSync(join(tmpdir(), 'dql-init-'));
33
- const projectDir = join(targetDir, 'demo-project');
34
- await runInit(projectDir, {
35
- check: false,
36
- chart: '',
37
- domain: '',
38
- format: 'json',
39
- help: false,
40
- open: null,
41
- input: '',
42
- outDir: '',
43
- owner: '',
44
- port: null,
45
- queryOnly: false,
46
- template: '',
47
- connection: '',
48
- verbose: false,
49
- skipTests: false, version: false,
50
- });
51
- const contents = readdirSync(projectDir);
52
- expect(contents).toContain('apps');
53
- expect(contents).toContain('blocks');
54
- expect(contents).toContain('dql.config.json');
55
- expect(contents).toContain('notebooks');
56
- const config = readFileSync(join(projectDir, 'dql.config.json'), 'utf-8');
57
- expect(config).toContain('demo-project');
58
- expect(config).toContain('duckdb');
59
- const notebook = readFileSync(join(projectDir, 'notebooks', 'welcome.dqlnb'), 'utf-8');
60
- expect(notebook).toContain('DQL');
61
- });
62
- it('detects a Jaffle Shop-style dbt project and DuckDB file', async () => {
63
- const projectDir = mkdtempSync(join(tmpdir(), 'dql-init-dbt-'));
64
- writeFileSync(join(projectDir, 'dbt_project.yml'), 'name: "jaffle_shop"\n');
65
- writeFileSync(join(projectDir, 'jaffle_shop.duckdb'), '');
66
- await runInit(projectDir, {
67
- check: false,
68
- chart: '',
69
- domain: '',
70
- format: 'json',
71
- help: false,
72
- open: null,
73
- input: '',
74
- outDir: '',
75
- owner: '',
76
- port: null,
77
- queryOnly: false,
78
- template: '',
79
- connection: '',
80
- verbose: false,
81
- skipTests: false, version: false,
82
- });
83
- const config = JSON.parse(readFileSync(join(projectDir, 'dql.config.json'), 'utf-8'));
84
- expect(config.connections.default.filepath).toBe('jaffle_shop.duckdb');
85
- expect(config.semanticLayer.provider).toBe('dbt');
86
- expect(config.semanticLayer.projectPath).toBe('.');
87
- expect(readdirSync(projectDir)).not.toContain('semantic-layer');
88
- });
89
- it('keeps DQL isolated under ./dql while wiring to a parent dbt repo', async () => {
90
- const repoDir = mkdtempSync(join(tmpdir(), 'dql-init-dbt-parent-'));
91
- const dqlDir = join(repoDir, 'dql');
92
- writeFileSync(join(repoDir, 'dbt_project.yml'), 'name: "jaffle_shop"\n');
93
- await runInit(dqlDir, {
94
- check: false,
95
- chart: '',
96
- domain: '',
97
- format: 'json',
98
- help: false,
99
- open: null,
100
- input: '',
101
- outDir: '',
102
- owner: '',
103
- port: null,
104
- queryOnly: false,
105
- template: '',
106
- connection: '',
107
- verbose: false,
108
- skipTests: false, version: false,
109
- });
110
- const config = JSON.parse(readFileSync(join(dqlDir, 'dql.config.json'), 'utf-8'));
111
- const contents = readdirSync(dqlDir);
112
- expect(contents).toContain('apps');
113
- expect(contents).toContain('blocks');
114
- expect(contents).toContain('notebooks');
115
- expect(config.semanticLayer).toEqual({ provider: 'dbt', projectPath: '..' });
116
- expect(config.dbt).toEqual({ projectDir: '..', manifestPath: 'target/manifest.json' });
117
- });
118
- it('auto-imports dbt semantic definitions into local semantic-layer YAML on init', async () => {
119
- const projectDir = mkdtempSync(join(tmpdir(), 'dql-init-dbt-semantic-'));
120
- const metricsDir = join(projectDir, 'models', 'metrics');
121
- mkdirSync(metricsDir, { recursive: true });
122
- writeFileSync(join(projectDir, 'dbt_project.yml'), 'name: "jaffle_shop"\n');
123
- writeFileSync(join(projectDir, 'jaffle_shop.duckdb'), '');
124
- writeFileSync(join(metricsDir, 'orders.yml'), DBT_SEMANTIC_YAML);
125
- await runInit(projectDir, {
126
- check: false,
127
- chart: '',
128
- domain: '',
129
- format: 'json',
130
- help: false,
131
- open: null,
132
- input: '',
133
- outDir: '',
134
- owner: '',
135
- port: null,
136
- queryOnly: false,
137
- template: '',
138
- connection: '',
139
- verbose: false,
140
- skipTests: false, version: false,
141
- });
142
- const config = JSON.parse(readFileSync(join(projectDir, 'dql.config.json'), 'utf-8'));
143
- expect(config.semanticLayer.provider).toBe('dql');
144
- expect(config.semanticLayer.path).toBe('./semantic-layer');
145
- expect(readdirSync(projectDir)).toContain('semantic-layer');
146
- expect(readFileSync(join(projectDir, 'semantic-layer', 'imports', 'manifest.json'), 'utf-8')).toContain('"provider": "dbt"');
147
- });
148
- it('imports parent dbt semantic definitions when DQL is isolated under ./dql', async () => {
149
- const repoDir = mkdtempSync(join(tmpdir(), 'dql-init-dbt-parent-semantic-'));
150
- const dqlDir = join(repoDir, 'dql');
151
- const metricsDir = join(repoDir, 'models', 'metrics');
152
- mkdirSync(metricsDir, { recursive: true });
153
- writeFileSync(join(repoDir, 'dbt_project.yml'), 'name: "jaffle_shop"\n');
154
- writeFileSync(join(metricsDir, 'orders.yml'), DBT_SEMANTIC_YAML);
155
- await runInit(dqlDir, {
156
- check: false,
157
- chart: '',
158
- domain: '',
159
- format: 'json',
160
- help: false,
161
- open: null,
162
- input: '',
163
- outDir: '',
164
- owner: '',
165
- port: null,
166
- queryOnly: false,
167
- template: '',
168
- connection: '',
169
- verbose: false,
170
- skipTests: false, version: false,
171
- });
172
- const config = JSON.parse(readFileSync(join(dqlDir, 'dql.config.json'), 'utf-8'));
173
- expect(config.semanticLayer.provider).toBe('dql');
174
- expect(config.semanticLayer.path).toBe('./semantic-layer');
175
- expect(readFileSync(join(dqlDir, 'semantic-layer', 'imports', 'manifest.json'), 'utf-8')).toContain('"provider": "dbt"');
176
- });
177
- });
178
- //# sourceMappingURL=init.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=new.test.d.ts.map