@duckcodeailabs/dql-core 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 (74) hide show
  1. package/LICENSE +123 -0
  2. package/dist/ast/index.d.ts +4 -0
  3. package/dist/ast/index.d.ts.map +1 -0
  4. package/dist/ast/index.js +4 -0
  5. package/dist/ast/index.js.map +1 -0
  6. package/dist/ast/nodes.d.ts +205 -0
  7. package/dist/ast/nodes.d.ts.map +1 -0
  8. package/dist/ast/nodes.js +33 -0
  9. package/dist/ast/nodes.js.map +1 -0
  10. package/dist/ast/printer.d.ts +3 -0
  11. package/dist/ast/printer.d.ts.map +1 -0
  12. package/dist/ast/printer.js +157 -0
  13. package/dist/ast/printer.js.map +1 -0
  14. package/dist/ast/visitor.d.ts +45 -0
  15. package/dist/ast/visitor.d.ts.map +1 -0
  16. package/dist/ast/visitor.js +155 -0
  17. package/dist/ast/visitor.js.map +1 -0
  18. package/dist/errors/diagnostic.d.ts +23 -0
  19. package/dist/errors/diagnostic.d.ts.map +1 -0
  20. package/dist/errors/diagnostic.js +13 -0
  21. package/dist/errors/diagnostic.js.map +1 -0
  22. package/dist/errors/index.d.ts +3 -0
  23. package/dist/errors/index.d.ts.map +1 -0
  24. package/dist/errors/index.js +3 -0
  25. package/dist/errors/index.js.map +1 -0
  26. package/dist/errors/reporter.d.ts +22 -0
  27. package/dist/errors/reporter.d.ts.map +1 -0
  28. package/dist/errors/reporter.js +64 -0
  29. package/dist/errors/reporter.js.map +1 -0
  30. package/dist/formatter/formatter.d.ts +8 -0
  31. package/dist/formatter/formatter.d.ts.map +1 -0
  32. package/dist/formatter/formatter.js +243 -0
  33. package/dist/formatter/formatter.js.map +1 -0
  34. package/dist/formatter/index.d.ts +2 -0
  35. package/dist/formatter/index.d.ts.map +1 -0
  36. package/dist/formatter/index.js +2 -0
  37. package/dist/formatter/index.js.map +1 -0
  38. package/dist/index.d.ts +7 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +9 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/lexer/index.d.ts +3 -0
  43. package/dist/lexer/index.d.ts.map +1 -0
  44. package/dist/lexer/index.js +3 -0
  45. package/dist/lexer/index.js.map +1 -0
  46. package/dist/lexer/lexer.d.ts +43 -0
  47. package/dist/lexer/lexer.d.ts.map +1 -0
  48. package/dist/lexer/lexer.js +346 -0
  49. package/dist/lexer/lexer.js.map +1 -0
  50. package/dist/lexer/token.d.ts +72 -0
  51. package/dist/lexer/token.d.ts.map +1 -0
  52. package/dist/lexer/token.js +170 -0
  53. package/dist/lexer/token.js.map +1 -0
  54. package/dist/parser/index.d.ts +2 -0
  55. package/dist/parser/index.d.ts.map +1 -0
  56. package/dist/parser/index.js +2 -0
  57. package/dist/parser/index.js.map +1 -0
  58. package/dist/parser/parser.d.ts +50 -0
  59. package/dist/parser/parser.d.ts.map +1 -0
  60. package/dist/parser/parser.js +1024 -0
  61. package/dist/parser/parser.js.map +1 -0
  62. package/dist/semantic/analyzer.d.ts +27 -0
  63. package/dist/semantic/analyzer.d.ts.map +1 -0
  64. package/dist/semantic/analyzer.js +580 -0
  65. package/dist/semantic/analyzer.js.map +1 -0
  66. package/dist/semantic/index.d.ts +4 -0
  67. package/dist/semantic/index.d.ts.map +1 -0
  68. package/dist/semantic/index.js +3 -0
  69. package/dist/semantic/index.js.map +1 -0
  70. package/dist/semantic/semantic-layer.d.ts +118 -0
  71. package/dist/semantic/semantic-layer.d.ts.map +1 -0
  72. package/dist/semantic/semantic-layer.js +264 -0
  73. package/dist/semantic/semantic-layer.js.map +1 -0
  74. package/package.json +49 -0
@@ -0,0 +1,170 @@
1
+ export var TokenType;
2
+ (function (TokenType) {
3
+ // Literals
4
+ TokenType["StringLiteral"] = "StringLiteral";
5
+ TokenType["NumberLiteral"] = "NumberLiteral";
6
+ TokenType["BooleanLiteral"] = "BooleanLiteral";
7
+ // Identifiers & Keywords
8
+ TokenType["Identifier"] = "Identifier";
9
+ TokenType["DashboardKeyword"] = "DashboardKeyword";
10
+ TokenType["WorkbookKeyword"] = "WorkbookKeyword";
11
+ TokenType["PageKeyword"] = "PageKeyword";
12
+ TokenType["LetKeyword"] = "LetKeyword";
13
+ TokenType["ParamKeyword"] = "ParamKeyword";
14
+ TokenType["ChartKeyword"] = "ChartKeyword";
15
+ TokenType["FilterKeyword"] = "FilterKeyword";
16
+ TokenType["IntervalKeyword"] = "IntervalKeyword";
17
+ TokenType["ImportKeyword"] = "ImportKeyword";
18
+ TokenType["FromKeyword"] = "FromKeyword";
19
+ TokenType["UseKeyword"] = "UseKeyword";
20
+ TokenType["LayoutKeyword"] = "LayoutKeyword";
21
+ TokenType["RowKeyword"] = "RowKeyword";
22
+ TokenType["BlockKeyword"] = "BlockKeyword";
23
+ TokenType["DomainKeyword"] = "DomainKeyword";
24
+ TokenType["TypeKeyword"] = "TypeKeyword";
25
+ TokenType["DescriptionKeyword"] = "DescriptionKeyword";
26
+ TokenType["TagsKeyword"] = "TagsKeyword";
27
+ TokenType["OwnerKeyword"] = "OwnerKeyword";
28
+ TokenType["QueryKeyword"] = "QueryKeyword";
29
+ TokenType["VisualizationKeyword"] = "VisualizationKeyword";
30
+ TokenType["TestsKeyword"] = "TestsKeyword";
31
+ TokenType["ParamsKeyword"] = "ParamsKeyword";
32
+ TokenType["AssertKeyword"] = "AssertKeyword";
33
+ TokenType["VarKeyword"] = "VarKeyword";
34
+ TokenType["DefaultKeyword"] = "DefaultKeyword";
35
+ TokenType["MetricKeyword"] = "MetricKeyword";
36
+ TokenType["ColonToken"] = "ColonToken";
37
+ TokenType["TripleQuoteString"] = "TripleQuoteString";
38
+ TokenType["GreaterThan"] = "GreaterThan";
39
+ TokenType["LessThan"] = "LessThan";
40
+ TokenType["GreaterThanOrEqual"] = "GreaterThanOrEqual";
41
+ TokenType["LessThanOrEqual"] = "LessThanOrEqual";
42
+ TokenType["DoubleEquals"] = "DoubleEquals";
43
+ TokenType["NotEquals"] = "NotEquals";
44
+ TokenType["InKeyword"] = "InKeyword";
45
+ // SQL (opaque fragment captured by parser)
46
+ TokenType["SQLFragment"] = "SQLFragment";
47
+ // Decorators
48
+ TokenType["AtSign"] = "AtSign";
49
+ // Punctuation
50
+ TokenType["LeftParen"] = "LeftParen";
51
+ TokenType["RightParen"] = "RightParen";
52
+ TokenType["LeftBrace"] = "LeftBrace";
53
+ TokenType["RightBrace"] = "RightBrace";
54
+ TokenType["LeftBracket"] = "LeftBracket";
55
+ TokenType["RightBracket"] = "RightBracket";
56
+ TokenType["Comma"] = "Comma";
57
+ TokenType["Dot"] = "Dot";
58
+ TokenType["Equals"] = "Equals";
59
+ TokenType["Plus"] = "Plus";
60
+ TokenType["Minus"] = "Minus";
61
+ TokenType["Star"] = "Star";
62
+ // Special
63
+ TokenType["Comment"] = "Comment";
64
+ TokenType["Newline"] = "Newline";
65
+ TokenType["EOF"] = "EOF";
66
+ })(TokenType || (TokenType = {}));
67
+ const KEYWORDS = {
68
+ dashboard: TokenType.DashboardKeyword,
69
+ workbook: TokenType.WorkbookKeyword,
70
+ page: TokenType.PageKeyword,
71
+ let: TokenType.LetKeyword,
72
+ param: TokenType.ParamKeyword,
73
+ chart: TokenType.ChartKeyword,
74
+ filter: TokenType.FilterKeyword,
75
+ true: TokenType.BooleanLiteral,
76
+ false: TokenType.BooleanLiteral,
77
+ INTERVAL: TokenType.IntervalKeyword,
78
+ import: TokenType.ImportKeyword,
79
+ from: TokenType.FromKeyword,
80
+ use: TokenType.UseKeyword,
81
+ layout: TokenType.LayoutKeyword,
82
+ row: TokenType.RowKeyword,
83
+ block: TokenType.BlockKeyword,
84
+ domain: TokenType.DomainKeyword,
85
+ type: TokenType.TypeKeyword,
86
+ description: TokenType.DescriptionKeyword,
87
+ tags: TokenType.TagsKeyword,
88
+ owner: TokenType.OwnerKeyword,
89
+ query: TokenType.QueryKeyword,
90
+ visualization: TokenType.VisualizationKeyword,
91
+ tests: TokenType.TestsKeyword,
92
+ params: TokenType.ParamsKeyword,
93
+ assert: TokenType.AssertKeyword,
94
+ var: TokenType.VarKeyword,
95
+ default: TokenType.DefaultKeyword,
96
+ IN: TokenType.InKeyword,
97
+ metric: TokenType.MetricKeyword,
98
+ };
99
+ export function lookupKeyword(identifier) {
100
+ return KEYWORDS[identifier] ?? TokenType.Identifier;
101
+ }
102
+ export const CHART_TYPES = new Set([
103
+ 'line',
104
+ 'bar',
105
+ 'kpi',
106
+ 'pie',
107
+ 'donut',
108
+ 'scatter',
109
+ 'area',
110
+ 'stacked-area',
111
+ 'stacked_area',
112
+ 'heatmap',
113
+ 'table',
114
+ 'metric',
115
+ 'stacked-bar',
116
+ 'stacked_bar',
117
+ 'grouped-bar',
118
+ 'grouped_bar',
119
+ 'combo',
120
+ 'histogram',
121
+ 'funnel',
122
+ 'treemap',
123
+ 'tree-map',
124
+ 'sankey',
125
+ 'flow',
126
+ 'sparkline',
127
+ 'spark-line',
128
+ 'spark',
129
+ 'small_multiples',
130
+ 'small-multiples',
131
+ 'small_multiple',
132
+ 'small-multiple',
133
+ 'gauge',
134
+ 'waterfall',
135
+ 'boxplot',
136
+ 'geo',
137
+ 'forecast',
138
+ ]);
139
+ export const CHART_TYPE_ALIASES = {
140
+ 'grouped-bar': 'grouped_bar',
141
+ grouped_bar: 'grouped_bar',
142
+ 'stacked-bar': 'stacked_bar',
143
+ stacked_bar: 'stacked_bar',
144
+ 'stacked-area': 'area',
145
+ stacked_area: 'area',
146
+ donut: 'pie',
147
+ forecast: 'line',
148
+ 'tree-map': 'treemap',
149
+ flow: 'sankey',
150
+ 'spark-line': 'sparkline',
151
+ spark: 'sparkline',
152
+ 'small-multiples': 'small_multiples',
153
+ small_multiple: 'small_multiples',
154
+ 'small-multiple': 'small_multiples',
155
+ };
156
+ export function normalizeChartType(chartType) {
157
+ return CHART_TYPE_ALIASES[chartType] ?? chartType;
158
+ }
159
+ export const FILTER_TYPES = new Set([
160
+ 'dropdown',
161
+ 'date_range',
162
+ 'text',
163
+ 'multi_select',
164
+ 'range',
165
+ ]);
166
+ export const SQL_START_KEYWORDS = new Set([
167
+ 'SELECT',
168
+ 'WITH',
169
+ ]);
170
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/lexer/token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { Parser, parse } from './parser.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Parser, parse } from './parser.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { type ProgramNode } from '../ast/nodes.js';
2
+ export declare class Parser {
3
+ private tokens;
4
+ private pos;
5
+ private source;
6
+ private file;
7
+ private reporter;
8
+ constructor(source: string, file?: string);
9
+ parse(): ProgramNode;
10
+ private parseStatement;
11
+ private parseFilterCall;
12
+ private parseDashboard;
13
+ private parseChartCall;
14
+ private parseSQLQuery;
15
+ private extractInterpolations;
16
+ private parseNamedArg;
17
+ private isKeywordUsableAsArgName;
18
+ private parseVariableDecl;
19
+ private parseDecoratorList;
20
+ private parseDecorator;
21
+ private parseExpression;
22
+ private parsePrimary;
23
+ private parseArrayLiteral;
24
+ private parseFunctionCall;
25
+ private current;
26
+ private previous;
27
+ private check;
28
+ private advance;
29
+ private expect;
30
+ private isAtEnd;
31
+ private error;
32
+ private currentSpan;
33
+ private previousSpan;
34
+ private makeSpan;
35
+ private parseBlockDecl;
36
+ private parseBlockParams;
37
+ private parseBlockVisualization;
38
+ private parseBlockTests;
39
+ private isBlockFieldKeyword;
40
+ private parseWorkbook;
41
+ private parsePage;
42
+ private parseParamDecl;
43
+ private parseImportDecl;
44
+ private parseUseDecl;
45
+ private parseLayoutBlock;
46
+ private parseLayoutRow;
47
+ private synchronize;
48
+ }
49
+ export declare function parse(source: string, file?: string): ProgramNode;
50
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser/parser.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,WAAW,EA4BjB,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IASzC,KAAK,IAAI,WAAW;IA8BpB,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,cAAc;IA6DtB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,qBAAqB;IAkB7B,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,YAAY;IAwFpB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,MAAM;IAkBd,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,cAAc;IAwHtB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,uBAAuB;IAoC/B,OAAO,CAAC,eAAe;IAwEvB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,SAAS;IA6DjB,OAAO,CAAC,cAAc;IAwCtB,OAAO,CAAC,eAAe;IA8BvB,OAAO,CAAC,YAAY;IAoBpB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,cAAc;IAkDtB,OAAO,CAAC,WAAW;CAkBpB;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAGhE"}