@duckcodeailabs/dql-compiler 0.1.0

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 (182) hide show
  1. package/LICENSE +123 -0
  2. package/dist/charts/area.d.ts +5 -0
  3. package/dist/charts/area.d.ts.map +1 -0
  4. package/dist/charts/area.js +30 -0
  5. package/dist/charts/area.js.map +1 -0
  6. package/dist/charts/bar.d.ts +5 -0
  7. package/dist/charts/bar.d.ts.map +1 -0
  8. package/dist/charts/bar.js +37 -0
  9. package/dist/charts/bar.js.map +1 -0
  10. package/dist/charts/boxplot.d.ts +5 -0
  11. package/dist/charts/boxplot.d.ts.map +1 -0
  12. package/dist/charts/boxplot.js +36 -0
  13. package/dist/charts/boxplot.js.map +1 -0
  14. package/dist/charts/chart-registry.d.ts +24 -0
  15. package/dist/charts/chart-registry.d.ts.map +1 -0
  16. package/dist/charts/chart-registry.js +14 -0
  17. package/dist/charts/chart-registry.js.map +1 -0
  18. package/dist/charts/combo.d.ts +5 -0
  19. package/dist/charts/combo.d.ts.map +1 -0
  20. package/dist/charts/combo.js +54 -0
  21. package/dist/charts/combo.js.map +1 -0
  22. package/dist/charts/funnel.d.ts +5 -0
  23. package/dist/charts/funnel.d.ts.map +1 -0
  24. package/dist/charts/funnel.js +36 -0
  25. package/dist/charts/funnel.js.map +1 -0
  26. package/dist/charts/gauge.d.ts +5 -0
  27. package/dist/charts/gauge.d.ts.map +1 -0
  28. package/dist/charts/gauge.js +53 -0
  29. package/dist/charts/gauge.js.map +1 -0
  30. package/dist/charts/geo.d.ts +5 -0
  31. package/dist/charts/geo.d.ts.map +1 -0
  32. package/dist/charts/geo.js +48 -0
  33. package/dist/charts/geo.js.map +1 -0
  34. package/dist/charts/grouped-bar.d.ts +5 -0
  35. package/dist/charts/grouped-bar.d.ts.map +1 -0
  36. package/dist/charts/grouped-bar.js +37 -0
  37. package/dist/charts/grouped-bar.js.map +1 -0
  38. package/dist/charts/heatmap.d.ts +5 -0
  39. package/dist/charts/heatmap.d.ts.map +1 -0
  40. package/dist/charts/heatmap.js +31 -0
  41. package/dist/charts/heatmap.js.map +1 -0
  42. package/dist/charts/histogram.d.ts +5 -0
  43. package/dist/charts/histogram.d.ts.map +1 -0
  44. package/dist/charts/histogram.js +32 -0
  45. package/dist/charts/histogram.js.map +1 -0
  46. package/dist/charts/index.d.ts +25 -0
  47. package/dist/charts/index.d.ts.map +1 -0
  48. package/dist/charts/index.js +66 -0
  49. package/dist/charts/index.js.map +1 -0
  50. package/dist/charts/kpi.d.ts +14 -0
  51. package/dist/charts/kpi.d.ts.map +1 -0
  52. package/dist/charts/kpi.js +71 -0
  53. package/dist/charts/kpi.js.map +1 -0
  54. package/dist/charts/line.d.ts +5 -0
  55. package/dist/charts/line.d.ts.map +1 -0
  56. package/dist/charts/line.js +38 -0
  57. package/dist/charts/line.js.map +1 -0
  58. package/dist/charts/pie.d.ts +5 -0
  59. package/dist/charts/pie.d.ts.map +1 -0
  60. package/dist/charts/pie.js +25 -0
  61. package/dist/charts/pie.js.map +1 -0
  62. package/dist/charts/sankey.d.ts +10 -0
  63. package/dist/charts/sankey.d.ts.map +1 -0
  64. package/dist/charts/sankey.js +120 -0
  65. package/dist/charts/sankey.js.map +1 -0
  66. package/dist/charts/scatter.d.ts +5 -0
  67. package/dist/charts/scatter.d.ts.map +1 -0
  68. package/dist/charts/scatter.js +34 -0
  69. package/dist/charts/scatter.js.map +1 -0
  70. package/dist/charts/shared.d.ts +11 -0
  71. package/dist/charts/shared.d.ts.map +1 -0
  72. package/dist/charts/shared.js +52 -0
  73. package/dist/charts/shared.js.map +1 -0
  74. package/dist/charts/small-multiples.d.ts +5 -0
  75. package/dist/charts/small-multiples.d.ts.map +1 -0
  76. package/dist/charts/small-multiples.js +59 -0
  77. package/dist/charts/small-multiples.js.map +1 -0
  78. package/dist/charts/sparkline.d.ts +5 -0
  79. package/dist/charts/sparkline.d.ts.map +1 -0
  80. package/dist/charts/sparkline.js +41 -0
  81. package/dist/charts/sparkline.js.map +1 -0
  82. package/dist/charts/stacked-bar.d.ts +5 -0
  83. package/dist/charts/stacked-bar.d.ts.map +1 -0
  84. package/dist/charts/stacked-bar.js +34 -0
  85. package/dist/charts/stacked-bar.js.map +1 -0
  86. package/dist/charts/table.d.ts +14 -0
  87. package/dist/charts/table.d.ts.map +1 -0
  88. package/dist/charts/table.js +58 -0
  89. package/dist/charts/table.js.map +1 -0
  90. package/dist/charts/treemap.d.ts +9 -0
  91. package/dist/charts/treemap.d.ts.map +1 -0
  92. package/dist/charts/treemap.js +60 -0
  93. package/dist/charts/treemap.js.map +1 -0
  94. package/dist/charts/waterfall.d.ts +5 -0
  95. package/dist/charts/waterfall.d.ts.map +1 -0
  96. package/dist/charts/waterfall.js +36 -0
  97. package/dist/charts/waterfall.js.map +1 -0
  98. package/dist/codegen/bundle.d.ts +34 -0
  99. package/dist/codegen/bundle.d.ts.map +1 -0
  100. package/dist/codegen/bundle.js +20 -0
  101. package/dist/codegen/bundle.js.map +1 -0
  102. package/dist/codegen/html-emitter.d.ts +10 -0
  103. package/dist/codegen/html-emitter.d.ts.map +1 -0
  104. package/dist/codegen/html-emitter.js +1082 -0
  105. package/dist/codegen/html-emitter.js.map +1 -0
  106. package/dist/codegen/index.d.ts +6 -0
  107. package/dist/codegen/index.d.ts.map +1 -0
  108. package/dist/codegen/index.js +6 -0
  109. package/dist/codegen/index.js.map +1 -0
  110. package/dist/codegen/react-emitter.d.ts +42 -0
  111. package/dist/codegen/react-emitter.d.ts.map +1 -0
  112. package/dist/codegen/react-emitter.js +135 -0
  113. package/dist/codegen/react-emitter.js.map +1 -0
  114. package/dist/codegen/runtime-emitter.d.ts +2 -0
  115. package/dist/codegen/runtime-emitter.d.ts.map +1 -0
  116. package/dist/codegen/runtime-emitter.js +1807 -0
  117. package/dist/codegen/runtime-emitter.js.map +1 -0
  118. package/dist/codegen/vega-lite-emitter.d.ts +23 -0
  119. package/dist/codegen/vega-lite-emitter.d.ts.map +1 -0
  120. package/dist/codegen/vega-lite-emitter.js +92 -0
  121. package/dist/codegen/vega-lite-emitter.js.map +1 -0
  122. package/dist/compiler.d.ts +17 -0
  123. package/dist/compiler.d.ts.map +1 -0
  124. package/dist/compiler.js +106 -0
  125. package/dist/compiler.js.map +1 -0
  126. package/dist/index.d.ts +7 -0
  127. package/dist/index.d.ts.map +1 -0
  128. package/dist/index.js +9 -0
  129. package/dist/index.js.map +1 -0
  130. package/dist/ir/index.d.ts +3 -0
  131. package/dist/ir/index.d.ts.map +1 -0
  132. package/dist/ir/index.js +2 -0
  133. package/dist/ir/index.js.map +1 -0
  134. package/dist/ir/ir-nodes.d.ts +169 -0
  135. package/dist/ir/ir-nodes.d.ts.map +1 -0
  136. package/dist/ir/ir-nodes.js +2 -0
  137. package/dist/ir/ir-nodes.js.map +1 -0
  138. package/dist/ir/lowering.d.ts +9 -0
  139. package/dist/ir/lowering.d.ts.map +1 -0
  140. package/dist/ir/lowering.js +980 -0
  141. package/dist/ir/lowering.js.map +1 -0
  142. package/dist/modules/index.d.ts +4 -0
  143. package/dist/modules/index.d.ts.map +1 -0
  144. package/dist/modules/index.js +3 -0
  145. package/dist/modules/index.js.map +1 -0
  146. package/dist/modules/resolver.d.ts +21 -0
  147. package/dist/modules/resolver.d.ts.map +1 -0
  148. package/dist/modules/resolver.js +112 -0
  149. package/dist/modules/resolver.js.map +1 -0
  150. package/dist/modules/use-expander.d.ts +11 -0
  151. package/dist/modules/use-expander.d.ts.map +1 -0
  152. package/dist/modules/use-expander.js +42 -0
  153. package/dist/modules/use-expander.js.map +1 -0
  154. package/dist/themes/colorful.d.ts +3 -0
  155. package/dist/themes/colorful.d.ts.map +1 -0
  156. package/dist/themes/colorful.js +14 -0
  157. package/dist/themes/colorful.js.map +1 -0
  158. package/dist/themes/corporate.d.ts +3 -0
  159. package/dist/themes/corporate.d.ts.map +1 -0
  160. package/dist/themes/corporate.js +14 -0
  161. package/dist/themes/corporate.js.map +1 -0
  162. package/dist/themes/dark.d.ts +3 -0
  163. package/dist/themes/dark.d.ts.map +1 -0
  164. package/dist/themes/dark.js +14 -0
  165. package/dist/themes/dark.js.map +1 -0
  166. package/dist/themes/index.d.ts +11 -0
  167. package/dist/themes/index.d.ts.map +1 -0
  168. package/dist/themes/index.js +29 -0
  169. package/dist/themes/index.js.map +1 -0
  170. package/dist/themes/light.d.ts +3 -0
  171. package/dist/themes/light.d.ts.map +1 -0
  172. package/dist/themes/light.js +14 -0
  173. package/dist/themes/light.js.map +1 -0
  174. package/dist/themes/minimal.d.ts +3 -0
  175. package/dist/themes/minimal.d.ts.map +1 -0
  176. package/dist/themes/minimal.js +14 -0
  177. package/dist/themes/minimal.js.map +1 -0
  178. package/dist/themes/theme-types.d.ts +14 -0
  179. package/dist/themes/theme-types.d.ts.map +1 -0
  180. package/dist/themes/theme-types.js +2 -0
  181. package/dist/themes/theme-types.js.map +1 -0
  182. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-emitter.js","sourceRoot":"","sources":["../../src/codegen/runtime-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IAC3B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2wDR,CAAC;AACF,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ChartIR, InteractionConfig } from '../ir/ir-nodes.js';
2
+ import type { ThemeConfig } from '../themes/theme-types.js';
3
+ import type { VegaLiteSpec } from '../charts/chart-registry.js';
4
+ import { type KPISpec } from '../charts/kpi.js';
5
+ import { type TableSpec } from '../charts/table.js';
6
+ export type ChartSpec = {
7
+ kind: 'vega-lite';
8
+ chartId: string;
9
+ spec: VegaLiteSpec;
10
+ interaction?: InteractionConfig;
11
+ } | {
12
+ kind: 'kpi';
13
+ chartId: string;
14
+ spec: KPISpec;
15
+ interaction?: InteractionConfig;
16
+ } | {
17
+ kind: 'table';
18
+ chartId: string;
19
+ spec: TableSpec;
20
+ interaction?: InteractionConfig;
21
+ };
22
+ export declare function emitChartSpecs(charts: ChartIR[], theme: ThemeConfig): ChartSpec[];
23
+ //# sourceMappingURL=vega-lite-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vega-lite-emitter.d.ts","sourceRoot":"","sources":["../../src/codegen/vega-lite-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEzF,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,SAAS,EAAE,CAqCjF"}
@@ -0,0 +1,92 @@
1
+ import { emitChart } from '../charts/chart-registry.js';
2
+ import { emitKPISpec } from '../charts/kpi.js';
3
+ import { emitTableSpec } from '../charts/table.js';
4
+ export function emitChartSpecs(charts, theme) {
5
+ return charts.map((chart) => {
6
+ if (chart.chartType === 'kpi' || chart.chartType === 'metric') {
7
+ return {
8
+ kind: 'kpi',
9
+ chartId: chart.id,
10
+ spec: emitKPISpec(chart, theme),
11
+ interaction: chart.interaction,
12
+ };
13
+ }
14
+ if (chart.chartType === 'table') {
15
+ return {
16
+ kind: 'table',
17
+ chartId: chart.id,
18
+ spec: emitTableSpec(chart, theme),
19
+ interaction: chart.interaction,
20
+ };
21
+ }
22
+ let spec = emitChart(chart, theme);
23
+ if (!spec) {
24
+ throw new Error(`No emitter registered for chart type '${chart.chartType}'`);
25
+ }
26
+ // Add Vega-Lite selection params for interactive charts
27
+ if (chart.interaction) {
28
+ spec = addInteractionParams(spec, chart.interaction, chart.config.x);
29
+ }
30
+ return {
31
+ kind: 'vega-lite',
32
+ chartId: chart.id,
33
+ spec,
34
+ interaction: chart.interaction,
35
+ };
36
+ });
37
+ }
38
+ function addInteractionParams(spec, interaction, xField) {
39
+ const params = [];
40
+ // Add point selection for click-based interactions (drill_down, link_to, on_click)
41
+ if (interaction.drillDown || interaction.linkTo || interaction.onClick) {
42
+ params.push({
43
+ name: 'dql_click',
44
+ select: {
45
+ type: 'point',
46
+ on: 'click',
47
+ encodings: xField ? ['x'] : undefined,
48
+ },
49
+ });
50
+ // Add hover highlight for clickable charts
51
+ params.push({
52
+ name: 'dql_hover',
53
+ select: {
54
+ type: 'point',
55
+ on: 'pointerover',
56
+ clear: 'pointerout',
57
+ },
58
+ });
59
+ // Add conditional opacity to show hover state
60
+ if (spec.encoding) {
61
+ spec.encoding.opacity = {
62
+ condition: { param: 'dql_hover', value: 1 },
63
+ value: 0.7,
64
+ };
65
+ }
66
+ }
67
+ // Add interval selection for filter_by interactions (brush select)
68
+ if (interaction.filterBy) {
69
+ const fields = Array.isArray(interaction.filterBy)
70
+ ? interaction.filterBy
71
+ : [interaction.filterBy];
72
+ params.push({
73
+ name: 'dql_filter',
74
+ select: {
75
+ type: 'point',
76
+ fields,
77
+ },
78
+ });
79
+ // Add conditional color for filter selection
80
+ if (spec.encoding) {
81
+ spec.encoding.opacity = {
82
+ condition: { param: 'dql_filter', value: 1 },
83
+ value: 0.3,
84
+ };
85
+ }
86
+ }
87
+ if (params.length > 0) {
88
+ spec.params = params;
89
+ }
90
+ return spec;
91
+ }
92
+ //# sourceMappingURL=vega-lite-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vega-lite-emitter.js","sourceRoot":"","sources":["../../src/codegen/vega-lite-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type SemanticLayer } from '@duckcodeailabs/dql-core';
2
+ import type { CompilationOutput } from './codegen/bundle.js';
3
+ import './charts/index.js';
4
+ export interface CompileOptions {
5
+ theme?: string;
6
+ file?: string;
7
+ semanticLayer?: SemanticLayer;
8
+ vegaAssets?: 'cdn' | 'local';
9
+ vegaBasePath?: string;
10
+ }
11
+ export interface CompileResult {
12
+ dashboards: CompilationOutput[];
13
+ errors: string[];
14
+ isWorkbook: boolean;
15
+ }
16
+ export declare function compile(source: string, options?: CompileOptions): CompileResult;
17
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,aAAa,CA0GnF"}
@@ -0,0 +1,106 @@
1
+ import { parse, analyze, NodeKind } from '@duckcodeailabs/dql-core';
2
+ import { lowerProgram, lowerWorkbookProgram } from './ir/lowering.js';
3
+ import { emitChartSpecs } from './codegen/vega-lite-emitter.js';
4
+ import { emitDashboardHTML, emitWorkbookHTML } from './codegen/html-emitter.js';
5
+ import { emitRuntimeJS } from './codegen/runtime-emitter.js';
6
+ import { getTheme } from './themes/index.js';
7
+ import { ModuleResolver } from './modules/resolver.js';
8
+ import { expandUseDeclarations } from './modules/use-expander.js';
9
+ import { dirname } from 'node:path';
10
+ // Ensure chart emitters are registered
11
+ import './charts/index.js';
12
+ export function compile(source, options = {}) {
13
+ const errors = [];
14
+ // 1. Parse
15
+ const ast = parse(source, options.file);
16
+ // 2. Resolve imports (if file path is available for relative resolution)
17
+ if (options.file) {
18
+ try {
19
+ const resolver = new ModuleResolver(dirname(options.file));
20
+ const registry = resolver.resolveImports(ast);
21
+ // Expand 'use' declarations in the AST by inlining imported symbols
22
+ expandUseDeclarations(ast, registry.symbols);
23
+ }
24
+ catch (e) {
25
+ const msg = e instanceof Error ? e.message : 'Module resolution failed';
26
+ errors.push(`import: ${msg}`);
27
+ }
28
+ }
29
+ // 3. Semantic analysis
30
+ const diagnostics = analyze(ast);
31
+ for (const d of diagnostics) {
32
+ if (d.severity === 'error') {
33
+ errors.push(`${d.span.start.line}:${d.span.start.column}: ${d.message}`);
34
+ }
35
+ }
36
+ // 4. Check if this is a workbook
37
+ const hasWorkbook = ast.statements.some((s) => s.kind === NodeKind.Workbook);
38
+ const themeName = options.theme ?? 'light';
39
+ const theme = getTheme(themeName);
40
+ if (hasWorkbook) {
41
+ // Workbook mode: emit tabbed page HTML
42
+ const loweringDiagnostics = [];
43
+ const workbookIR = lowerWorkbookProgram(ast, {
44
+ semanticLayer: options.semanticLayer,
45
+ diagnostics: loweringDiagnostics,
46
+ });
47
+ for (const msg of loweringDiagnostics) {
48
+ errors.push(`lowering: ${msg}`);
49
+ }
50
+ if (workbookIR) {
51
+ const allChartSpecs = workbookIR.pages.flatMap((page) => emitChartSpecs(page.charts, theme));
52
+ const runtimeJS = emitRuntimeJS();
53
+ const html = emitWorkbookHTML(workbookIR, theme, runtimeJS, {
54
+ vegaAssets: options.vegaAssets ?? 'cdn',
55
+ vegaBasePath: options.vegaBasePath,
56
+ });
57
+ const output = {
58
+ html,
59
+ chartSpecs: allChartSpecs,
60
+ runtimeJS,
61
+ metadata: {
62
+ title: workbookIR.title,
63
+ schedule: workbookIR.schedule,
64
+ notifications: workbookIR.notifications,
65
+ alerts: workbookIR.alerts,
66
+ queries: workbookIR.pages.flatMap((p) => p.charts.map((c) => ({ id: c.id, sql: c.sql }))),
67
+ layoutDiagnostics: workbookIR.pages.flatMap((p) => p.layoutDiagnostics ?? []),
68
+ },
69
+ };
70
+ return { dashboards: [output], errors, isWorkbook: true };
71
+ }
72
+ }
73
+ // 4. Standard dashboard mode: Lower to IR
74
+ const loweringDiagnostics = [];
75
+ const dashboardIRs = lowerProgram(ast, {
76
+ semanticLayer: options.semanticLayer,
77
+ diagnostics: loweringDiagnostics,
78
+ });
79
+ for (const msg of loweringDiagnostics) {
80
+ errors.push(`lowering: ${msg}`);
81
+ }
82
+ // 5. Generate output for each dashboard
83
+ const dashboards = dashboardIRs.map((ir) => {
84
+ const chartSpecs = emitChartSpecs(ir.charts, theme);
85
+ const runtimeJS = emitRuntimeJS();
86
+ const html = emitDashboardHTML(ir, chartSpecs, theme, runtimeJS, {
87
+ vegaAssets: options.vegaAssets ?? 'cdn',
88
+ vegaBasePath: options.vegaBasePath,
89
+ });
90
+ return {
91
+ html,
92
+ chartSpecs,
93
+ runtimeJS,
94
+ metadata: {
95
+ title: ir.title,
96
+ schedule: ir.schedule,
97
+ notifications: ir.notifications,
98
+ alerts: ir.alerts,
99
+ queries: ir.charts.map((c) => ({ id: c.id, sql: c.sql })),
100
+ layoutDiagnostics: ir.layoutDiagnostics,
101
+ },
102
+ };
103
+ });
104
+ return { dashboards, errors, isWorkbook: false };
105
+ }
106
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './ir/index.js';
2
+ export * from './codegen/index.js';
3
+ export * from './themes/index.js';
4
+ export * from './charts/index.js';
5
+ export * from './modules/index.js';
6
+ export { compile, type CompileOptions, type CompileResult } from './compiler.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // @dql/compiler - DQL Compiler
2
+ // IR lowering, Vega-Lite code generation, HTML/CSS emitting
3
+ export * from './ir/index.js';
4
+ export * from './codegen/index.js';
5
+ export * from './themes/index.js';
6
+ export * from './charts/index.js';
7
+ export * from './modules/index.js';
8
+ export { compile } from './compiler.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,4DAA4D;AAE5D,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,OAAO,EAA2C,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { WorkbookIR, PageIR, ParamIR, DashboardIR, ChartIR, ChartConfig, InteractionConfig, SQLParam, ScheduleIR, NotificationIR, FilterIR, FilterOptionConfig, LayoutIR, LayoutItemIR, } from './ir-nodes.js';
2
+ export { lowerProgram, lowerWorkbookProgram } from './lowering.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,MAAM,EACN,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,UAAU,EACV,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,QAAQ,EACR,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { lowerProgram, lowerWorkbookProgram } from './lowering.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ir/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,169 @@
1
+ import type { ChartType, FilterType, ParamType } from '@duckcodeailabs/dql-core';
2
+ export interface WorkbookIR {
3
+ title: string;
4
+ pages: PageIR[];
5
+ schedule?: ScheduleIR;
6
+ notifications: NotificationIR[];
7
+ alerts: AlertIR[];
8
+ }
9
+ export interface PageIR {
10
+ title: string;
11
+ charts: ChartIR[];
12
+ filters: FilterIR[];
13
+ params: ParamIR[];
14
+ layout: LayoutIR;
15
+ variables: Record<string, unknown>;
16
+ layoutDiagnostics?: LayoutDiagnostic[];
17
+ }
18
+ export interface ParamIR {
19
+ name: string;
20
+ paramType: ParamType;
21
+ defaultValue?: unknown;
22
+ }
23
+ export interface DashboardIR {
24
+ title: string;
25
+ charts: ChartIR[];
26
+ filters: FilterIR[];
27
+ params: ParamIR[];
28
+ schedule?: ScheduleIR;
29
+ notifications: NotificationIR[];
30
+ alerts: AlertIR[];
31
+ layout: LayoutIR;
32
+ variables: Record<string, unknown>;
33
+ refreshInterval?: number;
34
+ layoutDiagnostics?: LayoutDiagnostic[];
35
+ }
36
+ export interface ChartIR {
37
+ id: string;
38
+ chartType: ChartType;
39
+ sql: string;
40
+ sqlParams: SQLParam[];
41
+ config: ChartConfig;
42
+ interaction?: InteractionConfig;
43
+ title?: string;
44
+ theme?: string;
45
+ condition?: string;
46
+ cacheTTL?: number;
47
+ connection?: string;
48
+ annotations?: AnnotationIR[];
49
+ materializeRefresh?: string;
50
+ blockType?: 'semantic' | 'custom';
51
+ drillConfig?: DrillConfigIR;
52
+ }
53
+ export interface AnnotationIR {
54
+ x?: string;
55
+ y?: number;
56
+ label: string;
57
+ color?: string;
58
+ }
59
+ export interface InteractionConfig {
60
+ onClick?: string;
61
+ drillDown?: string;
62
+ linkTo?: string;
63
+ filterBy?: string | string[];
64
+ }
65
+ export interface ChartConfig {
66
+ x?: string;
67
+ y?: string;
68
+ y2?: string;
69
+ color?: string;
70
+ facet?: string;
71
+ size?: string;
72
+ colorField?: string;
73
+ lineWidth?: number;
74
+ fillOpacity?: number;
75
+ barWidth?: number;
76
+ innerRadius?: number;
77
+ orientation?: string;
78
+ xAxisLabel?: string;
79
+ yAxisLabel?: string;
80
+ titleFontSize?: number;
81
+ showGrid?: boolean;
82
+ showLegend?: boolean;
83
+ width?: number;
84
+ height?: number;
85
+ strokeDash?: string;
86
+ metrics?: string[];
87
+ compareToPrevious?: boolean;
88
+ formatting?: string;
89
+ columns?: string[];
90
+ sortable?: boolean;
91
+ pageSize?: number;
92
+ tooltip?: string[];
93
+ formatX?: string;
94
+ formatY?: string;
95
+ colorRule?: string;
96
+ pinColumns?: string[];
97
+ rowColor?: string;
98
+ drillHierarchy?: string;
99
+ drillPath?: string;
100
+ drillMode?: 'modal' | 'replace' | 'expand';
101
+ topologyUrl?: string;
102
+ }
103
+ export interface DrillConfigLevelIR {
104
+ name: string;
105
+ dimension: string;
106
+ }
107
+ export interface DrillConfigIR {
108
+ hierarchy: string;
109
+ path?: string;
110
+ mode: 'modal' | 'replace' | 'expand';
111
+ currentLevel?: string;
112
+ rollup?: 'sum' | 'count' | 'count_distinct' | 'avg' | 'min' | 'max' | 'none';
113
+ levels?: DrillConfigLevelIR[];
114
+ }
115
+ export interface SQLParam {
116
+ name: string;
117
+ position: number;
118
+ literalValue?: unknown;
119
+ }
120
+ export interface ScheduleIR {
121
+ cron: string;
122
+ timezone?: string;
123
+ }
124
+ export interface NotificationIR {
125
+ type: 'email' | 'slack';
126
+ recipients: string[];
127
+ }
128
+ export interface AlertIR {
129
+ conditionSQL: string;
130
+ threshold?: number;
131
+ operator?: '>' | '<' | '>=' | '<=' | '==' | '!=';
132
+ message?: string;
133
+ }
134
+ export interface FilterIR {
135
+ id: string;
136
+ filterType: FilterType;
137
+ sql?: string;
138
+ sqlParams: SQLParam[];
139
+ label: string;
140
+ param: string;
141
+ defaultValue?: string | string[];
142
+ placeholder?: string;
143
+ options?: FilterOptionConfig;
144
+ }
145
+ export interface FilterOptionConfig {
146
+ format?: string;
147
+ debounce?: number;
148
+ min?: number;
149
+ max?: number;
150
+ step?: number;
151
+ width?: number;
152
+ }
153
+ export interface LayoutIR {
154
+ type: 'grid';
155
+ columns: number;
156
+ items: LayoutItemIR[];
157
+ }
158
+ export interface LayoutItemIR {
159
+ chartId: string;
160
+ gridColumn: string;
161
+ gridRow: string;
162
+ }
163
+ export interface LayoutDiagnostic {
164
+ level: 'warning' | 'error';
165
+ message: string;
166
+ row?: number;
167
+ chartId?: string;
168
+ }
169
+ //# sourceMappingURL=ir-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-nodes.d.ts","sourceRoot":"","sources":["../../src/ir/ir-nodes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ir-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir-nodes.js","sourceRoot":"","sources":["../../src/ir/ir-nodes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { type ProgramNode, type SemanticLayer } from '@duckcodeailabs/dql-core';
2
+ import type { WorkbookIR, DashboardIR } from './ir-nodes.js';
3
+ export interface LoweringOptions {
4
+ semanticLayer?: SemanticLayer;
5
+ diagnostics?: string[];
6
+ }
7
+ export declare function lowerProgram(program: ProgramNode, options?: LoweringOptions): DashboardIR[];
8
+ export declare function lowerWorkbookProgram(program: ProgramNode, options?: LoweringOptions): WorkbookIR | null;
9
+ //# sourceMappingURL=lowering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lowering.d.ts","sourceRoot":"","sources":["../../src/ir/lowering.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAchB,KAAK,aAAa,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,UAAU,EAGV,WAAW,EAcZ,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,EAAE,CAmD/F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,eAAoB,GAAG,UAAU,GAAG,IAAI,CAO3G"}