@pdfme/schemas 4.3.0 → 4.3.2-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.
- package/dist/cjs/__tests__/multiVariableText.test.js +42 -0
- package/dist/cjs/__tests__/multiVariableText.test.js.map +1 -1
- package/dist/cjs/src/multiVariableText/helper.js +24 -1
- package/dist/cjs/src/multiVariableText/helper.js.map +1 -1
- package/dist/cjs/src/multiVariableText/pdfRender.js +6 -1
- package/dist/cjs/src/multiVariableText/pdfRender.js.map +1 -1
- package/dist/esm/__tests__/multiVariableText.test.js +43 -1
- package/dist/esm/__tests__/multiVariableText.test.js.map +1 -1
- package/dist/esm/src/multiVariableText/helper.js +22 -0
- package/dist/esm/src/multiVariableText/helper.js.map +1 -1
- package/dist/esm/src/multiVariableText/pdfRender.js +7 -2
- package/dist/esm/src/multiVariableText/pdfRender.js.map +1 -1
- package/dist/types/src/multiVariableText/helper.d.ts +2 -0
- package/package.json +1 -1
- package/src/multiVariableText/helper.ts +27 -0
- package/src/multiVariableText/pdfRender.ts +9 -3
@@ -44,4 +44,46 @@ describe('substituteVariables', () => {
|
|
44
44
|
expect(() => (0, helper_1.substituteVariables)(text, variables)).toThrow(SyntaxError);
|
45
45
|
});
|
46
46
|
});
|
47
|
+
describe('validateVariables', () => {
|
48
|
+
// @ts-ignore
|
49
|
+
const schema = {
|
50
|
+
variables: ['var1', 'var2'],
|
51
|
+
required: true,
|
52
|
+
};
|
53
|
+
it('should return true for valid input with all required variables', () => {
|
54
|
+
const key = 'testKey';
|
55
|
+
const value = JSON.stringify({ var1: 'value1', var2: 'value2' });
|
56
|
+
expect((0, helper_1.validateVariables)(key, value, schema)).toBe(true);
|
57
|
+
});
|
58
|
+
it('should throw an error for missing required variables', () => {
|
59
|
+
const key = 'testKey';
|
60
|
+
const value = JSON.stringify({ var1: 'value1' });
|
61
|
+
expect(() => (0, helper_1.validateVariables)(key, value, schema)).toThrowError('[@pdfme/generator] variable var2 is missing for field testKey');
|
62
|
+
});
|
63
|
+
it('should return false for missing non-required variables', () => {
|
64
|
+
// @ts-ignore
|
65
|
+
const nonRequiredSchema = {
|
66
|
+
variables: ['var1', 'var2'],
|
67
|
+
required: false,
|
68
|
+
};
|
69
|
+
const key = 'testKey';
|
70
|
+
const value = JSON.stringify({ var1: 'value1' });
|
71
|
+
expect((0, helper_1.validateVariables)(key, value, nonRequiredSchema)).toBe(false);
|
72
|
+
});
|
73
|
+
it('should throw an error for invalid JSON input', () => {
|
74
|
+
const key = 'testKey';
|
75
|
+
const value = '{ var1: value1 var2: value2 }'; // Invalid JSON
|
76
|
+
expect(() => (0, helper_1.validateVariables)(key, value, schema)).toThrowError(SyntaxError);
|
77
|
+
});
|
78
|
+
it('should return true for a string with no variables', () => {
|
79
|
+
// @ts-ignore
|
80
|
+
const readOnlyText = {
|
81
|
+
variables: [],
|
82
|
+
required: true,
|
83
|
+
};
|
84
|
+
const key = 'testKey';
|
85
|
+
const value = '';
|
86
|
+
expect((0, helper_1.validateVariables)(key, value, readOnlyText)).toBe(true);
|
87
|
+
});
|
88
|
+
});
|
47
89
|
//# sourceMappingURL=multiVariableText.test.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":";;AAAA,
|
1
|
+
{"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.substituteVariables = void 0;
|
3
|
+
exports.validateVariables = exports.substituteVariables = void 0;
|
4
4
|
const substituteVariables = (text, variablesIn) => {
|
5
5
|
if (!text) {
|
6
6
|
return "";
|
@@ -20,4 +20,27 @@ const substituteVariables = (text, variablesIn) => {
|
|
20
20
|
return substitutedText;
|
21
21
|
};
|
22
22
|
exports.substituteVariables = substituteVariables;
|
23
|
+
const validateVariables = (key, value, schema) => {
|
24
|
+
if (schema.variables.length == 0) {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
let values;
|
28
|
+
try {
|
29
|
+
values = JSON.parse(value);
|
30
|
+
}
|
31
|
+
catch (e) {
|
32
|
+
throw new SyntaxError(`[@pdfme/generator] invalid JSON string for variables in field ${key}`);
|
33
|
+
}
|
34
|
+
for (const variable of schema.variables) {
|
35
|
+
if (!values[variable]) {
|
36
|
+
if (schema.required) {
|
37
|
+
throw new Error(`[@pdfme/generator] variable ${variable} is missing for field ${key}`);
|
38
|
+
}
|
39
|
+
// If not required, then simply don't render this field if an input is missing
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
return true;
|
44
|
+
};
|
45
|
+
exports.validateVariables = validateVariables;
|
23
46
|
//# sourceMappingURL=helper.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/multiVariableText/helper.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/multiVariableText/helper.ts"],"names":[],"mappings":";;;AAEO,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,WAA4C,EAAU,EAAE;IACxG,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAC;KACX;IAED,IAAI,eAAe,GAAG,IAAI,CAAC;IAE3B,IAAI,WAAW,EAAE;QACf,MAAM,SAAS,GAA2B,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAE1H,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;YAC9C,6CAA6C;YAC7C,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YAChF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,gBAAgB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;KACJ;IAED,6DAA6D;IAC7D,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAtBW,QAAA,mBAAmB,uBAsB9B;AAEK,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,MAA+B,EAAW,EAAE;IACxG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,CAAC;IACX,IAAI;QACF,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,WAAW,CAAC,iEAAiE,GAAG,EAAE,CAAC,CAAC;KAC/F;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,yBAAyB,GAAG,EAAE,CAAC,CAAC;aACxF;YACD,8EAA8E;YAC9E,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAA;AAvBY,QAAA,iBAAiB,qBAuB7B"}
|
@@ -4,8 +4,13 @@ exports.pdfRender = void 0;
|
|
4
4
|
const pdfRender_1 = require("../text/pdfRender");
|
5
5
|
const helper_1 = require("./helper");
|
6
6
|
const pdfRender = async (arg) => {
|
7
|
-
const { value, schema, ...rest } = arg;
|
7
|
+
const { key, value, schema, ...rest } = arg;
|
8
|
+
if (!(0, helper_1.validateVariables)(key, value, schema)) {
|
9
|
+
// Don't render if a required variable is missing
|
10
|
+
return;
|
11
|
+
}
|
8
12
|
const renderArgs = {
|
13
|
+
key,
|
9
14
|
value: (0, helper_1.substituteVariables)(schema.text || '', value),
|
10
15
|
schema,
|
11
16
|
...rest,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/pdfRender.ts"],"names":[],"mappings":";;;AAEA,iDAAiE;AACjE,
|
1
|
+
{"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/pdfRender.ts"],"names":[],"mappings":";;;AAEA,iDAAiE;AACjE,qCAAkE;AAE3D,MAAM,SAAS,GAAG,KAAK,EAAE,GAA4C,EAAE,EAAE;IAC9E,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAE5C,IAAI,CAAC,IAAA,0BAAiB,EAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;QAC1C,iDAAiD;QACjD,OAAO;KACR;IAED,MAAM,UAAU,GAAG;QACjB,GAAG;QACH,KAAK,EAAE,IAAA,4BAAmB,EAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QACpD,MAAM;QACN,GAAG,IAAI;KACR,CAAC;IAEF,MAAM,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;AACpC,CAAC,CAAC;AAhBW,QAAA,SAAS,aAgBpB"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { substituteVariables } from '../src/multiVariableText/helper';
|
1
|
+
import { substituteVariables, validateVariables } from '../src/multiVariableText/helper';
|
2
2
|
describe('substituteVariables', () => {
|
3
3
|
it('should substitute variables in a string', () => {
|
4
4
|
const text = 'Hello, {name}!';
|
@@ -42,4 +42,46 @@ describe('substituteVariables', () => {
|
|
42
42
|
expect(() => substituteVariables(text, variables)).toThrow(SyntaxError);
|
43
43
|
});
|
44
44
|
});
|
45
|
+
describe('validateVariables', () => {
|
46
|
+
// @ts-ignore
|
47
|
+
const schema = {
|
48
|
+
variables: ['var1', 'var2'],
|
49
|
+
required: true,
|
50
|
+
};
|
51
|
+
it('should return true for valid input with all required variables', () => {
|
52
|
+
const key = 'testKey';
|
53
|
+
const value = JSON.stringify({ var1: 'value1', var2: 'value2' });
|
54
|
+
expect(validateVariables(key, value, schema)).toBe(true);
|
55
|
+
});
|
56
|
+
it('should throw an error for missing required variables', () => {
|
57
|
+
const key = 'testKey';
|
58
|
+
const value = JSON.stringify({ var1: 'value1' });
|
59
|
+
expect(() => validateVariables(key, value, schema)).toThrowError('[@pdfme/generator] variable var2 is missing for field testKey');
|
60
|
+
});
|
61
|
+
it('should return false for missing non-required variables', () => {
|
62
|
+
// @ts-ignore
|
63
|
+
const nonRequiredSchema = {
|
64
|
+
variables: ['var1', 'var2'],
|
65
|
+
required: false,
|
66
|
+
};
|
67
|
+
const key = 'testKey';
|
68
|
+
const value = JSON.stringify({ var1: 'value1' });
|
69
|
+
expect(validateVariables(key, value, nonRequiredSchema)).toBe(false);
|
70
|
+
});
|
71
|
+
it('should throw an error for invalid JSON input', () => {
|
72
|
+
const key = 'testKey';
|
73
|
+
const value = '{ var1: value1 var2: value2 }'; // Invalid JSON
|
74
|
+
expect(() => validateVariables(key, value, schema)).toThrowError(SyntaxError);
|
75
|
+
});
|
76
|
+
it('should return true for a string with no variables', () => {
|
77
|
+
// @ts-ignore
|
78
|
+
const readOnlyText = {
|
79
|
+
variables: [],
|
80
|
+
required: true,
|
81
|
+
};
|
82
|
+
const key = 'testKey';
|
83
|
+
const value = '';
|
84
|
+
expect(validateVariables(key, value, readOnlyText)).toBe(true);
|
85
|
+
});
|
86
|
+
});
|
45
87
|
//# sourceMappingURL=multiVariableText.test.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
1
|
+
{"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAIzF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC9B,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,IAAI,GAAG,iBAAiB,CAAC;QAC/B,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,oCAAoC,CAAC;QAClD,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC9B,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC9B,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC9B,MAAM,SAAS,GAAG,cAAc,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,aAAa;IACb,MAAM,MAAM,GAA4B;QACtC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QAC3B,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAC9D,+DAA+D,CAChE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,aAAa;QACb,MAAM,iBAAiB,GAA4B;YACjD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;YAC3B,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,+BAA+B,CAAC,CAAC,eAAe;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,aAAa;QACb,MAAM,YAAY,GAA4B;YAC5C,SAAS,EAAE,EAAE;YACb,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
@@ -16,4 +16,26 @@ export const substituteVariables = (text, variablesIn) => {
|
|
16
16
|
substitutedText = substitutedText.replace(/{[^{}]+}/g, '');
|
17
17
|
return substitutedText;
|
18
18
|
};
|
19
|
+
export const validateVariables = (key, value, schema) => {
|
20
|
+
if (schema.variables.length == 0) {
|
21
|
+
return true;
|
22
|
+
}
|
23
|
+
let values;
|
24
|
+
try {
|
25
|
+
values = JSON.parse(value);
|
26
|
+
}
|
27
|
+
catch (e) {
|
28
|
+
throw new SyntaxError(`[@pdfme/generator] invalid JSON string for variables in field ${key}`);
|
29
|
+
}
|
30
|
+
for (const variable of schema.variables) {
|
31
|
+
if (!values[variable]) {
|
32
|
+
if (schema.required) {
|
33
|
+
throw new Error(`[@pdfme/generator] variable ${variable} is missing for field ${key}`);
|
34
|
+
}
|
35
|
+
// If not required, then simply don't render this field if an input is missing
|
36
|
+
return false;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
return true;
|
40
|
+
};
|
19
41
|
//# sourceMappingURL=helper.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/multiVariableText/helper.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../../src/multiVariableText/helper.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,WAA4C,EAAU,EAAE;IACxG,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,EAAE,CAAC;KACX;IAED,IAAI,eAAe,GAAG,IAAI,CAAC;IAE3B,IAAI,WAAW,EAAE;QACf,MAAM,SAAS,GAA2B,CAAC,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAE1H,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;YAC9C,6CAA6C;YAC7C,MAAM,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YAChF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,gBAAgB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5D,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;KACJ;IAED,6DAA6D;IAC7D,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAE3D,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,MAA+B,EAAW,EAAE;IACxG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;QAChC,OAAO,IAAI,CAAC;KACb;IAED,IAAI,MAAM,CAAC;IACX,IAAI;QACF,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC5B;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,WAAW,CAAC,iEAAiE,GAAG,EAAE,CAAC,CAAC;KAC/F;IAED,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;YACrB,IAAI,MAAM,CAAC,QAAQ,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,yBAAyB,GAAG,EAAE,CAAC,CAAC;aACxF;YACD,8EAA8E;YAC9E,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAA"}
|
@@ -1,8 +1,13 @@
|
|
1
1
|
import { pdfRender as parentPdfRender } from '../text/pdfRender';
|
2
|
-
import { substituteVariables } from './helper';
|
2
|
+
import { substituteVariables, validateVariables } from './helper';
|
3
3
|
export const pdfRender = async (arg) => {
|
4
|
-
const { value, schema, ...rest } = arg;
|
4
|
+
const { key, value, schema, ...rest } = arg;
|
5
|
+
if (!validateVariables(key, value, schema)) {
|
6
|
+
// Don't render if a required variable is missing
|
7
|
+
return;
|
8
|
+
}
|
5
9
|
const renderArgs = {
|
10
|
+
key,
|
6
11
|
value: substituteVariables(schema.text || '', value),
|
7
12
|
schema,
|
8
13
|
...rest,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/pdfRender.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"pdfRender.js","sourceRoot":"","sources":["../../../../src/multiVariableText/pdfRender.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAElE,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,GAA4C,EAAE,EAAE;IAC9E,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAE5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;QAC1C,iDAAiD;QACjD,OAAO;KACR;IAED,MAAM,UAAU,GAAG;QACjB,GAAG;QACH,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QACpD,MAAM;QACN,GAAG,IAAI;KACR,CAAC;IAEF,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC,CAAC"}
|
@@ -1 +1,3 @@
|
|
1
|
+
import { MultiVariableTextSchema } from "./types";
|
1
2
|
export declare const substituteVariables: (text: string, variablesIn: string | Record<string, string>) => string;
|
3
|
+
export declare const validateVariables: (key: string, value: string, schema: MultiVariableTextSchema) => boolean;
|
package/package.json
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import { MultiVariableTextSchema } from "./types";
|
2
|
+
|
1
3
|
export const substituteVariables = (text: string, variablesIn: string | Record<string, string>): string => {
|
2
4
|
if (!text) {
|
3
5
|
return "";
|
@@ -21,3 +23,28 @@ export const substituteVariables = (text: string, variablesIn: string | Record<s
|
|
21
23
|
|
22
24
|
return substitutedText;
|
23
25
|
};
|
26
|
+
|
27
|
+
export const validateVariables = (key: string, value: string, schema: MultiVariableTextSchema): boolean => {
|
28
|
+
if (schema.variables.length == 0) {
|
29
|
+
return true;
|
30
|
+
}
|
31
|
+
|
32
|
+
let values;
|
33
|
+
try {
|
34
|
+
values = JSON.parse(value);
|
35
|
+
} catch (e) {
|
36
|
+
throw new SyntaxError(`[@pdfme/generator] invalid JSON string for variables in field ${key}`);
|
37
|
+
}
|
38
|
+
|
39
|
+
for (const variable of schema.variables) {
|
40
|
+
if (!values[variable]) {
|
41
|
+
if (schema.required) {
|
42
|
+
throw new Error(`[@pdfme/generator] variable ${variable} is missing for field ${key}`);
|
43
|
+
}
|
44
|
+
// If not required, then simply don't render this field if an input is missing
|
45
|
+
return false;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
return true;
|
50
|
+
}
|
@@ -1,13 +1,19 @@
|
|
1
1
|
import { PDFRenderProps } from '@pdfme/common';
|
2
2
|
import { MultiVariableTextSchema } from './types';
|
3
3
|
import { pdfRender as parentPdfRender } from '../text/pdfRender';
|
4
|
-
import { substituteVariables } from './helper';
|
4
|
+
import { substituteVariables, validateVariables } from './helper';
|
5
5
|
|
6
6
|
export const pdfRender = async (arg: PDFRenderProps<MultiVariableTextSchema>) => {
|
7
|
-
const { value, schema, ...rest } = arg;
|
7
|
+
const { key, value, schema, ...rest } = arg;
|
8
|
+
|
9
|
+
if (!validateVariables(key, value, schema)) {
|
10
|
+
// Don't render if a required variable is missing
|
11
|
+
return;
|
12
|
+
}
|
8
13
|
|
9
14
|
const renderArgs = {
|
10
|
-
|
15
|
+
key,
|
16
|
+
value: substituteVariables(schema.text || '', value),
|
11
17
|
schema,
|
12
18
|
...rest,
|
13
19
|
};
|