@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.
@@ -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,4DAAsE;AAEtE,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,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,IAAA,4BAAmB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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":";;;AAAO,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"}
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,qCAA+C;AAExC,MAAM,SAAS,GAAG,KAAK,EAAE,GAA4C,EAAE,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAEvC,MAAM,UAAU,GAAG;QACjB,KAAK,EAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QACrD,MAAM;QACN,GAAG,IAAI;KACR,CAAC;IAEF,MAAM,IAAA,qBAAe,EAAC,UAAU,CAAC,CAAC;AACpC,CAAC,CAAC;AAVW,QAAA,SAAS,aAUpB"}
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;AAEtE,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"}
1
+ {"version":3,"file":"multiVariableText.test.js","sourceRoot":"","sources":["../../../__tests__/multiVariableText.test.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA,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"}
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;AAE/C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,GAA4C,EAAE,EAAE;IAC9E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;IAEvC,MAAM,UAAU,GAAG;QACjB,KAAK,EAAG,mBAAmB,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC;QACrD,MAAM;QACN,GAAG,IAAI;KACR,CAAC;IAEF,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC,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,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/schemas",
3
- "version": "4.3.0",
3
+ "version": "4.3.2-dev.1",
4
4
  "sideEffects": false,
5
5
  "author": "hand-dot",
6
6
  "license": "MIT",
@@ -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
- value: substituteVariables(schema.text || '', value),
15
+ key,
16
+ value: substituteVariables(schema.text || '', value),
11
17
  schema,
12
18
  ...rest,
13
19
  };