@zentto/report-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.
- package/dist/engine/band-engine.d.ts +32 -0
- package/dist/engine/band-engine.d.ts.map +1 -0
- package/dist/engine/band-engine.js +255 -0
- package/dist/engine/band-engine.js.map +1 -0
- package/dist/engine/data-binding.d.ts +26 -0
- package/dist/engine/data-binding.d.ts.map +1 -0
- package/dist/engine/data-binding.js +184 -0
- package/dist/engine/data-binding.js.map +1 -0
- package/dist/engine/expression.d.ts +12 -0
- package/dist/engine/expression.d.ts.map +1 -0
- package/dist/engine/expression.js +112 -0
- package/dist/engine/expression.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/render/html-renderer.d.ts +6 -0
- package/dist/render/html-renderer.d.ts.map +1 -0
- package/dist/render/html-renderer.js +228 -0
- package/dist/render/html-renderer.js.map +1 -0
- package/dist/schema/report-schema.d.ts +4154 -0
- package/dist/schema/report-schema.d.ts.map +1 -0
- package/dist/schema/report-schema.js +200 -0
- package/dist/schema/report-schema.js.map +1 -0
- package/dist/serialization/json.d.ts +815 -0
- package/dist/serialization/json.d.ts.map +1 -0
- package/dist/serialization/json.js +99 -0
- package/dist/serialization/json.js.map +1 -0
- package/dist/types.d.ts +208 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,+CAA+C;AAC/C,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,UAAO,GAAG,MAAM,CAExE;AAED,qDAAqD;AACrD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAGvD;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU5C;AAED,qDAAqD;AACrD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAShF;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,IAAI,SAAe,GAAG,YAAY,CA6DnE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// @zentto/report-core — JSON serialization utilities
|
|
2
|
+
import { validateLayout, safeValidateLayout } from '../schema/report-schema.js';
|
|
3
|
+
/** Serialize a report layout to JSON string */
|
|
4
|
+
export function layoutToJson(layout, pretty = true) {
|
|
5
|
+
return JSON.stringify(layout, null, pretty ? 2 : 0);
|
|
6
|
+
}
|
|
7
|
+
/** Parse JSON string to report layout (validated) */
|
|
8
|
+
export function jsonToLayout(json) {
|
|
9
|
+
const data = JSON.parse(json);
|
|
10
|
+
return validateLayout(data);
|
|
11
|
+
}
|
|
12
|
+
/** Parse JSON string to report layout (safe — returns result object) */
|
|
13
|
+
export function safeJsonToLayout(json) {
|
|
14
|
+
try {
|
|
15
|
+
const data = JSON.parse(json);
|
|
16
|
+
return safeValidateLayout(data);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Download a layout as .json file (browser only) */
|
|
26
|
+
export function downloadLayoutJson(layout, filename) {
|
|
27
|
+
const json = layoutToJson(layout);
|
|
28
|
+
const blob = new Blob([json], { type: 'application/json' });
|
|
29
|
+
const url = URL.createObjectURL(blob);
|
|
30
|
+
const a = document.createElement('a');
|
|
31
|
+
a.href = url;
|
|
32
|
+
a.download = filename || `${layout.name.replace(/\s+/g, '-').toLowerCase()}.report.json`;
|
|
33
|
+
a.click();
|
|
34
|
+
URL.revokeObjectURL(url);
|
|
35
|
+
}
|
|
36
|
+
/** Create a blank report layout with sensible defaults */
|
|
37
|
+
export function createBlankLayout(name = 'New Report') {
|
|
38
|
+
return {
|
|
39
|
+
version: '1.0',
|
|
40
|
+
name,
|
|
41
|
+
pageSize: { width: 210, height: 297, unit: 'mm' },
|
|
42
|
+
margins: { top: 15, right: 10, bottom: 15, left: 10 },
|
|
43
|
+
orientation: 'portrait',
|
|
44
|
+
dataSources: [],
|
|
45
|
+
bands: [
|
|
46
|
+
{
|
|
47
|
+
id: 'reportHeader',
|
|
48
|
+
type: 'reportHeader',
|
|
49
|
+
height: 25,
|
|
50
|
+
elements: [
|
|
51
|
+
{
|
|
52
|
+
id: 'title',
|
|
53
|
+
type: 'text',
|
|
54
|
+
content: name,
|
|
55
|
+
x: 0,
|
|
56
|
+
y: 5,
|
|
57
|
+
width: 190,
|
|
58
|
+
height: 15,
|
|
59
|
+
style: {
|
|
60
|
+
fontSize: 18,
|
|
61
|
+
fontWeight: 'bold',
|
|
62
|
+
textAlign: 'center',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: 'pageHeader',
|
|
69
|
+
type: 'pageHeader',
|
|
70
|
+
height: 10,
|
|
71
|
+
elements: [],
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'detail',
|
|
75
|
+
type: 'detail',
|
|
76
|
+
height: 8,
|
|
77
|
+
elements: [],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: 'pageFooter',
|
|
81
|
+
type: 'pageFooter',
|
|
82
|
+
height: 10,
|
|
83
|
+
elements: [
|
|
84
|
+
{
|
|
85
|
+
id: 'pageNum',
|
|
86
|
+
type: 'pageNumber',
|
|
87
|
+
format: 'Page {page} of {pages}',
|
|
88
|
+
x: 70,
|
|
89
|
+
y: 2,
|
|
90
|
+
width: 50,
|
|
91
|
+
height: 6,
|
|
92
|
+
style: { fontSize: 8, textAlign: 'center', color: '#888' },
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/serialization/json.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
export type Unit = 'mm' | 'in' | 'px' | 'pt';
|
|
2
|
+
export interface PageSize {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
unit: Unit;
|
|
6
|
+
}
|
|
7
|
+
export interface Margins {
|
|
8
|
+
top: number;
|
|
9
|
+
right: number;
|
|
10
|
+
bottom: number;
|
|
11
|
+
left: number;
|
|
12
|
+
}
|
|
13
|
+
export interface Position {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
}
|
|
19
|
+
export interface ElementStyle {
|
|
20
|
+
fontFamily?: string;
|
|
21
|
+
fontSize?: number;
|
|
22
|
+
fontWeight?: 'normal' | 'bold' | 'lighter' | 'bolder' | number;
|
|
23
|
+
fontStyle?: 'normal' | 'italic';
|
|
24
|
+
textDecoration?: 'none' | 'underline' | 'line-through';
|
|
25
|
+
textAlign?: 'left' | 'center' | 'right' | 'justify';
|
|
26
|
+
verticalAlign?: 'top' | 'middle' | 'bottom';
|
|
27
|
+
color?: string;
|
|
28
|
+
backgroundColor?: string;
|
|
29
|
+
borderTop?: string;
|
|
30
|
+
borderRight?: string;
|
|
31
|
+
borderBottom?: string;
|
|
32
|
+
borderLeft?: string;
|
|
33
|
+
borderRadius?: number;
|
|
34
|
+
padding?: number | string;
|
|
35
|
+
opacity?: number;
|
|
36
|
+
wordWrap?: boolean;
|
|
37
|
+
lineHeight?: number;
|
|
38
|
+
}
|
|
39
|
+
export interface LineStyle {
|
|
40
|
+
color?: string;
|
|
41
|
+
width?: number;
|
|
42
|
+
style?: 'solid' | 'dashed' | 'dotted';
|
|
43
|
+
}
|
|
44
|
+
export interface DataSourceDef {
|
|
45
|
+
id: string;
|
|
46
|
+
name: string;
|
|
47
|
+
type: 'object' | 'array';
|
|
48
|
+
/** Optional: fields metadata for the designer toolbox */
|
|
49
|
+
fields?: FieldDef[];
|
|
50
|
+
}
|
|
51
|
+
export interface FieldDef {
|
|
52
|
+
name: string;
|
|
53
|
+
label?: string;
|
|
54
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'currency' | 'image';
|
|
55
|
+
format?: string;
|
|
56
|
+
}
|
|
57
|
+
export type ElementType = 'text' | 'field' | 'image' | 'line' | 'rect' | 'barcode' | 'chart' | 'subreport' | 'pageNumber' | 'totalPages' | 'currentDate';
|
|
58
|
+
export interface BaseElement {
|
|
59
|
+
id: string;
|
|
60
|
+
type: ElementType;
|
|
61
|
+
x: number;
|
|
62
|
+
y: number;
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
style?: ElementStyle;
|
|
66
|
+
visible?: boolean;
|
|
67
|
+
/** Expression that evaluates to boolean — hide element if false */
|
|
68
|
+
visibleExpression?: string;
|
|
69
|
+
/** Print on first page only, last page only, etc. */
|
|
70
|
+
printOn?: 'all' | 'first' | 'last' | 'odd' | 'even';
|
|
71
|
+
}
|
|
72
|
+
export interface TextElement extends BaseElement {
|
|
73
|
+
type: 'text';
|
|
74
|
+
content: string;
|
|
75
|
+
}
|
|
76
|
+
export interface FieldElement extends BaseElement {
|
|
77
|
+
type: 'field';
|
|
78
|
+
dataSource: string;
|
|
79
|
+
field: string;
|
|
80
|
+
format?: string;
|
|
81
|
+
/** Expression for computed fields: =qty*price */
|
|
82
|
+
expression?: string;
|
|
83
|
+
/** Aggregate: sum, avg, count, min, max (used in footers) */
|
|
84
|
+
aggregate?: AggregateFunction;
|
|
85
|
+
/** Reset aggregate on group break */
|
|
86
|
+
resetOnGroup?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ImageElement extends BaseElement {
|
|
89
|
+
type: 'image';
|
|
90
|
+
/** Static URL or expression like {{ds1.logoUrl}} */
|
|
91
|
+
src: string;
|
|
92
|
+
fit?: 'contain' | 'cover' | 'fill' | 'none';
|
|
93
|
+
}
|
|
94
|
+
export interface LineElement extends BaseElement {
|
|
95
|
+
type: 'line';
|
|
96
|
+
x2: number;
|
|
97
|
+
y2: number;
|
|
98
|
+
lineStyle?: LineStyle;
|
|
99
|
+
}
|
|
100
|
+
export interface RectElement extends BaseElement {
|
|
101
|
+
type: 'rect';
|
|
102
|
+
lineStyle?: LineStyle;
|
|
103
|
+
fill?: string;
|
|
104
|
+
cornerRadius?: number;
|
|
105
|
+
}
|
|
106
|
+
export interface BarcodeElement extends BaseElement {
|
|
107
|
+
type: 'barcode';
|
|
108
|
+
barcodeType: 'qr' | 'code128' | 'ean13' | 'code39';
|
|
109
|
+
/** Static value or expression like {{ds1.invoiceNumber}} */
|
|
110
|
+
value: string;
|
|
111
|
+
}
|
|
112
|
+
export interface PageNumberElement extends BaseElement {
|
|
113
|
+
type: 'pageNumber';
|
|
114
|
+
format?: string;
|
|
115
|
+
}
|
|
116
|
+
export interface TotalPagesElement extends BaseElement {
|
|
117
|
+
type: 'totalPages';
|
|
118
|
+
}
|
|
119
|
+
export interface CurrentDateElement extends BaseElement {
|
|
120
|
+
type: 'currentDate';
|
|
121
|
+
format?: string;
|
|
122
|
+
}
|
|
123
|
+
export type ReportElement = TextElement | FieldElement | ImageElement | LineElement | RectElement | BarcodeElement | PageNumberElement | TotalPagesElement | CurrentDateElement;
|
|
124
|
+
export type BandType = 'reportHeader' | 'pageHeader' | 'groupHeader' | 'columnHeader' | 'detail' | 'columnFooter' | 'groupFooter' | 'pageFooter' | 'reportFooter';
|
|
125
|
+
export interface Band {
|
|
126
|
+
id: string;
|
|
127
|
+
type: BandType;
|
|
128
|
+
height: number;
|
|
129
|
+
elements: ReportElement[];
|
|
130
|
+
/** For detail bands: which dataSource drives iteration */
|
|
131
|
+
dataSource?: string;
|
|
132
|
+
/** For group bands: which field to group by */
|
|
133
|
+
groupField?: string;
|
|
134
|
+
/** Keep together on same page if possible */
|
|
135
|
+
keepTogether?: boolean;
|
|
136
|
+
/** Repeat on every page (for column headers) */
|
|
137
|
+
repeatOnEveryPage?: boolean;
|
|
138
|
+
/** Background color of the band */
|
|
139
|
+
backgroundColor?: string;
|
|
140
|
+
visible?: boolean;
|
|
141
|
+
}
|
|
142
|
+
export interface SortDef {
|
|
143
|
+
field: string;
|
|
144
|
+
direction: 'asc' | 'desc';
|
|
145
|
+
}
|
|
146
|
+
export interface GroupDef {
|
|
147
|
+
field: string;
|
|
148
|
+
headerBandId: string;
|
|
149
|
+
footerBandId?: string;
|
|
150
|
+
sort?: 'asc' | 'desc';
|
|
151
|
+
/** Start each group on a new page */
|
|
152
|
+
pageBreakBefore?: boolean;
|
|
153
|
+
}
|
|
154
|
+
export type AggregateFunction = 'sum' | 'avg' | 'count' | 'min' | 'max';
|
|
155
|
+
export interface ReportLayout {
|
|
156
|
+
version: string;
|
|
157
|
+
name: string;
|
|
158
|
+
description?: string;
|
|
159
|
+
pageSize: PageSize;
|
|
160
|
+
margins: Margins;
|
|
161
|
+
orientation?: 'portrait' | 'landscape';
|
|
162
|
+
dataSources: DataSourceDef[];
|
|
163
|
+
bands: Band[];
|
|
164
|
+
groups?: GroupDef[];
|
|
165
|
+
sorting?: SortDef[];
|
|
166
|
+
/** Default styles applied to all elements */
|
|
167
|
+
defaultStyle?: ElementStyle;
|
|
168
|
+
/** Named styles for reuse */
|
|
169
|
+
styles?: Record<string, ElementStyle>;
|
|
170
|
+
/** Report parameters (user inputs before rendering) */
|
|
171
|
+
parameters?: ParameterDef[];
|
|
172
|
+
/** Metadata */
|
|
173
|
+
metadata?: Record<string, unknown>;
|
|
174
|
+
}
|
|
175
|
+
export interface ParameterDef {
|
|
176
|
+
id: string;
|
|
177
|
+
name: string;
|
|
178
|
+
label: string;
|
|
179
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'select';
|
|
180
|
+
defaultValue?: unknown;
|
|
181
|
+
options?: {
|
|
182
|
+
value: unknown;
|
|
183
|
+
label: string;
|
|
184
|
+
}[];
|
|
185
|
+
required?: boolean;
|
|
186
|
+
}
|
|
187
|
+
export interface DataSet {
|
|
188
|
+
[dataSourceId: string]: Record<string, unknown> | Record<string, unknown>[];
|
|
189
|
+
}
|
|
190
|
+
export interface RenderPage {
|
|
191
|
+
pageNumber: number;
|
|
192
|
+
totalPages: number;
|
|
193
|
+
html: string;
|
|
194
|
+
}
|
|
195
|
+
export interface RenderResult {
|
|
196
|
+
pages: RenderPage[];
|
|
197
|
+
totalPages: number;
|
|
198
|
+
generatedAt: string;
|
|
199
|
+
}
|
|
200
|
+
export interface RenderOptions {
|
|
201
|
+
/** Parameters provided by the user */
|
|
202
|
+
parameters?: Record<string, unknown>;
|
|
203
|
+
/** Override page size for this render */
|
|
204
|
+
pageSize?: PageSize;
|
|
205
|
+
/** CSS class prefix to avoid collisions */
|
|
206
|
+
cssPrefix?: string;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/D,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACvC;AAID,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,yDAAyD;IACzD,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,WAAW,GACnB,MAAM,GACN,OAAO,GACP,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,GACT,OAAO,GACP,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,aAAa,CAAC;AAElB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qDAAqD;IACrD,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;CACrD;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,OAAO,CAAC;IACd,oDAAoD;IACpD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;CAC7C;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnD,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,CAAC;AAIvB,MAAM,MAAM,QAAQ,GAChB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,cAAc,GACd,QAAQ,GACR,cAAc,GACd,aAAa,GACb,YAAY,GACZ,cAAc,CAAC;AAEnB,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,qCAAqC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAID,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC;AAIxE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACvC,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,uDAAuD;IACvD,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,MAAM,WAAW,OAAO;IACtB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CAC7E;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,yCAAyC;IACzC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yCAAyC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zentto/report-core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Pure logic engine for Zentto Report — schema, data binding, band engine, expressions, rendering. Zero UI dependencies.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest",
|
|
24
|
+
"test:coverage": "vitest run --coverage",
|
|
25
|
+
"clean": "rm -rf dist"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"zod": "^3.24.1"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
32
|
+
"vitest": "^3.2.4"
|
|
33
|
+
},
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "https://github.com/zentto-erp/zentto-report"
|
|
38
|
+
},
|
|
39
|
+
"keywords": [
|
|
40
|
+
"report",
|
|
41
|
+
"report-designer",
|
|
42
|
+
"crystal-reports",
|
|
43
|
+
"pdf",
|
|
44
|
+
"wysiwyg",
|
|
45
|
+
"band-report",
|
|
46
|
+
"zentto"
|
|
47
|
+
]
|
|
48
|
+
}
|