@aacigroup/aaci_shared 5.1.0 → 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 (118) hide show
  1. package/README.md +28 -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/package.json +5 -1
package/README.md CHANGED
@@ -365,6 +365,34 @@ function AdvancedComponent() {
365
365
 
366
366
  ## Data Types
367
367
 
368
+ ### Question Types
369
+
370
+ The library includes a portable question types system for managing dynamic forms and questionnaires.
371
+
372
+ ```typescript
373
+ // Import all question types
374
+ import * as QuestionTypes from '@aacigroup/aaci_shared/questionTypes';
375
+
376
+ // Import specific types
377
+ import {
378
+ TemplateSource,
379
+ QuestionTemplateData,
380
+ EntityQuestionsMap,
381
+ TemplateQuestion
382
+ } from '@aacigroup/aaci_shared/questionTypes';
383
+ ```
384
+
385
+ **Available exports:**
386
+ - All type definitions from `types.ts`
387
+ - Helper functions from `helpers.ts`
388
+ - Validators from `validators.ts`
389
+ - Defaults from `defaults.ts`
390
+ - Writers from `writers.ts`
391
+ - Session types from `session.ts`
392
+ - Answer validators from `answerValidators/`
393
+ - Conditions from `conditions.ts`
394
+ - Condition helpers from `conditionHelpers.ts`
395
+
368
396
  ### Lead Data
369
397
 
370
398
  ```typescript
@@ -0,0 +1,2 @@
1
+ export * from './types/questionTypes/index.js';
2
+ //# sourceMappingURL=questionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionTypes.d.ts","sourceRoot":"","sources":["../src/questionTypes.ts"],"names":[],"mappings":"AACA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './types/questionTypes/index.js';
2
+ //# sourceMappingURL=questionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionTypes.js","sourceRoot":"","sources":["../src/questionTypes.ts"],"names":[],"mappings":"AACA,cAAc,gCAAgC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateAddressAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=addressValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/addressValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAkDlB"}
@@ -0,0 +1,41 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateAddressAnswer(question, answer) {
3
+ var _a, _b, _c, _d;
4
+ if (answer === null || answer === undefined || answer === '') {
5
+ return validResult();
6
+ }
7
+ if (typeof answer === 'string') {
8
+ if (answer.trim().length < 5) {
9
+ return invalidResult('Please enter a complete address');
10
+ }
11
+ return validResult();
12
+ }
13
+ if (typeof answer !== 'object') {
14
+ return invalidResult('Invalid address format');
15
+ }
16
+ const addr = answer;
17
+ const data = (question.data || {});
18
+ const requireAllFields = data.require_all_fields !== false;
19
+ if (requireAllFields) {
20
+ if (!((_a = addr.street) === null || _a === void 0 ? void 0 : _a.trim())) {
21
+ return invalidResult('Street address is required');
22
+ }
23
+ if (!((_b = addr.city) === null || _b === void 0 ? void 0 : _b.trim())) {
24
+ return invalidResult('City is required');
25
+ }
26
+ if (!((_c = addr.state) === null || _c === void 0 ? void 0 : _c.trim())) {
27
+ return invalidResult('State is required');
28
+ }
29
+ if (!((_d = addr.zip) === null || _d === void 0 ? void 0 : _d.trim())) {
30
+ return invalidResult('ZIP code is required');
31
+ }
32
+ }
33
+ if (addr.zip) {
34
+ const zipDigits = addr.zip.replace(/\D/g, '');
35
+ if (zipDigits.length !== 5 && zipDigits.length !== 9) {
36
+ return invalidResult('Please enter a valid ZIP code');
37
+ }
38
+ }
39
+ return validResult();
40
+ }
41
+ //# sourceMappingURL=addressValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addressValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/addressValidator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,qBAAqB,CACnC,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,EAAE,CAAC;QAE/B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,aAAa,CAAC,iCAAiC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,IAAI,GAAG,MAA+B,CAAC;IAG7C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,KAAK,KAAK,CAAC;IAE3D,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACzB,OAAO,aAAa,CAAC,4BAA4B,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACvB,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,mBAAmB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,GAAG,0CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACtB,OAAO,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAGD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,aAAa,CAAC,+BAA+B,CAAC,CAAC;QACxD,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 validateBooleanAnswer(_question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=booleanValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/booleanValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAEvE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,oBAAoB,EAC/B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAYlB"}
@@ -0,0 +1,11 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateBooleanAnswer(_question, answer) {
3
+ if (answer === null || answer === undefined) {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'boolean') {
7
+ return invalidResult('Must be Yes or No');
8
+ }
9
+ return validResult();
10
+ }
11
+ //# sourceMappingURL=booleanValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"booleanValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/booleanValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,UAAU,qBAAqB,CACnC,SAA+B,EAC/B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC5C,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 validateCurrencyAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=currencyValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"currencyValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/currencyValidator.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,CA2DlB"}
@@ -0,0 +1,44 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateCurrencyAnswer(question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'number' || isNaN(answer)) {
7
+ return invalidResult('Must be a valid amount');
8
+ }
9
+ const opts = (question.options || {});
10
+ const data = (question.data || {});
11
+ const min = typeof opts.min === 'number'
12
+ ? opts.min
13
+ : typeof data.min === 'number'
14
+ ? data.min
15
+ : undefined;
16
+ const max = typeof opts.max === 'number'
17
+ ? opts.max
18
+ : typeof data.max === 'number'
19
+ ? data.max
20
+ : undefined;
21
+ const step = typeof opts.step === 'number'
22
+ ? opts.step
23
+ : typeof data.step === 'number'
24
+ ? data.step
25
+ : undefined;
26
+ if (min !== undefined && answer < min) {
27
+ return invalidResult(`Must be at least $${min.toLocaleString()}`);
28
+ }
29
+ if (max !== undefined && answer > max) {
30
+ return invalidResult(`Must be no more than $${max.toLocaleString()}`);
31
+ }
32
+ if (step !== undefined && step > 0) {
33
+ const baseValue = min !== null && min !== void 0 ? min : 0;
34
+ const diff = answer - baseValue;
35
+ if (Math.abs(diff % step) > 0.0001) {
36
+ return invalidResult(`Must be in increments of $${step.toLocaleString()}`);
37
+ }
38
+ }
39
+ if (answer < 0) {
40
+ return invalidResult('Amount cannot be negative');
41
+ }
42
+ return validResult();
43
+ }
44
+ //# sourceMappingURL=currencyValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"currencyValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/currencyValidator.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;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,aAAa,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAE9D,MAAM,GAAG,GACP,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;QAC1B,CAAC,CAAC,IAAI,CAAC,GAAG;QACV,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,GAAG,GACP,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;QAC1B,CAAC,CAAC,IAAI,CAAC,GAAG;QACV,CAAC,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YAC5B,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,SAAS,CAAC;IAClB,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC3B,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC7B,CAAC,CAAC,IAAI,CAAC,IAAI;YACX,CAAC,CAAC,SAAS,CAAC;IAElB,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,qBAAqB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC,yBAAyB,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACxE,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,CAClB,6BAA6B,IAAI,CAAC,cAAc,EAAE,EAAE,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;IAGD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,aAAa,CAAC,2BAA2B,CAAC,CAAC;IACpD,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 validateDateAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=dateValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/dateValidator.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,CA4ClB"}
@@ -0,0 +1,34 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateDateAnswer(question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'string') {
7
+ return invalidResult('Invalid date');
8
+ }
9
+ const date = new Date(answer);
10
+ if (isNaN(date.getTime())) {
11
+ return invalidResult('Invalid date format');
12
+ }
13
+ const data = (question.data || {});
14
+ const minDate = typeof data.min_date === 'string' ? new Date(data.min_date) : undefined;
15
+ const maxDate = typeof data.max_date === 'string' ? new Date(data.max_date) : undefined;
16
+ const disablePast = data.disable_past === true;
17
+ const disableFuture = data.disable_future === true;
18
+ const today = new Date();
19
+ today.setHours(0, 0, 0, 0);
20
+ if (disablePast && date < today) {
21
+ return invalidResult('Date cannot be in the past');
22
+ }
23
+ if (disableFuture && date > today) {
24
+ return invalidResult('Date cannot be in the future');
25
+ }
26
+ if (minDate && !isNaN(minDate.getTime()) && date < minDate) {
27
+ return invalidResult(`Date must be on or after ${minDate.toLocaleDateString()}`);
28
+ }
29
+ if (maxDate && !isNaN(maxDate.getTime()) && date > maxDate) {
30
+ return invalidResult(`Date must be on or before ${maxDate.toLocaleDateString()}`);
31
+ }
32
+ return validResult();
33
+ }
34
+ //# sourceMappingURL=dateValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/dateValidator.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;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IAGD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9C,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;IAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;IACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3B,IAAI,WAAW,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAChC,OAAO,aAAa,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,aAAa,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;QAC3D,OAAO,aAAa,CAAC,4BAA4B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;QAC3D,OAAO,aAAa,CAAC,6BAA6B,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IACpF,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 validateDatetimeAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=datetimeValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetimeValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/datetimeValidator.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,CA2ClB"}
@@ -0,0 +1,33 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateDatetimeAnswer(question, answer) {
3
+ if (answer === null || answer === undefined || answer === '') {
4
+ return validResult();
5
+ }
6
+ if (typeof answer !== 'string') {
7
+ return invalidResult('Invalid date/time');
8
+ }
9
+ const datetime = new Date(answer);
10
+ if (isNaN(datetime.getTime())) {
11
+ return invalidResult('Invalid date/time format');
12
+ }
13
+ const data = (question.data || {});
14
+ const minDatetime = typeof data.min_datetime === 'string' ? new Date(data.min_datetime) : undefined;
15
+ const maxDatetime = typeof data.max_datetime === 'string' ? new Date(data.max_datetime) : undefined;
16
+ const disablePast = data.disable_past === true;
17
+ const disableFuture = data.disable_future === true;
18
+ const now = new Date();
19
+ if (disablePast && datetime < now) {
20
+ return invalidResult('Date/time cannot be in the past');
21
+ }
22
+ if (disableFuture && datetime > now) {
23
+ return invalidResult('Date/time cannot be in the future');
24
+ }
25
+ if (minDatetime && !isNaN(minDatetime.getTime()) && datetime < minDatetime) {
26
+ return invalidResult(`Must be on or after ${minDatetime.toLocaleString()}`);
27
+ }
28
+ if (maxDatetime && !isNaN(maxDatetime.getTime()) && datetime > maxDatetime) {
29
+ return invalidResult(`Must be on or before ${maxDatetime.toLocaleString()}`);
30
+ }
31
+ return validResult();
32
+ }
33
+ //# sourceMappingURL=datetimeValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datetimeValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/datetimeValidator.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;IAGD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;IAC/C,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;IAEnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,IAAI,WAAW,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,aAAa,IAAI,QAAQ,GAAG,GAAG,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC3E,OAAO,aAAa,CAAC,uBAAuB,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC3E,OAAO,aAAa,CAAC,wBAAwB,WAAW,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAC/E,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 validateEmailAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=emailValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/emailValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAKvE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAsDlB"}
@@ -0,0 +1,41 @@
1
+ import { validResult, invalidResult } from './types';
2
+ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
3
+ export function validateEmailAnswer(question, answer) {
4
+ var _a;
5
+ if (answer === null || answer === undefined || answer === '') {
6
+ return validResult();
7
+ }
8
+ if (typeof answer !== 'string') {
9
+ return invalidResult('Invalid email address');
10
+ }
11
+ if (!EMAIL_REGEX.test(answer)) {
12
+ return invalidResult('Please enter a valid email address');
13
+ }
14
+ const data = (question.data || {});
15
+ const options = (question.options || {});
16
+ const allowedDomains = Array.isArray(options.allowed_domains)
17
+ ? options.allowed_domains
18
+ : Array.isArray(data.allowed_domains)
19
+ ? data.allowed_domains
20
+ : undefined;
21
+ const blockedDomains = Array.isArray(options.blocked_domains)
22
+ ? options.blocked_domains
23
+ : Array.isArray(data.blocked_domains)
24
+ ? data.blocked_domains
25
+ : undefined;
26
+ const domain = (_a = answer.split('@')[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase();
27
+ if (allowedDomains && allowedDomains.length > 0) {
28
+ const allowed = allowedDomains.some(d => typeof d === 'string' && domain === d.toLowerCase());
29
+ if (!allowed) {
30
+ return invalidResult(`Email must be from: ${allowedDomains.join(', ')}`);
31
+ }
32
+ }
33
+ if (blockedDomains && blockedDomains.length > 0) {
34
+ const blocked = blockedDomains.some(d => typeof d === 'string' && domain === d.toLowerCase());
35
+ if (blocked) {
36
+ return invalidResult('This email domain is not allowed');
37
+ }
38
+ }
39
+ return validResult();
40
+ }
41
+ //# sourceMappingURL=emailValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/emailValidator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGvE,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CACjC,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,EAAE,CAAC;QAC/B,OAAO,aAAa,CAAC,uBAAuB,CAAC,CAAC;IAChD,CAAC;IAGD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IAGD,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC9D,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAA4B,CAAC;IAGpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3D,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,eAAe;YACtB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3D,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,eAAe;YACtB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAAE,WAAW,EAAE,CAAC;IAEnD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,CACzD,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,uBAAuB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,KAAK,CAAC,CAAC,WAAW,EAAE,CACzD,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,aAAa,CAAC,kCAAkC,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 validateFileAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=fileValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/fileValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAGvE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CA2DlB"}
@@ -0,0 +1,46 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateFileAnswer(question, answer) {
3
+ if (answer === null || answer === undefined) {
4
+ return validResult();
5
+ }
6
+ const files = Array.isArray(answer) ? answer : [answer];
7
+ if (files.length === 0) {
8
+ return validResult();
9
+ }
10
+ const data = (question.data || {});
11
+ const opts = (question.options || {});
12
+ const maxFiles = typeof opts.max_files === 'number' ? opts.max_files :
13
+ typeof data.max_files === 'number' ? data.max_files : undefined;
14
+ const maxSizeMb = typeof opts.max_size_mb === 'number' ? opts.max_size_mb :
15
+ typeof data.max_size_mb === 'number' ? data.max_size_mb : undefined;
16
+ const allowedTypes = Array.isArray(opts.allowed_types) ? opts.allowed_types :
17
+ Array.isArray(data.allowed_types) ? data.allowed_types : undefined;
18
+ if (maxFiles !== undefined && files.length > maxFiles) {
19
+ return invalidResult(`Maximum ${maxFiles} file${maxFiles > 1 ? 's' : ''} allowed`);
20
+ }
21
+ for (const file of files) {
22
+ if (typeof file !== 'object' || file === null) {
23
+ return invalidResult('Invalid file');
24
+ }
25
+ const fileInfo = file;
26
+ if (maxSizeMb !== undefined && fileInfo.size !== undefined) {
27
+ const sizeMb = fileInfo.size / (1024 * 1024);
28
+ if (sizeMb > maxSizeMb) {
29
+ return invalidResult(`File size must be less than ${maxSizeMb}MB`);
30
+ }
31
+ }
32
+ if (allowedTypes && allowedTypes.length > 0 && fileInfo.type) {
33
+ const typeAllowed = allowedTypes.some(t => {
34
+ var _a, _b;
35
+ if (typeof t !== 'string')
36
+ return false;
37
+ return ((_a = fileInfo.type) === null || _a === void 0 ? void 0 : _a.includes(t)) || ((_b = fileInfo.name) === null || _b === void 0 ? void 0 : _b.toLowerCase().endsWith(t.toLowerCase()));
38
+ });
39
+ if (!typeAllowed) {
40
+ return invalidResult(`File type not allowed. Accepted: ${allowedTypes.join(', ')}`);
41
+ }
42
+ }
43
+ }
44
+ return validResult();
45
+ }
46
+ //# sourceMappingURL=fileValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/fileValidator.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 validateImageAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ //# sourceMappingURL=imageValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageValidator.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/imageValidator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAA8B,MAAM,SAAS,CAAC;AAWvE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CA6ElB"}
@@ -0,0 +1,63 @@
1
+ import { validResult, invalidResult } from './types';
2
+ export function validateImageAnswer(question, answer) {
3
+ if (answer === null || answer === undefined) {
4
+ return validResult();
5
+ }
6
+ const images = Array.isArray(answer) ? answer : [answer];
7
+ if (images.length === 0) {
8
+ return validResult();
9
+ }
10
+ const data = (question.data || {});
11
+ const opts = (question.options || {});
12
+ const maxFiles = typeof opts.max_files === 'number' ? opts.max_files :
13
+ typeof data.max_files === 'number' ? data.max_files : undefined;
14
+ const maxSizeMb = typeof opts.max_size_mb === 'number' ? opts.max_size_mb :
15
+ typeof data.max_size_mb === 'number' ? data.max_size_mb : undefined;
16
+ const allowedTypes = Array.isArray(opts.allowed_types) ? opts.allowed_types :
17
+ Array.isArray(data.allowed_types) ? data.allowed_types :
18
+ ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
19
+ const minWidth = typeof data.min_width === 'number' ? data.min_width : undefined;
20
+ const minHeight = typeof data.min_height === 'number' ? data.min_height : undefined;
21
+ const maxWidth = typeof data.max_width === 'number' ? data.max_width : undefined;
22
+ const maxHeight = typeof data.max_height === 'number' ? data.max_height : undefined;
23
+ if (maxFiles !== undefined && images.length > maxFiles) {
24
+ return invalidResult(`Maximum ${maxFiles} image${maxFiles > 1 ? 's' : ''} allowed`);
25
+ }
26
+ for (const img of images) {
27
+ if (typeof img !== 'object' || img === null) {
28
+ return invalidResult('Invalid image');
29
+ }
30
+ const imageInfo = img;
31
+ if (maxSizeMb !== undefined && imageInfo.size !== undefined) {
32
+ const sizeMb = imageInfo.size / (1024 * 1024);
33
+ if (sizeMb > maxSizeMb) {
34
+ return invalidResult(`Image size must be less than ${maxSizeMb}MB`);
35
+ }
36
+ }
37
+ if (allowedTypes.length > 0 && imageInfo.type) {
38
+ const typeAllowed = allowedTypes.some(t => {
39
+ var _a;
40
+ if (typeof t !== 'string')
41
+ return false;
42
+ return (_a = imageInfo.type) === null || _a === void 0 ? void 0 : _a.includes(t);
43
+ });
44
+ if (!typeAllowed) {
45
+ return invalidResult('Image type not allowed. Use JPEG, PNG, GIF, or WebP');
46
+ }
47
+ }
48
+ if (minWidth !== undefined && imageInfo.width !== undefined && imageInfo.width < minWidth) {
49
+ return invalidResult(`Image width must be at least ${minWidth}px`);
50
+ }
51
+ if (minHeight !== undefined && imageInfo.height !== undefined && imageInfo.height < minHeight) {
52
+ return invalidResult(`Image height must be at least ${minHeight}px`);
53
+ }
54
+ if (maxWidth !== undefined && imageInfo.width !== undefined && imageInfo.width > maxWidth) {
55
+ return invalidResult(`Image width must be no more than ${maxWidth}px`);
56
+ }
57
+ if (maxHeight !== undefined && imageInfo.height !== undefined && imageInfo.height > maxHeight) {
58
+ return invalidResult(`Image height must be no more than ${maxHeight}px`);
59
+ }
60
+ }
61
+ return validResult();
62
+ }
63
+ //# sourceMappingURL=imageValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageValidator.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/imageValidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { QuoteSessionQuestion } from '../session';
2
+ import { ValidationResult } from './types';
3
+ export declare function validateAnswer(question: QuoteSessionQuestion, answer: unknown): ValidationResult;
4
+ export declare function isValidAnswer(question: QuoteSessionQuestion, answer: unknown): boolean;
5
+ export declare function hasValidRequiredAnswer(question: QuoteSessionQuestion, answer: unknown): boolean;
6
+ export * from './types';
7
+ export { validateTextAnswer } from './textValidator';
8
+ export { validateTextareaAnswer } from './textareaValidator';
9
+ export { validateNumberAnswer } from './numberValidator';
10
+ export { validateCurrencyAnswer } from './currencyValidator';
11
+ export { validateBooleanAnswer } from './booleanValidator';
12
+ export { validateSelectAnswer } from './selectValidator';
13
+ export { validateMultiselectAnswer } from './multiselectValidator';
14
+ export { validateDateAnswer } from './dateValidator';
15
+ export { validateDatetimeAnswer } from './datetimeValidator';
16
+ export { validateYearAnswer } from './yearValidator';
17
+ export { validatePhoneAnswer } from './phoneValidator';
18
+ export { validateEmailAnswer } from './emailValidator';
19
+ export { validateAddressAnswer } from './addressValidator';
20
+ export { validateFileAnswer } from './fileValidator';
21
+ export { validateImageAnswer } from './imageValidator';
22
+ export { validateRatingAnswer } from './ratingValidator';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAgC,MAAM,SAAS,CAAC;AAsDzE,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,gBAAgB,CAWlB;AAKD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,OAAO,CAET;AAKD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO,GACd,OAAO,CAWT;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,73 @@
1
+ import { validResult } from './types';
2
+ import { validateTextAnswer } from './textValidator';
3
+ import { validateTextareaAnswer } from './textareaValidator';
4
+ import { validateNumberAnswer } from './numberValidator';
5
+ import { validateCurrencyAnswer } from './currencyValidator';
6
+ import { validateBooleanAnswer } from './booleanValidator';
7
+ import { validateSelectAnswer } from './selectValidator';
8
+ import { validateMultiselectAnswer } from './multiselectValidator';
9
+ import { validateDateAnswer } from './dateValidator';
10
+ import { validateDatetimeAnswer } from './datetimeValidator';
11
+ import { validateYearAnswer } from './yearValidator';
12
+ import { validatePhoneAnswer } from './phoneValidator';
13
+ import { validateEmailAnswer } from './emailValidator';
14
+ import { validateAddressAnswer } from './addressValidator';
15
+ import { validateFileAnswer } from './fileValidator';
16
+ import { validateImageAnswer } from './imageValidator';
17
+ import { validateRatingAnswer } from './ratingValidator';
18
+ const validatorRegistry = {
19
+ text: validateTextAnswer,
20
+ textarea: validateTextareaAnswer,
21
+ number: validateNumberAnswer,
22
+ currency: validateCurrencyAnswer,
23
+ boolean: validateBooleanAnswer,
24
+ select: validateSelectAnswer,
25
+ multiselect: validateMultiselectAnswer,
26
+ date: validateDateAnswer,
27
+ datetime: validateDatetimeAnswer,
28
+ year: validateYearAnswer,
29
+ phone: validatePhoneAnswer,
30
+ email: validateEmailAnswer,
31
+ address: validateAddressAnswer,
32
+ file: validateFileAnswer,
33
+ image: validateImageAnswer,
34
+ rating: validateRatingAnswer,
35
+ };
36
+ export function validateAnswer(question, answer) {
37
+ const questionType = question.question_type;
38
+ const validator = validatorRegistry[questionType];
39
+ if (!validator) {
40
+ console.warn(`No validator found for question type: ${questionType}`);
41
+ return validResult();
42
+ }
43
+ return validator(question, answer);
44
+ }
45
+ export function isValidAnswer(question, answer) {
46
+ return validateAnswer(question, answer).valid;
47
+ }
48
+ export function hasValidRequiredAnswer(question, answer) {
49
+ const isEmpty = answer === null || answer === undefined || answer === '' ||
50
+ (Array.isArray(answer) && answer.length === 0);
51
+ if (isEmpty) {
52
+ return false;
53
+ }
54
+ return validateAnswer(question, answer).valid;
55
+ }
56
+ export * from './types';
57
+ export { validateTextAnswer } from './textValidator';
58
+ export { validateTextareaAnswer } from './textareaValidator';
59
+ export { validateNumberAnswer } from './numberValidator';
60
+ export { validateCurrencyAnswer } from './currencyValidator';
61
+ export { validateBooleanAnswer } from './booleanValidator';
62
+ export { validateSelectAnswer } from './selectValidator';
63
+ export { validateMultiselectAnswer } from './multiselectValidator';
64
+ export { validateDateAnswer } from './dateValidator';
65
+ export { validateDatetimeAnswer } from './datetimeValidator';
66
+ export { validateYearAnswer } from './yearValidator';
67
+ export { validatePhoneAnswer } from './phoneValidator';
68
+ export { validateEmailAnswer } from './emailValidator';
69
+ export { validateAddressAnswer } from './addressValidator';
70
+ export { validateFileAnswer } from './fileValidator';
71
+ export { validateImageAnswer } from './imageValidator';
72
+ export { validateRatingAnswer } from './ratingValidator';
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/types/questionTypes/answerValidators/index.ts"],"names":[],"mappings":"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"}