@pdfme/common 5.5.10 → 6.0.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 (105) hide show
  1. package/package.json +30 -55
  2. package/set-version.js +9 -4
  3. package/src/dynamicTemplate.ts +3 -1
  4. package/src/expression.ts +14 -5
  5. package/src/helper.ts +9 -3
  6. package/src/types.ts +20 -15
  7. package/src/version.ts +1 -1
  8. package/tsconfig.build.json +14 -0
  9. package/tsconfig.json +14 -4
  10. package/vite.config.mts +33 -0
  11. package/dist/cjs/__tests__/dynamicTemplate.test.js +0 -337
  12. package/dist/cjs/__tests__/dynamicTemplate.test.js.map +0 -1
  13. package/dist/cjs/__tests__/expression.test.js +0 -474
  14. package/dist/cjs/__tests__/expression.test.js.map +0 -1
  15. package/dist/cjs/__tests__/helper.test.js +0 -647
  16. package/dist/cjs/__tests__/helper.test.js.map +0 -1
  17. package/dist/cjs/__tests__/pluginRegistry.test.js +0 -83
  18. package/dist/cjs/__tests__/pluginRegistry.test.js.map +0 -1
  19. package/dist/cjs/src/constants.js +0 -27
  20. package/dist/cjs/src/constants.js.map +0 -1
  21. package/dist/cjs/src/dynamicTemplate.js +0 -228
  22. package/dist/cjs/src/dynamicTemplate.js.map +0 -1
  23. package/dist/cjs/src/expression.js +0 -463
  24. package/dist/cjs/src/expression.js.map +0 -1
  25. package/dist/cjs/src/helper.js +0 -277
  26. package/dist/cjs/src/helper.js.map +0 -1
  27. package/dist/cjs/src/index.js +0 -43
  28. package/dist/cjs/src/index.js.map +0 -1
  29. package/dist/cjs/src/pluginRegistry.js +0 -33
  30. package/dist/cjs/src/pluginRegistry.js.map +0 -1
  31. package/dist/cjs/src/schema.js +0 -190
  32. package/dist/cjs/src/schema.js.map +0 -1
  33. package/dist/cjs/src/types.js +0 -3
  34. package/dist/cjs/src/types.js.map +0 -1
  35. package/dist/cjs/src/version.js +0 -5
  36. package/dist/cjs/src/version.js.map +0 -1
  37. package/dist/esm/__tests__/dynamicTemplate.test.js +0 -302
  38. package/dist/esm/__tests__/dynamicTemplate.test.js.map +0 -1
  39. package/dist/esm/__tests__/expression.test.js +0 -472
  40. package/dist/esm/__tests__/expression.test.js.map +0 -1
  41. package/dist/esm/__tests__/helper.test.js +0 -612
  42. package/dist/esm/__tests__/helper.test.js.map +0 -1
  43. package/dist/esm/__tests__/pluginRegistry.test.js +0 -81
  44. package/dist/esm/__tests__/pluginRegistry.test.js.map +0 -1
  45. package/dist/esm/src/constants.js +0 -24
  46. package/dist/esm/src/constants.js.map +0 -1
  47. package/dist/esm/src/dynamicTemplate.js +0 -224
  48. package/dist/esm/src/dynamicTemplate.js.map +0 -1
  49. package/dist/esm/src/expression.js +0 -426
  50. package/dist/esm/src/expression.js.map +0 -1
  51. package/dist/esm/src/helper.js +0 -252
  52. package/dist/esm/src/helper.js.map +0 -1
  53. package/dist/esm/src/index.js +0 -8
  54. package/dist/esm/src/index.js.map +0 -1
  55. package/dist/esm/src/pluginRegistry.js +0 -29
  56. package/dist/esm/src/pluginRegistry.js.map +0 -1
  57. package/dist/esm/src/schema.js +0 -187
  58. package/dist/esm/src/schema.js.map +0 -1
  59. package/dist/esm/src/types.js +0 -2
  60. package/dist/esm/src/types.js.map +0 -1
  61. package/dist/esm/src/version.js +0 -2
  62. package/dist/esm/src/version.js.map +0 -1
  63. package/dist/node/__tests__/dynamicTemplate.test.js +0 -337
  64. package/dist/node/__tests__/dynamicTemplate.test.js.map +0 -1
  65. package/dist/node/__tests__/expression.test.js +0 -474
  66. package/dist/node/__tests__/expression.test.js.map +0 -1
  67. package/dist/node/__tests__/helper.test.js +0 -647
  68. package/dist/node/__tests__/helper.test.js.map +0 -1
  69. package/dist/node/__tests__/pluginRegistry.test.js +0 -83
  70. package/dist/node/__tests__/pluginRegistry.test.js.map +0 -1
  71. package/dist/node/src/constants.js +0 -27
  72. package/dist/node/src/constants.js.map +0 -1
  73. package/dist/node/src/dynamicTemplate.js +0 -228
  74. package/dist/node/src/dynamicTemplate.js.map +0 -1
  75. package/dist/node/src/expression.js +0 -463
  76. package/dist/node/src/expression.js.map +0 -1
  77. package/dist/node/src/helper.js +0 -277
  78. package/dist/node/src/helper.js.map +0 -1
  79. package/dist/node/src/index.js +0 -43
  80. package/dist/node/src/index.js.map +0 -1
  81. package/dist/node/src/pluginRegistry.js +0 -33
  82. package/dist/node/src/pluginRegistry.js.map +0 -1
  83. package/dist/node/src/schema.js +0 -190
  84. package/dist/node/src/schema.js.map +0 -1
  85. package/dist/node/src/types.js +0 -3
  86. package/dist/node/src/types.js.map +0 -1
  87. package/dist/node/src/version.js +0 -5
  88. package/dist/node/src/version.js.map +0 -1
  89. package/dist/types/__tests__/dynamicTemplate.test.d.ts +0 -1
  90. package/dist/types/__tests__/expression.test.d.ts +0 -1
  91. package/dist/types/__tests__/helper.test.d.ts +0 -1
  92. package/dist/types/__tests__/pluginRegistry.test.d.ts +0 -1
  93. package/dist/types/src/constants.d.ts +0 -20
  94. package/dist/types/src/dynamicTemplate.d.ts +0 -27
  95. package/dist/types/src/expression.d.ts +0 -6
  96. package/dist/types/src/helper.d.ts +0 -36
  97. package/dist/types/src/index.d.ts +0 -9
  98. package/dist/types/src/pluginRegistry.d.ts +0 -5
  99. package/dist/types/src/schema.d.ts +0 -820
  100. package/dist/types/src/types.d.ts +0 -181
  101. package/dist/types/src/version.d.ts +0 -1
  102. package/eslint.config.mjs +0 -22
  103. package/tsconfig.cjs.json +0 -10
  104. package/tsconfig.esm.json +0 -11
  105. package/tsconfig.node.json +0 -11
@@ -1,302 +0,0 @@
1
- import { readFileSync } from 'fs';
2
- import * as path from 'path';
3
- import { getDynamicTemplate } from '../src/dynamicTemplate.js';
4
- const sansData = readFileSync(path.join(__dirname, `/assets/fonts/NotoSans-Regular.ttf`));
5
- const serifData = readFileSync(path.join(__dirname, `/assets/fonts/NotoSerif-Regular.ttf`));
6
- const getSampleFont = () => ({
7
- NotoSans: { fallback: true, data: sansData },
8
- NotoSerif: { data: serifData },
9
- });
10
- describe('getDynamicTemplate', () => {
11
- const height = 10;
12
- const aPositionY = 10;
13
- const bPositionY = 30;
14
- const padding = 10;
15
- const template = {
16
- schemas: [
17
- [
18
- {
19
- name: 'a',
20
- content: 'a',
21
- type: 'a',
22
- position: { x: 10, y: aPositionY },
23
- width: 10,
24
- height,
25
- },
26
- {
27
- name: 'b',
28
- content: 'b',
29
- type: 'b',
30
- position: { x: 10, y: bPositionY },
31
- width: 10,
32
- height,
33
- },
34
- ],
35
- ],
36
- basePdf: { width: 100, height: 100, padding: [padding, padding, padding, padding] },
37
- };
38
- const input = { a: 'a', b: 'b' };
39
- const options = { font: getSampleFont() };
40
- const _cache = new Map();
41
- const getDynamicTemplateArg = { template, input, options, _cache };
42
- const createGetDynamicTemplateArg = (increaseHeights, bHeight) => ({
43
- ...getDynamicTemplateArg,
44
- getDynamicHeights: async (value, args) => {
45
- if (args.schema.type === 'a') {
46
- return Promise.resolve(increaseHeights);
47
- }
48
- return Promise.resolve([bHeight || args.schema.height]);
49
- },
50
- });
51
- const verifyBasicStructure = (dynamicTemplate) => {
52
- expect(dynamicTemplate.schemas).toBeDefined();
53
- expect(Array.isArray(dynamicTemplate.schemas)).toBe(true);
54
- expect(dynamicTemplate.basePdf).toEqual({
55
- width: 100,
56
- height: 100,
57
- padding: [padding, padding, padding, padding],
58
- });
59
- };
60
- describe('Single page scenarios', () => {
61
- test('should handle no page break', async () => {
62
- const increaseHeights = [10, 10, 10, 10, 10];
63
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
64
- verifyBasicStructure(dynamicTemplate);
65
- expect(dynamicTemplate.schemas.length).toBe(1);
66
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
67
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
68
- expect(dynamicTemplate.schemas[0][1].position.y).toEqual(increaseHeights.reduce((a, b) => a + b, 0) - height + bPositionY);
69
- expect(dynamicTemplate.schemas[0][1].name).toEqual('b');
70
- });
71
- });
72
- describe('Multiple page scenarios', () => {
73
- test('should handle page break with a on page 1 and b on page 2', async () => {
74
- const increaseHeights = [20, 20, 20, 20];
75
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
76
- verifyBasicStructure(dynamicTemplate);
77
- expect(dynamicTemplate.schemas.length).toBe(2);
78
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
79
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
80
- expect(dynamicTemplate.schemas[0][1]).toBeUndefined();
81
- expect(dynamicTemplate.schemas[1][0].name).toEqual('b');
82
- // b maintains its relative offset from a's end position
83
- // a ends at y=90 (page content), b was 20 units below a, so b is at y=10 in page coords + padding = 20
84
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding + padding);
85
- expect(dynamicTemplate.schemas[1][1]).toBeUndefined();
86
- });
87
- test('should handle page break with a on page 1 and 2, b on page 2', async () => {
88
- const increaseHeights = [20, 20, 20, 20, 20];
89
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
90
- verifyBasicStructure(dynamicTemplate);
91
- expect(dynamicTemplate.schemas.length).toBe(2);
92
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
93
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
94
- expect(dynamicTemplate.schemas[0][1]).toBeUndefined();
95
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding);
96
- expect(dynamicTemplate.schemas[1][0].name).toEqual('a');
97
- expect(dynamicTemplate.schemas[1][1].position.y).toEqual(increaseHeights.slice(3).reduce((a, b) => a + b, 0) - height + padding);
98
- expect(dynamicTemplate.schemas[1][1].name).toEqual('b');
99
- });
100
- test('should handle multiple page breaks', async () => {
101
- const increaseHeights = [50, 50, 50, 50, 50];
102
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
103
- verifyBasicStructure(dynamicTemplate);
104
- expect(dynamicTemplate.schemas.length).toBe(5);
105
- // Verify 'a' elements across pages
106
- // Page 0: 'a' first segment (50px)
107
- expect(dynamicTemplate.schemas[0][0]).toBeDefined();
108
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
109
- expect(dynamicTemplate.schemas[0][0].height).toEqual(50);
110
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
111
- // Page 1: 'a' second segment (50px)
112
- expect(dynamicTemplate.schemas[1][0]).toBeDefined();
113
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding);
114
- expect(dynamicTemplate.schemas[1][0].height).toEqual(50);
115
- expect(dynamicTemplate.schemas[1][0].name).toEqual('a');
116
- // Page 2: 'a' third segment (50px)
117
- expect(dynamicTemplate.schemas[2][0]).toBeDefined();
118
- expect(dynamicTemplate.schemas[2][0].position.y).toEqual(padding);
119
- expect(dynamicTemplate.schemas[2][0].height).toEqual(50);
120
- expect(dynamicTemplate.schemas[2][0].name).toEqual('a');
121
- // Page 3: 'a' fourth segment (50px)
122
- expect(dynamicTemplate.schemas[3][0]).toBeDefined();
123
- expect(dynamicTemplate.schemas[3][0].position.y).toEqual(padding);
124
- expect(dynamicTemplate.schemas[3][0].height).toEqual(50);
125
- expect(dynamicTemplate.schemas[3][0].name).toEqual('a');
126
- // Page 4: 'a' fifth segment (50px) and 'b' element (10px)
127
- expect(dynamicTemplate.schemas[4][0]).toBeDefined();
128
- expect(dynamicTemplate.schemas[4][0].position.y).toEqual(padding);
129
- expect(dynamicTemplate.schemas[4][0].height).toEqual(50);
130
- expect(dynamicTemplate.schemas[4][0].name).toEqual('a');
131
- expect(dynamicTemplate.schemas[4][1]).toBeDefined();
132
- expect(dynamicTemplate.schemas[4][1].position.y).toEqual(70);
133
- expect(dynamicTemplate.schemas[4][1].height).toEqual(10);
134
- expect(dynamicTemplate.schemas[4][1].name).toEqual('b');
135
- });
136
- test('should handle both a and b on next page', async () => {
137
- const increaseHeights = [80, 10, 10];
138
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
139
- verifyBasicStructure(dynamicTemplate);
140
- expect(dynamicTemplate.schemas.length).toBe(2);
141
- // Check first page
142
- expect(dynamicTemplate.schemas[0][0]).toBeDefined();
143
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
144
- expect(dynamicTemplate.schemas[0][0].height).toEqual(80);
145
- expect(dynamicTemplate.schemas[0][1]).toBeUndefined();
146
- // Check second page
147
- expect(dynamicTemplate.schemas[1][0]).toBeDefined();
148
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding);
149
- expect(dynamicTemplate.schemas[1][0].height).toEqual(20);
150
- expect(dynamicTemplate.schemas[1][1]).toBeDefined();
151
- expect(dynamicTemplate.schemas[1][1].position.y).toBeGreaterThanOrEqual(dynamicTemplate.schemas[1][0].position.y + dynamicTemplate.schemas[1][0].height);
152
- });
153
- });
154
- describe('Element height modifications', () => {
155
- test('should handle increased height for b', async () => {
156
- const increaseHeights = [10, 10, 10, 10, 10];
157
- const bHeight = 30;
158
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights, bHeight));
159
- verifyBasicStructure(dynamicTemplate);
160
- expect(dynamicTemplate.schemas.length).toBe(2);
161
- // Check 'a' element
162
- expect(dynamicTemplate.schemas[0][0]).toBeDefined();
163
- expect(dynamicTemplate.schemas[0][0].position.y).toEqual(aPositionY);
164
- expect(dynamicTemplate.schemas[0][0].height).toEqual(50);
165
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
166
- // Check 'b' element
167
- expect(dynamicTemplate.schemas[1][0]).toBeDefined();
168
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding);
169
- expect(dynamicTemplate.schemas[1][0].height).toEqual(bHeight);
170
- expect(dynamicTemplate.schemas[1][0].name).toEqual('b');
171
- });
172
- });
173
- describe('Edge cases', () => {
174
- test('should handle empty increase heights', async () => {
175
- const increaseHeights = [];
176
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
177
- verifyBasicStructure(dynamicTemplate);
178
- expect(dynamicTemplate.schemas.length).toBe(1);
179
- // Both schemas are placed; 'a' with height 0, 'b' follows
180
- expect(dynamicTemplate.schemas[0][0]).toBeDefined();
181
- expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
182
- expect(dynamicTemplate.schemas[0][0].height).toEqual(0);
183
- expect(dynamicTemplate.schemas[0][1]).toBeDefined();
184
- expect(dynamicTemplate.schemas[0][1].name).toEqual('b');
185
- });
186
- test('should handle very large increase heights', async () => {
187
- const increaseHeights = [1000, 1000];
188
- const dynamicTemplate = await getDynamicTemplate(createGetDynamicTemplateArg(increaseHeights));
189
- verifyBasicStructure(dynamicTemplate);
190
- expect(dynamicTemplate.schemas.length).toBeGreaterThan(1);
191
- });
192
- });
193
- describe('Long page flow (cross-template-page)', () => {
194
- test('should process pages independently - static pages are added as-is without offset propagation', async () => {
195
- // New behavior: pages without dynamic content are added as-is,
196
- // without being affected by previous page's table expansion.
197
- // This reduces computation cost by skipping layout calculations for static pages.
198
- const templateWithTwoPages = {
199
- schemas: [
200
- [
201
- {
202
- name: 'table',
203
- content: 'table',
204
- type: 'table',
205
- position: { x: 10, y: 60 },
206
- width: 80,
207
- height: 10,
208
- },
209
- ],
210
- [
211
- {
212
- name: 'text',
213
- content: 'text',
214
- type: 'text',
215
- position: { x: 10, y: 10 },
216
- width: 80,
217
- height: 10,
218
- },
219
- ],
220
- ],
221
- basePdf: { width: 100, height: 100, padding: [10, 10, 10, 10] },
222
- };
223
- const dynamicTemplate = await getDynamicTemplate({
224
- template: templateWithTwoPages,
225
- input: { table: 'table', text: 'text' },
226
- options: { font: getSampleFont() },
227
- _cache: new Map(),
228
- getDynamicHeights: async (value, args) => {
229
- if (args.schema.type === 'table') {
230
- return [10, 10, 10, 10]; // 40 total height, will cause page break
231
- }
232
- return [args.schema.height];
233
- },
234
- });
235
- verifyBasicStructure(dynamicTemplate);
236
- // Page 1: table starts at y=60, with 40 height, will split across pages
237
- // Page 2: table continuation
238
- // Page 3: text from template page 2 (added as-is, no offset propagation)
239
- expect(dynamicTemplate.schemas.length).toBe(3);
240
- // First page has table
241
- expect(dynamicTemplate.schemas[0].some((s) => s.name === 'table')).toBe(true);
242
- // Second page has table continuation
243
- expect(dynamicTemplate.schemas[1].some((s) => s.name === 'table')).toBe(true);
244
- // Third page has text (from template page 2, added as-is)
245
- expect(dynamicTemplate.schemas[2].some((s) => s.name === 'text')).toBe(true);
246
- // Text position should be unchanged from template (y=10)
247
- const textOnPage3 = dynamicTemplate.schemas[2].find((s) => s.name === 'text');
248
- expect(textOnPage3).toBeDefined();
249
- expect(textOnPage3.position.y).toBe(10);
250
- });
251
- test('should keep static page schemas together with dynamic page when both on same template page', async () => {
252
- // When table and text are on the SAME template page, they should be processed together
253
- const templateWithOnePage = {
254
- schemas: [
255
- [
256
- {
257
- name: 'table',
258
- content: 'table',
259
- type: 'table',
260
- position: { x: 10, y: 10 },
261
- width: 80,
262
- height: 10,
263
- },
264
- {
265
- name: 'text',
266
- content: 'text',
267
- type: 'text',
268
- position: { x: 10, y: 30 },
269
- width: 80,
270
- height: 10,
271
- },
272
- ],
273
- ],
274
- basePdf: { width: 100, height: 100, padding: [10, 10, 10, 10] },
275
- };
276
- const dynamicTemplate = await getDynamicTemplate({
277
- template: templateWithOnePage,
278
- input: { table: 'table', text: 'text' },
279
- options: { font: getSampleFont() },
280
- _cache: new Map(),
281
- getDynamicHeights: async (value, args) => {
282
- if (args.schema.type === 'table') {
283
- return [10, 10, 10, 10]; // 40 total height
284
- }
285
- return [args.schema.height];
286
- },
287
- });
288
- verifyBasicStructure(dynamicTemplate);
289
- // Table expands from 10 to 40, pushing text down by 30
290
- // Both should still fit on one page (table ends at 50, text at 70)
291
- expect(dynamicTemplate.schemas.length).toBe(1);
292
- expect(dynamicTemplate.schemas[0].some((s) => s.name === 'table')).toBe(true);
293
- expect(dynamicTemplate.schemas[0].some((s) => s.name === 'text')).toBe(true);
294
- const table = dynamicTemplate.schemas[0].find((s) => s.name === 'table');
295
- const text = dynamicTemplate.schemas[0].find((s) => s.name === 'text');
296
- expect(table.height).toBe(40);
297
- // Text should be pushed down: original y=30 + (40-10) offset = 60
298
- expect(text.position.y).toBe(60);
299
- });
300
- });
301
- });
302
- //# sourceMappingURL=dynamicTemplate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamicTemplate.test.js","sourceRoot":"","sources":["../../../__tests__/dynamicTemplate.test.ts"],"names":[],"mappings":"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"}