@aacigroup/aaci_shared 5.0.4 → 5.2.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 (124) hide show
  1. package/README.md +29 -0
  2. package/dist/questionTypes.d.ts +2 -0
  3. package/dist/questionTypes.d.ts.map +1 -0
  4. package/dist/questionTypes.js +2 -0
  5. package/dist/questionTypes.js.map +1 -0
  6. package/dist/types/questionTypes/answerValidators/addressValidator.d.ts +4 -0
  7. package/dist/types/questionTypes/answerValidators/addressValidator.d.ts.map +1 -0
  8. package/dist/types/questionTypes/answerValidators/addressValidator.js +41 -0
  9. package/dist/types/questionTypes/answerValidators/addressValidator.js.map +1 -0
  10. package/dist/types/questionTypes/answerValidators/booleanValidator.d.ts +4 -0
  11. package/dist/types/questionTypes/answerValidators/booleanValidator.d.ts.map +1 -0
  12. package/dist/types/questionTypes/answerValidators/booleanValidator.js +11 -0
  13. package/dist/types/questionTypes/answerValidators/booleanValidator.js.map +1 -0
  14. package/dist/types/questionTypes/answerValidators/currencyValidator.d.ts +4 -0
  15. package/dist/types/questionTypes/answerValidators/currencyValidator.d.ts.map +1 -0
  16. package/dist/types/questionTypes/answerValidators/currencyValidator.js +44 -0
  17. package/dist/types/questionTypes/answerValidators/currencyValidator.js.map +1 -0
  18. package/dist/types/questionTypes/answerValidators/dateValidator.d.ts +4 -0
  19. package/dist/types/questionTypes/answerValidators/dateValidator.d.ts.map +1 -0
  20. package/dist/types/questionTypes/answerValidators/dateValidator.js +34 -0
  21. package/dist/types/questionTypes/answerValidators/dateValidator.js.map +1 -0
  22. package/dist/types/questionTypes/answerValidators/datetimeValidator.d.ts +4 -0
  23. package/dist/types/questionTypes/answerValidators/datetimeValidator.d.ts.map +1 -0
  24. package/dist/types/questionTypes/answerValidators/datetimeValidator.js +33 -0
  25. package/dist/types/questionTypes/answerValidators/datetimeValidator.js.map +1 -0
  26. package/dist/types/questionTypes/answerValidators/emailValidator.d.ts +4 -0
  27. package/dist/types/questionTypes/answerValidators/emailValidator.d.ts.map +1 -0
  28. package/dist/types/questionTypes/answerValidators/emailValidator.js +41 -0
  29. package/dist/types/questionTypes/answerValidators/emailValidator.js.map +1 -0
  30. package/dist/types/questionTypes/answerValidators/fileValidator.d.ts +4 -0
  31. package/dist/types/questionTypes/answerValidators/fileValidator.d.ts.map +1 -0
  32. package/dist/types/questionTypes/answerValidators/fileValidator.js +46 -0
  33. package/dist/types/questionTypes/answerValidators/fileValidator.js.map +1 -0
  34. package/dist/types/questionTypes/answerValidators/imageValidator.d.ts +4 -0
  35. package/dist/types/questionTypes/answerValidators/imageValidator.d.ts.map +1 -0
  36. package/dist/types/questionTypes/answerValidators/imageValidator.js +63 -0
  37. package/dist/types/questionTypes/answerValidators/imageValidator.js.map +1 -0
  38. package/dist/types/questionTypes/answerValidators/index.d.ts +23 -0
  39. package/dist/types/questionTypes/answerValidators/index.d.ts.map +1 -0
  40. package/dist/types/questionTypes/answerValidators/index.js +73 -0
  41. package/dist/types/questionTypes/answerValidators/index.js.map +1 -0
  42. package/dist/types/questionTypes/answerValidators/multiselectValidator.d.ts +4 -0
  43. package/dist/types/questionTypes/answerValidators/multiselectValidator.d.ts.map +1 -0
  44. package/dist/types/questionTypes/answerValidators/multiselectValidator.js +50 -0
  45. package/dist/types/questionTypes/answerValidators/multiselectValidator.js.map +1 -0
  46. package/dist/types/questionTypes/answerValidators/numberValidator.d.ts +4 -0
  47. package/dist/types/questionTypes/answerValidators/numberValidator.d.ts.map +1 -0
  48. package/dist/types/questionTypes/answerValidators/numberValidator.js +50 -0
  49. package/dist/types/questionTypes/answerValidators/numberValidator.js.map +1 -0
  50. package/dist/types/questionTypes/answerValidators/phoneValidator.d.ts +4 -0
  51. package/dist/types/questionTypes/answerValidators/phoneValidator.d.ts.map +1 -0
  52. package/dist/types/questionTypes/answerValidators/phoneValidator.js +18 -0
  53. package/dist/types/questionTypes/answerValidators/phoneValidator.js.map +1 -0
  54. package/dist/types/questionTypes/answerValidators/ratingValidator.d.ts +4 -0
  55. package/dist/types/questionTypes/answerValidators/ratingValidator.d.ts.map +1 -0
  56. package/dist/types/questionTypes/answerValidators/ratingValidator.js +31 -0
  57. package/dist/types/questionTypes/answerValidators/ratingValidator.js.map +1 -0
  58. package/dist/types/questionTypes/answerValidators/selectValidator.d.ts +4 -0
  59. package/dist/types/questionTypes/answerValidators/selectValidator.d.ts.map +1 -0
  60. package/dist/types/questionTypes/answerValidators/selectValidator.js +31 -0
  61. package/dist/types/questionTypes/answerValidators/selectValidator.js.map +1 -0
  62. package/dist/types/questionTypes/answerValidators/textValidator.d.ts +4 -0
  63. package/dist/types/questionTypes/answerValidators/textValidator.d.ts.map +1 -0
  64. package/dist/types/questionTypes/answerValidators/textValidator.js +44 -0
  65. package/dist/types/questionTypes/answerValidators/textValidator.js.map +1 -0
  66. package/dist/types/questionTypes/answerValidators/textareaValidator.d.ts +4 -0
  67. package/dist/types/questionTypes/answerValidators/textareaValidator.d.ts.map +1 -0
  68. package/dist/types/questionTypes/answerValidators/textareaValidator.js +40 -0
  69. package/dist/types/questionTypes/answerValidators/textareaValidator.js.map +1 -0
  70. package/dist/types/questionTypes/answerValidators/types.d.ts +9 -0
  71. package/dist/types/questionTypes/answerValidators/types.d.ts.map +1 -0
  72. package/dist/types/questionTypes/answerValidators/types.js +6 -0
  73. package/dist/types/questionTypes/answerValidators/types.js.map +1 -0
  74. package/dist/types/questionTypes/answerValidators/yearValidator.d.ts +4 -0
  75. package/dist/types/questionTypes/answerValidators/yearValidator.d.ts.map +1 -0
  76. package/dist/types/questionTypes/answerValidators/yearValidator.js +39 -0
  77. package/dist/types/questionTypes/answerValidators/yearValidator.js.map +1 -0
  78. package/dist/types/questionTypes/conditionHelpers.d.ts +26 -0
  79. package/dist/types/questionTypes/conditionHelpers.d.ts.map +1 -0
  80. package/dist/types/questionTypes/conditionHelpers.js +398 -0
  81. package/dist/types/questionTypes/conditionHelpers.js.map +1 -0
  82. package/dist/types/questionTypes/conditions.d.ts +33 -0
  83. package/dist/types/questionTypes/conditions.d.ts.map +1 -0
  84. package/dist/types/questionTypes/conditions.js +102 -0
  85. package/dist/types/questionTypes/conditions.js.map +1 -0
  86. package/dist/types/questionTypes/defaults.d.ts +19 -0
  87. package/dist/types/questionTypes/defaults.d.ts.map +1 -0
  88. package/dist/types/questionTypes/defaults.js +100 -0
  89. package/dist/types/questionTypes/defaults.js.map +1 -0
  90. package/dist/types/questionTypes/helpers.d.ts +89 -0
  91. package/dist/types/questionTypes/helpers.d.ts.map +1 -0
  92. package/dist/types/questionTypes/helpers.js +356 -0
  93. package/dist/types/questionTypes/helpers.js.map +1 -0
  94. package/dist/types/questionTypes/index.d.ts +10 -0
  95. package/dist/types/questionTypes/index.d.ts.map +1 -0
  96. package/dist/types/questionTypes/index.js +10 -0
  97. package/dist/types/questionTypes/index.js.map +1 -0
  98. package/dist/types/questionTypes/session.d.ts +112 -0
  99. package/dist/types/questionTypes/session.d.ts.map +1 -0
  100. package/dist/types/questionTypes/session.js +2 -0
  101. package/dist/types/questionTypes/session.js.map +1 -0
  102. package/dist/types/questionTypes/template.d.ts +28 -0
  103. package/dist/types/questionTypes/template.d.ts.map +1 -0
  104. package/dist/types/questionTypes/template.js +2 -0
  105. package/dist/types/questionTypes/template.js.map +1 -0
  106. package/dist/types/questionTypes/types.d.ts +146 -0
  107. package/dist/types/questionTypes/types.d.ts.map +1 -0
  108. package/dist/types/questionTypes/types.js +171 -0
  109. package/dist/types/questionTypes/types.js.map +1 -0
  110. package/dist/types/questionTypes/validators.d.ts +27 -0
  111. package/dist/types/questionTypes/validators.d.ts.map +1 -0
  112. package/dist/types/questionTypes/validators.js +233 -0
  113. package/dist/types/questionTypes/validators.js.map +1 -0
  114. package/dist/types/questionTypes/writers.d.ts +10 -0
  115. package/dist/types/questionTypes/writers.d.ts.map +1 -0
  116. package/dist/types/questionTypes/writers.js +70 -0
  117. package/dist/types/questionTypes/writers.js.map +1 -0
  118. package/dist/types.d.ts +4 -1
  119. package/dist/types.d.ts.map +1 -1
  120. package/dist/validation.d.ts +10 -0
  121. package/dist/validation.d.ts.map +1 -1
  122. package/dist/validation.js +1 -0
  123. package/dist/validation.js.map +1 -1
  124. package/package.json +5 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAqC,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AASzD,MAAM,iBAAiB,GAA0C;IAC/D,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,MAAM,EAAE,oBAAoB;IAC5B,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,qBAAqB;IAC9B,MAAM,EAAE,oBAAoB;IAC5B,WAAW,EAAE,yBAAyB;IACtC,IAAI,EAAE,kBAAkB;IACxB,QAAQ,EAAE,sBAAsB;IAChC,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,mBAAmB;IAC1B,KAAK,EAAE,mBAAmB;IAC1B,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,mBAAmB;IAC1B,MAAM,EAAE,oBAAoB;CAC7B,CAAC;AAUF,MAAM,UAAU,cAAc,CAC5B,QAA8B,EAC9B,MAAe;IAEf,MAAM,YAAY,GAAG,QAAQ,CAAC,aAA6B,CAAC;IAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAElD,IAAI,CAAC,SAAS,EAAE,CAAC;QAEf,OAAO,CAAC,IAAI,CAAC,yCAAyC,YAAY,EAAE,CAAC,CAAC;QACtE,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACrC,CAAC;AAKD,MAAM,UAAU,aAAa,CAC3B,QAA8B,EAC9B,MAAe;IAEf,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAKD,MAAM,UAAU,sBAAsB,CACpC,QAA8B,EAC9B,MAAe;IAGf,MAAM,OAAO,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;QACtE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAEjD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,OAAO,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAMD,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateMultiselectAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=multiselectValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselectValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/multiselectValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAgElB"}
@@ -0,0 +1,50 @@
1
+ import { getSelectOptions, getAllowOther } from '../helpers';
2
+ import { isOtherAnswerValue } from '../types';
3
+ import { validResult, invalidResult } from './types';
4
+ export function validateMultiselectAnswer(question, answer) {
5
+ if (answer === null || answer === undefined) {
6
+ return validResult();
7
+ }
8
+ if (!Array.isArray(answer)) {
9
+ return invalidResult('Invalid selection');
10
+ }
11
+ if (answer.length === 0) {
12
+ return validResult();
13
+ }
14
+ const opts = (question.options || {});
15
+ const data = (question.data || {});
16
+ const minSelections = typeof opts.min_selections === 'number' ? opts.min_selections :
17
+ typeof data.min_selections === 'number' ? data.min_selections : undefined;
18
+ const maxSelections = typeof opts.max_selections === 'number' ? opts.max_selections :
19
+ typeof data.max_selections === 'number' ? data.max_selections : undefined;
20
+ const allowOther = getAllowOther(question);
21
+ if (minSelections !== undefined && answer.length < minSelections) {
22
+ return invalidResult(`Select at least ${minSelections} option${minSelections > 1 ? 's' : ''}`);
23
+ }
24
+ if (maxSelections !== undefined && answer.length > maxSelections) {
25
+ return invalidResult(`Select no more than ${maxSelections} option${maxSelections > 1 ? 's' : ''}`);
26
+ }
27
+ const options = getSelectOptions(question);
28
+ const validValues = options.map(opt => opt.value);
29
+ for (const item of answer) {
30
+ if (isOtherAnswerValue(item)) {
31
+ if (!allowOther) {
32
+ return invalidResult('Custom answers are not allowed');
33
+ }
34
+ if (!item.text.trim()) {
35
+ return invalidResult('Please enter your custom answer');
36
+ }
37
+ continue;
38
+ }
39
+ if (typeof item !== 'string') {
40
+ return invalidResult('Invalid selection');
41
+ }
42
+ if (!validValues.includes(item)) {
43
+ if (!allowOther) {
44
+ return invalidResult('Contains invalid option');
45
+ }
46
+ }
47
+ }
48
+ return validResult();
49
+ }
50
+ //# sourceMappingURL=multiselectValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiselectValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/multiselectValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateNumberAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=numberValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/numberValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAYvE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAqDlB"}
@@ -0,0 +1,50 @@
1
+ import { getNumberConstraints, getAllowedValues, getDecimalPlaces } from '../helpers';
2
+ import { validResult, invalidResult } from './types';
3
+ function countDecimalPlaces(num) {
4
+ const str = num.toString();
5
+ const decimalIndex = str.indexOf('.');
6
+ if (decimalIndex === -1)
7
+ return 0;
8
+ return str.length - decimalIndex - 1;
9
+ }
10
+ export function validateNumberAnswer(question, answer) {
11
+ if (answer === null || answer === undefined || answer === '') {
12
+ return validResult();
13
+ }
14
+ if (typeof answer !== 'number' || isNaN(answer)) {
15
+ return invalidResult('Must be a valid number');
16
+ }
17
+ const constraints = getNumberConstraints(question);
18
+ const { min, max, step } = constraints;
19
+ const allowedValues = getAllowedValues(question);
20
+ if (allowedValues.length > 0) {
21
+ if (!allowedValues.includes(answer)) {
22
+ return invalidResult(`Must be one of: ${allowedValues.join(', ')}`);
23
+ }
24
+ }
25
+ const decimalPlaces = getDecimalPlaces(question);
26
+ if (decimalPlaces !== undefined && decimalPlaces >= 0) {
27
+ const actualDecimals = countDecimalPlaces(answer);
28
+ if (actualDecimals > decimalPlaces) {
29
+ if (decimalPlaces === 0) {
30
+ return invalidResult('Must be a whole number');
31
+ }
32
+ return invalidResult(`Must have at most ${decimalPlaces} decimal place${decimalPlaces !== 1 ? 's' : ''}`);
33
+ }
34
+ }
35
+ if (min !== undefined && answer < min) {
36
+ return invalidResult(`Must be at least ${min.toLocaleString()}`);
37
+ }
38
+ if (max !== undefined && answer > max) {
39
+ return invalidResult(`Must be no more than ${max.toLocaleString()}`);
40
+ }
41
+ if (step !== undefined && step > 0) {
42
+ const baseValue = min !== null && min !== void 0 ? min : 0;
43
+ const diff = answer - baseValue;
44
+ if (Math.abs(diff % step) > 0.0001) {
45
+ return invalidResult(`Must be in increments of ${step}`);
46
+ }
47
+ }
48
+ return validResult();
49
+ }
50
+ //# sourceMappingURL=numberValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numberValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/numberValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKvE,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IAC3B,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,YAAY,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAGD,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC;IAGvC,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,OAAO,aAAa,CAAC,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAGD,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,cAAc,GAAG,aAAa,EAAE,CAAC;YACnC,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;YACjD,CAAC;YACD,OAAO,aAAa,CAAC,qBAAqB,aAAa,iBAAiB,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,oBAAoB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,wBAAwB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAGD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;YACnC,OAAO,aAAa,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validatePhoneAnswer(_question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=phoneValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoneValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/phoneValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAwBlB"}
@@ -0,0 +1,18 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validatePhoneAnswer(_question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'string') {
7
+ return invalidResult('Invalid phone number');
8
+ }
9
+ const digitsOnly = answer.replace(/\D/g, '');
10
+ if (digitsOnly.length < 10) {
11
+ return invalidResult('Phone number is too short');
12
+ }
13
+ if (digitsOnly.length > 15) {
14
+ return invalidResult('Phone number is too long');
15
+ }
16
+ return validResult();
17
+ }
18
+ //# sourceMappingURL=phoneValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phoneValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/phoneValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,mBAAmB,CACjC,SAA+B,EAC/B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,CAAC;IAGD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAG7C,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,2BAA2B,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC3B,OAAO,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateRatingAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=ratingValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratingValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/ratingValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAuClB"}
@@ -0,0 +1,31 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateRatingAnswer(question, answer) {
3
+ if (answer === null || answer === undefined) {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'number' || isNaN(answer)) {
7
+ return invalidResult('Invalid rating');
8
+ }
9
+ const data = (question.data || {});
10
+ const opts = (question.options || {});
11
+ const minRating = typeof opts.min_rating === 'number' ? opts.min_rating :
12
+ typeof data.min_rating === 'number' ? data.min_rating : 1;
13
+ const maxRating = typeof opts.max_rating === 'number' ? opts.max_rating :
14
+ typeof data.max_rating === 'number' ? data.max_rating : 5;
15
+ const step = typeof opts.step === 'number' ? opts.step :
16
+ typeof data.step === 'number' ? data.step : 1;
17
+ if (answer < minRating) {
18
+ return invalidResult(`Rating must be at least ${minRating}`);
19
+ }
20
+ if (answer > maxRating) {
21
+ return invalidResult(`Rating must be no more than ${maxRating}`);
22
+ }
23
+ if (step > 0) {
24
+ const diff = answer - minRating;
25
+ if (Math.abs(diff % step) > 0.0001) {
26
+ return invalidResult(`Rating must be in increments of ${step}`);
27
+ }
28
+ }
29
+ return validResult();
30
+ }
31
+ //# sourceMappingURL=ratingValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ratingValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/ratingValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAClC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAEjE,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,OAAO,aAAa,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC;IAGD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;YACnC,OAAO,aAAa,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateSelectAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=selectValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/selectValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAoClB"}
@@ -0,0 +1,31 @@
1
+ import { getSelectOptions, getAllowOther } from '../helpers';
2
+ import { isOtherAnswerValue } from '../types';
3
+ import { validResult, invalidResult } from './types';
4
+ export function validateSelectAnswer(question, answer) {
5
+ if (answer === null || answer === undefined || answer === '') {
6
+ return validResult();
7
+ }
8
+ const allowOther = getAllowOther(question);
9
+ const options = getSelectOptions(question);
10
+ const validValues = options.map(opt => opt.value);
11
+ if (isOtherAnswerValue(answer)) {
12
+ if (!allowOther) {
13
+ return invalidResult('Custom answers are not allowed');
14
+ }
15
+ if (!answer.text.trim()) {
16
+ return invalidResult('Please enter your answer');
17
+ }
18
+ return validResult();
19
+ }
20
+ if (typeof answer !== 'string') {
21
+ return invalidResult('Invalid selection');
22
+ }
23
+ if (!validValues.includes(answer)) {
24
+ if (allowOther) {
25
+ return validResult();
26
+ }
27
+ return invalidResult('Please select a valid option');
28
+ }
29
+ return validResult();
30
+ }
31
+ //# sourceMappingURL=selectValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/selectValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,oBAAoB,CAClC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAGlD,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,aAAa,CAAC,gCAAgC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,0BAA0B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IAGD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,IAAI,UAAU,EAAE,CAAC;YAEf,OAAO,WAAW,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateTextAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=textValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/textValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAqDlB"}
@@ -0,0 +1,44 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateTextAnswer(question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'string') {
7
+ return invalidResult('Answer must be text');
8
+ }
9
+ const data = (question.data || {});
10
+ const opts = (question.options || {});
11
+ const minLength = typeof data.min_length === 'number'
12
+ ? data.min_length
13
+ : typeof opts.min_length === 'number'
14
+ ? opts.min_length
15
+ : undefined;
16
+ const maxLength = typeof data.max_length === 'number'
17
+ ? data.max_length
18
+ : typeof opts.max_length === 'number'
19
+ ? opts.max_length
20
+ : undefined;
21
+ const pattern = typeof data.pattern === 'string'
22
+ ? data.pattern
23
+ : typeof opts.pattern === 'string'
24
+ ? opts.pattern
25
+ : undefined;
26
+ if (minLength !== undefined && answer.length < minLength) {
27
+ return invalidResult(`Must be at least ${minLength} characters`);
28
+ }
29
+ if (maxLength !== undefined && answer.length > maxLength) {
30
+ return invalidResult(`Must be no more than ${maxLength} characters`);
31
+ }
32
+ if (pattern) {
33
+ try {
34
+ const regex = new RegExp(pattern);
35
+ if (!regex.test(answer)) {
36
+ return invalidResult('Invalid format');
37
+ }
38
+ }
39
+ catch {
40
+ }
41
+ }
42
+ return validResult();
43
+ }
44
+ //# sourceMappingURL=textValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/textValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,kBAAkB,CAChC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAEjE,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;QACjC,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;QACjC,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAC9B,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO;YACd,CAAC,CAAC,SAAS,CAAC;IAElB,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC,oBAAoB,SAAS,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC,wBAAwB,SAAS,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,OAAO,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateTextareaAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=textareaValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textareaValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/textareaValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAiDlB"}
@@ -0,0 +1,40 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateTextareaAnswer(question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'string') {
7
+ return invalidResult('Answer must be text');
8
+ }
9
+ const data = (question.data || {});
10
+ const opts = (question.options || {});
11
+ const minLength = typeof data.min_length === 'number'
12
+ ? data.min_length
13
+ : typeof opts.min_length === 'number'
14
+ ? opts.min_length
15
+ : undefined;
16
+ const maxLength = typeof data.max_length === 'number'
17
+ ? data.max_length
18
+ : typeof opts.max_length === 'number'
19
+ ? opts.max_length
20
+ : undefined;
21
+ const maxLines = typeof data.max_lines === 'number'
22
+ ? data.max_lines
23
+ : typeof opts.max_lines === 'number'
24
+ ? opts.max_lines
25
+ : undefined;
26
+ if (minLength !== undefined && answer.length < minLength) {
27
+ return invalidResult(`Must be at least ${minLength} characters`);
28
+ }
29
+ if (maxLength !== undefined && answer.length > maxLength) {
30
+ return invalidResult(`Must be no more than ${maxLength} characters`);
31
+ }
32
+ if (maxLines !== undefined) {
33
+ const lineCount = answer.split('\n').length;
34
+ if (lineCount > maxLines) {
35
+ return invalidResult(`Must be no more than ${maxLines} lines`);
36
+ }
37
+ }
38
+ return validResult();
39
+ }
40
+ //# sourceMappingURL=textareaValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textareaValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/textareaValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,sBAAsB,CACpC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAEjE,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;QACjC,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,SAAS,GACb,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;QACjC,CAAC,CAAC,IAAI,CAAC,UAAU;QACjB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAChC,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;YAClC,CAAC,CAAC,IAAI,CAAC,SAAS;YAChB,CAAC,CAAC,SAAS,CAAC;IAElB,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC,oBAAoB,SAAS,aAAa,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACzD,OAAO,aAAa,CAAC,wBAAwB,SAAS,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5C,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;YACzB,OAAO,aAAa,CAAC,wBAAwB,QAAQ,QAAQ,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ export interface ValidationResult {
3
+ valid: boolean;
4
+ error?: string;
5
+ }
6
+ export type AnswerValidator = (question: QuoteSessionQuestion, answer: unknown) => ValidationResult;
7
+ export declare const validResult: () => ValidationResult;
8
+ export declare const invalidResult: (error: string) => ValidationResult;
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKlD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,MAAM,eAAe,GAAG,CAC5B,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,KACZ,gBAAgB,CAAC;AAKtB,eAAO,MAAM,WAAW,QAAO,gBAAqC,CAAC;AAKrE,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,gBAG5C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export const validResult = () => ({ valid: true });
2
+ export const invalidResult = (error) => ({
3
+ valid: false,
4
+ error,
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/types.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,WAAW,GAAG,GAAqB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAKrE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAoB,EAAE,CAAC,CAAC;IACjE,KAAK,EAAE,KAAK;IACZ,KAAK;CACN,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateYearAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=yearValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yearValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/yearValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAyBvE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CA4BlB"}
@@ -0,0 +1,39 @@
1
+ import { validResult, invalidResult } from './types';
2
+ function getYearConstraints(question) {
3
+ const result = {};
4
+ if (question.options && typeof question.options === 'object' && !Array.isArray(question.options)) {
5
+ const opts = question.options;
6
+ if (typeof opts.min === 'number')
7
+ result.min = opts.min;
8
+ if (typeof opts.max === 'number')
9
+ result.max = opts.max;
10
+ }
11
+ if (question.data && typeof question.data === 'object') {
12
+ const data = question.data;
13
+ if (result.min === undefined && typeof data.min === 'number')
14
+ result.min = data.min;
15
+ if (result.max === undefined && typeof data.max === 'number')
16
+ result.max = data.max;
17
+ }
18
+ return result;
19
+ }
20
+ export function validateYearAnswer(question, answer) {
21
+ if (answer === null || answer === undefined || answer === '') {
22
+ return validResult();
23
+ }
24
+ if (typeof answer !== 'number' || isNaN(answer)) {
25
+ return invalidResult('Must be a valid year');
26
+ }
27
+ if (!Number.isInteger(answer)) {
28
+ return invalidResult('Year must be a whole number');
29
+ }
30
+ const { min, max } = getYearConstraints(question);
31
+ if (min !== undefined && answer < min) {
32
+ return invalidResult(`Year must be ${min} or later`);
33
+ }
34
+ if (max !== undefined && answer > max) {
35
+ return invalidResult(`Year must be ${max} or earlier`);
36
+ }
37
+ return validResult();
38
+ }
39
+ //# sourceMappingURL=yearValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yearValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/yearValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAKvE,SAAS,kBAAkB,CAAC,QAA8B;IACxD,MAAM,MAAM,GAAmC,EAAE,CAAC;IAGlD,IAAI,QAAQ,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAkC,CAAC;QACzD,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACxD,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAC1D,CAAC;IAGD,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAA+B,CAAC;QACtD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpF,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACtF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAC7D,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAC/C,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;IAGD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAElD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,gBAAgB,GAAG,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,gBAAgB,GAAG,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { Condition, ConditionRule, ConditionOperator, VisibilityConditions } from './conditions';
2
+ import { QuoteSessionQuestion, CategoryConfig, CategoriesConfig } from './session';
3
+ export type AnswerMap = Map<string, unknown>;
4
+ export type QuestionLookup = Map<string, QuoteSessionQuestion>;
5
+ export declare function evaluateCategoryVisibility(conditions: VisibilityConditions | undefined | null, answers: AnswerMap, questions: QuoteSessionQuestion[]): boolean;
6
+ export declare function evaluateCondition(condition: Condition, answers: AnswerMap, questionLookup: QuestionLookup): boolean;
7
+ export declare function evaluateRule(rule: ConditionRule, answers: AnswerMap, questionLookup: QuestionLookup): boolean;
8
+ export declare function compareValue(actual: unknown, operator: ConditionOperator, expected?: unknown): boolean;
9
+ export interface ConditionValidationResult {
10
+ valid: boolean;
11
+ errors: string[];
12
+ }
13
+ export declare function validateCategoryConditions(conditions: VisibilityConditions, categoryLabel: string, categoryEntityType: string, allQuestions: QuoteSessionQuestion[], allCategories: Record<string, CategoryConfig>): ConditionValidationResult;
14
+ export declare function extractQuestionReferences(condition: Condition): ConditionRule[];
15
+ export declare function getAvailableTriggerQuestions(categoryLabel: string, categoryEntityType: string, allQuestions: QuoteSessionQuestion[]): QuoteSessionQuestion[];
16
+ export declare function createEqualsCondition(questionId: string, value: unknown): ConditionRule;
17
+ export declare function createAndCondition(conditions: Condition[]): Condition;
18
+ export declare function createOrCondition(conditions: Condition[]): Condition;
19
+ export declare function createNotCondition(condition: Condition): Condition;
20
+ export declare function conditionToString(condition: Condition, questions: QuoteSessionQuestion[]): string;
21
+ export declare function convertConditionToCode(condition: Condition, questions: QuoteSessionQuestion[]): Condition;
22
+ export declare function convertConditionToId(condition: Condition, codeToIdMap: Map<string, string>): Condition;
23
+ export declare function normalizeCategoriesForTemplate(categoriesConfig: CategoriesConfig | undefined): CategoriesConfig | undefined;
24
+ export declare function convertCategoriesConfigToCode(categoriesConfig: CategoriesConfig | undefined, questions: QuoteSessionQuestion[]): CategoriesConfig | undefined;
25
+ export declare function convertCategoriesConfigToId(categoriesConfig: CategoriesConfig | undefined, codeToIdMap: Map<string, string>): CategoriesConfig | undefined;
26
+ //# sourceMappingURL=conditionHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionHelpers.d.ts","sourceRoot":"","sources":["../../../src/types/questionTypes/conditionHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EAKrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAMnF,MAAM,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAG7C,MAAM,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAW/D,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,EACnD,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,oBAAoB,EAAE,GAChC,OAAO,CAUT;AAKD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,EAClB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAwBT;AAKD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,SAAS,EAClB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAKT;AAoCD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CA8CT;AAuFD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAYD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,oBAAoB,EAChC,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,oBAAoB,EAAE,EACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAC5C,yBAAyB,CA+B3B;AAKD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,EAAE,CAkB/E;AAsCD,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,EAC1B,YAAY,EAAE,oBAAoB,EAAE,GACnC,oBAAoB,EAAE,CAiBxB;AAOD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,OAAO,GACb,aAAa,CAMf;AAKD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAKrE;AAKD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,CAKpE;AAKD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAElE;AAKD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,oBAAoB,EAAE,GAChC,MAAM,CAwBR;AA4BD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,oBAAoB,EAAE,GAChC,SAAS,CA6BX;AAQD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,SAAS,CA4BX;AAUD,wBAAgB,8BAA8B,CAC5C,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,GAC7C,gBAAgB,GAAG,SAAS,CA8B9B;AAOD,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,SAAS,EAAE,oBAAoB,EAAE,GAChC,gBAAgB,GAAG,SAAS,CAkC9B;AAOD,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,EAC9C,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,gBAAgB,GAAG,SAAS,CAkC9B"}