@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.
Files changed (112) 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/assets/notebook-browser/app.js +537 -0
  11. package/dist/assets/notebook-browser/index.html +83 -0
  12. package/dist/assets/notebook-browser/styles.css +336 -0
  13. package/dist/assets/templates/ecommerce/README.md +27 -0
  14. package/dist/assets/templates/ecommerce/blocks/repeat_rate.dql +26 -0
  15. package/dist/assets/templates/ecommerce/blocks/revenue_by_segment.dql +24 -0
  16. package/dist/assets/templates/ecommerce/dashboards/revenue_command_center.dql +25 -0
  17. package/dist/assets/templates/ecommerce/data/customers.csv +11 -0
  18. package/dist/assets/templates/ecommerce/data/funnel.csv +6 -0
  19. package/dist/assets/templates/ecommerce/data/orders.csv +16 -0
  20. package/dist/assets/templates/ecommerce/dql.config.json +13 -0
  21. package/dist/assets/templates/ecommerce/semantic-layer/dimensions/channel.yaml +4 -0
  22. package/dist/assets/templates/ecommerce/semantic-layer/metrics/gmv.yaml +4 -0
  23. package/dist/assets/templates/ecommerce/workbooks/.gitkeep +1 -0
  24. package/dist/assets/templates/saas/README.md +20 -0
  25. package/dist/assets/templates/saas/blocks/churn_pressure.dql +25 -0
  26. package/dist/assets/templates/saas/blocks/revenue_by_segment.dql +25 -0
  27. package/dist/assets/templates/saas/dashboards/growth_scorecard.dql +25 -0
  28. package/dist/assets/templates/saas/data/cohorts.csv +7 -0
  29. package/dist/assets/templates/saas/data/subscriptions.csv +13 -0
  30. package/dist/assets/templates/saas/dql.config.json +13 -0
  31. package/dist/assets/templates/saas/semantic-layer/metrics/mrr.yaml +4 -0
  32. package/dist/assets/templates/saas/workbooks/.gitkeep +1 -0
  33. package/dist/assets/templates/starter/README.md +54 -0
  34. package/dist/assets/templates/starter/blocks/revenue_by_segment.dql +29 -0
  35. package/dist/assets/templates/starter/blocks/revenue_trend_query_only.dql +20 -0
  36. package/dist/assets/templates/starter/dashboards/.gitkeep +1 -0
  37. package/dist/assets/templates/starter/data/revenue.csv +13 -0
  38. package/dist/assets/templates/starter/dql.config.json +13 -0
  39. package/dist/assets/templates/starter/semantic-layer/blocks/revenue_by_segment.yaml +11 -0
  40. package/dist/assets/templates/starter/semantic-layer/dimensions/segment_tier.yaml +6 -0
  41. package/dist/assets/templates/starter/semantic-layer/hierarchies/revenue_time.yaml +12 -0
  42. package/dist/assets/templates/starter/semantic-layer/metrics/revenue.yaml +7 -0
  43. package/dist/assets/templates/starter/workbooks/.gitkeep +1 -0
  44. package/dist/assets/templates/taxi/README.md +19 -0
  45. package/dist/assets/templates/taxi/blocks/airport_mix.dql +25 -0
  46. package/dist/assets/templates/taxi/blocks/revenue_by_segment.dql +24 -0
  47. package/dist/assets/templates/taxi/dashboards/city_operations.dql +25 -0
  48. package/dist/assets/templates/taxi/data/trips.csv +13 -0
  49. package/dist/assets/templates/taxi/dql.config.json +13 -0
  50. package/dist/assets/templates/taxi/semantic-layer/.gitkeep +1 -0
  51. package/dist/assets/templates/taxi/workbooks/.gitkeep +1 -0
  52. package/dist/commands/build.d.ts +3 -0
  53. package/dist/commands/build.d.ts.map +1 -0
  54. package/dist/commands/build.js +41 -0
  55. package/dist/commands/build.js.map +1 -0
  56. package/dist/commands/build.test.d.ts +2 -0
  57. package/dist/commands/build.test.d.ts.map +1 -0
  58. package/dist/commands/build.test.js +42 -0
  59. package/dist/commands/build.test.js.map +1 -0
  60. package/dist/commands/doctor.d.ts +3 -0
  61. package/dist/commands/doctor.d.ts.map +1 -0
  62. package/dist/commands/doctor.js +127 -0
  63. package/dist/commands/doctor.js.map +1 -0
  64. package/dist/commands/doctor.test.d.ts +2 -0
  65. package/dist/commands/doctor.test.d.ts.map +1 -0
  66. package/dist/commands/doctor.test.js +41 -0
  67. package/dist/commands/doctor.test.js.map +1 -0
  68. package/dist/commands/init.d.ts +3 -0
  69. package/dist/commands/init.d.ts.map +1 -0
  70. package/dist/commands/init.js +117 -0
  71. package/dist/commands/init.js.map +1 -0
  72. package/dist/commands/init.test.d.ts +2 -0
  73. package/dist/commands/init.test.d.ts.map +1 -0
  74. package/dist/commands/init.test.js +38 -0
  75. package/dist/commands/init.test.js.map +1 -0
  76. package/dist/commands/migrate.js +4 -4
  77. package/dist/commands/migrate.js.map +1 -1
  78. package/dist/commands/new.d.ts +3 -0
  79. package/dist/commands/new.d.ts.map +1 -0
  80. package/dist/commands/new.js +405 -0
  81. package/dist/commands/new.js.map +1 -0
  82. package/dist/commands/new.test.d.ts +2 -0
  83. package/dist/commands/new.test.d.ts.map +1 -0
  84. package/dist/commands/new.test.js +177 -0
  85. package/dist/commands/new.test.js.map +1 -0
  86. package/dist/commands/notebook.d.ts +3 -0
  87. package/dist/commands/notebook.d.ts.map +1 -0
  88. package/dist/commands/notebook.js +31 -0
  89. package/dist/commands/notebook.js.map +1 -0
  90. package/dist/commands/preview.d.ts +3 -0
  91. package/dist/commands/preview.d.ts.map +1 -0
  92. package/dist/commands/preview.js +42 -0
  93. package/dist/commands/preview.js.map +1 -0
  94. package/dist/commands/serve.d.ts +3 -0
  95. package/dist/commands/serve.d.ts.map +1 -0
  96. package/dist/commands/serve.js +30 -0
  97. package/dist/commands/serve.js.map +1 -0
  98. package/dist/index.js +46 -2
  99. package/dist/index.js.map +1 -1
  100. package/dist/local-runtime.d.ts +25 -0
  101. package/dist/local-runtime.d.ts.map +1 -0
  102. package/dist/local-runtime.js +302 -0
  103. package/dist/local-runtime.js.map +1 -0
  104. package/dist/local-runtime.test.d.ts +2 -0
  105. package/dist/local-runtime.test.d.ts.map +1 -0
  106. package/dist/local-runtime.test.js +21 -0
  107. package/dist/local-runtime.test.js.map +1 -0
  108. package/dist/open-browser.d.ts +2 -0
  109. package/dist/open-browser.d.ts.map +1 -0
  110. package/dist/open-browser.js +29 -0
  111. package/dist/open-browser.js.map +1 -0
  112. 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;
@@ -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;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAiCpD"}
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":"AAcA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,KAAK,GAAa;QACtB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,KAAK;QACZ,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM;gBAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3D,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACpD,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,GAAG,GAAG,CAAC;QAChB,CAAC;aAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,GAAG,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=args.test.d.ts.map
@@ -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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"}