@pdfme/common 0.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 (108) hide show
  1. package/README.md +5 -0
  2. package/dist/cjs/__tests__/dynamicTemplate.test.js +275 -0
  3. package/dist/cjs/__tests__/dynamicTemplate.test.js.map +1 -0
  4. package/dist/cjs/__tests__/expression.test.js +474 -0
  5. package/dist/cjs/__tests__/expression.test.js.map +1 -0
  6. package/dist/cjs/__tests__/helper.test.js +647 -0
  7. package/dist/cjs/__tests__/helper.test.js.map +1 -0
  8. package/dist/cjs/__tests__/pluginRegistry.test.js +83 -0
  9. package/dist/cjs/__tests__/pluginRegistry.test.js.map +1 -0
  10. package/dist/cjs/src/constants.js +27 -0
  11. package/dist/cjs/src/constants.js.map +1 -0
  12. package/dist/cjs/src/dynamicTemplate.js +284 -0
  13. package/dist/cjs/src/dynamicTemplate.js.map +1 -0
  14. package/dist/cjs/src/expression.js +463 -0
  15. package/dist/cjs/src/expression.js.map +1 -0
  16. package/dist/cjs/src/helper.js +217 -0
  17. package/dist/cjs/src/helper.js.map +1 -0
  18. package/dist/cjs/src/index.js +42 -0
  19. package/dist/cjs/src/index.js.map +1 -0
  20. package/dist/cjs/src/pluginRegistry.js +33 -0
  21. package/dist/cjs/src/pluginRegistry.js.map +1 -0
  22. package/dist/cjs/src/schema.js +190 -0
  23. package/dist/cjs/src/schema.js.map +1 -0
  24. package/dist/cjs/src/types.js +3 -0
  25. package/dist/cjs/src/types.js.map +1 -0
  26. package/dist/cjs/src/version.js +5 -0
  27. package/dist/cjs/src/version.js.map +1 -0
  28. package/dist/esm/__tests__/dynamicTemplate.test.js +240 -0
  29. package/dist/esm/__tests__/dynamicTemplate.test.js.map +1 -0
  30. package/dist/esm/__tests__/expression.test.js +472 -0
  31. package/dist/esm/__tests__/expression.test.js.map +1 -0
  32. package/dist/esm/__tests__/helper.test.js +612 -0
  33. package/dist/esm/__tests__/helper.test.js.map +1 -0
  34. package/dist/esm/__tests__/pluginRegistry.test.js +81 -0
  35. package/dist/esm/__tests__/pluginRegistry.test.js.map +1 -0
  36. package/dist/esm/src/constants.js +24 -0
  37. package/dist/esm/src/constants.js.map +1 -0
  38. package/dist/esm/src/dynamicTemplate.js +280 -0
  39. package/dist/esm/src/dynamicTemplate.js.map +1 -0
  40. package/dist/esm/src/expression.js +426 -0
  41. package/dist/esm/src/expression.js.map +1 -0
  42. package/dist/esm/src/helper.js +193 -0
  43. package/dist/esm/src/helper.js.map +1 -0
  44. package/dist/esm/src/index.js +8 -0
  45. package/dist/esm/src/index.js.map +1 -0
  46. package/dist/esm/src/pluginRegistry.js +29 -0
  47. package/dist/esm/src/pluginRegistry.js.map +1 -0
  48. package/dist/esm/src/schema.js +187 -0
  49. package/dist/esm/src/schema.js.map +1 -0
  50. package/dist/esm/src/types.js +2 -0
  51. package/dist/esm/src/types.js.map +1 -0
  52. package/dist/esm/src/version.js +2 -0
  53. package/dist/esm/src/version.js.map +1 -0
  54. package/dist/node/__tests__/dynamicTemplate.test.js +275 -0
  55. package/dist/node/__tests__/dynamicTemplate.test.js.map +1 -0
  56. package/dist/node/__tests__/expression.test.js +474 -0
  57. package/dist/node/__tests__/expression.test.js.map +1 -0
  58. package/dist/node/__tests__/helper.test.js +647 -0
  59. package/dist/node/__tests__/helper.test.js.map +1 -0
  60. package/dist/node/__tests__/pluginRegistry.test.js +83 -0
  61. package/dist/node/__tests__/pluginRegistry.test.js.map +1 -0
  62. package/dist/node/src/constants.js +27 -0
  63. package/dist/node/src/constants.js.map +1 -0
  64. package/dist/node/src/dynamicTemplate.js +284 -0
  65. package/dist/node/src/dynamicTemplate.js.map +1 -0
  66. package/dist/node/src/expression.js +463 -0
  67. package/dist/node/src/expression.js.map +1 -0
  68. package/dist/node/src/helper.js +217 -0
  69. package/dist/node/src/helper.js.map +1 -0
  70. package/dist/node/src/index.js +42 -0
  71. package/dist/node/src/index.js.map +1 -0
  72. package/dist/node/src/pluginRegistry.js +33 -0
  73. package/dist/node/src/pluginRegistry.js.map +1 -0
  74. package/dist/node/src/schema.js +190 -0
  75. package/dist/node/src/schema.js.map +1 -0
  76. package/dist/node/src/types.js +3 -0
  77. package/dist/node/src/types.js.map +1 -0
  78. package/dist/node/src/version.js +5 -0
  79. package/dist/node/src/version.js.map +1 -0
  80. package/dist/types/__tests__/dynamicTemplate.test.d.ts +1 -0
  81. package/dist/types/__tests__/expression.test.d.ts +1 -0
  82. package/dist/types/__tests__/helper.test.d.ts +1 -0
  83. package/dist/types/__tests__/pluginRegistry.test.d.ts +1 -0
  84. package/dist/types/src/constants.d.ts +20 -0
  85. package/dist/types/src/dynamicTemplate.d.ts +15 -0
  86. package/dist/types/src/expression.d.ts +6 -0
  87. package/dist/types/src/helper.d.ts +35 -0
  88. package/dist/types/src/index.d.ts +9 -0
  89. package/dist/types/src/pluginRegistry.d.ts +5 -0
  90. package/dist/types/src/schema.d.ts +820 -0
  91. package/dist/types/src/types.d.ts +181 -0
  92. package/dist/types/src/version.d.ts +1 -0
  93. package/eslint.config.mjs +22 -0
  94. package/package.json +84 -0
  95. package/set-version.js +31 -0
  96. package/src/constants.ts +30 -0
  97. package/src/dynamicTemplate.ts +349 -0
  98. package/src/expression.ts +460 -0
  99. package/src/helper.ts +284 -0
  100. package/src/index.ts +136 -0
  101. package/src/pluginRegistry.ts +30 -0
  102. package/src/schema.ts +223 -0
  103. package/src/types.ts +198 -0
  104. package/src/version.ts +1 -0
  105. package/tsconfig.cjs.json +10 -0
  106. package/tsconfig.esm.json +11 -0
  107. package/tsconfig.json +6 -0
  108. package/tsconfig.node.json +11 -0
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDynamicTemplate = void 0;
4
+ const helper_js_1 = require("./helper.js");
5
+ class LayoutNode {
6
+ constructor({ width = 0, height = 0 } = {}) {
7
+ Object.defineProperty(this, "index", {
8
+ enumerable: true,
9
+ configurable: true,
10
+ writable: true,
11
+ value: 0
12
+ });
13
+ Object.defineProperty(this, "schema", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "children", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: []
24
+ });
25
+ Object.defineProperty(this, "width", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: 0
30
+ });
31
+ Object.defineProperty(this, "height", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: 0
36
+ });
37
+ Object.defineProperty(this, "padding", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: [0, 0, 0, 0]
42
+ });
43
+ Object.defineProperty(this, "position", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: { x: 0, y: 0 }
48
+ });
49
+ this.width = width;
50
+ this.height = height;
51
+ }
52
+ setIndex(index) {
53
+ this.index = index;
54
+ }
55
+ setSchema(schema) {
56
+ this.schema = schema;
57
+ }
58
+ setWidth(width) {
59
+ this.width = width;
60
+ }
61
+ setHeight(height) {
62
+ this.height = height;
63
+ }
64
+ setPadding(padding) {
65
+ this.padding = padding;
66
+ }
67
+ setPosition(position) {
68
+ this.position = position;
69
+ }
70
+ insertChild(child) {
71
+ const index = this.getChildCount();
72
+ child.setIndex(index);
73
+ this.children.splice(index, 0, child);
74
+ }
75
+ getChildCount() {
76
+ return this.children.length;
77
+ }
78
+ getChild(index) {
79
+ return this.children[index];
80
+ }
81
+ }
82
+ function createPage(basePdf) {
83
+ const page = new LayoutNode({ ...basePdf });
84
+ page.setPadding(basePdf.padding);
85
+ return page;
86
+ }
87
+ function createNode(arg) {
88
+ const { position, width, height, schema } = arg;
89
+ const node = new LayoutNode({ width, height });
90
+ node.setPosition(position);
91
+ node.setSchema(schema);
92
+ return node;
93
+ }
94
+ function resortChildren(page, orderMap) {
95
+ page.children = page.children
96
+ .sort((a, b) => {
97
+ const orderA = orderMap.get(a.schema?.name ?? '');
98
+ const orderB = orderMap.get(b.schema?.name ?? '');
99
+ if (orderA === undefined || orderB === undefined) {
100
+ throw new Error('[@pdfme/common] order is not defined');
101
+ }
102
+ return orderA - orderB;
103
+ })
104
+ .map((child, index) => {
105
+ child.setIndex(index);
106
+ return child;
107
+ });
108
+ }
109
+ async function createOnePage(arg) {
110
+ const { basePdf, schemaPage, orderMap, input, options, _cache, getDynamicHeights } = arg;
111
+ const page = createPage(basePdf);
112
+ const schemaPositions = [];
113
+ const sortedSchemaEntries = (0, helper_js_1.cloneDeep)(schemaPage).sort((a, b) => a.position.y - b.position.y);
114
+ const diffMap = new Map();
115
+ for (const schema of sortedSchemaEntries) {
116
+ const { position, width } = schema;
117
+ const opt = { schema, basePdf, options, _cache };
118
+ const value = (schema.readOnly ? schema.content : input?.[schema.name]) || '';
119
+ const heights = await getDynamicHeights(value, opt);
120
+ const heightsSum = heights.reduce((acc, cur) => acc + cur, 0);
121
+ const originalHeight = schema.height;
122
+ if (heightsSum !== originalHeight) {
123
+ diffMap.set(position.y + originalHeight, heightsSum - originalHeight);
124
+ }
125
+ heights.forEach((height, index) => {
126
+ let y = schema.position.y + heights.reduce((acc, cur, i) => (i < index ? acc + cur : acc), 0);
127
+ for (const [diffY, diff] of diffMap.entries()) {
128
+ if (diffY <= schema.position.y) {
129
+ y += diff;
130
+ }
131
+ }
132
+ const node = createNode({ schema, position: { ...position, y }, width, height });
133
+ schemaPositions.push(y + height + basePdf.padding[2]);
134
+ page.insertChild(node);
135
+ });
136
+ }
137
+ const pageHeight = Math.max(...schemaPositions, basePdf.height - basePdf.padding[2]);
138
+ page.setHeight(pageHeight);
139
+ resortChildren(page, orderMap);
140
+ return page;
141
+ }
142
+ function breakIntoPages(arg) {
143
+ const { longPage, orderMap, basePdf } = arg;
144
+ const pages = [createPage(basePdf)];
145
+ const [paddingTop, , paddingBottom] = basePdf.padding;
146
+ const yAdjustments = [];
147
+ const getPageHeight = (pageIndex) => basePdf.height - paddingBottom - (pageIndex > 0 ? paddingTop : 0);
148
+ const calculateNewY = (y, pageIndex) => {
149
+ const newY = y - pageIndex * (basePdf.height - paddingTop - paddingBottom);
150
+ while (pages.length <= pageIndex) {
151
+ if (!pages[pageIndex]) {
152
+ pages.push(createPage(basePdf));
153
+ yAdjustments.push({ page: pageIndex, value: (newY - paddingTop) * -1 });
154
+ }
155
+ }
156
+ return newY + (yAdjustments.find((adj) => adj.page === pageIndex)?.value || 0);
157
+ };
158
+ const calculateTargetPageIndex = (y) => {
159
+ let accumulatedHeight = 0;
160
+ let pageIndex = 0;
161
+ while (true) {
162
+ const currentPageHeight = getPageHeight(pageIndex);
163
+ if (y <= accumulatedHeight + currentPageHeight) {
164
+ return pageIndex;
165
+ }
166
+ accumulatedHeight += currentPageHeight;
167
+ pageIndex++;
168
+ }
169
+ };
170
+ const children = longPage.children.sort((a, b) => a.position.y - b.position.y);
171
+ let currentPageIndex = 0;
172
+ for (let i = 0; i < children.length; i++) {
173
+ const { schema, position, height, width } = children[i];
174
+ const { y, x } = position;
175
+ let targetPageIndex = calculateTargetPageIndex(y);
176
+ if (targetPageIndex < currentPageIndex) {
177
+ targetPageIndex = currentPageIndex;
178
+ }
179
+ let newY = calculateNewY(y, targetPageIndex);
180
+ while (newY + height > basePdf.height - paddingBottom) {
181
+ const currentPageContentHeight = getPageHeight(targetPageIndex + 1);
182
+ if (height > currentPageContentHeight) {
183
+ targetPageIndex++;
184
+ newY = calculateNewY(y, targetPageIndex);
185
+ break;
186
+ }
187
+ targetPageIndex++;
188
+ newY = calculateNewY(y, targetPageIndex);
189
+ }
190
+ currentPageIndex = targetPageIndex;
191
+ if (!schema)
192
+ throw new Error('[@pdfme/common] schema is undefined');
193
+ const clonedElement = createNode({ schema, position: { x, y: newY }, width, height });
194
+ pages[targetPageIndex].insertChild(clonedElement);
195
+ }
196
+ pages.forEach((page) => resortChildren(page, orderMap));
197
+ return pages;
198
+ }
199
+ function createNewTemplate(pages, basePdf) {
200
+ const newTemplate = {
201
+ schemas: Array.from({ length: pages.length }, () => []),
202
+ basePdf: basePdf,
203
+ };
204
+ const nameToSchemas = new Map();
205
+ (0, helper_js_1.cloneDeep)(pages).forEach((page, pageIndex) => {
206
+ page.children.forEach((child) => {
207
+ const { schema } = child;
208
+ if (!schema)
209
+ throw new Error('[@pdfme/common] schema is undefined');
210
+ const name = schema.name;
211
+ if (!nameToSchemas.has(name)) {
212
+ nameToSchemas.set(name, []);
213
+ }
214
+ nameToSchemas.get(name).push(child);
215
+ const sameNameSchemas = page.children.filter((c) => c.schema?.name === name);
216
+ const start = nameToSchemas.get(name).length - sameNameSchemas.length;
217
+ if (sameNameSchemas.length > 0) {
218
+ if (!sameNameSchemas[0].schema) {
219
+ throw new Error('[@pdfme/common] schema is undefined');
220
+ }
221
+ // Use the first schema to get the schema and position
222
+ const schema = sameNameSchemas[0].schema;
223
+ const height = sameNameSchemas.reduce((acc, cur) => acc + cur.height, 0);
224
+ const position = sameNameSchemas[0].position;
225
+ // Currently, __bodyRange exists for table schemas, but if we make it more abstract,
226
+ // it could be used for other schemas as well to render schemas that have been split by page breaks, starting from the middle.
227
+ schema.__bodyRange = {
228
+ start: Math.max(start - 1, 0),
229
+ end: start + sameNameSchemas.length - 1,
230
+ };
231
+ // Currently, this is used to determine whether to display the header when a table is split.
232
+ schema.__isSplit = start > 0;
233
+ const newSchema = Object.assign({}, schema, { position, height });
234
+ const index = newTemplate.schemas[pageIndex].findIndex((s) => s.name === name);
235
+ if (index !== -1) {
236
+ newTemplate.schemas[pageIndex][index] = newSchema;
237
+ }
238
+ else {
239
+ newTemplate.schemas[pageIndex].push(newSchema);
240
+ }
241
+ }
242
+ });
243
+ });
244
+ return newTemplate;
245
+ }
246
+ function flattenSchemasWithOffset(templateSchemas, basePdf) {
247
+ const flatSchemas = [];
248
+ const orderMap = new Map();
249
+ let globalOrder = 0;
250
+ const [paddingTop, , paddingBottom] = basePdf.padding;
251
+ const getPageHeight = (pageIndex) => basePdf.height - paddingBottom - (pageIndex > 0 ? paddingTop : 0);
252
+ let yOffset = 0;
253
+ templateSchemas.forEach((schemaPage, pageIndex) => {
254
+ if (pageIndex > 0)
255
+ yOffset += getPageHeight(pageIndex - 1);
256
+ schemaPage.forEach((schema) => {
257
+ const clonedSchema = (0, helper_js_1.cloneDeep)(schema);
258
+ clonedSchema.position = { ...clonedSchema.position, y: clonedSchema.position.y + yOffset };
259
+ flatSchemas.push(clonedSchema);
260
+ if (!orderMap.has(schema.name)) {
261
+ orderMap.set(schema.name, globalOrder++);
262
+ }
263
+ });
264
+ });
265
+ return { flatSchemas, orderMap };
266
+ }
267
+ const getDynamicTemplate = async (arg) => {
268
+ const { template, ...rest } = arg;
269
+ const basePdf = template.basePdf;
270
+ if (!(0, helper_js_1.isBlankPdf)(basePdf)) {
271
+ return template;
272
+ }
273
+ const { flatSchemas, orderMap } = flattenSchemasWithOffset(template.schemas, basePdf);
274
+ const longPage = await createOnePage({
275
+ basePdf,
276
+ schemaPage: flatSchemas,
277
+ orderMap,
278
+ ...rest,
279
+ });
280
+ const pages = breakIntoPages({ longPage, basePdf, orderMap });
281
+ return createNewTemplate(pages, basePdf);
282
+ };
283
+ exports.getDynamicTemplate = getDynamicTemplate;
284
+ //# sourceMappingURL=dynamicTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicTemplate.js","sourceRoot":"","sources":["../../../src/dynamicTemplate.ts"],"names":[],"mappings":"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"}