@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.
- package/README.md +28 -0
- package/dist/questionTypes.d.ts +2 -0
- package/dist/questionTypes.d.ts.map +1 -0
- package/dist/questionTypes.js +2 -0
- package/dist/questionTypes.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/addressValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/addressValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/addressValidator.js +41 -0
- package/dist/types/questionTypes/answerValidators/addressValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/booleanValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/booleanValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/booleanValidator.js +11 -0
- package/dist/types/questionTypes/answerValidators/booleanValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/currencyValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/currencyValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/currencyValidator.js +44 -0
- package/dist/types/questionTypes/answerValidators/currencyValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/dateValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/dateValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/dateValidator.js +34 -0
- package/dist/types/questionTypes/answerValidators/dateValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/datetimeValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/datetimeValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/datetimeValidator.js +33 -0
- package/dist/types/questionTypes/answerValidators/datetimeValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/emailValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/emailValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/emailValidator.js +41 -0
- package/dist/types/questionTypes/answerValidators/emailValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/fileValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/fileValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/fileValidator.js +46 -0
- package/dist/types/questionTypes/answerValidators/fileValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/imageValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/imageValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/imageValidator.js +63 -0
- package/dist/types/questionTypes/answerValidators/imageValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/index.d.ts +23 -0
- package/dist/types/questionTypes/answerValidators/index.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/index.js +73 -0
- package/dist/types/questionTypes/answerValidators/index.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/multiselectValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/multiselectValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/multiselectValidator.js +50 -0
- package/dist/types/questionTypes/answerValidators/multiselectValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/numberValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/numberValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/numberValidator.js +50 -0
- package/dist/types/questionTypes/answerValidators/numberValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/phoneValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/phoneValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/phoneValidator.js +18 -0
- package/dist/types/questionTypes/answerValidators/phoneValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/ratingValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/ratingValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/ratingValidator.js +31 -0
- package/dist/types/questionTypes/answerValidators/ratingValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/selectValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/selectValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/selectValidator.js +31 -0
- package/dist/types/questionTypes/answerValidators/selectValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/textValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/textValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/textValidator.js +44 -0
- package/dist/types/questionTypes/answerValidators/textValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/textareaValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/textareaValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/textareaValidator.js +40 -0
- package/dist/types/questionTypes/answerValidators/textareaValidator.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/types.d.ts +9 -0
- package/dist/types/questionTypes/answerValidators/types.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/types.js +6 -0
- package/dist/types/questionTypes/answerValidators/types.js.map +1 -0
- package/dist/types/questionTypes/answerValidators/yearValidator.d.ts +4 -0
- package/dist/types/questionTypes/answerValidators/yearValidator.d.ts.map +1 -0
- package/dist/types/questionTypes/answerValidators/yearValidator.js +39 -0
- package/dist/types/questionTypes/answerValidators/yearValidator.js.map +1 -0
- package/dist/types/questionTypes/conditionHelpers.d.ts +26 -0
- package/dist/types/questionTypes/conditionHelpers.d.ts.map +1 -0
- package/dist/types/questionTypes/conditionHelpers.js +398 -0
- package/dist/types/questionTypes/conditionHelpers.js.map +1 -0
- package/dist/types/questionTypes/conditions.d.ts +33 -0
- package/dist/types/questionTypes/conditions.d.ts.map +1 -0
- package/dist/types/questionTypes/conditions.js +102 -0
- package/dist/types/questionTypes/conditions.js.map +1 -0
- package/dist/types/questionTypes/defaults.d.ts +19 -0
- package/dist/types/questionTypes/defaults.d.ts.map +1 -0
- package/dist/types/questionTypes/defaults.js +100 -0
- package/dist/types/questionTypes/defaults.js.map +1 -0
- package/dist/types/questionTypes/helpers.d.ts +89 -0
- package/dist/types/questionTypes/helpers.d.ts.map +1 -0
- package/dist/types/questionTypes/helpers.js +356 -0
- package/dist/types/questionTypes/helpers.js.map +1 -0
- package/dist/types/questionTypes/index.d.ts +10 -0
- package/dist/types/questionTypes/index.d.ts.map +1 -0
- package/dist/types/questionTypes/index.js +10 -0
- package/dist/types/questionTypes/index.js.map +1 -0
- package/dist/types/questionTypes/session.d.ts +112 -0
- package/dist/types/questionTypes/session.d.ts.map +1 -0
- package/dist/types/questionTypes/session.js +2 -0
- package/dist/types/questionTypes/session.js.map +1 -0
- package/dist/types/questionTypes/template.d.ts +28 -0
- package/dist/types/questionTypes/template.d.ts.map +1 -0
- package/dist/types/questionTypes/template.js +2 -0
- package/dist/types/questionTypes/template.js.map +1 -0
- package/dist/types/questionTypes/types.d.ts +146 -0
- package/dist/types/questionTypes/types.d.ts.map +1 -0
- package/dist/types/questionTypes/types.js +171 -0
- package/dist/types/questionTypes/types.js.map +1 -0
- package/dist/types/questionTypes/validators.d.ts +27 -0
- package/dist/types/questionTypes/validators.d.ts.map +1 -0
- package/dist/types/questionTypes/validators.js +233 -0
- package/dist/types/questionTypes/validators.js.map +1 -0
- package/dist/types/questionTypes/writers.d.ts +10 -0
- package/dist/types/questionTypes/writers.d.ts.map +1 -0
- package/dist/types/questionTypes/writers.js +70 -0
- package/dist/types/questionTypes/writers.js.map +1 -0
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"questionTypes.d.ts","sourceRoot":"","sources":["../src/questionTypes.ts"],"names":[],"mappings":"AACA,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"questionTypes.js","sourceRoot":"","sources":["../src/questionTypes.ts"],"names":[],"mappings":"AACA,cAAc,gCAAgC,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"AAKA,OAAO,EAAoB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGvE,MAAM,UAAU,kBAAkB,CAChC,QAA8B,EAC9B,MAAe;IAGf,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,WAAW,EAAE,CAAC;IACvB,CAAC;IAGD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAExD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,EAAE,CAAC;IACvB,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,QAAQ,GAAG,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAGxF,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QACtD,OAAO,aAAa,CAAC,WAAW,QAAQ,QAAQ,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACrF,CAAC;IAGD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,aAAa,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,QAAQ,GAAG,IAAuB,CAAC;QAGzC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAC7C,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;gBACvB,OAAO,aAAa,CAAC,+BAA+B,SAAS,IAAI,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QAGD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7D,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;;gBACxC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAExC,OAAO,CAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,QAAQ,CAAC,CAAC,CAAC,MAAI,MAAA,QAAQ,CAAC,IAAI,0CAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC;YAC9F,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,aAAa,CAAC,oCAAoC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -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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"}
|