@duckcodeailabs/dql-cli 0.1.0 → 0.1.2
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/README.md +62 -0
- package/dist/args.d.ts +9 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +43 -1
- package/dist/args.js.map +1 -1
- package/dist/args.test.d.ts +2 -0
- package/dist/args.test.d.ts.map +1 -0
- package/dist/args.test.js +33 -0
- package/dist/args.test.js.map +1 -0
- package/dist/assets/notebook-browser/app.js +537 -0
- package/dist/assets/notebook-browser/index.html +83 -0
- package/dist/assets/notebook-browser/styles.css +336 -0
- package/dist/assets/templates/ecommerce/README.md +27 -0
- package/dist/assets/templates/ecommerce/blocks/repeat_rate.dql +26 -0
- package/dist/assets/templates/ecommerce/blocks/revenue_by_segment.dql +24 -0
- package/dist/assets/templates/ecommerce/dashboards/revenue_command_center.dql +25 -0
- package/dist/assets/templates/ecommerce/data/customers.csv +11 -0
- package/dist/assets/templates/ecommerce/data/funnel.csv +6 -0
- package/dist/assets/templates/ecommerce/data/orders.csv +16 -0
- package/dist/assets/templates/ecommerce/dql.config.json +13 -0
- package/dist/assets/templates/ecommerce/semantic-layer/dimensions/channel.yaml +4 -0
- package/dist/assets/templates/ecommerce/semantic-layer/metrics/gmv.yaml +4 -0
- package/dist/assets/templates/ecommerce/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/saas/README.md +20 -0
- package/dist/assets/templates/saas/blocks/churn_pressure.dql +25 -0
- package/dist/assets/templates/saas/blocks/revenue_by_segment.dql +25 -0
- package/dist/assets/templates/saas/dashboards/growth_scorecard.dql +25 -0
- package/dist/assets/templates/saas/data/cohorts.csv +7 -0
- package/dist/assets/templates/saas/data/subscriptions.csv +13 -0
- package/dist/assets/templates/saas/dql.config.json +13 -0
- package/dist/assets/templates/saas/semantic-layer/metrics/mrr.yaml +4 -0
- package/dist/assets/templates/saas/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/starter/README.md +54 -0
- package/dist/assets/templates/starter/blocks/revenue_by_segment.dql +29 -0
- package/dist/assets/templates/starter/blocks/revenue_trend_query_only.dql +20 -0
- package/dist/assets/templates/starter/dashboards/.gitkeep +1 -0
- package/dist/assets/templates/starter/data/revenue.csv +13 -0
- package/dist/assets/templates/starter/dql.config.json +13 -0
- package/dist/assets/templates/starter/semantic-layer/blocks/revenue_by_segment.yaml +11 -0
- package/dist/assets/templates/starter/semantic-layer/dimensions/segment_tier.yaml +6 -0
- package/dist/assets/templates/starter/semantic-layer/hierarchies/revenue_time.yaml +12 -0
- package/dist/assets/templates/starter/semantic-layer/metrics/revenue.yaml +7 -0
- package/dist/assets/templates/starter/workbooks/.gitkeep +1 -0
- package/dist/assets/templates/taxi/README.md +19 -0
- package/dist/assets/templates/taxi/blocks/airport_mix.dql +25 -0
- package/dist/assets/templates/taxi/blocks/revenue_by_segment.dql +24 -0
- package/dist/assets/templates/taxi/dashboards/city_operations.dql +25 -0
- package/dist/assets/templates/taxi/data/trips.csv +13 -0
- package/dist/assets/templates/taxi/dql.config.json +13 -0
- package/dist/assets/templates/taxi/semantic-layer/.gitkeep +1 -0
- package/dist/assets/templates/taxi/workbooks/.gitkeep +1 -0
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +41 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/build.test.d.ts +2 -0
- package/dist/commands/build.test.d.ts.map +1 -0
- package/dist/commands/build.test.js +42 -0
- package/dist/commands/build.test.js.map +1 -0
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +127 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/doctor.test.d.ts +2 -0
- package/dist/commands/doctor.test.d.ts.map +1 -0
- package/dist/commands/doctor.test.js +41 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +117 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/init.test.d.ts +2 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +38 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/migrate.js +4 -4
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/new.d.ts +3 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +405 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/new.test.d.ts +2 -0
- package/dist/commands/new.test.d.ts.map +1 -0
- package/dist/commands/new.test.js +177 -0
- package/dist/commands/new.test.js.map +1 -0
- package/dist/commands/notebook.d.ts +3 -0
- package/dist/commands/notebook.d.ts.map +1 -0
- package/dist/commands/notebook.js +31 -0
- package/dist/commands/notebook.js.map +1 -0
- package/dist/commands/preview.d.ts +3 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +42 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/serve.d.ts +3 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +30 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/index.js +46 -2
- package/dist/index.js.map +1 -1
- package/dist/local-runtime.d.ts +25 -0
- package/dist/local-runtime.d.ts.map +1 -0
- package/dist/local-runtime.js +302 -0
- package/dist/local-runtime.js.map +1 -0
- package/dist/local-runtime.test.d.ts +2 -0
- package/dist/local-runtime.test.d.ts.map +1 -0
- package/dist/local-runtime.test.js +21 -0
- package/dist/local-runtime.test.js.map +1 -0
- package/dist/open-browser.d.ts +2 -0
- package/dist/open-browser.d.ts.map +1 -0
- package/dist/open-browser.js +29 -0
- package/dist/open-browser.js.map +1 -0
- package/package.json +8 -6
package/README.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# `@duckcodeailabs/dql-cli`
|
|
2
|
+
|
|
3
|
+
Official command-line interface for DQL.
|
|
4
|
+
|
|
5
|
+
Use the CLI to scaffold projects, validate blocks, preview charts locally, and build static bundles without DuckCode Studio.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
For local preview with file/DuckDB-backed starter data, use Node 18, 20, or 22 LTS. If you change Node versions after installing dependencies, rerun `pnpm install` so native modules are rebuilt for the active runtime.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g @duckcodeailabs/dql-cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Or run it without a global install:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx @duckcodeailabs/dql-cli --help
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
From this repo, you can also run:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pnpm exec dql --help
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
These commands assume `dql` is installed globally. From a source checkout, use `pnpm exec dql` from the repo root or `../node_modules/.bin/dql` from the generated project.
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
dql init my-dql-project
|
|
33
|
+
cd my-dql-project
|
|
34
|
+
dql new block "Pipeline Health"
|
|
35
|
+
dql new semantic-block "ARR Growth"
|
|
36
|
+
dql new dashboard "Revenue Overview"
|
|
37
|
+
dql doctor
|
|
38
|
+
dql preview blocks/pipeline_health.dql --open
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Core Commands
|
|
42
|
+
|
|
43
|
+
- `dql init [directory]` — create a starter DQL project
|
|
44
|
+
- `dql new block <name>` — scaffold a new DQL block in the current project
|
|
45
|
+
- `dql new semantic-block <name>` — scaffold a semantic block plus companion YAML files
|
|
46
|
+
- `dql new dashboard <name>` — scaffold a new dashboard in `dashboards/`
|
|
47
|
+
- `dql new workbook <name>` — scaffold a new workbook in `workbooks/`
|
|
48
|
+
- `dql doctor [path]` — check local setup, config, and starter folders
|
|
49
|
+
- `dql parse <file.dql>` — parse and validate a DQL block
|
|
50
|
+
- `dql fmt <file.dql>` — format a DQL file
|
|
51
|
+
- `dql test <file.dql>` — run DQL assertions
|
|
52
|
+
- `dql certify <file.dql>` — run certification checks
|
|
53
|
+
- `dql preview <file.dql>` — preview a block in the browser
|
|
54
|
+
- `dql build <file.dql>` — build a static bundle in `dist/`
|
|
55
|
+
- `dql serve [directory]` — serve a built bundle locally
|
|
56
|
+
|
|
57
|
+
## Learn More
|
|
58
|
+
|
|
59
|
+
- Root docs: [`../../README.md`](../../README.md)
|
|
60
|
+
- Getting started: [`../../docs/getting-started.md`](../../docs/getting-started.md)
|
|
61
|
+
- CLI reference: [`../../docs/cli-reference.md`](../../docs/cli-reference.md)
|
|
62
|
+
- Project config: [`../../docs/project-config.md`](../../docs/project-config.md)
|
package/dist/args.d.ts
CHANGED
|
@@ -3,11 +3,20 @@ export interface CLIFlags {
|
|
|
3
3
|
verbose: boolean;
|
|
4
4
|
help: boolean;
|
|
5
5
|
check: boolean;
|
|
6
|
+
open: boolean | null;
|
|
6
7
|
input: string;
|
|
8
|
+
outDir: string;
|
|
9
|
+
port: number | null;
|
|
10
|
+
chart: string;
|
|
11
|
+
domain: string;
|
|
12
|
+
owner: string;
|
|
13
|
+
queryOnly: boolean;
|
|
14
|
+
template: string;
|
|
7
15
|
}
|
|
8
16
|
export interface ParsedArgs {
|
|
9
17
|
command: string | null;
|
|
10
18
|
file: string | null;
|
|
19
|
+
rest: string[];
|
|
11
20
|
flags: CLIFlags;
|
|
12
21
|
}
|
|
13
22
|
export declare function parseArgs(argv: string[]): ParsedArgs;
|
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiEpD"}
|
package/dist/args.js
CHANGED
|
@@ -4,10 +4,19 @@ export function parseArgs(argv) {
|
|
|
4
4
|
verbose: false,
|
|
5
5
|
help: false,
|
|
6
6
|
check: false,
|
|
7
|
+
open: null,
|
|
7
8
|
input: '',
|
|
9
|
+
outDir: '',
|
|
10
|
+
port: null,
|
|
11
|
+
chart: '',
|
|
12
|
+
domain: '',
|
|
13
|
+
owner: '',
|
|
14
|
+
queryOnly: false,
|
|
15
|
+
template: 'starter',
|
|
8
16
|
};
|
|
9
17
|
let command = null;
|
|
10
18
|
let file = null;
|
|
19
|
+
const rest = [];
|
|
11
20
|
for (let i = 0; i < argv.length; i++) {
|
|
12
21
|
const arg = argv[i];
|
|
13
22
|
if (arg === '--help' || arg === '-h') {
|
|
@@ -16,6 +25,12 @@ export function parseArgs(argv) {
|
|
|
16
25
|
else if (arg === '--verbose' || arg === '-v') {
|
|
17
26
|
flags.verbose = true;
|
|
18
27
|
}
|
|
28
|
+
else if (arg === '--open') {
|
|
29
|
+
flags.open = true;
|
|
30
|
+
}
|
|
31
|
+
else if (arg === '--no-open') {
|
|
32
|
+
flags.open = false;
|
|
33
|
+
}
|
|
19
34
|
else if (arg === '--check') {
|
|
20
35
|
flags.check = true;
|
|
21
36
|
}
|
|
@@ -27,13 +42,40 @@ export function parseArgs(argv) {
|
|
|
27
42
|
else if (arg === '--input' && i + 1 < argv.length) {
|
|
28
43
|
flags.input = argv[++i];
|
|
29
44
|
}
|
|
45
|
+
else if (arg === '--out-dir' && i + 1 < argv.length) {
|
|
46
|
+
flags.outDir = argv[++i];
|
|
47
|
+
}
|
|
48
|
+
else if (arg === '--port' && i + 1 < argv.length) {
|
|
49
|
+
const value = Number(argv[++i]);
|
|
50
|
+
if (Number.isFinite(value) && value > 0) {
|
|
51
|
+
flags.port = value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (arg === '--chart' && i + 1 < argv.length) {
|
|
55
|
+
flags.chart = argv[++i];
|
|
56
|
+
}
|
|
57
|
+
else if (arg === '--domain' && i + 1 < argv.length) {
|
|
58
|
+
flags.domain = argv[++i];
|
|
59
|
+
}
|
|
60
|
+
else if (arg === '--owner' && i + 1 < argv.length) {
|
|
61
|
+
flags.owner = argv[++i];
|
|
62
|
+
}
|
|
63
|
+
else if (arg === '--template' && i + 1 < argv.length) {
|
|
64
|
+
flags.template = argv[++i];
|
|
65
|
+
}
|
|
66
|
+
else if (arg === '--query-only') {
|
|
67
|
+
flags.queryOnly = true;
|
|
68
|
+
}
|
|
30
69
|
else if (!command) {
|
|
31
70
|
command = arg;
|
|
32
71
|
}
|
|
33
72
|
else if (!file) {
|
|
34
73
|
file = arg;
|
|
35
74
|
}
|
|
75
|
+
else {
|
|
76
|
+
rest.push(arg);
|
|
77
|
+
}
|
|
36
78
|
}
|
|
37
|
-
return { command, file, flags };
|
|
79
|
+
return { command, file, rest, flags };
|
|
38
80
|
}
|
|
39
81
|
//# sourceMappingURL=args.js.map
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.test.d.ts","sourceRoot":"","sources":["../src/args.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { parseArgs } from './args.js';
|
|
3
|
+
describe('parseArgs', () => {
|
|
4
|
+
it('parses open and no-open flags plus port and out-dir', () => {
|
|
5
|
+
const parsed = parseArgs(['preview', 'blocks/demo.dql', '--open', '--port', '4488', '--out-dir', 'out']);
|
|
6
|
+
expect(parsed.command).toBe('preview');
|
|
7
|
+
expect(parsed.file).toBe('blocks/demo.dql');
|
|
8
|
+
expect(parsed.flags.open).toBe(true);
|
|
9
|
+
expect(parsed.flags.port).toBe(4488);
|
|
10
|
+
expect(parsed.flags.outDir).toBe('out');
|
|
11
|
+
});
|
|
12
|
+
it('collects extra positionals and new-block flags', () => {
|
|
13
|
+
const parsed = parseArgs(['new', 'block', 'Revenue', 'by', 'Segment', '--chart', 'line', '--domain', 'finance', '--owner', 'demo', '--query-only']);
|
|
14
|
+
expect(parsed.command).toBe('new');
|
|
15
|
+
expect(parsed.file).toBe('block');
|
|
16
|
+
expect(parsed.rest).toEqual(['Revenue', 'by', 'Segment']);
|
|
17
|
+
expect(parsed.flags.chart).toBe('line');
|
|
18
|
+
expect(parsed.flags.domain).toBe('finance');
|
|
19
|
+
expect(parsed.flags.owner).toBe('demo');
|
|
20
|
+
expect(parsed.flags.queryOnly).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it('lets no-open override browser launching', () => {
|
|
23
|
+
const parsed = parseArgs(['serve', 'dist/demo', '--open', '--no-open']);
|
|
24
|
+
expect(parsed.flags.open).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it('parses notebook init template selection', () => {
|
|
27
|
+
const parsed = parseArgs(['init', 'demo', '--template', 'ecommerce']);
|
|
28
|
+
expect(parsed.command).toBe('init');
|
|
29
|
+
expect(parsed.file).toBe('demo');
|
|
30
|
+
expect(parsed.flags.template).toBe('ecommerce');
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=args.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.test.js","sourceRoot":"","sources":["../src/args.test.ts"],"names":[],"mappings":"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"}
|