@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,115 @@
1
+ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
2
+ import { basename, dirname, join, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { createWelcomeNotebook, serializeNotebook } from '@duckcodeailabs/dql-notebook';
5
+ import { runNotebook } from './notebook.js';
6
+ const COMMAND_DIR = dirname(fileURLToPath(import.meta.url));
7
+ const TEMPLATE_ROOT = resolve(COMMAND_DIR, '../../../../templates');
8
+ const TEXT_FILE_EXTENSIONS = new Set([
9
+ '.json',
10
+ '.md',
11
+ '.yaml',
12
+ '.yml',
13
+ '.dql',
14
+ '.gitignore',
15
+ '.txt',
16
+ ]);
17
+ export async function runInit(targetArg, flags) {
18
+ const templateId = flags.template || 'starter';
19
+ const templateDir = resolve(TEMPLATE_ROOT, templateId);
20
+ if (!existsSync(templateDir)) {
21
+ throw new Error(`Template "${templateId}" not found. Available templates: ${listTemplates().join(', ')}`);
22
+ }
23
+ const targetDir = resolve(targetArg || '.');
24
+ const projectName = basename(targetDir) || 'dql-project';
25
+ if (existsSync(targetDir)) {
26
+ const contents = readdirSync(targetDir);
27
+ if (contents.length > 0) {
28
+ throw new Error(`Target directory is not empty: ${targetDir}`);
29
+ }
30
+ }
31
+ else {
32
+ mkdirSync(targetDir, { recursive: true });
33
+ }
34
+ cpSync(templateDir, targetDir, { recursive: true });
35
+ replaceTokens(targetDir, {
36
+ '__PROJECT_NAME__': projectName,
37
+ });
38
+ ensureWelcomeNotebook(targetDir, projectName, templateId);
39
+ if (flags.format === 'json') {
40
+ console.log(JSON.stringify({
41
+ project: projectName,
42
+ path: targetDir,
43
+ created: true,
44
+ template: templateId,
45
+ nextSteps: [
46
+ `cd ${targetArg || '.'}`,
47
+ 'dql notebook',
48
+ 'dql parse blocks/revenue_by_segment.dql',
49
+ ],
50
+ }, null, 2));
51
+ return;
52
+ }
53
+ console.log(`\n ✓ Created DQL project: ${projectName}`);
54
+ console.log(` Path: ${targetDir}`);
55
+ console.log(` Template: ${templateId}`);
56
+ console.log('');
57
+ console.log(' Next steps:');
58
+ if (targetArg && targetArg !== '.') {
59
+ console.log(` 1. cd ${targetArg}`);
60
+ console.log(' 2. dql notebook');
61
+ console.log(' 3. dql parse blocks/revenue_by_segment.dql');
62
+ }
63
+ else {
64
+ console.log(' 1. dql notebook');
65
+ console.log(' 2. dql parse blocks/revenue_by_segment.dql');
66
+ }
67
+ console.log('');
68
+ if (flags.open) {
69
+ await runNotebook(targetDir, flags);
70
+ }
71
+ }
72
+ function replaceTokens(rootDir, replacements) {
73
+ const entries = readdirSync(rootDir);
74
+ for (const entry of entries) {
75
+ const fullPath = join(rootDir, entry);
76
+ const stat = statSync(fullPath);
77
+ if (stat.isDirectory()) {
78
+ replaceTokens(fullPath, replacements);
79
+ continue;
80
+ }
81
+ if (!shouldTreatAsText(fullPath)) {
82
+ continue;
83
+ }
84
+ let content = readFileSync(fullPath, 'utf-8');
85
+ for (const [token, value] of Object.entries(replacements)) {
86
+ content = content.split(token).join(value);
87
+ }
88
+ writeFileSync(fullPath, content, 'utf-8');
89
+ }
90
+ }
91
+ function shouldTreatAsText(filePath) {
92
+ const fileName = basename(filePath);
93
+ if (fileName === '.gitignore') {
94
+ return true;
95
+ }
96
+ const dot = fileName.lastIndexOf('.');
97
+ const ext = dot >= 0 ? fileName.slice(dot) : '';
98
+ return TEXT_FILE_EXTENSIONS.has(ext);
99
+ }
100
+ function listTemplates() {
101
+ if (!existsSync(TEMPLATE_ROOT)) {
102
+ return [];
103
+ }
104
+ return readdirSync(TEMPLATE_ROOT).filter((entry) => statSync(join(TEMPLATE_ROOT, entry)).isDirectory()).sort();
105
+ }
106
+ function ensureWelcomeNotebook(targetDir, projectName, templateId) {
107
+ const notebookDir = join(targetDir, 'notebooks');
108
+ mkdirSync(notebookDir, { recursive: true });
109
+ const notebookPath = join(notebookDir, 'welcome.dqlnb');
110
+ if (existsSync(notebookPath)) {
111
+ return;
112
+ }
113
+ writeFileSync(notebookPath, serializeNotebook(createWelcomeNotebook(templateId, projectName)), 'utf-8');
114
+ }
115
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=init.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.d.ts","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { mkdtempSync, readFileSync, readdirSync } 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
+ describe('runInit', () => {
7
+ it('scaffolds a starter project with config, data, and valid block types', async () => {
8
+ const targetDir = mkdtempSync(join(tmpdir(), 'dql-init-'));
9
+ const projectDir = join(targetDir, 'demo-project');
10
+ await runInit(projectDir, {
11
+ check: false,
12
+ chart: '',
13
+ domain: '',
14
+ format: 'json',
15
+ help: false,
16
+ open: null,
17
+ input: '',
18
+ outDir: '',
19
+ owner: '',
20
+ port: null,
21
+ queryOnly: false,
22
+ template: 'starter',
23
+ verbose: false,
24
+ });
25
+ expect(readdirSync(projectDir)).toContain('blocks');
26
+ expect(readdirSync(projectDir)).toContain('data');
27
+ expect(readdirSync(projectDir)).toContain('dql.config.json');
28
+ expect(readdirSync(projectDir)).toContain('notebooks');
29
+ const config = readFileSync(join(projectDir, 'dql.config.json'), 'utf-8');
30
+ expect(config).toContain('demo-project');
31
+ const block = readFileSync(join(projectDir, 'blocks', 'revenue_by_segment.dql'), 'utf-8');
32
+ expect(block).toContain('type = "custom"');
33
+ expect(block).toContain("read_csv_auto('./data/revenue.csv')");
34
+ const notebook = readFileSync(join(projectDir, 'notebooks', 'welcome.dqlnb'), 'utf-8');
35
+ expect(notebook).toContain('Revenue by Segment');
36
+ });
37
+ });
38
+ //# sourceMappingURL=init.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../src/commands/init.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjE,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,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAEnD,MAAM,OAAO,CAAC,UAAU,EAAE;YACxB,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,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEzC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;QACvF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -5,7 +5,7 @@ function generateBlockDQL(opts) {
5
5
  const tagStr = opts.tags.map((t) => `"${t}"`).join(', ');
6
6
  return `block "${opts.name}" {
7
7
  domain = "${opts.domain}"
8
- type = "${opts.type}"
8
+ type = "custom"
9
9
  description = "${opts.description}"
10
10
  tags = [${tagStr}]
11
11
  owner = "${opts.owner}"
@@ -15,7 +15,7 @@ function generateBlockDQL(opts) {
15
15
  """
16
16
 
17
17
  visualization {
18
- chart = "bar"
18
+ chart = "${opts.chart}"
19
19
  x = dimension
20
20
  y = measure
21
21
  }
@@ -44,11 +44,11 @@ export async function runMigrate(file, flags) {
44
44
  exampleBlock: generateBlockDQL({
45
45
  name: `migrated-from-${source}`,
46
46
  domain: 'migrated',
47
- type: 'chart.bar',
48
47
  description: `Auto-migrated from ${source}`,
49
48
  sql: 'SELECT dimension, SUM(measure) AS measure\nFROM source_table\nGROUP BY dimension',
50
49
  owner: 'migration-bot',
51
50
  tags: ['migrated', source],
51
+ chart: 'bar',
52
52
  }),
53
53
  }, null, 2));
54
54
  return;
@@ -89,11 +89,11 @@ export async function runMigrate(file, flags) {
89
89
  const example = generateBlockDQL({
90
90
  name: `migrated-from-${source}`,
91
91
  domain: 'migrated',
92
- type: 'chart.bar',
93
92
  description: `Auto-migrated from ${source}`,
94
93
  sql: 'SELECT dimension, SUM(measure) AS measure\nFROM source_table\nGROUP BY dimension',
95
94
  owner: 'migration-bot',
96
95
  tags: ['migrated', source],
96
+ chart: 'bar',
97
97
  });
98
98
  console.log(example.split('\n').map((l) => ` ${l}`).join('\n'));
99
99
  console.log(' Next steps:');
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CLIFlags } from '../args.js';
2
+ export declare function runNew(subject: string | null, rest: string[], flags: CLIFlags): Promise<void>;
3
+ //# sourceMappingURL=new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAK3C,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEnG"}
@@ -0,0 +1,405 @@
1
+ import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
2
+ import { basename, join, resolve } from 'node:path';
3
+ import { findProjectRoot } from '../local-runtime.js';
4
+ export async function runNew(subject, rest, flags) {
5
+ const { kind, rawName } = resolveNewTarget(subject, rest);
6
+ const projectRoot = findProjectRoot(process.cwd());
7
+ const title = toTitle(rawName);
8
+ const slug = toSlug(rawName);
9
+ const outputDir = resolve(projectRoot, defaultDirForKind(kind, flags.outDir));
10
+ const filePath = join(outputDir, `${slug}.dql`);
11
+ if (existsSync(filePath)) {
12
+ throw new Error(`${capitalize(kind)} already exists: ${filePath}`);
13
+ }
14
+ mkdirSync(outputDir, { recursive: true });
15
+ const owner = flags.owner || process.env.USER || 'team';
16
+ const domain = flags.domain || 'general';
17
+ const chart = normalizeChart(flags.chart || 'bar');
18
+ const usingStarterData = existsSync(join(projectRoot, 'data', 'revenue.csv'));
19
+ const metricName = `${slug}_metric`;
20
+ const content = buildTemplate({
21
+ kind,
22
+ title,
23
+ domain,
24
+ owner,
25
+ chart,
26
+ queryOnly: flags.queryOnly,
27
+ usingStarterData,
28
+ metricName,
29
+ });
30
+ writeFileSync(filePath, content, 'utf-8');
31
+ const relatedFiles = kind === 'semantic-block'
32
+ ? writeSemanticCompanionFiles(projectRoot, slug, domain, owner, metricName)
33
+ : [];
34
+ const relativePath = relativeToProject(projectRoot, filePath);
35
+ const nextSteps = nextStepsFor(kind, relativePath, usingStarterData, flags.queryOnly);
36
+ if (flags.format === 'json') {
37
+ console.log(JSON.stringify({
38
+ created: true,
39
+ type: kind,
40
+ name: title,
41
+ path: filePath,
42
+ previewReady: usingStarterData && kind !== 'semantic-block',
43
+ relatedFiles,
44
+ nextSteps,
45
+ }, null, 2));
46
+ return;
47
+ }
48
+ console.log(`\n ✓ Created DQL ${kind}: ${title}`);
49
+ console.log(` Path: ${filePath}`);
50
+ if (relatedFiles.length > 0) {
51
+ console.log(' Related files:');
52
+ relatedFiles.forEach((relatedFile) => console.log(` - ${relatedFile}`));
53
+ }
54
+ console.log('');
55
+ console.log(' Next steps:');
56
+ nextSteps.forEach((step, index) => console.log(` ${index + 1}. ${step}`));
57
+ console.log('');
58
+ }
59
+ function resolveNewTarget(subject, rest) {
60
+ if (!subject) {
61
+ throw new Error('Usage: dql new <block|dashboard|workbook> <name>');
62
+ }
63
+ if (subject === 'block' || subject === 'dashboard' || subject === 'workbook' || subject === 'semantic-block') {
64
+ const rawName = rest.join(' ').trim();
65
+ if (!rawName) {
66
+ throw new Error(`Missing ${subject} name. Usage: dql new ${subject} <name>`);
67
+ }
68
+ return { kind: subject, rawName };
69
+ }
70
+ return { kind: 'block', rawName: subject };
71
+ }
72
+ function buildTemplate(opts) {
73
+ switch (opts.kind) {
74
+ case 'dashboard':
75
+ return buildDashboardTemplate(opts);
76
+ case 'workbook':
77
+ return buildWorkbookTemplate(opts);
78
+ case 'semantic-block':
79
+ return buildSemanticBlockTemplate(opts);
80
+ case 'block':
81
+ default:
82
+ return buildBlockTemplate(opts);
83
+ }
84
+ }
85
+ function buildBlockTemplate(opts) {
86
+ const description = opts.usingStarterData
87
+ ? `Starter block for ${opts.title.toLowerCase()} using local sample data`
88
+ : `Starter block for ${opts.title.toLowerCase()}`;
89
+ const query = opts.usingStarterData ? starterBlockQueryForChart(opts.chart) : placeholderBlockQueryForChart(opts.chart);
90
+ const params = opts.usingStarterData && (opts.chart === 'bar' || opts.chart === 'kpi')
91
+ ? `
92
+ params {
93
+ period = "current_quarter"
94
+ }
95
+ `
96
+ : '';
97
+ const visualization = opts.queryOnly ? '' : blockVisualizationForChart(opts.chart);
98
+ return `block "${opts.title}" {
99
+ domain = "${opts.domain}"
100
+ type = "custom"
101
+ description = "${description}"
102
+ owner = "${opts.owner}"
103
+ tags = ["starter", "${opts.domain}"]${params}
104
+
105
+ query = """
106
+ ${indentBlock(query, 8)}
107
+ """${visualization}
108
+
109
+ tests {
110
+ assert row_count > 0
111
+ }
112
+ }
113
+ `;
114
+ }
115
+ function buildSemanticBlockTemplate(opts) {
116
+ return `block "${opts.title}" {
117
+ domain = "${opts.domain}"
118
+ type = "semantic"
119
+ description = "Starter semantic block for ${opts.title.toLowerCase()}"
120
+ owner = "${opts.owner}"
121
+ tags = ["starter", "semantic", "${opts.domain}"]
122
+ metric = "${opts.metricName}"
123
+ }
124
+ `;
125
+ }
126
+ function buildDashboardTemplate(opts) {
127
+ const starterSource = `read_csv_auto('./data/revenue.csv')`;
128
+ const source = opts.usingStarterData ? starterSource : 'your_table';
129
+ const primaryChart = dashboardChartFor(opts.chart, source, opts.usingStarterData);
130
+ const tableChart = ` chart.table(
131
+ SELECT recognized_at, segment_tier, amount, fiscal_period
132
+ FROM ${source}
133
+ ORDER BY recognized_at DESC,
134
+ title = "Recent Rows"
135
+ )`;
136
+ return `dashboard "${opts.title}" {
137
+ ${primaryChart}
138
+
139
+ ${tableChart}
140
+ }
141
+ `;
142
+ }
143
+ function buildWorkbookTemplate(opts) {
144
+ const source = opts.usingStarterData ? `read_csv_auto('./data/revenue.csv')` : 'your_table';
145
+ return `workbook "${opts.title}" {
146
+ page "Summary" {
147
+ chart.kpi(
148
+ SELECT SUM(amount) AS total_revenue FROM ${source},
149
+ metrics = ["total_revenue"],
150
+ title = "Total Revenue"
151
+ )
152
+ }
153
+
154
+ page "Trend" {
155
+ chart.line(
156
+ SELECT recognized_at AS revenue_date, SUM(amount) AS total_revenue
157
+ FROM ${source}
158
+ GROUP BY recognized_at
159
+ ORDER BY recognized_at,
160
+ x = revenue_date,
161
+ y = total_revenue,
162
+ title = "Revenue Trend"
163
+ )
164
+ }
165
+ }
166
+ `;
167
+ }
168
+ function starterBlockQueryForChart(chart) {
169
+ switch (chart) {
170
+ case 'kpi':
171
+ return `SELECT SUM(amount) AS total_revenue
172
+ FROM read_csv_auto('./data/revenue.csv')
173
+ WHERE fiscal_period = \${period}`;
174
+ case 'line':
175
+ return `SELECT recognized_at AS revenue_date, SUM(amount) AS total_revenue
176
+ FROM read_csv_auto('./data/revenue.csv')
177
+ GROUP BY recognized_at
178
+ ORDER BY recognized_at`;
179
+ case 'table':
180
+ return `SELECT recognized_at, segment_tier, amount, fiscal_period
181
+ FROM read_csv_auto('./data/revenue.csv')
182
+ ORDER BY recognized_at DESC`;
183
+ case 'bar':
184
+ default:
185
+ return `SELECT segment_tier AS segment, SUM(amount) AS revenue
186
+ FROM read_csv_auto('./data/revenue.csv')
187
+ WHERE fiscal_period = \${period}
188
+ GROUP BY segment_tier
189
+ ORDER BY revenue DESC`;
190
+ }
191
+ }
192
+ function placeholderBlockQueryForChart(chart) {
193
+ switch (chart) {
194
+ case 'kpi':
195
+ return `SELECT SUM(measure) AS total_revenue
196
+ FROM your_table`;
197
+ case 'line':
198
+ return `SELECT dimension_date AS revenue_date, SUM(measure) AS total_revenue
199
+ FROM your_table
200
+ GROUP BY dimension_date
201
+ ORDER BY dimension_date`;
202
+ case 'table':
203
+ return `SELECT *
204
+ FROM your_table
205
+ LIMIT 50`;
206
+ case 'bar':
207
+ default:
208
+ return `SELECT dimension AS segment, SUM(measure) AS revenue
209
+ FROM your_table
210
+ GROUP BY dimension
211
+ ORDER BY revenue DESC`;
212
+ }
213
+ }
214
+ function blockVisualizationForChart(chart) {
215
+ switch (chart) {
216
+ case 'kpi':
217
+ return `
218
+
219
+ visualization {
220
+ chart = "kpi"
221
+ y = total_revenue
222
+ }`;
223
+ case 'line':
224
+ return `
225
+
226
+ visualization {
227
+ chart = "line"
228
+ x = revenue_date
229
+ y = total_revenue
230
+ }`;
231
+ case 'table':
232
+ return `
233
+
234
+ visualization {
235
+ chart = "table"
236
+ }`;
237
+ case 'bar':
238
+ default:
239
+ return `
240
+
241
+ visualization {
242
+ chart = "bar"
243
+ x = segment
244
+ y = revenue
245
+ }`;
246
+ }
247
+ }
248
+ function dashboardChartFor(chart, source, usingStarterData) {
249
+ switch (chart) {
250
+ case 'kpi':
251
+ return ` chart.kpi(
252
+ SELECT SUM(amount) AS total_revenue FROM ${source},
253
+ metrics = ["total_revenue"],
254
+ title = "Total Revenue"
255
+ )`;
256
+ case 'line':
257
+ return ` chart.line(
258
+ SELECT recognized_at AS revenue_date, SUM(amount) AS total_revenue
259
+ FROM ${source}
260
+ GROUP BY recognized_at
261
+ ORDER BY recognized_at,
262
+ x = revenue_date,
263
+ y = total_revenue,
264
+ title = "Revenue Trend"
265
+ )`;
266
+ case 'table':
267
+ return ` chart.table(
268
+ SELECT recognized_at, segment_tier, amount, fiscal_period
269
+ FROM ${source}
270
+ ORDER BY recognized_at DESC,
271
+ title = "Revenue Table"
272
+ )`;
273
+ case 'bar':
274
+ default:
275
+ return ` chart.bar(
276
+ SELECT segment_tier AS segment, SUM(amount) AS revenue
277
+ FROM ${source}${usingStarterData ? '\n WHERE fiscal_period = "current_quarter"' : ''}
278
+ GROUP BY segment_tier
279
+ ORDER BY revenue DESC,
280
+ x = segment,
281
+ y = revenue,
282
+ title = "Revenue by Segment"
283
+ )`;
284
+ }
285
+ }
286
+ function nextStepsFor(kind, relativePath, usingStarterData, queryOnly) {
287
+ if (kind === 'semantic-block') {
288
+ return [
289
+ `dql parse ${relativePath}`,
290
+ `dql info ${relativePath}`,
291
+ ];
292
+ }
293
+ if (!usingStarterData) {
294
+ return [
295
+ `Edit ${relativePath} to replace the placeholder SQL`,
296
+ `dql parse ${relativePath}`,
297
+ ];
298
+ }
299
+ const steps = [`dql parse ${relativePath}`];
300
+ if (kind === 'block') {
301
+ steps.push(queryOnly ? `dql info ${relativePath}` : `dql preview ${relativePath}`);
302
+ }
303
+ else {
304
+ steps.push(`dql preview ${relativePath}`);
305
+ }
306
+ return steps;
307
+ }
308
+ function defaultDirForKind(kind, outDir) {
309
+ if (outDir)
310
+ return outDir;
311
+ switch (kind) {
312
+ case 'dashboard':
313
+ return 'dashboards';
314
+ case 'semantic-block':
315
+ return 'blocks';
316
+ case 'workbook':
317
+ return 'workbooks';
318
+ case 'block':
319
+ default:
320
+ return 'blocks';
321
+ }
322
+ }
323
+ function normalizeChart(value) {
324
+ const normalized = value.trim().toLowerCase();
325
+ return normalized || 'bar';
326
+ }
327
+ function indentBlock(value, spaces) {
328
+ const prefix = ' '.repeat(spaces);
329
+ return value.split('\n').map((line) => `${prefix}${line}`).join('\n');
330
+ }
331
+ function toSlug(value) {
332
+ return value
333
+ .replace(/\.dql$/i, '')
334
+ .trim()
335
+ .replace(/[^a-zA-Z0-9]+/g, '_')
336
+ .replace(/^_+|_+$/g, '')
337
+ .toLowerCase() || 'new_asset';
338
+ }
339
+ function toTitle(value) {
340
+ const cleaned = value.replace(/\.dql$/i, '').trim();
341
+ if (!cleaned)
342
+ return 'New Asset';
343
+ if (/[A-Z]/.test(cleaned) || cleaned.includes(' ')) {
344
+ return cleaned.replace(/[_-]+/g, ' ');
345
+ }
346
+ return cleaned
347
+ .split(/[_-]+/g)
348
+ .map((part) => part ? `${part[0].toUpperCase()}${part.slice(1)}` : part)
349
+ .join(' ');
350
+ }
351
+ function relativeToProject(projectRoot, filePath) {
352
+ const normalizedRoot = `${resolve(projectRoot)}/`;
353
+ const normalizedPath = resolve(filePath);
354
+ return normalizedPath.startsWith(normalizedRoot)
355
+ ? normalizedPath.slice(normalizedRoot.length)
356
+ : basename(filePath);
357
+ }
358
+ function capitalize(value) {
359
+ return `${value[0]?.toUpperCase() || ''}${value.slice(1)}`;
360
+ }
361
+ function writeSemanticCompanionFiles(projectRoot, slug, domain, owner, metricName) {
362
+ const metricDir = join(projectRoot, 'semantic-layer', 'metrics');
363
+ const blockDir = join(projectRoot, 'semantic-layer', 'blocks');
364
+ mkdirSync(metricDir, { recursive: true });
365
+ mkdirSync(blockDir, { recursive: true });
366
+ const metricPath = join(metricDir, `${metricName}.yaml`);
367
+ const blockPath = join(blockDir, `${slug}.yaml`);
368
+ if (!existsSync(metricPath)) {
369
+ writeFileSync(metricPath, `name: ${metricName}
370
+ label: ${toLabel(metricName)}
371
+ description: Starter semantic metric for ${toLabel(slug)}
372
+ domain: ${domain}
373
+ sql: SUM(measure)
374
+ type: sum
375
+ table: your_table
376
+ tags:
377
+ - ${domain}
378
+ - semantic
379
+ owner: ${owner}
380
+ `, 'utf-8');
381
+ }
382
+ if (!existsSync(blockPath)) {
383
+ writeFileSync(blockPath, `name: ${slug}
384
+ block: ${slug}
385
+ domain: ${domain}
386
+ description: Companion business metadata for ${toLabel(slug)}
387
+ owner: ${owner}
388
+ tags:
389
+ - ${domain}
390
+ - semantic
391
+ semanticMappings:
392
+ measure: ${metricName}
393
+ reviewStatus: review
394
+ `, 'utf-8');
395
+ }
396
+ return [relativeToProject(projectRoot, metricPath), relativeToProject(projectRoot, blockPath)];
397
+ }
398
+ function toLabel(value) {
399
+ return value
400
+ .split(/[_-]+/g)
401
+ .filter(Boolean)
402
+ .map((part) => `${part[0]?.toUpperCase() || ''}${part.slice(1)}`)
403
+ .join(' ');
404
+ }
405
+ //# sourceMappingURL=new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=new.test.d.ts.map