@pdfme/common 5.1.7 → 5.2.0-dev.1

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 (50) hide show
  1. package/dist/cjs/__tests__/dynamicTemplate.test.js +197 -0
  2. package/dist/cjs/__tests__/dynamicTemplate.test.js.map +1 -0
  3. package/dist/cjs/__tests__/expression.test.js +271 -0
  4. package/dist/cjs/__tests__/expression.test.js.map +1 -0
  5. package/dist/cjs/__tests__/helper.test.js +92 -254
  6. package/dist/cjs/__tests__/helper.test.js.map +1 -1
  7. package/dist/cjs/src/constants.js +6 -0
  8. package/dist/cjs/src/constants.js.map +1 -1
  9. package/dist/cjs/src/dynamicTemplate.js +239 -0
  10. package/dist/cjs/src/dynamicTemplate.js.map +1 -0
  11. package/dist/cjs/src/expression.js +392 -0
  12. package/dist/cjs/src/expression.js.map +1 -0
  13. package/dist/cjs/src/helper.js +6 -238
  14. package/dist/cjs/src/helper.js.map +1 -1
  15. package/dist/cjs/src/index.js +5 -2
  16. package/dist/cjs/src/index.js.map +1 -1
  17. package/dist/cjs/src/schema.js +1 -0
  18. package/dist/cjs/src/schema.js.map +1 -1
  19. package/dist/esm/__tests__/dynamicTemplate.test.js +172 -0
  20. package/dist/esm/__tests__/dynamicTemplate.test.js.map +1 -0
  21. package/dist/esm/__tests__/expression.test.js +269 -0
  22. package/dist/esm/__tests__/expression.test.js.map +1 -0
  23. package/dist/esm/__tests__/helper.test.js +94 -256
  24. package/dist/esm/__tests__/helper.test.js.map +1 -1
  25. package/dist/esm/src/constants.js +6 -0
  26. package/dist/esm/src/constants.js.map +1 -1
  27. package/dist/esm/src/dynamicTemplate.js +235 -0
  28. package/dist/esm/src/dynamicTemplate.js.map +1 -0
  29. package/dist/esm/src/expression.js +365 -0
  30. package/dist/esm/src/expression.js.map +1 -0
  31. package/dist/esm/src/helper.js +5 -236
  32. package/dist/esm/src/helper.js.map +1 -1
  33. package/dist/esm/src/index.js +4 -2
  34. package/dist/esm/src/index.js.map +1 -1
  35. package/dist/esm/src/schema.js +1 -0
  36. package/dist/esm/src/schema.js.map +1 -1
  37. package/dist/types/__tests__/dynamicTemplate.test.d.ts +1 -0
  38. package/dist/types/__tests__/expression.test.d.ts +1 -0
  39. package/dist/types/src/dynamicTemplate.d.ts +15 -0
  40. package/dist/types/src/expression.d.ts +6 -0
  41. package/dist/types/src/helper.d.ts +34 -15
  42. package/dist/types/src/index.d.ts +4 -2
  43. package/dist/types/src/schema.d.ts +3631 -517
  44. package/package.json +5 -1
  45. package/src/constants.ts +8 -0
  46. package/src/dynamicTemplate.ts +277 -0
  47. package/src/expression.ts +392 -0
  48. package/src/helper.ts +10 -282
  49. package/src/index.ts +3 -1
  50. package/src/schema.ts +1 -0
@@ -0,0 +1,269 @@
1
+ import { replacePlaceholders } from '../src/expression';
2
+ describe('replacePlaceholders', () => {
3
+ it('should return content as is if there are no placeholders', () => {
4
+ const content = 'Hello, world!';
5
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
6
+ expect(result).toBe(content);
7
+ });
8
+ it('should replace placeholders with variables', () => {
9
+ const content = 'Hello, {name}!';
10
+ const variables = { name: 'Alice' };
11
+ const result = replacePlaceholders({ content, variables, schemas: [] });
12
+ expect(result).toBe('Hello, Alice!');
13
+ });
14
+ it('should evaluate expressions within placeholders', () => {
15
+ const content = 'The sum is {1 + 2}.';
16
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
17
+ expect(result).toBe('The sum is 3.');
18
+ });
19
+ it('should handle date and dateTime placeholders', () => {
20
+ const content = 'Today is {date} and now is {dateTime}.';
21
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
22
+ const date = new Date();
23
+ const padZero = (num) => String(num).padStart(2, '0');
24
+ const formattedDate = `${date.getFullYear()}/${padZero(date.getMonth() + 1)}/${padZero(date.getDate())}`;
25
+ const formattedDateTime = `${formattedDate} ${padZero(date.getHours())}:${padZero(date.getMinutes())}`;
26
+ expect(result).toBe(`Today is ${formattedDate} and now is ${formattedDateTime}.`);
27
+ });
28
+ it('should handle data from schemas', () => {
29
+ const content = 'Schema content: {name}';
30
+ const variables = {};
31
+ const schemas = [
32
+ [
33
+ {
34
+ name: 'name',
35
+ type: 'text',
36
+ content: 'SchemaName',
37
+ readOnly: true,
38
+ },
39
+ ],
40
+ ];
41
+ const result = replacePlaceholders({ content, variables, schemas });
42
+ expect(result).toBe('Schema content: SchemaName');
43
+ });
44
+ it('should prioritize variables over schemas', () => {
45
+ const content = 'Name: {name}';
46
+ const variables = { name: 'VariableName' };
47
+ const schemas = [
48
+ [
49
+ {
50
+ name: 'name',
51
+ type: 'text',
52
+ content: 'SchemaName',
53
+ readOnly: true,
54
+ },
55
+ ],
56
+ ];
57
+ const result = replacePlaceholders({ content, variables, schemas });
58
+ expect(result).toBe('Name: VariableName');
59
+ });
60
+ it('should handle nested placeholders in variables', () => {
61
+ const content = 'Nested variable: {greeting}';
62
+ const variables = { greeting: 'Hello, {name}!' };
63
+ const schemas = [
64
+ [
65
+ {
66
+ name: 'name',
67
+ type: 'text',
68
+ content: 'Bob',
69
+ readOnly: true,
70
+ },
71
+ ],
72
+ ];
73
+ const result = replacePlaceholders({ content, variables, schemas });
74
+ expect(result).toBe('Nested variable: Hello, Bob!');
75
+ });
76
+ it('should return content unchanged when placeholders are invalid', () => {
77
+ const content = 'Invalid placeholder: {name';
78
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
79
+ expect(result).toBe('Invalid placeholder: {name');
80
+ });
81
+ it('should evaluate expressions even if they result in Infinity', () => {
82
+ const content = 'Divide by zero: {1 / 0}';
83
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
84
+ expect(result).toBe('Divide by zero: Infinity');
85
+ });
86
+ it('should handle complex expressions', () => {
87
+ const content = 'Result: {Math.max(1, 2, 3)}';
88
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
89
+ expect(result).toBe('Result: 3');
90
+ });
91
+ it('should parse JSON strings in variables', () => {
92
+ const content = 'Data: {data.value}';
93
+ const variables = { data: '{"value": "42"}' };
94
+ const result = replacePlaceholders({ content, variables, schemas: [] });
95
+ expect(result).toBe('Data: 42');
96
+ });
97
+ it('should handle variables of different types', () => {
98
+ const content = 'Number: {num}, Boolean: {bool}, Array: {arr[0]}, Object: {obj.key}';
99
+ const variables = {
100
+ num: 42,
101
+ bool: true,
102
+ arr: ['first', 'second'],
103
+ obj: { key: 'value' },
104
+ };
105
+ const result = replacePlaceholders({ content, variables, schemas: [] });
106
+ expect(result).toBe('Number: 42, Boolean: true, Array: first, Object: value');
107
+ });
108
+ it('should use content from readOnly schemas', () => {
109
+ const content = 'Content: {readOnlyField}';
110
+ const variables = {};
111
+ const schemas = [
112
+ [
113
+ {
114
+ name: 'readOnlyField',
115
+ type: 'text',
116
+ content: 'ReadOnlyContent',
117
+ readOnly: true,
118
+ },
119
+ ],
120
+ ];
121
+ const result = replacePlaceholders({ content, variables, schemas });
122
+ expect(result).toBe('Content: ReadOnlyContent');
123
+ });
124
+ it('should use empty string for non-readOnly schema content', () => {
125
+ const content = 'Content: {editableField}';
126
+ const variables = {};
127
+ const schemas = [
128
+ [
129
+ {
130
+ name: 'editableField',
131
+ type: 'text',
132
+ content: 'Should not be used',
133
+ readOnly: false,
134
+ },
135
+ ],
136
+ ];
137
+ const result = replacePlaceholders({ content, variables, schemas });
138
+ expect(result).toBe('Content: ');
139
+ });
140
+ it('should allow method chaining on permitted global objects', () => {
141
+ const content = 'Chained: {Math.random().toString()}';
142
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
143
+ // Math.random() generates a random number, which is then converted to a string using toString()
144
+ const regex = /^Chained: \d+\.\d+$/;
145
+ expect(regex.test(result)).toBe(true);
146
+ });
147
+ });
148
+ describe('replacePlaceholders - Security Tests', () => {
149
+ it('should prevent access to __proto__ property', () => {
150
+ const content = 'Proto: {__proto__}';
151
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
152
+ // Since __proto__ access is prohibited, the placeholder should remain unchanged
153
+ expect(result).toBe('Proto: {__proto__}');
154
+ });
155
+ it('should prevent access to constructor property', () => {
156
+ const content = 'Constructor: {constructor}';
157
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
158
+ // 'constructor' is allowed if defined in context or globals; assuming it's not, placeholder remains
159
+ expect(result).toBe('Constructor: {constructor}');
160
+ });
161
+ it('should prevent access to prototype property', () => {
162
+ const content = 'Prototype: {prototype}';
163
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
164
+ // 'prototype' access is prohibited
165
+ expect(result).toBe('Prototype: {prototype}');
166
+ });
167
+ it('should prevent access to nested prohibited properties', () => {
168
+ const content = 'Nested: {user.__proto__.polluted}';
169
+ const variables = { user: {} };
170
+ const result = replacePlaceholders({ content, variables, schemas: [] });
171
+ // Access to '__proto__' is prohibited; placeholder remains unchanged
172
+ expect(result).toBe('Nested: {user.__proto__.polluted}');
173
+ });
174
+ it('should prevent use of Function constructor', () => {
175
+ const content = 'Function: {Function("return 42")()}';
176
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
177
+ // Use of Function constructor is not allowed; placeholder remains unchanged
178
+ expect(result).toBe('Function: {Function("return 42")()}');
179
+ });
180
+ it('should prevent access to disallowed global variables', () => {
181
+ const content = 'Process: {process.env}';
182
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
183
+ // 'process' is not in allowedGlobals; placeholder remains unchanged
184
+ expect(result).toBe('Process: {process.env}');
185
+ });
186
+ it('should prevent prototype pollution via JSON.parse', () => {
187
+ const content = 'Polluted: {JSON.parse(\'{"__proto__":{"polluted":true}}\').polluted}';
188
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
189
+ // Even if 'polluted' is accessed, the prototype is not polluted, so undefined is returned.
190
+ expect(result).toBe('Polluted: undefined');
191
+ });
192
+ it('should prevent accessing nested prohibited properties in functions', () => {
193
+ const content = 'Access: {( () => { return this.constructor } )()}';
194
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
195
+ // Attempting to access 'constructor' via 'this' should be prohibited; placeholder remains unchanged
196
+ expect(result).toBe('Access: {( () => { return this.constructor } )()}');
197
+ });
198
+ it('should prevent accessing global objects not in allowedGlobals', () => {
199
+ const content = 'Global: {global}';
200
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
201
+ // 'global' is not in allowedGlobals; placeholder remains unchanged
202
+ expect(result).toBe('Global: {global}');
203
+ });
204
+ it('should prevent accessing Object constructor via allowed globals', () => {
205
+ const content = 'ObjectConstructor: {Object.constructor}';
206
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
207
+ // Accessing 'constructor' of 'Object' is prohibited
208
+ expect(result).toBe('ObjectConstructor: {Object.constructor}');
209
+ });
210
+ it('should prevent accessing Function from allowed globals', () => {
211
+ const content = 'FunctionAccess: {Function("return 42")()}';
212
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
213
+ // 'Function' is not in allowedGlobals, so this should fail
214
+ expect(result).toBe('FunctionAccess: {Function("return 42")()}');
215
+ });
216
+ it('should prevent accessing nested properties via allowed globals', () => {
217
+ const content = 'NestedAccess: {Math.__proto__.polluted}';
218
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
219
+ // Accessing '__proto__' of allowed global 'Math' is prohibited
220
+ expect(result).toBe('NestedAccess: {Math.__proto__.polluted}');
221
+ });
222
+ it('should prevent execution of arbitrary code via ternary operator', () => {
223
+ const content = 'ArbitraryCode: {true ? (() => { return "Hacked" })() : "Safe"}';
224
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
225
+ // Execution of arbitrary functions is not allowed; placeholder remains unchanged
226
+ expect(result).toBe('ArbitraryCode: {true ? (() => { return "Hacked" })() : "Safe"}');
227
+ });
228
+ it('should handle attempts to override context variables', () => {
229
+ const content = 'Override: {date = "Hacked"} {date}';
230
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
231
+ // Assignment operations are not supported; placeholders remain unchanged
232
+ const date = new Date();
233
+ const padZero = (num) => String(num).padStart(2, '0');
234
+ const dateFmt = `${date.getFullYear()}/${padZero(date.getMonth() + 1)}/${padZero(date.getDate())}`;
235
+ expect(result).toBe(`Override: {date = "Hacked"} ${dateFmt}`);
236
+ });
237
+ it('should prevent using eval-like expressions', () => {
238
+ const content = 'Eval: {eval("2 + 2")';
239
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
240
+ // 'eval' is not in allowedGlobals; placeholder remains unchanged
241
+ expect(result).toBe('Eval: {eval("2 + 2")');
242
+ });
243
+ it('should prevent accessing undefined variables', () => {
244
+ const content = 'Undefined: {undefinedVar}';
245
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
246
+ // 'undefinedVar' is not defined; placeholder remains unchanged
247
+ expect(result).toBe('Undefined: {undefinedVar}');
248
+ });
249
+ it('should prevent accessing nested properties of undefined variables', () => {
250
+ const content = 'NestedUndefined: {user.name}';
251
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
252
+ // 'user' is undefined; accessing 'name' should fail and placeholder remains unchanged
253
+ expect(result).toBe('NestedUndefined: {user.name}');
254
+ });
255
+ it('should prevent accessing nested prohibited properties in objects', () => {
256
+ const content = 'Nested: {user.__proto__.polluted}';
257
+ const variables = { user: {} };
258
+ const result = replacePlaceholders({ content, variables, schemas: [] });
259
+ // Since access to '__proto__' is prohibited, the placeholder remains unchanged.
260
+ expect(result).toBe('Nested: {user.__proto__.polluted}');
261
+ });
262
+ it('should prevent using Function constructor', () => {
263
+ const content = 'Function: {Function("return 42")()}';
264
+ const result = replacePlaceholders({ content, variables: {}, schemas: [] });
265
+ // Since 'Function' is not included in allowedGlobals, the placeholder remains unchanged.
266
+ expect(result).toBe('Function: {Function("return 42")()}');
267
+ });
268
+ });
269
+ //# sourceMappingURL=expression.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.test.js","sourceRoot":"","sources":["../../../__tests__/expression.test.ts"],"names":[],"mappings":"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"}