@duckcodeailabs/dql-cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +62 -0
  2. package/dist/args.d.ts +9 -0
  3. package/dist/args.d.ts.map +1 -1
  4. package/dist/args.js +43 -1
  5. package/dist/args.js.map +1 -1
  6. package/dist/args.test.d.ts +2 -0
  7. package/dist/args.test.d.ts.map +1 -0
  8. package/dist/args.test.js +33 -0
  9. package/dist/args.test.js.map +1 -0
  10. package/dist/commands/build.d.ts +3 -0
  11. package/dist/commands/build.d.ts.map +1 -0
  12. package/dist/commands/build.js +41 -0
  13. package/dist/commands/build.js.map +1 -0
  14. package/dist/commands/build.test.d.ts +2 -0
  15. package/dist/commands/build.test.d.ts.map +1 -0
  16. package/dist/commands/build.test.js +42 -0
  17. package/dist/commands/build.test.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +3 -0
  19. package/dist/commands/doctor.d.ts.map +1 -0
  20. package/dist/commands/doctor.js +127 -0
  21. package/dist/commands/doctor.js.map +1 -0
  22. package/dist/commands/doctor.test.d.ts +2 -0
  23. package/dist/commands/doctor.test.d.ts.map +1 -0
  24. package/dist/commands/doctor.test.js +41 -0
  25. package/dist/commands/doctor.test.js.map +1 -0
  26. package/dist/commands/init.d.ts +3 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +115 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/init.test.d.ts +2 -0
  31. package/dist/commands/init.test.d.ts.map +1 -0
  32. package/dist/commands/init.test.js +38 -0
  33. package/dist/commands/init.test.js.map +1 -0
  34. package/dist/commands/migrate.js +4 -4
  35. package/dist/commands/migrate.js.map +1 -1
  36. package/dist/commands/new.d.ts +3 -0
  37. package/dist/commands/new.d.ts.map +1 -0
  38. package/dist/commands/new.js +405 -0
  39. package/dist/commands/new.js.map +1 -0
  40. package/dist/commands/new.test.d.ts +2 -0
  41. package/dist/commands/new.test.d.ts.map +1 -0
  42. package/dist/commands/new.test.js +177 -0
  43. package/dist/commands/new.test.js.map +1 -0
  44. package/dist/commands/notebook.d.ts +3 -0
  45. package/dist/commands/notebook.d.ts.map +1 -0
  46. package/dist/commands/notebook.js +28 -0
  47. package/dist/commands/notebook.js.map +1 -0
  48. package/dist/commands/preview.d.ts +3 -0
  49. package/dist/commands/preview.d.ts.map +1 -0
  50. package/dist/commands/preview.js +42 -0
  51. package/dist/commands/preview.js.map +1 -0
  52. package/dist/commands/serve.d.ts +3 -0
  53. package/dist/commands/serve.d.ts.map +1 -0
  54. package/dist/commands/serve.js +30 -0
  55. package/dist/commands/serve.js.map +1 -0
  56. package/dist/index.js +46 -2
  57. package/dist/index.js.map +1 -1
  58. package/dist/local-runtime.d.ts +25 -0
  59. package/dist/local-runtime.d.ts.map +1 -0
  60. package/dist/local-runtime.js +302 -0
  61. package/dist/local-runtime.js.map +1 -0
  62. package/dist/local-runtime.test.d.ts +2 -0
  63. package/dist/local-runtime.test.d.ts.map +1 -0
  64. package/dist/local-runtime.test.js +21 -0
  65. package/dist/local-runtime.test.js.map +1 -0
  66. package/dist/open-browser.d.ts +2 -0
  67. package/dist/open-browser.d.ts.map +1 -0
  68. package/dist/open-browser.js +29 -0
  69. package/dist/open-browser.js.map +1 -0
  70. package/package.json +7 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.test.d.ts","sourceRoot":"","sources":["../../src/commands/new.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,177 @@
1
+ import { existsSync, mkdtempSync, readFileSync } 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
+ import { runNew } from './new.js';
7
+ describe('runNew', () => {
8
+ it('creates a previewable block inside a starter project', async () => {
9
+ const originalCwd = process.cwd();
10
+ const targetDir = mkdtempSync(join(tmpdir(), 'dql-new-'));
11
+ const projectDir = join(targetDir, 'demo-project');
12
+ await runInit(projectDir, {
13
+ check: false,
14
+ chart: '',
15
+ domain: '',
16
+ format: 'json',
17
+ help: false,
18
+ open: null,
19
+ input: '',
20
+ outDir: '',
21
+ owner: '',
22
+ port: null,
23
+ queryOnly: false,
24
+ template: 'starter',
25
+ verbose: false,
26
+ });
27
+ try {
28
+ process.chdir(projectDir);
29
+ await runNew('block', ['Pipeline Health'], {
30
+ check: false,
31
+ chart: 'bar',
32
+ domain: 'sales',
33
+ format: 'json',
34
+ help: false,
35
+ open: null,
36
+ input: '',
37
+ outDir: '',
38
+ owner: 'tester',
39
+ port: null,
40
+ queryOnly: false,
41
+ template: 'starter',
42
+ verbose: false,
43
+ });
44
+ const blockPath = join(projectDir, 'blocks', 'pipeline_health.dql');
45
+ expect(existsSync(blockPath)).toBe(true);
46
+ const block = readFileSync(blockPath, 'utf-8');
47
+ expect(block).toContain('block "Pipeline Health"');
48
+ expect(block).toContain('domain = "sales"');
49
+ expect(block).toContain('owner = "tester"');
50
+ expect(block).toContain("read_csv_auto('./data/revenue.csv')");
51
+ expect(block).toContain('chart = "bar"');
52
+ }
53
+ finally {
54
+ process.chdir(originalCwd);
55
+ }
56
+ });
57
+ it('creates dashboard and workbook scaffolds in their default folders', async () => {
58
+ const originalCwd = process.cwd();
59
+ const targetDir = mkdtempSync(join(tmpdir(), 'dql-new-multi-'));
60
+ const projectDir = join(targetDir, 'demo-project');
61
+ await runInit(projectDir, {
62
+ check: false,
63
+ chart: '',
64
+ domain: '',
65
+ format: 'json',
66
+ help: false,
67
+ open: null,
68
+ input: '',
69
+ outDir: '',
70
+ owner: '',
71
+ port: null,
72
+ queryOnly: false,
73
+ template: 'starter',
74
+ verbose: false,
75
+ });
76
+ try {
77
+ process.chdir(projectDir);
78
+ await runNew('dashboard', ['Revenue Overview'], {
79
+ check: false,
80
+ chart: 'line',
81
+ domain: 'finance',
82
+ format: 'json',
83
+ help: false,
84
+ open: null,
85
+ input: '',
86
+ outDir: '',
87
+ owner: 'tester',
88
+ port: null,
89
+ queryOnly: false,
90
+ template: 'starter',
91
+ verbose: false,
92
+ });
93
+ await runNew('workbook', ['Quarterly Review'], {
94
+ check: false,
95
+ chart: 'bar',
96
+ domain: 'finance',
97
+ format: 'json',
98
+ help: false,
99
+ open: null,
100
+ input: '',
101
+ outDir: '',
102
+ owner: 'tester',
103
+ port: null,
104
+ queryOnly: false,
105
+ template: 'starter',
106
+ verbose: false,
107
+ });
108
+ const dashboardPath = join(projectDir, 'dashboards', 'revenue_overview.dql');
109
+ const workbookPath = join(projectDir, 'workbooks', 'quarterly_review.dql');
110
+ expect(existsSync(dashboardPath)).toBe(true);
111
+ expect(existsSync(workbookPath)).toBe(true);
112
+ const dashboard = readFileSync(dashboardPath, 'utf-8');
113
+ const workbook = readFileSync(workbookPath, 'utf-8');
114
+ expect(dashboard).toContain('dashboard "Revenue Overview"');
115
+ expect(dashboard).toContain('chart.line(');
116
+ expect(workbook).toContain('workbook "Quarterly Review"');
117
+ expect(workbook).toContain('page "Summary"');
118
+ }
119
+ finally {
120
+ process.chdir(originalCwd);
121
+ }
122
+ });
123
+ it('creates a semantic block plus companion semantic-layer files', async () => {
124
+ const originalCwd = process.cwd();
125
+ const targetDir = mkdtempSync(join(tmpdir(), 'dql-new-semantic-'));
126
+ const projectDir = join(targetDir, 'demo-project');
127
+ await runInit(projectDir, {
128
+ check: false,
129
+ chart: '',
130
+ domain: '',
131
+ format: 'json',
132
+ help: false,
133
+ open: null,
134
+ input: '',
135
+ outDir: '',
136
+ owner: '',
137
+ port: null,
138
+ queryOnly: false,
139
+ template: 'starter',
140
+ verbose: false,
141
+ });
142
+ try {
143
+ process.chdir(projectDir);
144
+ await runNew('semantic-block', ['ARR Growth'], {
145
+ check: false,
146
+ chart: 'bar',
147
+ domain: 'finance',
148
+ format: 'json',
149
+ help: false,
150
+ open: null,
151
+ input: '',
152
+ outDir: '',
153
+ owner: 'tester',
154
+ port: null,
155
+ queryOnly: false,
156
+ template: 'starter',
157
+ verbose: false,
158
+ });
159
+ const blockPath = join(projectDir, 'blocks', 'arr_growth.dql');
160
+ const metricPath = join(projectDir, 'semantic-layer', 'metrics', 'arr_growth_metric.yaml');
161
+ const companionPath = join(projectDir, 'semantic-layer', 'blocks', 'arr_growth.yaml');
162
+ expect(existsSync(blockPath)).toBe(true);
163
+ expect(existsSync(metricPath)).toBe(true);
164
+ expect(existsSync(companionPath)).toBe(true);
165
+ const block = readFileSync(blockPath, 'utf-8');
166
+ const metric = readFileSync(metricPath, 'utf-8');
167
+ expect(block).toContain('type = "semantic"');
168
+ expect(block).toContain('metric = "arr_growth_metric"');
169
+ expect(metric).toContain('name: arr_growth_metric');
170
+ expect(metric).toContain('domain: finance');
171
+ }
172
+ finally {
173
+ process.chdir(originalCwd);
174
+ }
175
+ });
176
+ });
177
+ //# sourceMappingURL=new.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.test.js","sourceRoot":"","sources":["../../src/commands/new.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CLIFlags } from '../args.js';
2
+ export declare function runNotebook(targetArg: string | null, flags: CLIFlags): Promise<void>;
3
+ //# sourceMappingURL=notebook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAY3C,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F"}
@@ -0,0 +1,28 @@
1
+ import { dirname, resolve } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { QueryExecutor } from '@duckcodeailabs/dql-connectors';
4
+ import { assertLocalQueryRuntimeReady, findProjectRoot, loadProjectConfig, startLocalServer, } from '../local-runtime.js';
5
+ import { maybeOpenBrowser } from '../open-browser.js';
6
+ const COMMAND_DIR = dirname(fileURLToPath(import.meta.url));
7
+ const NOTEBOOK_APP_DIR = resolve(COMMAND_DIR, '../../../../apps/notebook-browser');
8
+ export async function runNotebook(targetArg, flags) {
9
+ const baseDir = resolve(targetArg ?? '.');
10
+ const projectRoot = findProjectRoot(baseDir);
11
+ const config = loadProjectConfig(projectRoot);
12
+ const executor = new QueryExecutor();
13
+ const connection = config.defaultConnection ?? { driver: 'file', filepath: ':memory:' };
14
+ await assertLocalQueryRuntimeReady(executor, connection);
15
+ const port = await startLocalServer({
16
+ rootDir: NOTEBOOK_APP_DIR,
17
+ projectRoot,
18
+ executor,
19
+ connection,
20
+ preferredPort: flags.port ?? config.preview?.port ?? 3474,
21
+ });
22
+ const url = `http://127.0.0.1:${port}`;
23
+ maybeOpenBrowser(url, flags.open ?? config.preview?.open ?? true);
24
+ console.log(`\n ✓ Notebook ready: ${url}`);
25
+ console.log(' Press Ctrl+C to stop.');
26
+ console.log('');
27
+ }
28
+ //# sourceMappingURL=notebook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../src/commands/notebook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EACL,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,mCAAmC,CAAC,CAAC;AAEnF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAwB,EAAE,KAAe;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEjG,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAEzD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,OAAO,EAAE,gBAAgB;QACzB,WAAW;QACX,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;KAC1D,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CLIFlags } from '../args.js';
2
+ export declare function runPreview(filePath: string, flags: CLIFlags): Promise<void>;
3
+ //# sourceMappingURL=preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqCjF"}
@@ -0,0 +1,42 @@
1
+ import { mkdirSync, readFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { compile, writeBundle } from '@duckcodeailabs/dql-compiler';
5
+ import { QueryExecutor } from '@duckcodeailabs/dql-connectors';
6
+ import { assertLocalQueryRuntimeReady, findProjectRoot, loadProjectConfig, startLocalServer } from '../local-runtime.js';
7
+ import { maybeOpenBrowser } from '../open-browser.js';
8
+ export async function runPreview(filePath, flags) {
9
+ const absoluteFile = resolve(filePath);
10
+ const projectRoot = findProjectRoot(dirname(absoluteFile));
11
+ const config = loadProjectConfig(projectRoot);
12
+ const source = readFileSync(absoluteFile, 'utf-8');
13
+ const result = compile(source, {
14
+ file: absoluteFile,
15
+ theme: config.preview?.theme ?? 'light',
16
+ });
17
+ if (result.errors.length > 0) {
18
+ throw new Error(`Preview compilation failed:\n${result.errors.map((e) => `- ${e}`).join('\n')}`);
19
+ }
20
+ if (result.dashboards.length === 0) {
21
+ throw new Error('Preview requires a charted block, dashboard, or workbook that compiles to HTML output.');
22
+ }
23
+ const previewDir = join(tmpdir(), 'dql-preview', `${Date.now()}`);
24
+ mkdirSync(previewDir, { recursive: true });
25
+ writeBundle(result.dashboards[0], previewDir);
26
+ const executor = new QueryExecutor();
27
+ const connection = config.defaultConnection ?? { driver: 'file', filepath: ':memory:' };
28
+ process.chdir(projectRoot);
29
+ await assertLocalQueryRuntimeReady(executor, connection);
30
+ const port = await startLocalServer({
31
+ rootDir: previewDir,
32
+ executor,
33
+ connection,
34
+ preferredPort: flags.port ?? config.preview?.port ?? 3474,
35
+ });
36
+ const url = `http://127.0.0.1:${port}`;
37
+ maybeOpenBrowser(url, flags.open ?? config.preview?.open ?? true);
38
+ console.log(`\n ✓ Preview ready: ${url}`);
39
+ console.log(' Press Ctrl+C to stop.');
40
+ console.log('');
41
+ }
42
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAe;IAChE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE;QAC7B,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO;KACxC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACxF,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,OAAO,EAAE,UAAU;QACnB,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;KAC1D,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CLIFlags } from '../args.js';
2
+ export declare function runServe(targetDir: string | null, flags: CLIFlags): Promise<void>;
3
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBvF"}
@@ -0,0 +1,30 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { QueryExecutor } from '@duckcodeailabs/dql-connectors';
4
+ import { assertLocalQueryRuntimeReady, findProjectRoot, loadProjectConfig, startLocalServer } from '../local-runtime.js';
5
+ import { maybeOpenBrowser } from '../open-browser.js';
6
+ export async function runServe(targetDir, flags) {
7
+ const rootDir = resolve(targetDir || 'dist');
8
+ if (!existsSync(join(rootDir, 'index.html'))) {
9
+ throw new Error(`No built DQL bundle found at ${rootDir}. Run "dql build <file.dql>" first or pass a directory containing index.html.`);
10
+ }
11
+ const projectRoot = findProjectRoot(rootDir);
12
+ const config = loadProjectConfig(projectRoot);
13
+ const executor = new QueryExecutor();
14
+ const connection = config.defaultConnection ?? { driver: 'file', filepath: ':memory:' };
15
+ process.chdir(projectRoot);
16
+ await assertLocalQueryRuntimeReady(executor, connection);
17
+ const port = await startLocalServer({
18
+ rootDir,
19
+ executor,
20
+ connection,
21
+ preferredPort: flags.port ?? config.preview?.port ?? 3474,
22
+ });
23
+ const url = `http://127.0.0.1:${port}`;
24
+ maybeOpenBrowser(url, flags.open ?? config.preview?.open ?? true);
25
+ console.log(`\n ✓ Serving DQL bundle: ${url}`);
26
+ console.log(` Root: ${rootDir}`);
27
+ console.log(' Press Ctrl+C to stop.');
28
+ console.log('');
29
+ }
30
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAwB,EAAE,KAAe;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,+EAA+E,CAAC,CAAC;IAC1I,CAAC;IACD,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE,MAAM,EAAE,MAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEjG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,4BAA4B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC;QAClC,OAAO;QACP,QAAQ;QACR,UAAU;QACV,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;KAC1D,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,oBAAoB,IAAI,EAAE,CAAC;IACvC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
package/dist/index.js CHANGED
@@ -1,44 +1,85 @@
1
1
  #!/usr/bin/env node
2
2
  import { parseArgs } from './args.js';
3
+ import { runInit } from './commands/init.js';
4
+ import { runNew } from './commands/new.js';
5
+ import { runBuild } from './commands/build.js';
6
+ import { runDoctor } from './commands/doctor.js';
7
+ import { runPreview } from './commands/preview.js';
8
+ import { runServe } from './commands/serve.js';
3
9
  import { runParse } from './commands/parse.js';
4
10
  import { runTest } from './commands/test.js';
5
11
  import { runCertify } from './commands/certify.js';
6
12
  import { runInfo } from './commands/info.js';
7
13
  import { runMigrate } from './commands/migrate.js';
8
14
  import { runFmt } from './commands/fmt.js';
15
+ import { runNotebook } from './commands/notebook.js';
9
16
  const HELP = `
10
17
  dql — DQL CLI
11
18
 
12
19
  Usage:
20
+ dql init [directory] Scaffold a local DQL project
21
+ dql new <type> <name> Create a new block, semantic block, dashboard, or workbook
22
+ dql build <file.dql> Compile a DQL file to a static HTML bundle
23
+ dql doctor [path] Run local setup checks for a DQL project
24
+ dql preview <file.dql> Render a local browser preview for a DQL file
25
+ dql serve [directory] Serve a built DQL bundle locally
13
26
  dql parse <file.dql> Parse and analyze a DQL file
14
27
  dql test <file.dql> Inspect block tests
15
28
  dql certify <file.dql> Evaluate certification rules
16
29
  dql info <file.dql> Show block metadata
17
30
  dql migrate <source> Scaffold migration from looker/tableau/dbt/metabase/raw-sql
18
31
  dql fmt <file.dql> Format DQL file in place
32
+ dql notebook [path] Launch the browser-first notebook for a project
19
33
  dql --help Show this help
20
34
 
21
35
  Options:
22
36
  --format json|text Output format (default: text)
23
37
  --verbose Show detailed output
38
+ --open Open the preview or served bundle in a browser
39
+ --no-open Do not open the browser automatically
24
40
  --check For "fmt": check-only and exit 1 if changes needed
25
41
  --input <path> Source path for scaffold-style migration commands
42
+ --out-dir <path> Output directory for "build"
43
+ --port <number> Preferred local port for "preview" or "serve"
44
+ --chart <type> Primary chart type for "new" scaffolds (default: bar)
45
+ --domain <name> Domain for new block scaffolds (default: general)
46
+ --owner <name> Owner for new block scaffolds (default: current user)
47
+ --query-only Create a query-only block without visualization
48
+ --template <name> Template to use for "init" (default: starter)
26
49
  `;
27
50
  async function main() {
28
- const { command, file, flags } = parseArgs(process.argv.slice(2));
51
+ const { command, file, rest, flags } = parseArgs(process.argv.slice(2));
29
52
  if (flags.help || !command) {
30
53
  console.log(HELP.trim());
31
54
  process.exit(0);
32
55
  }
33
- if (!file) {
56
+ if (!file && command !== 'init' && command !== 'serve' && command !== 'doctor' && command !== 'notebook') {
34
57
  console.error('Error: No file/argument specified. Run "dql --help" for usage.');
35
58
  process.exit(1);
36
59
  }
37
60
  try {
38
61
  switch (command) {
62
+ case 'init':
63
+ await runInit(file, flags);
64
+ break;
65
+ case 'new':
66
+ await runNew(file, rest, flags);
67
+ break;
68
+ case 'build':
69
+ await runBuild(file, flags);
70
+ break;
71
+ case 'doctor':
72
+ await runDoctor(file, flags);
73
+ break;
39
74
  case 'parse':
40
75
  await runParse(file, flags);
41
76
  break;
77
+ case 'preview':
78
+ await runPreview(file, flags);
79
+ break;
80
+ case 'serve':
81
+ await runServe(file, flags);
82
+ break;
42
83
  case 'test':
43
84
  await runTest(file, flags);
44
85
  break;
@@ -54,6 +95,9 @@ async function main() {
54
95
  case 'fmt':
55
96
  await runFmt(file, flags);
56
97
  break;
98
+ case 'notebook':
99
+ await runNotebook(file, flags);
100
+ break;
57
101
  default:
58
102
  console.error(`Unknown command: ${command}. Run "dql --help" for usage.`);
59
103
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;CAiBZ,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAElE,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,OAAO;gBACV,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,SAAS;gBACZ,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC9B,MAAM;YACR,KAAK,KAAK;gBACR,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC1B,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,+BAA+B,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { QueryExecutor, type ConnectionConfig } from '@duckcodeailabs/dql-connectors';
2
+ export interface ProjectConfig {
3
+ project?: string;
4
+ defaultConnection?: ConnectionConfig;
5
+ dataDir?: string;
6
+ preview?: {
7
+ port?: number;
8
+ theme?: string;
9
+ open?: boolean;
10
+ };
11
+ }
12
+ export interface LocalServerOptions {
13
+ rootDir: string;
14
+ projectRoot?: string;
15
+ executor: QueryExecutor;
16
+ connection: ConnectionConfig;
17
+ preferredPort: number;
18
+ }
19
+ export declare function startLocalServer(opts: LocalServerOptions): Promise<number>;
20
+ export declare function assertLocalQueryRuntimeReady(executor: QueryExecutor, connection: ConnectionConfig): Promise<void>;
21
+ export declare function formatLocalQueryRuntimeError(connection: ConnectionConfig, error: unknown): string;
22
+ export declare function serializeJSON(value: unknown): string;
23
+ export declare function findProjectRoot(startDir: string): string;
24
+ export declare function loadProjectConfig(projectRoot: string): ProjectConfig;
25
+ //# sourceMappingURL=local-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-runtime.d.ts","sourceRoot":"","sources":["../src/local-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAStF,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqJhF;AAED,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,gBAAgB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,gBAAgB,EAC5B,KAAK,EAAE,OAAO,GACb,MAAM,CAaR;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQpD;AA8BD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAOpE"}