@report-designer/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 (205) hide show
  1. package/dist/aggregate-engine/aggregate-runtime.d.ts +14 -0
  2. package/dist/aggregate-engine/aggregate-runtime.d.ts.map +1 -0
  3. package/dist/aggregate-engine/aggregate-runtime.js +98 -0
  4. package/dist/aggregate-engine/aggregate-runtime.js.map +1 -0
  5. package/dist/aggregate-engine/aggregate-types.d.ts +14 -0
  6. package/dist/aggregate-engine/aggregate-types.d.ts.map +1 -0
  7. package/dist/aggregate-engine/aggregate-types.js +2 -0
  8. package/dist/aggregate-engine/aggregate-types.js.map +1 -0
  9. package/dist/aggregate-engine/index.d.ts +3 -0
  10. package/dist/aggregate-engine/index.d.ts.map +1 -0
  11. package/dist/aggregate-engine/index.js +3 -0
  12. package/dist/aggregate-engine/index.js.map +1 -0
  13. package/dist/band-planner/band-plan.d.ts +46 -0
  14. package/dist/band-planner/band-plan.d.ts.map +1 -0
  15. package/dist/band-planner/band-plan.js +2 -0
  16. package/dist/band-planner/band-plan.js.map +1 -0
  17. package/dist/band-planner/build-band-plan.d.ts +4 -0
  18. package/dist/band-planner/build-band-plan.d.ts.map +1 -0
  19. package/dist/band-planner/build-band-plan.js +84 -0
  20. package/dist/band-planner/build-band-plan.js.map +1 -0
  21. package/dist/band-planner/execute-band-plan.d.ts +8 -0
  22. package/dist/band-planner/execute-band-plan.d.ts.map +1 -0
  23. package/dist/band-planner/execute-band-plan.js +280 -0
  24. package/dist/band-planner/execute-band-plan.js.map +1 -0
  25. package/dist/band-planner/index.d.ts +4 -0
  26. package/dist/band-planner/index.d.ts.map +1 -0
  27. package/dist/band-planner/index.js +4 -0
  28. package/dist/band-planner/index.js.map +1 -0
  29. package/dist/chart/chart-capabilities.d.ts +40 -0
  30. package/dist/chart/chart-capabilities.d.ts.map +1 -0
  31. package/dist/chart/chart-capabilities.js +62 -0
  32. package/dist/chart/chart-capabilities.js.map +1 -0
  33. package/dist/chart/index.d.ts +2 -0
  34. package/dist/chart/index.d.ts.map +1 -0
  35. package/dist/chart/index.js +2 -0
  36. package/dist/chart/index.js.map +1 -0
  37. package/dist/command-engine/index.d.ts +49 -0
  38. package/dist/command-engine/index.d.ts.map +1 -0
  39. package/dist/command-engine/index.js +537 -0
  40. package/dist/command-engine/index.js.map +1 -0
  41. package/dist/conditional-format/index.d.ts +17 -0
  42. package/dist/conditional-format/index.d.ts.map +1 -0
  43. package/dist/conditional-format/index.js +171 -0
  44. package/dist/conditional-format/index.js.map +1 -0
  45. package/dist/data-dictionary/index.d.ts +3 -0
  46. package/dist/data-dictionary/index.d.ts.map +1 -0
  47. package/dist/data-dictionary/index.js +3 -0
  48. package/dist/data-dictionary/index.js.map +1 -0
  49. package/dist/data-dictionary/json-dictionary.d.ts +6 -0
  50. package/dist/data-dictionary/json-dictionary.d.ts.map +1 -0
  51. package/dist/data-dictionary/json-dictionary.js +195 -0
  52. package/dist/data-dictionary/json-dictionary.js.map +1 -0
  53. package/dist/data-dictionary/json-path.d.ts +9 -0
  54. package/dist/data-dictionary/json-path.d.ts.map +1 -0
  55. package/dist/data-dictionary/json-path.js +34 -0
  56. package/dist/data-dictionary/json-path.js.map +1 -0
  57. package/dist/event-engine/event-component-handles.d.ts +84 -0
  58. package/dist/event-engine/event-component-handles.d.ts.map +1 -0
  59. package/dist/event-engine/event-component-handles.js +276 -0
  60. package/dist/event-engine/event-component-handles.js.map +1 -0
  61. package/dist/event-engine/event-context.d.ts +23 -0
  62. package/dist/event-engine/event-context.d.ts.map +1 -0
  63. package/dist/event-engine/event-context.js +184 -0
  64. package/dist/event-engine/event-context.js.map +1 -0
  65. package/dist/event-engine/event-editor-contract.d.ts +39 -0
  66. package/dist/event-engine/event-editor-contract.d.ts.map +1 -0
  67. package/dist/event-engine/event-editor-contract.js +442 -0
  68. package/dist/event-engine/event-editor-contract.js.map +1 -0
  69. package/dist/event-engine/event-editor-data-contract.d.ts +10 -0
  70. package/dist/event-engine/event-editor-data-contract.d.ts.map +1 -0
  71. package/dist/event-engine/event-editor-data-contract.js +85 -0
  72. package/dist/event-engine/event-editor-data-contract.js.map +1 -0
  73. package/dist/event-engine/event-log.d.ts +3 -0
  74. package/dist/event-engine/event-log.d.ts.map +1 -0
  75. package/dist/event-engine/event-log.js +37 -0
  76. package/dist/event-engine/event-log.js.map +1 -0
  77. package/dist/event-engine/event-runner.d.ts +7 -0
  78. package/dist/event-engine/event-runner.d.ts.map +1 -0
  79. package/dist/event-engine/event-runner.js +265 -0
  80. package/dist/event-engine/event-runner.js.map +1 -0
  81. package/dist/event-engine/event-template.d.ts +14 -0
  82. package/dist/event-engine/event-template.d.ts.map +1 -0
  83. package/dist/event-engine/event-template.js +183 -0
  84. package/dist/event-engine/event-template.js.map +1 -0
  85. package/dist/event-engine/index.d.ts +9 -0
  86. package/dist/event-engine/index.d.ts.map +1 -0
  87. package/dist/event-engine/index.js +9 -0
  88. package/dist/event-engine/index.js.map +1 -0
  89. package/dist/event-engine/types.d.ts +129 -0
  90. package/dist/event-engine/types.d.ts.map +1 -0
  91. package/dist/event-engine/types.js +2 -0
  92. package/dist/event-engine/types.js.map +1 -0
  93. package/dist/expression-engine/ast.d.ts +35 -0
  94. package/dist/expression-engine/ast.d.ts.map +1 -0
  95. package/dist/expression-engine/ast.js +9 -0
  96. package/dist/expression-engine/ast.js.map +1 -0
  97. package/dist/expression-engine/chinese-money.d.ts +2 -0
  98. package/dist/expression-engine/chinese-money.d.ts.map +1 -0
  99. package/dist/expression-engine/chinese-money.js +90 -0
  100. package/dist/expression-engine/chinese-money.js.map +1 -0
  101. package/dist/expression-engine/evaluator.d.ts +26 -0
  102. package/dist/expression-engine/evaluator.d.ts.map +1 -0
  103. package/dist/expression-engine/evaluator.js +406 -0
  104. package/dist/expression-engine/evaluator.js.map +1 -0
  105. package/dist/expression-engine/index.d.ts +7 -0
  106. package/dist/expression-engine/index.d.ts.map +1 -0
  107. package/dist/expression-engine/index.js +5 -0
  108. package/dist/expression-engine/index.js.map +1 -0
  109. package/dist/expression-engine/lexer.d.ts +33 -0
  110. package/dist/expression-engine/lexer.d.ts.map +1 -0
  111. package/dist/expression-engine/lexer.js +169 -0
  112. package/dist/expression-engine/lexer.js.map +1 -0
  113. package/dist/expression-engine/parser.d.ts +8 -0
  114. package/dist/expression-engine/parser.d.ts.map +1 -0
  115. package/dist/expression-engine/parser.js +223 -0
  116. package/dist/expression-engine/parser.js.map +1 -0
  117. package/dist/expression-engine/report-functions.d.ts +3 -0
  118. package/dist/expression-engine/report-functions.d.ts.map +1 -0
  119. package/dist/expression-engine/report-functions.js +41 -0
  120. package/dist/expression-engine/report-functions.js.map +1 -0
  121. package/dist/fonts/index.d.ts +14 -0
  122. package/dist/fonts/index.d.ts.map +1 -0
  123. package/dist/fonts/index.js +73 -0
  124. package/dist/fonts/index.js.map +1 -0
  125. package/dist/index.d.ts +19 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +19 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/layout-engine/index.d.ts +3 -0
  130. package/dist/layout-engine/index.d.ts.map +1 -0
  131. package/dist/layout-engine/index.js +3 -0
  132. package/dist/layout-engine/index.js.map +1 -0
  133. package/dist/layout-engine/layout-band.d.ts +40 -0
  134. package/dist/layout-engine/layout-band.d.ts.map +1 -0
  135. package/dist/layout-engine/layout-band.js +1243 -0
  136. package/dist/layout-engine/layout-band.js.map +1 -0
  137. package/dist/layout-engine/measure.d.ts +10 -0
  138. package/dist/layout-engine/measure.d.ts.map +1 -0
  139. package/dist/layout-engine/measure.js +37 -0
  140. package/dist/layout-engine/measure.js.map +1 -0
  141. package/dist/pagination/index.d.ts +38 -0
  142. package/dist/pagination/index.d.ts.map +1 -0
  143. package/dist/pagination/index.js +114 -0
  144. package/dist/pagination/index.js.map +1 -0
  145. package/dist/pagination/page-number-pass.d.ts +3 -0
  146. package/dist/pagination/page-number-pass.d.ts.map +1 -0
  147. package/dist/pagination/page-number-pass.js +18 -0
  148. package/dist/pagination/page-number-pass.js.map +1 -0
  149. package/dist/pagination/paginate.d.ts +24 -0
  150. package/dist/pagination/paginate.d.ts.map +1 -0
  151. package/dist/pagination/paginate.js +904 -0
  152. package/dist/pagination/paginate.js.map +1 -0
  153. package/dist/render-document/index.d.ts +2 -0
  154. package/dist/render-document/index.d.ts.map +1 -0
  155. package/dist/render-document/index.js +2 -0
  156. package/dist/render-document/index.js.map +1 -0
  157. package/dist/render-document/types.d.ts +159 -0
  158. package/dist/render-document/types.d.ts.map +1 -0
  159. package/dist/render-document/types.js +2 -0
  160. package/dist/render-document/types.js.map +1 -0
  161. package/dist/render-engine/index.d.ts +65 -0
  162. package/dist/render-engine/index.d.ts.map +1 -0
  163. package/dist/render-engine/index.js +188 -0
  164. package/dist/render-engine/index.js.map +1 -0
  165. package/dist/rich-text/index.d.ts +2 -0
  166. package/dist/rich-text/index.d.ts.map +1 -0
  167. package/dist/rich-text/index.js +84 -0
  168. package/dist/rich-text/index.js.map +1 -0
  169. package/dist/table/table-structure.d.ts +10 -0
  170. package/dist/table/table-structure.d.ts.map +1 -0
  171. package/dist/table/table-structure.js +196 -0
  172. package/dist/table/table-structure.js.map +1 -0
  173. package/dist/template-model/index.d.ts +5 -0
  174. package/dist/template-model/index.d.ts.map +1 -0
  175. package/dist/template-model/index.js +5 -0
  176. package/dist/template-model/index.js.map +1 -0
  177. package/dist/template-model/normalize-template.d.ts +3 -0
  178. package/dist/template-model/normalize-template.d.ts.map +1 -0
  179. package/dist/template-model/normalize-template.js +167 -0
  180. package/dist/template-model/normalize-template.js.map +1 -0
  181. package/dist/template-model/schema.d.ts +10 -0
  182. package/dist/template-model/schema.d.ts.map +1 -0
  183. package/dist/template-model/schema.js +134 -0
  184. package/dist/template-model/schema.js.map +1 -0
  185. package/dist/template-model/template.d.ts +5 -0
  186. package/dist/template-model/template.d.ts.map +1 -0
  187. package/dist/template-model/template.js +194 -0
  188. package/dist/template-model/template.js.map +1 -0
  189. package/dist/template-model/types.d.ts +641 -0
  190. package/dist/template-model/types.d.ts.map +1 -0
  191. package/dist/template-model/types.js +36 -0
  192. package/dist/template-model/types.js.map +1 -0
  193. package/dist/text-format/index.d.ts +5 -0
  194. package/dist/text-format/index.d.ts.map +1 -0
  195. package/dist/text-format/index.js +311 -0
  196. package/dist/text-format/index.js.map +1 -0
  197. package/dist/text-style/index.d.ts +3 -0
  198. package/dist/text-style/index.d.ts.map +1 -0
  199. package/dist/text-style/index.js +2 -0
  200. package/dist/text-style/index.js.map +1 -0
  201. package/dist/text-style/resolve-text-style.d.ts +58 -0
  202. package/dist/text-style/resolve-text-style.d.ts.map +1 -0
  203. package/dist/text-style/resolve-text-style.js +155 -0
  204. package/dist/text-style/resolve-text-style.js.map +1 -0
  205. package/package.json +38 -0
@@ -0,0 +1,33 @@
1
+ export declare enum TokenType {
2
+ FIELD_REF = 0,
3
+ STRING = 1,
4
+ NUMBER = 2,
5
+ BOOLEAN = 3,
6
+ NULL = 4,
7
+ IDENTIFIER = 5,
8
+ PLUS = 6,
9
+ MINUS = 7,
10
+ MULTIPLY = 8,
11
+ DIVIDE = 9,
12
+ MODULO = 10,
13
+ EQUALS = 11,
14
+ NOT_EQUALS = 12,
15
+ GT = 13,
16
+ LT = 14,
17
+ GTE = 15,
18
+ LTE = 16,
19
+ AND = 17,
20
+ OR = 18,
21
+ NOT = 19,
22
+ LPAREN = 20,
23
+ RPAREN = 21,
24
+ COMMA = 22,
25
+ EOF = 23
26
+ }
27
+ export interface Token {
28
+ type: TokenType;
29
+ value: string;
30
+ position: number;
31
+ }
32
+ export declare function tokenize(input: string): Token[];
33
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/expression-engine/lexer.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,SAAS,IAAA;IACT,MAAM,IAAA;IACN,MAAM,IAAA;IACN,OAAO,IAAA;IACP,IAAI,IAAA;IACJ,UAAU,IAAA;IACV,IAAI,IAAA;IACJ,KAAK,IAAA;IACL,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,MAAM,KAAA;IACN,MAAM,KAAA;IACN,UAAU,KAAA;IACV,EAAE,KAAA;IACF,EAAE,KAAA;IACF,GAAG,KAAA;IACH,GAAG,KAAA;IACH,GAAG,KAAA;IACH,EAAE,KAAA;IACF,GAAG,KAAA;IACH,MAAM,KAAA;IACN,MAAM,KAAA;IACN,KAAK,KAAA;IACL,GAAG,KAAA;CACJ;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAsBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAgI/C"}
@@ -0,0 +1,169 @@
1
+ export var TokenType;
2
+ (function (TokenType) {
3
+ TokenType[TokenType["FIELD_REF"] = 0] = "FIELD_REF";
4
+ TokenType[TokenType["STRING"] = 1] = "STRING";
5
+ TokenType[TokenType["NUMBER"] = 2] = "NUMBER";
6
+ TokenType[TokenType["BOOLEAN"] = 3] = "BOOLEAN";
7
+ TokenType[TokenType["NULL"] = 4] = "NULL";
8
+ TokenType[TokenType["IDENTIFIER"] = 5] = "IDENTIFIER";
9
+ TokenType[TokenType["PLUS"] = 6] = "PLUS";
10
+ TokenType[TokenType["MINUS"] = 7] = "MINUS";
11
+ TokenType[TokenType["MULTIPLY"] = 8] = "MULTIPLY";
12
+ TokenType[TokenType["DIVIDE"] = 9] = "DIVIDE";
13
+ TokenType[TokenType["MODULO"] = 10] = "MODULO";
14
+ TokenType[TokenType["EQUALS"] = 11] = "EQUALS";
15
+ TokenType[TokenType["NOT_EQUALS"] = 12] = "NOT_EQUALS";
16
+ TokenType[TokenType["GT"] = 13] = "GT";
17
+ TokenType[TokenType["LT"] = 14] = "LT";
18
+ TokenType[TokenType["GTE"] = 15] = "GTE";
19
+ TokenType[TokenType["LTE"] = 16] = "LTE";
20
+ TokenType[TokenType["AND"] = 17] = "AND";
21
+ TokenType[TokenType["OR"] = 18] = "OR";
22
+ TokenType[TokenType["NOT"] = 19] = "NOT";
23
+ TokenType[TokenType["LPAREN"] = 20] = "LPAREN";
24
+ TokenType[TokenType["RPAREN"] = 21] = "RPAREN";
25
+ TokenType[TokenType["COMMA"] = 22] = "COMMA";
26
+ TokenType[TokenType["EOF"] = 23] = "EOF";
27
+ })(TokenType || (TokenType = {}));
28
+ const KEYWORDS = {
29
+ 'AND': TokenType.AND,
30
+ 'OR': TokenType.OR,
31
+ 'NOT': TokenType.NOT,
32
+ 'TRUE': TokenType.BOOLEAN,
33
+ 'FALSE': TokenType.BOOLEAN,
34
+ 'NULL': TokenType.NULL,
35
+ };
36
+ const OPERATORS = {
37
+ '+': TokenType.PLUS,
38
+ '-': TokenType.MINUS,
39
+ '*': TokenType.MULTIPLY,
40
+ '/': TokenType.DIVIDE,
41
+ '%': TokenType.MODULO,
42
+ '(': TokenType.LPAREN,
43
+ ')': TokenType.RPAREN,
44
+ ',': TokenType.COMMA,
45
+ };
46
+ export function tokenize(input) {
47
+ const tokens = [];
48
+ let pos = 0;
49
+ while (pos < input.length) {
50
+ // 跳过空白
51
+ if (/\s/.test(input[pos])) {
52
+ pos++;
53
+ continue;
54
+ }
55
+ // 字段引用 {DataSource.Field}
56
+ if (input[pos] === '{') {
57
+ const start = pos;
58
+ pos++;
59
+ const end = input.indexOf('}', pos);
60
+ if (end === -1) {
61
+ throw new Error(`Unclosed field reference at position ${start}`);
62
+ }
63
+ const fieldPath = input.slice(pos, end).trim();
64
+ tokens.push({ type: TokenType.FIELD_REF, value: fieldPath, position: start });
65
+ pos = end + 1;
66
+ continue;
67
+ }
68
+ // 字符串 "..."
69
+ if (input[pos] === '"') {
70
+ const start = pos;
71
+ pos++;
72
+ let value = '';
73
+ while (pos < input.length && input[pos] !== '"') {
74
+ if (input[pos] === '\\' && pos + 1 < input.length) {
75
+ pos++;
76
+ value += input[pos];
77
+ }
78
+ else {
79
+ value += input[pos];
80
+ }
81
+ pos++;
82
+ }
83
+ if (pos >= input.length) {
84
+ throw new Error(`Unclosed string at position ${start}`);
85
+ }
86
+ tokens.push({ type: TokenType.STRING, value, position: start });
87
+ pos++;
88
+ continue;
89
+ }
90
+ // 数字
91
+ if (/[0-9]/.test(input[pos]) || (input[pos] === '.' && pos + 1 < input.length && /[0-9]/.test(input[pos + 1]))) {
92
+ const start = pos;
93
+ let numStr = '';
94
+ while (pos < input.length && /[0-9.]/.test(input[pos])) {
95
+ numStr += input[pos];
96
+ pos++;
97
+ }
98
+ tokens.push({ type: TokenType.NUMBER, value: numStr, position: start });
99
+ continue;
100
+ }
101
+ // 双字符运算符
102
+ if (pos + 1 < input.length) {
103
+ const twoChar = input.slice(pos, pos + 2);
104
+ if (twoChar === '!=') {
105
+ tokens.push({ type: TokenType.NOT_EQUALS, value: '!=', position: pos });
106
+ pos += 2;
107
+ continue;
108
+ }
109
+ if (twoChar === '>=') {
110
+ tokens.push({ type: TokenType.GTE, value: '>=', position: pos });
111
+ pos += 2;
112
+ continue;
113
+ }
114
+ if (twoChar === '<=') {
115
+ tokens.push({ type: TokenType.LTE, value: '<=', position: pos });
116
+ pos += 2;
117
+ continue;
118
+ }
119
+ }
120
+ // 单字符运算符
121
+ if (input[pos] === '=') {
122
+ tokens.push({ type: TokenType.EQUALS, value: '=', position: pos });
123
+ pos++;
124
+ continue;
125
+ }
126
+ if (input[pos] === '>') {
127
+ tokens.push({ type: TokenType.GT, value: '>', position: pos });
128
+ pos++;
129
+ continue;
130
+ }
131
+ if (input[pos] === '<') {
132
+ tokens.push({ type: TokenType.LT, value: '<', position: pos });
133
+ pos++;
134
+ continue;
135
+ }
136
+ if (OPERATORS[input[pos]]) {
137
+ tokens.push({ type: OPERATORS[input[pos]], value: input[pos], position: pos });
138
+ pos++;
139
+ continue;
140
+ }
141
+ // 标识符 / 关键字
142
+ if (/[a-zA-Z_一-鿿]/.test(input[pos])) {
143
+ const start = pos;
144
+ let ident = '';
145
+ while (pos < input.length && /[a-zA-Z0-9_.一-鿿]/.test(input[pos])) {
146
+ ident += input[pos];
147
+ pos++;
148
+ }
149
+ const upper = ident.toUpperCase();
150
+ if (KEYWORDS[upper] !== undefined) {
151
+ const kwType = KEYWORDS[upper];
152
+ if (kwType === TokenType.BOOLEAN) {
153
+ tokens.push({ type: TokenType.BOOLEAN, value: upper.toLowerCase(), position: start });
154
+ }
155
+ else {
156
+ tokens.push({ type: kwType, value: upper, position: start });
157
+ }
158
+ }
159
+ else {
160
+ tokens.push({ type: TokenType.IDENTIFIER, value: upper, position: start });
161
+ }
162
+ continue;
163
+ }
164
+ throw new Error(`Unexpected character '${input[pos]}' at position ${pos}`);
165
+ }
166
+ tokens.push({ type: TokenType.EOF, value: '', position: pos });
167
+ return tokens;
168
+ }
169
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/expression-engine/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Token } from './lexer';
2
+ import { type ASTNode } from './ast';
3
+ export declare class ParseError extends Error {
4
+ token: Token;
5
+ constructor(message: string, token: Token);
6
+ }
7
+ export declare function parse(tokens: Token[]): ASTNode;
8
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/expression-engine/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAEL,KAAK,OAAO,EAMb,MAAM,OAAO,CAAC;AAEf,qBAAa,UAAW,SAAQ,KAAK;IACC,KAAK,EAAE,KAAK;gBAApC,OAAO,EAAE,MAAM,EAAS,KAAK,EAAE,KAAK;CAGjD;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAQ9C"}
@@ -0,0 +1,223 @@
1
+ import { TokenType } from './lexer';
2
+ import { ASTNodeType, } from './ast';
3
+ export class ParseError extends Error {
4
+ token;
5
+ constructor(message, token) {
6
+ super(message);
7
+ this.token = token;
8
+ }
9
+ }
10
+ export function parse(tokens) {
11
+ const parser = new Parser(tokens);
12
+ const node = parser.parseExpression();
13
+ if (parser.isEOF()) {
14
+ const t = parser.lastToken();
15
+ throw new ParseError(`Unexpected token: ${t.value}`, t);
16
+ }
17
+ return node;
18
+ }
19
+ class Parser {
20
+ pos = 0;
21
+ tokens;
22
+ constructor(tokens) {
23
+ this.tokens = tokens;
24
+ }
25
+ current() {
26
+ return this.tokens[this.pos];
27
+ }
28
+ peek(offset = 0) {
29
+ return this.tokens[this.pos + offset];
30
+ }
31
+ isEOF() {
32
+ return this.tokens[this.pos].type !== TokenType.EOF;
33
+ }
34
+ lastToken() {
35
+ return this.tokens[this.pos];
36
+ }
37
+ consume(expected) {
38
+ const t = this.current();
39
+ if (t.type !== expected) {
40
+ throw new ParseError(`Expected token type ${TokenType[expected]} but got ${TokenType[t.type]} (${t.value})`, t);
41
+ }
42
+ this.pos++;
43
+ return t;
44
+ }
45
+ /**
46
+ * Expression = OrExpr
47
+ * Lowest precedence: OR
48
+ */
49
+ parseExpression() {
50
+ return this.parseOr();
51
+ }
52
+ /** OR: additive ( OR additive )* */
53
+ parseOr() {
54
+ let node = this.parseAnd();
55
+ while (this.current().type === TokenType.OR) {
56
+ const op = this.current().value;
57
+ this.pos++;
58
+ const right = this.parseAnd();
59
+ node = this.makeBinary(op, node, right);
60
+ }
61
+ return node;
62
+ }
63
+ /** AND: comparison ( AND comparison )* */
64
+ parseAnd() {
65
+ let node = this.parseComparison();
66
+ while (this.current().type === TokenType.AND) {
67
+ const op = this.current().value;
68
+ this.pos++;
69
+ const right = this.parseComparison();
70
+ node = this.makeBinary(op, node, right);
71
+ }
72
+ return node;
73
+ }
74
+ /** Comparison: additive ((= | != | > | < | >= | <=) additive)* */
75
+ parseComparison() {
76
+ let node = this.parseAdditive();
77
+ const compTypes = [
78
+ TokenType.EQUALS, TokenType.NOT_EQUALS,
79
+ TokenType.GT, TokenType.LT,
80
+ TokenType.GTE, TokenType.LTE,
81
+ ];
82
+ while (compTypes.includes(this.current().type)) {
83
+ const op = this.current().value;
84
+ this.pos++;
85
+ const right = this.parseAdditive();
86
+ node = this.makeBinary(op, node, right);
87
+ }
88
+ return node;
89
+ }
90
+ /** Additive: multiplicative ((+ | -) multiplicative)* */
91
+ parseAdditive() {
92
+ let node = this.parseMultiplicative();
93
+ while (this.current().type === TokenType.PLUS || this.current().type === TokenType.MINUS) {
94
+ const op = this.current().value;
95
+ this.pos++;
96
+ const right = this.parseMultiplicative();
97
+ node = this.makeBinary(op, node, right);
98
+ }
99
+ return node;
100
+ }
101
+ /** Multiplicative: unary ((* | / | %) unary)* */
102
+ parseMultiplicative() {
103
+ let node = this.parseUnary();
104
+ while ([TokenType.MULTIPLY, TokenType.DIVIDE, TokenType.MODULO].includes(this.current().type)) {
105
+ const op = this.current().value;
106
+ this.pos++;
107
+ const right = this.parseUnary();
108
+ node = this.makeBinary(op, node, right);
109
+ }
110
+ return node;
111
+ }
112
+ /** Unary: NOT unary | MINUS unary | primary */
113
+ parseUnary() {
114
+ if (this.current().type === TokenType.NOT) {
115
+ const op = this.current().value;
116
+ this.pos++;
117
+ const operand = this.parseUnary();
118
+ return this.makeUnary(op, operand);
119
+ }
120
+ if (this.current().type === TokenType.MINUS) {
121
+ const op = this.current().value;
122
+ this.pos++;
123
+ const operand = this.parseUnary();
124
+ return this.makeUnary(op, operand);
125
+ }
126
+ return this.parsePrimary();
127
+ }
128
+ /** Primary: LPAREN expression RPAREN | IDENTIFIER LPAREN args RPAREN | FIELD_REF | STRING | NUMBER | BOOLEAN */
129
+ parsePrimary() {
130
+ const t = this.current();
131
+ // Parenthesized expression
132
+ if (t.type === TokenType.LPAREN) {
133
+ this.pos++;
134
+ const node = this.parseExpression();
135
+ this.consume(TokenType.RPAREN);
136
+ return node;
137
+ }
138
+ // Function call: IDENTIFIER LPAREN
139
+ if (t.type === TokenType.IDENTIFIER && this.peek(1).type === TokenType.LPAREN) {
140
+ this.pos++; // consume identifier
141
+ this.pos++; // consume LPAREN
142
+ const args = this.parseArgs();
143
+ this.consume(TokenType.RPAREN);
144
+ return this.makeFunctionCall(t.value, args);
145
+ }
146
+ // Field reference
147
+ if (t.type === TokenType.FIELD_REF) {
148
+ this.pos++;
149
+ return this.makeFieldRef(t.value);
150
+ }
151
+ // String literal
152
+ if (t.type === TokenType.STRING) {
153
+ this.pos++;
154
+ return this.makeStringLiteral(t.value);
155
+ }
156
+ // Number literal
157
+ if (t.type === TokenType.NUMBER) {
158
+ this.pos++;
159
+ return this.makeNumberLiteral(t.value);
160
+ }
161
+ // Boolean literal
162
+ if (t.type === TokenType.BOOLEAN) {
163
+ this.pos++;
164
+ return this.makeBooleanLiteral(t.value);
165
+ }
166
+ // Null literal
167
+ if (t.type === TokenType.NULL) {
168
+ this.pos++;
169
+ return this.makeNullLiteral();
170
+ }
171
+ // Bare identifier — treat as a function with no args (e.g. a variable reference)
172
+ if (t.type === TokenType.IDENTIFIER) {
173
+ this.pos++;
174
+ // For now, treat bare identifiers as function calls with no args.
175
+ // Field references inside expressions resolve without requiring braces
176
+ // are typically wrapped in {}, but bare names can resolve to variables.
177
+ return this.makeFunctionCall(t.value, []);
178
+ }
179
+ throw new ParseError(`Unexpected token: ${TokenType[t.type]} (${t.value})`, t);
180
+ }
181
+ /** Parse comma-separated argument list inside parentheses */
182
+ parseArgs() {
183
+ if (this.current().type === TokenType.RPAREN) {
184
+ return [];
185
+ }
186
+ const args = [];
187
+ args.push(this.parseExpression());
188
+ while (this.current().type === TokenType.COMMA) {
189
+ this.pos++;
190
+ args.push(this.parseExpression());
191
+ }
192
+ return args;
193
+ }
194
+ // ---- Node factories ----
195
+ makeBinary(op, left, right) {
196
+ return { type: ASTNodeType.BinaryOp, operator: op, left, right };
197
+ }
198
+ makeUnary(op, operand) {
199
+ return { type: ASTNodeType.UnaryOp, operator: op, operand };
200
+ }
201
+ makeFieldRef(value) {
202
+ const parts = value.split('.');
203
+ const source = parts.length > 1 ? parts.slice(0, -1).join('.') : '';
204
+ const field = parts.length > 0 ? parts[parts.length - 1] : value;
205
+ return { type: ASTNodeType.FieldRef, source, field };
206
+ }
207
+ makeStringLiteral(value) {
208
+ return { type: ASTNodeType.Literal, value, dataType: 'string' };
209
+ }
210
+ makeNumberLiteral(value) {
211
+ return { type: ASTNodeType.Literal, value: parseFloat(value), dataType: 'number' };
212
+ }
213
+ makeBooleanLiteral(value) {
214
+ return { type: ASTNodeType.Literal, value: value === 'true', dataType: 'boolean' };
215
+ }
216
+ makeNullLiteral() {
217
+ return { type: ASTNodeType.Literal, value: null, dataType: 'null' };
218
+ }
219
+ makeFunctionCall(name, args) {
220
+ return { type: ASTNodeType.FunctionCall, name, args };
221
+ }
222
+ }
223
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/expression-engine/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { BuiltinFunction, EvalContext } from './evaluator';
2
+ export declare function evaluateReportFunction(functionName: string, args: unknown[], ctx: EvalContext, scalarFallback: BuiltinFunction): unknown;
3
+ //# sourceMappingURL=report-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-functions.d.ts","sourceRoot":"","sources":["../../src/expression-engine/report-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGhE,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,GAAG,EAAE,WAAW,EAChB,cAAc,EAAE,eAAe,GAC9B,OAAO,CAwBT"}
@@ -0,0 +1,41 @@
1
+ import { formatChineseRmbUppercase } from './chinese-money';
2
+ export function evaluateReportFunction(functionName, args, ctx, scalarFallback) {
3
+ const name = functionName.toUpperCase();
4
+ if (name === 'PAGE') {
5
+ return ctx.reportRuntime?.pageNumber ?? 1;
6
+ }
7
+ if (name === 'TOTALPAGES') {
8
+ return ctx.reportRuntime?.totalPages ?? 1;
9
+ }
10
+ if (name === 'RMBUPPER') {
11
+ return formatChineseRmbUppercase(args[0]);
12
+ }
13
+ if (ctx.reportRuntime && isAggregateFunction(name) && hasLegacySourceFirstSignature(name, args)) {
14
+ throw new Error('Aggregate functions use field expressions, for example SUM({employees.Salary}).');
15
+ }
16
+ if (ctx.reportRuntime && shouldDelegateToReportRuntime(name, args)) {
17
+ return ctx.reportRuntime.evaluateFunction(name, args, ctx);
18
+ }
19
+ return scalarFallback(args, ctx);
20
+ }
21
+ function shouldDelegateToReportRuntime(functionName, args) {
22
+ if (functionName === 'COUNTIF') {
23
+ return args.length === 1 && typeof args[0] === 'string';
24
+ }
25
+ return isAggregateFunction(functionName)
26
+ && args.length > 0
27
+ && isAggregateExpressionArg(args[0]);
28
+ }
29
+ function isAggregateFunction(functionName) {
30
+ return ['SUM', 'AVG', 'MIN', 'MAX', 'COUNT', 'COUNTDISTINCT', 'SUMIF', 'COUNTIF', 'RUNNINGSUM'].includes(functionName);
31
+ }
32
+ function hasLegacySourceFirstSignature(functionName, args) {
33
+ if (functionName === 'COUNTIF') {
34
+ return args.length > 1;
35
+ }
36
+ return typeof args[0] === 'string' && !isAggregateExpressionArg(args[0]);
37
+ }
38
+ function isAggregateExpressionArg(arg) {
39
+ return typeof arg === 'string' && /^\{[^}]+}$/.test(arg.trim());
40
+ }
41
+ //# sourceMappingURL=report-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-functions.js","sourceRoot":"","sources":["../../src/expression-engine/report-functions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,UAAU,sBAAsB,CACpC,YAAoB,EACpB,IAAe,EACf,GAAgB,EAChB,cAA+B;IAE/B,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAExC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,GAAG,CAAC,aAAa,IAAI,6BAA6B,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,6BAA6B,CAAC,YAAoB,EAAE,IAAe;IAC1E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;IAC1D,CAAC;IAED,OAAO,mBAAmB,CAAC,YAAY,CAAC;WACnC,IAAI,CAAC,MAAM,GAAG,CAAC;WACf,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAoB;IAC/C,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AACzH,CAAC;AAED,SAAS,6BAA6B,CAAC,YAAoB,EAAE,IAAe;IAC1E,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAY;IAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ReportFont } from '../template-model/types';
2
+ export interface ReportFontOption {
3
+ value: string;
4
+ label: string;
5
+ fontFamily: string;
6
+ builtin: boolean;
7
+ }
8
+ export declare const REGISTERED_REPORT_FONTS: ReportFont[];
9
+ export declare const DEFAULT_REPORT_FONTS: ReportFont[];
10
+ export declare function normalizeReportFonts(fonts?: ReportFont[]): ReportFont[];
11
+ export declare function getReportFontOptions(fonts?: ReportFont[]): ReportFontOption[];
12
+ export declare function buildReportFontCss(fonts?: ReportFont[]): string;
13
+ export declare function formatFontFamily(font: Pick<ReportFont, 'family' | 'fallback'>): string;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fonts/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,uBAAuB,EAAE,UAAU,EAW/C,CAAC;AAEF,eAAO,MAAM,oBAAoB,cAA0B,CAAC;AAE5D,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAmBvE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAO7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,MAAM,CAgB/D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,MAAM,CAEtF"}
@@ -0,0 +1,73 @@
1
+ export const REGISTERED_REPORT_FONTS = [
2
+ { id: 'microsoft-yahei', name: 'Microsoft YaHei', family: 'Microsoft YaHei', fallback: 'sans-serif', builtin: true },
3
+ { id: 'simsun', name: 'SimSun', family: 'SimSun', fallback: 'serif', builtin: true },
4
+ { id: 'simhei', name: 'SimHei', family: 'SimHei', fallback: 'sans-serif', builtin: true },
5
+ { id: 'kaiti', name: 'KaiTi', family: 'KaiTi', fallback: 'serif', builtin: true },
6
+ { id: 'fangsong', name: 'FangSong', family: 'FangSong', fallback: 'serif', builtin: true },
7
+ { id: 'source-han-sans', name: 'Source Han Sans', family: 'Source Han Sans', fallback: 'sans-serif', builtin: true },
8
+ { id: 'source-han-serif', name: 'Source Han Serif', family: 'Source Han Serif', fallback: 'serif', builtin: true },
9
+ { id: 'arial', name: 'Arial', family: 'Arial', fallback: 'sans-serif', builtin: true },
10
+ { id: 'times-new-roman', name: 'Times New Roman', family: 'Times New Roman', fallback: 'serif', builtin: true },
11
+ { id: 'courier-new', name: 'Courier New', family: 'Courier New', fallback: 'monospace', builtin: true },
12
+ ];
13
+ export const DEFAULT_REPORT_FONTS = REGISTERED_REPORT_FONTS;
14
+ export function normalizeReportFonts(fonts) {
15
+ const byId = new Map();
16
+ for (const font of [...REGISTERED_REPORT_FONTS, ...(fonts ?? [])]) {
17
+ const id = normalizeFontId(font.id || font.family || font.name);
18
+ const family = (font.family || font.name || id).trim();
19
+ const name = (font.name || family).trim();
20
+ if (!id || !family || !name)
21
+ continue;
22
+ byId.set(id, {
23
+ ...font,
24
+ id,
25
+ name,
26
+ family,
27
+ builtin: font.builtin ?? REGISTERED_REPORT_FONTS.some(item => item.id === id),
28
+ });
29
+ }
30
+ return [...byId.values()];
31
+ }
32
+ export function getReportFontOptions(fonts) {
33
+ return normalizeReportFonts(fonts).map(font => ({
34
+ value: font.family,
35
+ label: font.name,
36
+ fontFamily: formatFontFamily(font),
37
+ builtin: Boolean(font.builtin),
38
+ }));
39
+ }
40
+ export function buildReportFontCss(fonts) {
41
+ return normalizeReportFonts(fonts)
42
+ .filter(font => font.source?.url || font.source?.dataUrl)
43
+ .map(font => {
44
+ const source = font.source;
45
+ const url = source?.dataUrl ?? source?.url ?? '';
46
+ const format = source?.format ? ` format('${escapeCssString(source.format)}')` : '';
47
+ return [
48
+ '@font-face {',
49
+ ` font-family: '${escapeCssString(font.family)}';`,
50
+ ` src: url('${escapeCssUrl(url)}')${format};`,
51
+ ' font-display: swap;',
52
+ '}',
53
+ ].join('\n');
54
+ })
55
+ .join('\n');
56
+ }
57
+ export function formatFontFamily(font) {
58
+ return [font.family, font.fallback].filter(Boolean).join(', ');
59
+ }
60
+ function normalizeFontId(value) {
61
+ return value
62
+ .trim()
63
+ .toLowerCase()
64
+ .replace(/[^a-z0-9]+/g, '-')
65
+ .replace(/^-+|-+$/g, '');
66
+ }
67
+ function escapeCssString(value) {
68
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
69
+ }
70
+ function escapeCssUrl(value) {
71
+ return escapeCssString(value).replace(/\)/g, '\\)');
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fonts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export * from './template-model';
2
+ export * from './chart';
3
+ export * from './data-dictionary';
4
+ export * from './band-planner';
5
+ export * from './aggregate-engine';
6
+ export * from './render-document';
7
+ export * from './layout-engine';
8
+ export * from './expression-engine';
9
+ export * from './render-engine';
10
+ export * from './text-format';
11
+ export * from './text-style';
12
+ export * from './conditional-format';
13
+ export * from './pagination';
14
+ export * from './command-engine';
15
+ export * from './event-engine';
16
+ export * from './fonts';
17
+ export * from './rich-text';
18
+ export * from './table/table-structure';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC"}