@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 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/event-engine/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ export declare enum ASTNodeType {
2
+ Literal = 0,
3
+ FieldRef = 1,
4
+ BinaryOp = 2,
5
+ UnaryOp = 3,
6
+ FunctionCall = 4
7
+ }
8
+ export interface LiteralNode {
9
+ type: ASTNodeType.Literal;
10
+ value: string | number | boolean | null;
11
+ dataType: 'string' | 'number' | 'boolean' | 'null';
12
+ }
13
+ export interface FieldRefNode {
14
+ type: ASTNodeType.FieldRef;
15
+ source: string;
16
+ field: string;
17
+ }
18
+ export interface BinaryOpNode {
19
+ type: ASTNodeType.BinaryOp;
20
+ operator: string;
21
+ left: ASTNode;
22
+ right: ASTNode;
23
+ }
24
+ export interface UnaryOpNode {
25
+ type: ASTNodeType.UnaryOp;
26
+ operator: string;
27
+ operand: ASTNode;
28
+ }
29
+ export interface FunctionCallNode {
30
+ type: ASTNodeType.FunctionCall;
31
+ name: string;
32
+ args: ASTNode[];
33
+ }
34
+ export type ASTNode = LiteralNode | FieldRefNode | BinaryOpNode | UnaryOpNode | FunctionCallNode;
35
+ //# sourceMappingURL=ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/expression-engine/ast.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACrB,OAAO,IAAA;IACP,QAAQ,IAAA;IACR,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,YAAY,IAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;CACpD;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export var ASTNodeType;
2
+ (function (ASTNodeType) {
3
+ ASTNodeType[ASTNodeType["Literal"] = 0] = "Literal";
4
+ ASTNodeType[ASTNodeType["FieldRef"] = 1] = "FieldRef";
5
+ ASTNodeType[ASTNodeType["BinaryOp"] = 2] = "BinaryOp";
6
+ ASTNodeType[ASTNodeType["UnaryOp"] = 3] = "UnaryOp";
7
+ ASTNodeType[ASTNodeType["FunctionCall"] = 4] = "FunctionCall";
8
+ })(ASTNodeType || (ASTNodeType = {}));
9
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/expression-engine/ast.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,mDAAO,CAAA;IACP,qDAAQ,CAAA;IACR,qDAAQ,CAAA;IACR,mDAAO,CAAA;IACP,6DAAY,CAAA;AACd,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB"}
@@ -0,0 +1,2 @@
1
+ export declare function formatChineseRmbUppercase(value: unknown): string;
2
+ //# sourceMappingURL=chinese-money.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chinese-money.d.ts","sourceRoot":"","sources":["../../src/expression-engine/chinese-money.ts"],"names":[],"mappings":"AAIA,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAgBhE"}
@@ -0,0 +1,90 @@
1
+ const DIGITS = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
2
+ const INNER_UNITS = ['', '拾', '佰', '仟'];
3
+ const SECTION_UNITS = ['', '万', '亿', '兆'];
4
+ export function formatChineseRmbUppercase(value) {
5
+ const normalized = toCents(value);
6
+ if (normalized === null)
7
+ return '';
8
+ const sign = normalized < 0 ? '负' : '';
9
+ const absolute = Math.abs(normalized);
10
+ const integerPart = Math.floor(absolute / 100);
11
+ const fractionPart = Math.round(absolute % 100);
12
+ const integerText = formatIntegerPart(integerPart);
13
+ const fractionText = formatFractionPart(fractionPart, integerPart > 0);
14
+ if (integerPart === 0 && fractionPart === 0) {
15
+ return `${sign}零元整`;
16
+ }
17
+ return `${sign}${integerText}${fractionText}`;
18
+ }
19
+ function toCents(value) {
20
+ if (value === null || value === undefined || value === '')
21
+ return null;
22
+ const numberValue = typeof value === 'number' ? value : Number(value);
23
+ if (!Number.isFinite(numberValue))
24
+ return null;
25
+ return Math.round(numberValue * 100);
26
+ }
27
+ function formatIntegerPart(integerPart) {
28
+ if (integerPart === 0)
29
+ return '零元';
30
+ const sections = [];
31
+ let remaining = integerPart;
32
+ let sectionIndex = 0;
33
+ while (remaining > 0) {
34
+ sections.push({ value: remaining % 10000, index: sectionIndex });
35
+ remaining = Math.floor(remaining / 10000);
36
+ sectionIndex += 1;
37
+ }
38
+ let result = '';
39
+ let zeroPending = false;
40
+ for (let index = sections.length - 1; index >= 0; index -= 1) {
41
+ const section = sections[index];
42
+ if (section.value === 0) {
43
+ zeroPending = result.length > 0;
44
+ continue;
45
+ }
46
+ if (result && (zeroPending || section.value < 1000)) {
47
+ result += '零';
48
+ }
49
+ result += `${formatSection(section.value)}${SECTION_UNITS[section.index] ?? ''}`;
50
+ zeroPending = false;
51
+ }
52
+ return `${result}元`;
53
+ }
54
+ function formatSection(section) {
55
+ let result = '';
56
+ let zeroPending = false;
57
+ for (let unitIndex = 3; unitIndex >= 0; unitIndex -= 1) {
58
+ const unitValue = 10 ** unitIndex;
59
+ const digit = Math.floor(section / unitValue) % 10;
60
+ if (digit === 0) {
61
+ zeroPending = result.length > 0;
62
+ continue;
63
+ }
64
+ if (zeroPending) {
65
+ result += '零';
66
+ zeroPending = false;
67
+ }
68
+ result += DIGITS[digit] + INNER_UNITS[unitIndex];
69
+ }
70
+ return result;
71
+ }
72
+ function formatFractionPart(fractionPart, hasInteger) {
73
+ const jiao = Math.floor(fractionPart / 10);
74
+ const fen = fractionPart % 10;
75
+ if (jiao === 0 && fen === 0) {
76
+ return '整';
77
+ }
78
+ let text = '';
79
+ if (jiao > 0) {
80
+ text += `${DIGITS[jiao]}角`;
81
+ }
82
+ else if (fen > 0 && hasInteger) {
83
+ text += '零';
84
+ }
85
+ if (fen > 0) {
86
+ text += `${DIGITS[fen]}分`;
87
+ }
88
+ return text;
89
+ }
90
+ //# sourceMappingURL=chinese-money.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chinese-money.js","sourceRoot":"","sources":["../../src/expression-engine/chinese-money.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { ASTNode } from './ast';
2
+ /** Evaluation context extends DataContext with current row data */
3
+ export interface EvalContext {
4
+ /** Field value resolver: given source.field path, return the value */
5
+ resolveField: (source: string, field: string) => any;
6
+ /** Current row index (0-based) */
7
+ rowIndex?: number;
8
+ /** Optional variables map */
9
+ variables?: Record<string, any>;
10
+ /** Optional host-provided function registry */
11
+ functions?: Record<string, BuiltinFunction>;
12
+ /** Optional report runtime for aggregate and page functions */
13
+ reportRuntime?: ReportFunctionRuntime;
14
+ }
15
+ /** Built-in function registry */
16
+ export type BuiltinFunction = (args: any[], ctx: EvalContext) => any;
17
+ export declare const builtinFunctions: Record<string, BuiltinFunction>;
18
+ export interface ReportFunctionRuntime {
19
+ pageNumber?: number;
20
+ totalPages?: number;
21
+ evaluateFunction: (functionName: string, args: any[], ctx: EvalContext) => any;
22
+ }
23
+ export declare function evaluate(node: ASTNode, ctx: EvalContext): any;
24
+ /** Convenience: tokenize + parse + evaluate */
25
+ export declare function evalExpression(expression: string, resolveField: (source: string, field: string) => any, rowIndex?: number, variables?: Record<string, any>, reportRuntime?: ReportFunctionRuntime, functions?: Record<string, BuiltinFunction>): any;
26
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/expression-engine/evaluator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAA0E,MAAM,OAAO,CAAC;AAK7G,mEAAmE;AACnE,MAAM,WAAW,WAAW;IAC1B,sEAAsE;IACtE,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IACrD,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,+DAA+D;IAC/D,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAED,iCAAiC;AACjC,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG,CAAC;AACrE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,WAAW,KAAK,GAAG,CAAC;CAChF;AA4UD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,GAAG,GAAG,CA0C7D;AAkED,+CAA+C;AAC/C,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,EACpD,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/B,aAAa,CAAC,EAAE,qBAAqB,EACrC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAC1C,GAAG,CAIL"}
@@ -0,0 +1,406 @@
1
+ import { tokenize } from './lexer';
2
+ import { parse } from './parser';
3
+ import { ASTNodeType } from './ast';
4
+ import { evaluateReportFunction } from './report-functions';
5
+ export const builtinFunctions = {};
6
+ function reg(name, fn) {
7
+ builtinFunctions[name.toUpperCase()] = fn;
8
+ }
9
+ // ---- Utility functions ----
10
+ function toNumber(v) {
11
+ const n = Number(v);
12
+ return Number.isNaN(n) ? 0 : n;
13
+ }
14
+ function toString(v) {
15
+ if (v === null || v === undefined)
16
+ return '';
17
+ return String(v);
18
+ }
19
+ function isNumeric(v) {
20
+ return !Number.isNaN(Number(v)) && v !== null && v !== undefined && v !== '';
21
+ }
22
+ function coerceCompare(a, b) {
23
+ if (isNumeric(a) && isNumeric(b))
24
+ return [toNumber(a), toNumber(b)];
25
+ return [toString(a), toString(b)];
26
+ }
27
+ function evalArg(arg, ctx) {
28
+ return evaluate(arg, ctx);
29
+ }
30
+ function evalNumericArg(arg, ctx) {
31
+ return toNumber(evalArg(arg, ctx));
32
+ }
33
+ const RUNTIME_AGGREGATE_FUNCTIONS = new Set(['SUM', 'AVG', 'MIN', 'MAX', 'COUNT', 'COUNTDISTINCT', 'SUMIF', 'COUNTIF', 'RUNNINGSUM']);
34
+ // ---- Built-in Functions ----
35
+ reg('IF', (args, ctx) => {
36
+ if (args.length !== 3)
37
+ throw new Error('IF requires exactly 3 arguments');
38
+ return args[0] ? args[1] : args[2];
39
+ });
40
+ reg('IIF', (args, ctx) => {
41
+ if (args.length !== 3)
42
+ throw new Error('IIF requires exactly 3 arguments');
43
+ return args[0] ? args[1] : args[2];
44
+ });
45
+ reg('ISNULL', (args, ctx) => {
46
+ if (args.length < 1)
47
+ throw new Error('ISNULL requires at least 1 argument');
48
+ return args[0] === null || args[0] === undefined;
49
+ });
50
+ reg('COALESCE', (args, ctx) => {
51
+ for (const arg of args) {
52
+ if (arg !== null && arg !== undefined)
53
+ return arg;
54
+ }
55
+ return null;
56
+ });
57
+ reg('SUM', (args, ctx) => {
58
+ return evaluateReportFunction('SUM', args, ctx, (scalarArgs) => scalarArgs.reduce((acc, v) => acc + toNumber(v), 0));
59
+ });
60
+ reg('AVG', (args, ctx) => {
61
+ return evaluateReportFunction('AVG', args, ctx, (scalarArgs) => {
62
+ if (scalarArgs.length === 0)
63
+ return 0;
64
+ return scalarArgs.reduce((acc, v) => acc + toNumber(v), 0) / scalarArgs.length;
65
+ });
66
+ });
67
+ reg('MIN', (args, ctx) => {
68
+ return evaluateReportFunction('MIN', args, ctx, (scalarArgs) => {
69
+ if (scalarArgs.length === 0)
70
+ return null;
71
+ return Math.min(...scalarArgs.map(toNumber));
72
+ });
73
+ });
74
+ reg('MAX', (args, ctx) => {
75
+ return evaluateReportFunction('MAX', args, ctx, (scalarArgs) => {
76
+ if (scalarArgs.length === 0)
77
+ return null;
78
+ return Math.max(...scalarArgs.map(toNumber));
79
+ });
80
+ });
81
+ reg('COUNT', (args, ctx) => {
82
+ return evaluateReportFunction('COUNT', args, ctx, (scalarArgs) => scalarArgs.filter(v => v !== null && v !== undefined).length);
83
+ });
84
+ reg('COUNTDISTINCT', (args, ctx) => {
85
+ return evaluateReportFunction('COUNTDISTINCT', args, ctx, (scalarArgs) => new Set(scalarArgs.filter(v => v !== null && v !== undefined)).size);
86
+ });
87
+ reg('SUMIF', (args, ctx) => {
88
+ return evaluateReportFunction('SUMIF', args, ctx, () => 0);
89
+ });
90
+ reg('COUNTIF', (args, ctx) => {
91
+ return evaluateReportFunction('COUNTIF', args, ctx, () => 0);
92
+ });
93
+ reg('RUNNINGSUM', (args, ctx) => {
94
+ return evaluateReportFunction('RUNNINGSUM', args, ctx, () => 0);
95
+ });
96
+ reg('PAGE', (args, ctx) => {
97
+ return evaluateReportFunction('PAGE', args, ctx, () => 1);
98
+ });
99
+ reg('TOTALPAGES', (args, ctx) => {
100
+ return evaluateReportFunction('TOTALPAGES', args, ctx, () => 1);
101
+ });
102
+ reg('RMBUPPER', (args, ctx) => {
103
+ return evaluateReportFunction('RMBUPPER', args, ctx, () => '');
104
+ });
105
+ reg('ROUND', (args, ctx) => {
106
+ const v = toNumber(args[0]);
107
+ const d = args.length > 1 ? toNumber(args[1]) : 0;
108
+ const factor = Math.pow(10, d);
109
+ return Math.round(v * factor) / factor;
110
+ });
111
+ reg('CEIL', (args, ctx) => {
112
+ return Math.ceil(toNumber(args[0]));
113
+ });
114
+ reg('FLOOR', (args, ctx) => {
115
+ return Math.floor(toNumber(args[0]));
116
+ });
117
+ reg('ABS', (args, ctx) => {
118
+ return Math.abs(toNumber(args[0]));
119
+ });
120
+ reg('POWER', (args, ctx) => {
121
+ return Math.pow(toNumber(args[0]), toNumber(args[1]));
122
+ });
123
+ reg('SQRT', (args, ctx) => {
124
+ return Math.sqrt(toNumber(args[0]));
125
+ });
126
+ reg('MAXVALUE', (args, ctx) => {
127
+ return Math.max(...args.map(toNumber));
128
+ });
129
+ reg('MINVALUE', (args, ctx) => {
130
+ return Math.min(...args.map(toNumber));
131
+ });
132
+ reg('CONCAT', (args, ctx) => {
133
+ return args.map(toString).join('');
134
+ });
135
+ reg('LEN', (args, ctx) => {
136
+ return toString(args[0]).length;
137
+ });
138
+ reg('UPPER', (args, ctx) => {
139
+ return toString(args[0]).toUpperCase();
140
+ });
141
+ reg('LOWER', (args, ctx) => {
142
+ return toString(args[0]).toLowerCase();
143
+ });
144
+ reg('CONTAINS', (args, ctx) => {
145
+ return toString(args[0]).includes(toString(args[1]));
146
+ });
147
+ reg('STARTSWITH', (args, ctx) => {
148
+ return toString(args[0]).startsWith(toString(args[1]));
149
+ });
150
+ reg('ENDSWITH', (args, ctx) => {
151
+ return toString(args[0]).endsWith(toString(args[1]));
152
+ });
153
+ reg('TRIM', (args, ctx) => {
154
+ return toString(args[0]).trim();
155
+ });
156
+ reg('SUBSTRING', (args, ctx) => {
157
+ const str = toString(args[0]);
158
+ const start = toNumber(args[1]);
159
+ if (args.length > 2) {
160
+ const len = toNumber(args[2]);
161
+ return str.substring(start, start + len);
162
+ }
163
+ return str.substring(start);
164
+ });
165
+ reg('LEFT', (args, ctx) => {
166
+ return toString(args[0]).slice(0, Math.max(0, toNumber(args[1])));
167
+ });
168
+ reg('RIGHT', (args, ctx) => {
169
+ const str = toString(args[0]);
170
+ const count = Math.max(0, toNumber(args[1]));
171
+ return str.slice(Math.max(0, str.length - count));
172
+ });
173
+ reg('REPLACE', (args, ctx) => {
174
+ return toString(args[0]).split(toString(args[1])).join(toString(args[2]));
175
+ });
176
+ reg('INDEXOF', (args, ctx) => {
177
+ return toString(args[0]).indexOf(toString(args[1]));
178
+ });
179
+ reg('FORMAT', (args, ctx) => {
180
+ const pattern = toString(args[0]);
181
+ const value = args[1];
182
+ if (pattern.toUpperCase().startsWith('N')) {
183
+ const decimals = parseInt(pattern.substring(1), 10) || 2;
184
+ return Number(value).toFixed(decimals);
185
+ }
186
+ if (pattern.toUpperCase() === 'C') {
187
+ return '$' + Number(value).toFixed(2);
188
+ }
189
+ if (pattern.toUpperCase() === 'P') {
190
+ return (Number(value) * 100).toFixed(1) + '%';
191
+ }
192
+ if (pattern.toUpperCase() === 'D') {
193
+ return new Date(value).toLocaleDateString();
194
+ }
195
+ if (pattern.toUpperCase() === 'T') {
196
+ return new Date(value).toLocaleTimeString();
197
+ }
198
+ if (pattern.toUpperCase() === 'BOOL') {
199
+ return Boolean(value) ? 'Yes' : 'No';
200
+ }
201
+ if (pattern.toUpperCase() === 'CN_DATE') {
202
+ const date = new Date(value);
203
+ return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`;
204
+ }
205
+ return toString(value);
206
+ });
207
+ reg('TOSTRING', (args, ctx) => {
208
+ return toString(args[0]);
209
+ });
210
+ reg('TONUMBER', (args, ctx) => {
211
+ return toNumber(args[0]);
212
+ });
213
+ reg('ISNUMBER', (args, ctx) => {
214
+ return isNumeric(args[0]);
215
+ });
216
+ reg('ISDATE', (args, ctx) => {
217
+ return !Number.isNaN(new Date(args[0]).getTime());
218
+ });
219
+ reg('ISEMPTY', (args, ctx) => {
220
+ return args[0] === null || args[0] === undefined || args[0] === '';
221
+ });
222
+ reg('NOW', (args, ctx) => {
223
+ return new Date();
224
+ });
225
+ reg('TODAY', (args, ctx) => {
226
+ const d = new Date();
227
+ d.setHours(0, 0, 0, 0);
228
+ return d;
229
+ });
230
+ reg('ROWINDEX', (args, ctx) => {
231
+ return ctx.rowIndex ?? 0;
232
+ });
233
+ reg('YEAR', (args, ctx) => {
234
+ return new Date(args[0]).getFullYear();
235
+ });
236
+ reg('MONTH', (args, ctx) => {
237
+ return new Date(args[0]).getMonth() + 1;
238
+ });
239
+ reg('DAY', (args, ctx) => {
240
+ return new Date(args[0]).getDate();
241
+ });
242
+ reg('DATEFORMAT', (args, ctx) => {
243
+ const date = new Date(args[0]);
244
+ const pattern = toString(args[1]) || 'yyyy-MM-dd';
245
+ return pattern
246
+ .replace(/yyyy/g, String(date.getFullYear()))
247
+ .replace(/MM/g, String(date.getMonth() + 1).padStart(2, '0'))
248
+ .replace(/dd/g, String(date.getDate()).padStart(2, '0'))
249
+ .replace(/HH/g, String(date.getHours()).padStart(2, '0'))
250
+ .replace(/mm/g, String(date.getMinutes()).padStart(2, '0'))
251
+ .replace(/ss/g, String(date.getSeconds()).padStart(2, '0'));
252
+ });
253
+ reg('DATEADD', (args, ctx) => {
254
+ const date = new Date(args[0]);
255
+ const unit = toString(args[1]).toLowerCase();
256
+ const amount = toNumber(args[2]);
257
+ switch (unit) {
258
+ case 'year':
259
+ date.setFullYear(date.getFullYear() + amount);
260
+ break;
261
+ case 'month':
262
+ date.setMonth(date.getMonth() + amount);
263
+ break;
264
+ case 'day':
265
+ date.setDate(date.getDate() + amount);
266
+ break;
267
+ case 'hour':
268
+ date.setHours(date.getHours() + amount);
269
+ break;
270
+ case 'minute':
271
+ date.setMinutes(date.getMinutes() + amount);
272
+ break;
273
+ case 'second':
274
+ date.setSeconds(date.getSeconds() + amount);
275
+ break;
276
+ default: throw new Error(`Unknown date unit: ${unit}`);
277
+ }
278
+ return date;
279
+ });
280
+ reg('DATEDIFF', (args, ctx) => {
281
+ const d1 = new Date(args[0]).getTime();
282
+ const d2 = new Date(args[1]).getTime();
283
+ const unit = toString(args[2]).toLowerCase();
284
+ const diffMs = Math.abs(d2 - d1);
285
+ switch (unit) {
286
+ case 'day': return Math.floor(diffMs / (1000 * 60 * 60 * 24));
287
+ case 'hour': return Math.floor(diffMs / (1000 * 60 * 60));
288
+ case 'minute': return Math.floor(diffMs / (1000 * 60));
289
+ case 'second': return Math.floor(diffMs / 1000);
290
+ default: throw new Error(`Unknown date unit: ${unit}`);
291
+ }
292
+ });
293
+ // ---- Core Evaluator ----
294
+ export function evaluate(node, ctx) {
295
+ switch (node.type) {
296
+ case ASTNodeType.Literal:
297
+ return node.value;
298
+ case ASTNodeType.FieldRef: {
299
+ const fr = node;
300
+ if (!fr.source && ctx.variables && Object.prototype.hasOwnProperty.call(ctx.variables, fr.field)) {
301
+ return ctx.variables[fr.field];
302
+ }
303
+ return ctx.resolveField(fr.source, fr.field);
304
+ }
305
+ case ASTNodeType.BinaryOp: {
306
+ const bin = node;
307
+ const left = evalArg(bin.left, ctx);
308
+ const right = evalArg(bin.right, ctx);
309
+ return evalBinaryOp(bin.operator, left, right);
310
+ }
311
+ case ASTNodeType.UnaryOp: {
312
+ const un = node;
313
+ const val = evalArg(un.operand, ctx);
314
+ return evalUnaryOp(un.operator, val);
315
+ }
316
+ case ASTNodeType.FunctionCall: {
317
+ const fn = node;
318
+ const fnName = fn.name.toUpperCase();
319
+ const args = ctx.reportRuntime && RUNTIME_AGGREGATE_FUNCTIONS.has(fnName)
320
+ ? fn.args.map(a => aggregateArgValue(a, ctx))
321
+ : fn.args.map(a => evalArg(a, ctx));
322
+ const fnImpl = ctx.functions?.[fnName] ?? builtinFunctions[fnName];
323
+ if (!fnImpl) {
324
+ throw new Error(`Unknown function: ${fn.name}`);
325
+ }
326
+ return fnImpl(args, ctx);
327
+ }
328
+ default:
329
+ throw new Error(`Unknown AST node type: ${node.type}`);
330
+ }
331
+ }
332
+ function aggregateArgValue(arg, ctx) {
333
+ if (arg.type === ASTNodeType.FieldRef) {
334
+ const fieldRef = arg;
335
+ return fieldRef.source ? `{${fieldRef.source}.${fieldRef.field}}` : `{${fieldRef.field}}`;
336
+ }
337
+ return evalArg(arg, ctx);
338
+ }
339
+ function evalBinaryOp(op, left, right) {
340
+ // Arithmetic operators
341
+ if (op === '+')
342
+ return toNumber(left) + toNumber(right);
343
+ if (op === '-')
344
+ return toNumber(left) - toNumber(right);
345
+ if (op === '*')
346
+ return toNumber(left) * toNumber(right);
347
+ if (op === '/') {
348
+ const r = toNumber(right);
349
+ if (r === 0)
350
+ return null;
351
+ return toNumber(left) / r;
352
+ }
353
+ if (op === '%') {
354
+ const r = toNumber(right);
355
+ if (r === 0)
356
+ return null;
357
+ return toNumber(left) % r;
358
+ }
359
+ // Comparison operators
360
+ if (op === '=' || op === '==') {
361
+ const [a, b] = coerceCompare(left, right);
362
+ return a === b;
363
+ }
364
+ if (op === '!=') {
365
+ const [a, b] = coerceCompare(left, right);
366
+ return a !== b;
367
+ }
368
+ if (op === '>') {
369
+ const [a, b] = coerceCompare(left, right);
370
+ return a > b;
371
+ }
372
+ if (op === '<') {
373
+ const [a, b] = coerceCompare(left, right);
374
+ return a < b;
375
+ }
376
+ if (op === '>=') {
377
+ const [a, b] = coerceCompare(left, right);
378
+ return a >= b;
379
+ }
380
+ if (op === '<=') {
381
+ const [a, b] = coerceCompare(left, right);
382
+ return a <= b;
383
+ }
384
+ // Logical operators
385
+ if (op === 'AND')
386
+ return Boolean(left) && Boolean(right);
387
+ if (op === 'OR')
388
+ return Boolean(left) || Boolean(right);
389
+ throw new Error(`Unknown binary operator: ${op}`);
390
+ }
391
+ function evalUnaryOp(op, val) {
392
+ if (op === 'NOT')
393
+ return !Boolean(val);
394
+ if (op === '-')
395
+ return -toNumber(val);
396
+ if (op === '+')
397
+ return +toNumber(val);
398
+ throw new Error(`Unknown unary operator: ${op}`);
399
+ }
400
+ /** Convenience: tokenize + parse + evaluate */
401
+ export function evalExpression(expression, resolveField, rowIndex, variables, reportRuntime, functions) {
402
+ const tokens = tokenize(expression);
403
+ const ast = parse(tokens);
404
+ return evaluate(ast, { resolveField, rowIndex, variables, reportRuntime, functions });
405
+ }
406
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/expression-engine/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { tokenize, TokenType } from './lexer';
2
+ export type { Token } from './lexer';
3
+ export { parse, ParseError } from './parser';
4
+ export { evaluate, evalExpression, builtinFunctions } from './evaluator';
5
+ export type { EvalContext, BuiltinFunction } from './evaluator';
6
+ export * from './ast';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expression-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,cAAc,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { tokenize, TokenType } from './lexer';
2
+ export { parse, ParseError } from './parser';
3
+ export { evaluate, evalExpression, builtinFunctions } from './evaluator';
4
+ export * from './ast';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expression-engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEzE,cAAc,OAAO,CAAC"}