@aacigroup/aaci_shared 5.0.4 → 5.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -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/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts +10 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1 -0
- package/dist/validation.js.map +1 -1
- 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
|
|
@@ -400,6 +428,7 @@ interface Address {
|
|
|
400
428
|
full_address: string; // Required: Complete address string
|
|
401
429
|
place_id: string; // Required: Google Places API place ID
|
|
402
430
|
street_address: string; // Required: Street address component
|
|
431
|
+
street_address_2?: string; // Optional: Street address line 2 (apt, suite, etc.)
|
|
403
432
|
city: string; // Required: City
|
|
404
433
|
state: string; // Required: State/Province
|
|
405
434
|
zip_code: string; // Required: ZIP/Postal code
|
|
@@ -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":"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"}
|
|
@@ -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
|