@datacapy/schema 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +113 -0
  3. package/dist/builder/builder-array.d.ts +11 -0
  4. package/dist/builder/builder-array.js +35 -0
  5. package/dist/builder/builder-array.js.map +1 -0
  6. package/dist/builder/builder-base.d.ts +25 -0
  7. package/dist/builder/builder-base.js +140 -0
  8. package/dist/builder/builder-base.js.map +1 -0
  9. package/dist/builder/builder-boolean.d.ts +5 -0
  10. package/dist/builder/builder-boolean.js +12 -0
  11. package/dist/builder/builder-boolean.js.map +1 -0
  12. package/dist/builder/builder-date.d.ts +5 -0
  13. package/dist/builder/builder-date.js +12 -0
  14. package/dist/builder/builder-date.js.map +1 -0
  15. package/dist/builder/builder-mixed.d.ts +7 -0
  16. package/dist/builder/builder-mixed.js +16 -0
  17. package/dist/builder/builder-mixed.js.map +1 -0
  18. package/dist/builder/builder-number.d.ts +5 -0
  19. package/dist/builder/builder-number.js +12 -0
  20. package/dist/builder/builder-number.js.map +1 -0
  21. package/dist/builder/builder-object.d.ts +17 -0
  22. package/dist/builder/builder-object.js +47 -0
  23. package/dist/builder/builder-object.js.map +1 -0
  24. package/dist/builder/builder-or.d.ts +9 -0
  25. package/dist/builder/builder-or.js +23 -0
  26. package/dist/builder/builder-or.js.map +1 -0
  27. package/dist/builder/builder-schema.d.ts +18 -0
  28. package/dist/builder/builder-schema.js +68 -0
  29. package/dist/builder/builder-schema.js.map +1 -0
  30. package/dist/builder/builder-string.d.ts +17 -0
  31. package/dist/builder/builder-string.js +106 -0
  32. package/dist/builder/builder-string.js.map +1 -0
  33. package/dist/builder/index.d.ts +14 -0
  34. package/dist/builder/index.js +28 -0
  35. package/dist/builder/index.js.map +1 -0
  36. package/dist/builder/schema-builder.d.ts +25 -0
  37. package/dist/builder/schema-builder.js +46 -0
  38. package/dist/builder/schema-builder.js.map +1 -0
  39. package/dist/config.d.ts +17 -0
  40. package/dist/config.js +3 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/encryption/encryption-service.d.ts +4 -0
  43. package/dist/encryption/encryption-service.js +3 -0
  44. package/dist/encryption/encryption-service.js.map +1 -0
  45. package/dist/encryption/index.d.ts +1 -0
  46. package/dist/encryption/index.js +18 -0
  47. package/dist/encryption/index.js.map +1 -0
  48. package/dist/filter/filter-abstract.d.ts +9 -0
  49. package/dist/filter/filter-abstract.js +11 -0
  50. package/dist/filter/filter-abstract.js.map +1 -0
  51. package/dist/filter/filter-callback.d.ts +6 -0
  52. package/dist/filter/filter-callback.js +18 -0
  53. package/dist/filter/filter-callback.js.map +1 -0
  54. package/dist/filter/filter-condition.d.ts +8 -0
  55. package/dist/filter/filter-condition.js +15 -0
  56. package/dist/filter/filter-condition.js.map +1 -0
  57. package/dist/filter/filter-default-value.d.ts +10 -0
  58. package/dist/filter/filter-default-value.js +29 -0
  59. package/dist/filter/filter-default-value.js.map +1 -0
  60. package/dist/filter/filter-lowercase.d.ts +6 -0
  61. package/dist/filter/filter-lowercase.js +17 -0
  62. package/dist/filter/filter-lowercase.js.map +1 -0
  63. package/dist/filter/filter-postcode.d.ts +7 -0
  64. package/dist/filter/filter-postcode.js +30 -0
  65. package/dist/filter/filter-postcode.js.map +1 -0
  66. package/dist/filter/filter-prepend-http.d.ts +6 -0
  67. package/dist/filter/filter-prepend-http.js +17 -0
  68. package/dist/filter/filter-prepend-http.js.map +1 -0
  69. package/dist/filter/filter-strip-html.d.ts +13 -0
  70. package/dist/filter/filter-strip-html.js +96 -0
  71. package/dist/filter/filter-strip-html.js.map +1 -0
  72. package/dist/filter/filter-trim.d.ts +6 -0
  73. package/dist/filter/filter-trim.js +17 -0
  74. package/dist/filter/filter-trim.js.map +1 -0
  75. package/dist/filter/filter-uppercase.d.ts +6 -0
  76. package/dist/filter/filter-uppercase.js +17 -0
  77. package/dist/filter/filter-uppercase.js.map +1 -0
  78. package/dist/filter/filter.d.ts +7 -0
  79. package/dist/filter/filter.js +59 -0
  80. package/dist/filter/filter.js.map +1 -0
  81. package/dist/filter/index.d.ts +9 -0
  82. package/dist/filter/index.js +26 -0
  83. package/dist/filter/index.js.map +1 -0
  84. package/dist/index.d.ts +18 -0
  85. package/dist/index.js +39 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/inquisitor.d.ts +9 -0
  88. package/dist/inquisitor.js +44 -0
  89. package/dist/inquisitor.js.map +1 -0
  90. package/dist/iterator.d.ts +70 -0
  91. package/dist/iterator.js +339 -0
  92. package/dist/iterator.js.map +1 -0
  93. package/dist/manager.d.ts +30 -0
  94. package/dist/manager.js +55 -0
  95. package/dist/manager.js.map +1 -0
  96. package/dist/processors/field-filter.d.ts +32 -0
  97. package/dist/processors/field-filter.js +114 -0
  98. package/dist/processors/field-filter.js.map +1 -0
  99. package/dist/processors/field-private-filter.d.ts +9 -0
  100. package/dist/processors/field-private-filter.js +84 -0
  101. package/dist/processors/field-private-filter.js.map +1 -0
  102. package/dist/processors/field-type-caster.d.ts +12 -0
  103. package/dist/processors/field-type-caster.js +89 -0
  104. package/dist/processors/field-type-caster.js.map +1 -0
  105. package/dist/processors/field-validator.d.ts +36 -0
  106. package/dist/processors/field-validator.js +171 -0
  107. package/dist/processors/field-validator.js.map +1 -0
  108. package/dist/processors/index.d.ts +5 -0
  109. package/dist/processors/index.js +22 -0
  110. package/dist/processors/index.js.map +1 -0
  111. package/dist/processors/transient-processor.d.ts +23 -0
  112. package/dist/processors/transient-processor.js +124 -0
  113. package/dist/processors/transient-processor.js.map +1 -0
  114. package/dist/schema.d.ts +104 -0
  115. package/dist/schema.js +400 -0
  116. package/dist/schema.js.map +1 -0
  117. package/dist/spec.d.ts +69 -0
  118. package/dist/spec.js +3 -0
  119. package/dist/spec.js.map +1 -0
  120. package/dist/type/PropsOf.d.ts +5 -0
  121. package/dist/type/PropsOf.js +3 -0
  122. package/dist/type/PropsOf.js.map +1 -0
  123. package/dist/type/index.d.ts +1 -0
  124. package/dist/type/index.js +18 -0
  125. package/dist/type/index.js.map +1 -0
  126. package/dist/types.d.ts +13 -0
  127. package/dist/types.js +21 -0
  128. package/dist/types.js.map +1 -0
  129. package/dist/utilities/collection.d.ts +10 -0
  130. package/dist/utilities/collection.js +41 -0
  131. package/dist/utilities/collection.js.map +1 -0
  132. package/dist/utilities/index.d.ts +4 -0
  133. package/dist/utilities/index.js +21 -0
  134. package/dist/utilities/index.js.map +1 -0
  135. package/dist/utilities/object-path-accessor.d.ts +16 -0
  136. package/dist/utilities/object-path-accessor.js +132 -0
  137. package/dist/utilities/object-path-accessor.js.map +1 -0
  138. package/dist/utilities/type-caster.d.ts +10 -0
  139. package/dist/utilities/type-caster.js +126 -0
  140. package/dist/utilities/type-caster.js.map +1 -0
  141. package/dist/utilities/utility.d.ts +8 -0
  142. package/dist/utilities/utility.js +53 -0
  143. package/dist/utilities/utility.js.map +1 -0
  144. package/dist/validator/index.d.ts +12 -0
  145. package/dist/validator/index.js +29 -0
  146. package/dist/validator/index.js.map +1 -0
  147. package/dist/validator/validator-callback.d.ts +6 -0
  148. package/dist/validator/validator-callback.js +15 -0
  149. package/dist/validator/validator-callback.js.map +1 -0
  150. package/dist/validator/validator-email.d.ts +5 -0
  151. package/dist/validator/validator-email.js +20 -0
  152. package/dist/validator/validator-email.js.map +1 -0
  153. package/dist/validator/validator-equality.d.ts +5 -0
  154. package/dist/validator/validator-equality.js +19 -0
  155. package/dist/validator/validator-equality.js.map +1 -0
  156. package/dist/validator/validator-in-array.d.ts +5 -0
  157. package/dist/validator/validator-in-array.js +17 -0
  158. package/dist/validator/validator-in-array.js.map +1 -0
  159. package/dist/validator/validator-interface.d.ts +5 -0
  160. package/dist/validator/validator-interface.js +3 -0
  161. package/dist/validator/validator-interface.js.map +1 -0
  162. package/dist/validator/validator-is-empty.d.ts +5 -0
  163. package/dist/validator/validator-is-empty.js +37 -0
  164. package/dist/validator/validator-is-empty.js.map +1 -0
  165. package/dist/validator/validator-not-empty.d.ts +5 -0
  166. package/dist/validator/validator-not-empty.js +21 -0
  167. package/dist/validator/validator-not-empty.js.map +1 -0
  168. package/dist/validator/validator-not-null.d.ts +5 -0
  169. package/dist/validator/validator-not-null.js +19 -0
  170. package/dist/validator/validator-not-null.js.map +1 -0
  171. package/dist/validator/validator-regex.d.ts +5 -0
  172. package/dist/validator/validator-regex.js +20 -0
  173. package/dist/validator/validator-regex.js.map +1 -0
  174. package/dist/validator/validator-required.d.ts +5 -0
  175. package/dist/validator/validator-required.js +18 -0
  176. package/dist/validator/validator-required.js.map +1 -0
  177. package/dist/validator/validator-value-length.d.ts +5 -0
  178. package/dist/validator/validator-value-length.js +39 -0
  179. package/dist/validator/validator-value-length.js.map +1 -0
  180. package/dist/validator/validator.d.ts +7 -0
  181. package/dist/validator/validator.js +72 -0
  182. package/dist/validator/validator.js.map +1 -0
  183. package/package.json +51 -0
  184. package/tsconfig.json +26 -0
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaFieldPrivateFilter = void 0;
7
+ const type_caster_1 = __importDefault(require("../utilities/type-caster"));
8
+ class SchemaFieldPrivateFilter {
9
+ filterPrivate(object, iterator, mode, iteratorType) {
10
+ mode = mode ? mode : true;
11
+ var deleteRefs = [];
12
+ var valueReplaceRefs = [];
13
+ var iteratorType = iteratorType == 'iteratePaths' ? 'iteratePaths' : 'iterate';
14
+ var result = object
15
+ ? iterator[iteratorType](object, (opts) => {
16
+ let { spec, fieldName, container } = opts;
17
+ const filters = spec && spec.$filter ? spec.$filter : {};
18
+ if (filters.private === true || filters.private == mode) {
19
+ if (container)
20
+ deleteRefs.push({ container, fieldName });
21
+ }
22
+ if (filters.privateValue === true || filters.privateValue == mode) {
23
+ if (container)
24
+ valueReplaceRefs.push({ container, fieldName });
25
+ }
26
+ if (spec && spec.$or && container && container[fieldName] != null) {
27
+ this.collectPrivateRefsInOrValue(container[fieldName], spec.$or, mode, iterator, deleteRefs, valueReplaceRefs);
28
+ }
29
+ })
30
+ : object;
31
+ valueReplaceRefs.forEach((ref) => {
32
+ if (ref.container && ref.container[ref.fieldName]) {
33
+ ref.container[ref.fieldName] =
34
+ ref.container[ref.fieldName] == undefined
35
+ ? ref.container[ref.fieldName]
36
+ : true;
37
+ }
38
+ });
39
+ deleteRefs.forEach((ref) => {
40
+ if (ref.container && ref.container[ref.fieldName])
41
+ delete ref.container[ref.fieldName];
42
+ });
43
+ return result;
44
+ }
45
+ collectPrivateRefsInOrValue(value, orAlternatives, mode, iterator, deleteRefs, valueReplaceRefs) {
46
+ var _a;
47
+ const valueType = type_caster_1.default.getType(value);
48
+ for (const altSpec of orAlternatives) {
49
+ if (!altSpec || typeof altSpec !== 'object')
50
+ continue;
51
+ let altType = altSpec.constructor == String ? altSpec : type_caster_1.default.getType(altSpec);
52
+ if (altType == Object && altSpec.$type !== undefined) {
53
+ altType = altSpec.$type;
54
+ }
55
+ if (altType !== valueType)
56
+ continue;
57
+ const resolvedSpec = (_a = altSpec.$spec) !== null && _a !== void 0 ? _a : altSpec;
58
+ iterator.mapField({
59
+ spec: resolvedSpec,
60
+ specParent: null,
61
+ fieldName: 'value',
62
+ container: { value },
63
+ path: '',
64
+ callback: (opts) => {
65
+ const { spec: fieldSpec, fieldName, container } = opts;
66
+ const filters = fieldSpec && fieldSpec.$filter ? fieldSpec.$filter : {};
67
+ if (filters.private === true || filters.private == mode) {
68
+ if (container)
69
+ deleteRefs.push({ container, fieldName });
70
+ }
71
+ if (filters.privateValue === true || filters.privateValue == mode) {
72
+ if (container)
73
+ valueReplaceRefs.push({ container, fieldName });
74
+ }
75
+ },
76
+ config: {},
77
+ meta: { errors: {} },
78
+ });
79
+ }
80
+ }
81
+ }
82
+ exports.SchemaFieldPrivateFilter = SchemaFieldPrivateFilter;
83
+ exports.default = SchemaFieldPrivateFilter;
84
+ //# sourceMappingURL=field-private-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-private-filter.js","sourceRoot":"","sources":["../../src/processors/field-private-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import SchemaSpec from '../spec';
2
+ import { SchemaValidationMeta } from '../schema';
3
+ export interface SchemaFieldTypeCasterInterface {
4
+ typeCast(requiredType: any, value: any, path?: string | number, meta?: SchemaValidationMeta): any;
5
+ specToFieldType(spec: SchemaSpec, value: any): any;
6
+ }
7
+ export declare class SchemaFieldTypeCaster implements SchemaFieldTypeCasterInterface {
8
+ specToFieldType(spec: SchemaSpec, value: any): any;
9
+ typeCast(requiredType: any, value: any, path?: string | number, meta?: SchemaValidationMeta): any;
10
+ private appendError;
11
+ }
12
+ export default SchemaFieldTypeCaster;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaFieldTypeCaster = void 0;
7
+ const type_caster_1 = __importDefault(require("../utilities/type-caster"));
8
+ const types_1 = __importDefault(require("../types"));
9
+ class SchemaFieldTypeCaster {
10
+ specToFieldType(spec, value) {
11
+ var fieldType = undefined;
12
+ if (spec) {
13
+ if (spec.$or && Array.isArray(spec.$or)) {
14
+ for (const orSpec of spec.$or) {
15
+ const orFieldType = this.specToFieldType(orSpec, value);
16
+ if (orFieldType) {
17
+ const valueType = type_caster_1.default.getType(value);
18
+ const orTypeName = type_caster_1.default.getTypeName(orFieldType);
19
+ const valueTypeName = type_caster_1.default.getTypeName(value);
20
+ if (orTypeName === valueTypeName ||
21
+ orFieldType === valueType ||
22
+ (orFieldType === Object && valueType === Object) ||
23
+ (orFieldType === Array && Array.isArray(value))) {
24
+ return orFieldType;
25
+ }
26
+ }
27
+ }
28
+ if (spec.$or.length > 0) {
29
+ return this.specToFieldType(spec.$or[0], value);
30
+ }
31
+ return undefined;
32
+ }
33
+ if (spec.constructor == String) {
34
+ fieldType = spec;
35
+ }
36
+ else {
37
+ fieldType = type_caster_1.default.getType(spec);
38
+ if (fieldType === Object) {
39
+ if (spec.$type !== undefined) {
40
+ fieldType = this.specToFieldType(spec.$type, value);
41
+ }
42
+ }
43
+ }
44
+ }
45
+ if (fieldType && fieldType.constructor == String) {
46
+ fieldType = types_1.default[fieldType];
47
+ }
48
+ return fieldType;
49
+ }
50
+ typeCast(requiredType, value, path, meta) {
51
+ var meta = meta ? meta : { errors: {} };
52
+ var skip = (requiredType === Object &&
53
+ Array.isArray(value) == false &&
54
+ Object(value) === value) ||
55
+ (requiredType === Array && Array.isArray(value));
56
+ var result = value;
57
+ if (!skip) {
58
+ var result = value;
59
+ var requiredTypeName = type_caster_1.default.getTypeName(requiredType);
60
+ var valueTypeName = type_caster_1.default.getTypeName(value);
61
+ if (requiredTypeName != valueTypeName) {
62
+ result = type_caster_1.default.cast(requiredType, value);
63
+ let resultTypeName = type_caster_1.default.getTypeName(result);
64
+ if (resultTypeName != requiredTypeName ||
65
+ (valueTypeName != 'Number' &&
66
+ resultTypeName == 'Number' &&
67
+ isNaN(result))) {
68
+ let origValue = ['String', 'Number', 'Boolean'].indexOf(valueTypeName) != -1
69
+ ? "'" + value + "'"
70
+ : '';
71
+ this.appendError(meta, path, origValue +
72
+ ' of type ' +
73
+ valueTypeName +
74
+ ' cannot be cast to type ' +
75
+ requiredTypeName);
76
+ }
77
+ }
78
+ }
79
+ return result;
80
+ }
81
+ appendError(meta, path, error) {
82
+ var errors = Array.isArray(meta.errors[path]) ? meta.errors[path] : [];
83
+ errors.push(error);
84
+ meta.errors[path] = errors;
85
+ }
86
+ }
87
+ exports.SchemaFieldTypeCaster = SchemaFieldTypeCaster;
88
+ exports.default = SchemaFieldTypeCaster;
89
+ //# sourceMappingURL=field-type-caster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-type-caster.js","sourceRoot":"","sources":["../../src/processors/field-type-caster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import SchemaSpec from '../spec';
2
+ import SchemaConfig from '../config';
3
+ import { SchemaValidationMeta } from '../schema';
4
+ import { SchemaIteratorMeta } from '../iterator';
5
+ import SchemaFieldFilter from './field-filter';
6
+ import SchemaFieldTypeCaster from './field-type-caster';
7
+ export interface SchemaFieldValidatorInterface {
8
+ validateField(opts: {
9
+ spec: SchemaSpec;
10
+ specParent: SchemaSpec;
11
+ fieldName: string | number;
12
+ value: any;
13
+ path: string | number;
14
+ config?: SchemaConfig;
15
+ meta?: SchemaValidationMeta;
16
+ mapperMeta?: SchemaIteratorMeta;
17
+ }): Promise<any>;
18
+ }
19
+ export declare class SchemaFieldValidator implements SchemaFieldValidatorInterface {
20
+ private fieldFilter;
21
+ private fieldTypeCaster;
22
+ private config;
23
+ constructor(config: SchemaConfig, fieldTypeCaster: SchemaFieldTypeCaster, fieldFilter: SchemaFieldFilter);
24
+ validateField(opts: {
25
+ spec: SchemaSpec;
26
+ specParent: SchemaSpec;
27
+ fieldName: string | number;
28
+ value: any;
29
+ path: string | number;
30
+ config?: SchemaConfig;
31
+ meta?: SchemaValidationMeta;
32
+ mapperMeta?: SchemaIteratorMeta;
33
+ }): Promise<any>;
34
+ private appendError;
35
+ }
36
+ export default SchemaFieldValidator;
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaFieldValidator = void 0;
7
+ const validator_1 = __importDefault(require("../validator/validator"));
8
+ const utility_1 = __importDefault(require("../utilities/utility"));
9
+ const types_1 = __importDefault(require("../types"));
10
+ const type_caster_1 = __importDefault(require("../utilities/type-caster"));
11
+ class SchemaFieldValidator {
12
+ constructor(config, fieldTypeCaster, fieldFilter) {
13
+ this.config = config;
14
+ this.fieldTypeCaster = fieldTypeCaster;
15
+ this.fieldFilter = fieldFilter;
16
+ }
17
+ async validateField(opts) {
18
+ var _a;
19
+ var { spec, specParent, fieldName, value, path, config, meta, mapperMeta } = opts;
20
+ path = path ? path : fieldName;
21
+ config = config ? config : {};
22
+ meta = meta ? meta : { errors: [] };
23
+ mapperMeta = mapperMeta ? mapperMeta : {};
24
+ if (spec && spec.$or && Array.isArray(spec.$or)) {
25
+ if (spec.$noCast === true) {
26
+ return value;
27
+ }
28
+ const orSpecs = spec.$or;
29
+ const orErrors = [];
30
+ let matchedSpec = null;
31
+ let matchedValue = value;
32
+ let bestMatch = null;
33
+ const valueTypeName = value == null ? null : type_caster_1.default.getTypeName(value);
34
+ for (const orSpec of orSpecs) {
35
+ const tempMeta = { errors: {} };
36
+ try {
37
+ const testValue = await this.validateField({
38
+ spec: orSpec,
39
+ specParent,
40
+ fieldName: 'tempField',
41
+ value,
42
+ path,
43
+ config,
44
+ meta: tempMeta,
45
+ mapperMeta,
46
+ });
47
+ if (Object.keys(tempMeta.errors).length === 0) {
48
+ const resultTypeName = testValue == null ? null : type_caster_1.default.getTypeName(testValue);
49
+ const typeCasted = valueTypeName !== resultTypeName;
50
+ if (!bestMatch || (!typeCasted && bestMatch.typeCasted)) {
51
+ bestMatch = { spec: orSpec, value: testValue, typeCasted };
52
+ if (!typeCasted) {
53
+ matchedSpec = orSpec;
54
+ matchedValue = testValue;
55
+ break;
56
+ }
57
+ }
58
+ else if (!bestMatch.typeCasted && !typeCasted) {
59
+ matchedSpec = orSpec;
60
+ matchedValue = testValue;
61
+ break;
62
+ }
63
+ }
64
+ else {
65
+ orErrors.push(tempMeta.errors);
66
+ }
67
+ }
68
+ catch (e) {
69
+ orErrors.push({ [path]: [e.toString()] });
70
+ }
71
+ }
72
+ if (bestMatch && !matchedSpec) {
73
+ matchedSpec = bestMatch.spec;
74
+ matchedValue = bestMatch.value;
75
+ }
76
+ if (matchedSpec) {
77
+ return matchedValue;
78
+ }
79
+ if (orErrors.length > 0) {
80
+ orErrors.forEach((errorSet, index) => {
81
+ for (const errorPath in errorSet) {
82
+ errorSet[errorPath].forEach((error) => {
83
+ this.appendError(meta, path, ` [Option ${index + 1}] ${error}`);
84
+ });
85
+ }
86
+ });
87
+ }
88
+ return value;
89
+ }
90
+ const validators = spec && spec.$validate ? spec.$validate : {};
91
+ const label = spec && spec.$label ? spec.$label : fieldName;
92
+ const strict = spec && spec.$strict !== undefined
93
+ ? spec.$strict
94
+ : specParent && specParent.$strict !== undefined
95
+ ? specParent.$strict
96
+ : undefined;
97
+ if (!utility_1.default.isValidFieldName(fieldName)) {
98
+ this.appendError(meta, path, 'Invalid field name');
99
+ }
100
+ const fieldType = this.fieldTypeCaster.specToFieldType(spec, value);
101
+ value = await this.fieldFilter.filterField(opts);
102
+ const matchAllSpec = (spec && spec.$spec && spec.$spec['*']) || (spec && spec['*']);
103
+ if (fieldType === Object &&
104
+ value &&
105
+ typeof value === 'object' &&
106
+ !Array.isArray(value) &&
107
+ matchAllSpec) {
108
+ const inheritedMatchAllSpec = {
109
+ ...matchAllSpec,
110
+ ...((spec === null || spec === void 0 ? void 0 : spec.$noCast) !== undefined &&
111
+ matchAllSpec.$noCast === undefined && { $noCast: spec.$noCast }),
112
+ ...((spec === null || spec === void 0 ? void 0 : spec.$strict) !== undefined &&
113
+ matchAllSpec.$strict === undefined && { $strict: spec.$strict }),
114
+ };
115
+ for (const propName in value) {
116
+ if (typeof value[propName] === 'function')
117
+ continue;
118
+ const propValue = await this.validateField({
119
+ spec: inheritedMatchAllSpec,
120
+ specParent: spec,
121
+ fieldName: propName,
122
+ value: value[propName],
123
+ path: path ? `${path}.${propName}` : propName,
124
+ config,
125
+ meta,
126
+ mapperMeta,
127
+ });
128
+ value[propName] = propValue;
129
+ }
130
+ }
131
+ if (fieldType == Object && strict) {
132
+ for (let fieldName in value) {
133
+ if (typeof value[fieldName] == 'function')
134
+ continue;
135
+ const hasMatchAll = ((_a = spec.$spec) === null || _a === void 0 ? void 0 : _a['*']) !== undefined || spec['*'] !== undefined;
136
+ const fieldDefined = spec[fieldName] !== undefined ||
137
+ (spec.$spec && spec.$spec[fieldName] !== undefined);
138
+ if (!fieldDefined && !hasMatchAll) {
139
+ this.appendError(meta, fieldName, 'Field not specified');
140
+ }
141
+ }
142
+ }
143
+ validators.notNull =
144
+ validators.notNull !== undefined
145
+ ? validators.notNull
146
+ : this.config.defaultNotNull;
147
+ if (![types_1.default.Array, types_1.default.Object].includes(fieldType) &&
148
+ ((value === null && !validators.notNull) ||
149
+ (value === undefined && !validators.required))) {
150
+ return value;
151
+ }
152
+ var validateResults = await validator_1.default.validate(value, validators, {
153
+ label,
154
+ root: mapperMeta.root,
155
+ });
156
+ if (Array.isArray(validateResults)) {
157
+ validateResults.forEach((result) => {
158
+ this.appendError(meta, path, result);
159
+ });
160
+ }
161
+ return value;
162
+ }
163
+ appendError(meta, path, error) {
164
+ var errors = Array.isArray(meta.errors[path]) ? meta.errors[path] : [];
165
+ errors.push(error);
166
+ meta.errors[path] = errors;
167
+ }
168
+ }
169
+ exports.SchemaFieldValidator = SchemaFieldValidator;
170
+ exports.default = SchemaFieldValidator;
171
+ //# sourceMappingURL=field-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-validator.js","sourceRoot":"","sources":["../../src/processors/field-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './field-type-caster';
2
+ export * from './field-filter';
3
+ export * from './field-validator';
4
+ export * from './field-private-filter';
5
+ export * from './transient-processor';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./field-type-caster"), exports);
18
+ __exportStar(require("./field-filter"), exports);
19
+ __exportStar(require("./field-validator"), exports);
20
+ __exportStar(require("./field-private-filter"), exports);
21
+ __exportStar(require("./transient-processor"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/processors/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,iDAA8B;AAC9B,oDAAiC;AACjC,yDAAsC;AACtC,wDAAqC"}
@@ -0,0 +1,23 @@
1
+ import { SchemaIterator } from '../iterator';
2
+ import SchemaFieldTypeCaster from './field-type-caster';
3
+ export interface SchemaTransientProcessorInterface {
4
+ applyTransients(object: any, iterator: SchemaIterator, constructors: {
5
+ [key: string]: any;
6
+ }, schemas: {
7
+ [key: string]: any;
8
+ }, schemaName: string): any;
9
+ stripTransients(object: any, iterator: SchemaIterator, iteratorType?: string): any;
10
+ stripFunctions(obj: any): any;
11
+ }
12
+ export declare class SchemaTransientProcessor implements SchemaTransientProcessorInterface {
13
+ private fieldTypeCaster;
14
+ constructor(fieldTypeCaster: SchemaFieldTypeCaster);
15
+ applyTransients(object: any, iterator: SchemaIterator, constructors: {
16
+ [key: string]: any;
17
+ }, _schemas: {
18
+ [key: string]: any;
19
+ }, schemaName: string): any;
20
+ stripTransients(object: any, iterator: SchemaIterator, iteratorType?: string): any;
21
+ stripFunctions(obj: any): any;
22
+ }
23
+ export default SchemaTransientProcessor;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SchemaTransientProcessor = void 0;
7
+ const collection_1 = __importDefault(require("../utilities/collection"));
8
+ const types_1 = __importDefault(require("../types"));
9
+ const object_path_accessor_1 = __importDefault(require("../utilities/object-path-accessor"));
10
+ class SchemaTransientProcessor {
11
+ constructor(fieldTypeCaster) {
12
+ this.fieldTypeCaster = fieldTypeCaster;
13
+ }
14
+ applyTransients(object, iterator, constructors, _schemas, schemaName) {
15
+ return object && constructors
16
+ ? iterator.iterate(object, (opts) => {
17
+ var _a, _b, _c;
18
+ let { spec, fieldName, container, path, meta: mapperMeta } = opts;
19
+ if (!container)
20
+ return;
21
+ let pathRef = spec ? spec.$pathRef : null;
22
+ if (pathRef) {
23
+ container[fieldName] = object_path_accessor_1.default.getPath(pathRef, mapperMeta.root);
24
+ }
25
+ else {
26
+ const noCast = (spec === null || spec === void 0 ? void 0 : spec.$noCast) === true;
27
+ if (!noCast) {
28
+ const fieldType = this.fieldTypeCaster.specToFieldType(spec, container[fieldName]);
29
+ if (container[fieldName] != undefined) {
30
+ if (fieldType && fieldType != types_1.default.Mixed) {
31
+ container[fieldName] = this.fieldTypeCaster.typeCast(fieldType, container[fieldName], path);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ let construct;
37
+ if (container[fieldName] && Array.isArray(container[fieldName])) {
38
+ construct =
39
+ (spec === null || spec === void 0 ? void 0 : spec.$constructCollection) ||
40
+ ((_a = spec === null || spec === void 0 ? void 0 : spec.$spec) === null || _a === void 0 ? void 0 : _a.$constructCollection) ||
41
+ (spec === null || spec === void 0 ? void 0 : spec.$construct) ||
42
+ collection_1.default;
43
+ }
44
+ else {
45
+ construct = (spec === null || spec === void 0 ? void 0 : spec.$construct) || ((_b = spec === null || spec === void 0 ? void 0 : spec.$spec) === null || _b === void 0 ? void 0 : _b.$construct);
46
+ }
47
+ const isNullable = (spec === null || spec === void 0 ? void 0 : spec.$nullable) || ((_c = spec === null || spec === void 0 ? void 0 : spec.$spec) === null || _c === void 0 ? void 0 : _c.$nullable);
48
+ const isNull = container[fieldName] === null;
49
+ if (construct && !(isNull && isNullable)) {
50
+ let constructorFunction = null;
51
+ if (typeof construct === 'string' && constructors[construct]) {
52
+ constructorFunction = constructors[construct];
53
+ }
54
+ else if (typeof construct === 'function') {
55
+ constructorFunction = construct;
56
+ }
57
+ else {
58
+ throw new Error(`Constructor "${construct}" not found for path "${path}" in schema ${schemaName}`);
59
+ }
60
+ if (constructorFunction) {
61
+ if (Array.isPrototypeOf(constructorFunction) &&
62
+ (!container[fieldName] || Array.isArray(container[fieldName]))) {
63
+ if ('fromArray' in constructorFunction.prototype) {
64
+ container[fieldName] = new constructorFunction().fromArray(container[fieldName]);
65
+ }
66
+ else {
67
+ container[fieldName] = container[fieldName]
68
+ ? new constructorFunction(...container[fieldName])
69
+ : Object.create(constructorFunction.prototype);
70
+ }
71
+ }
72
+ else {
73
+ container[fieldName] = Reflect.construct(constructorFunction, [
74
+ container[fieldName],
75
+ ]);
76
+ }
77
+ }
78
+ }
79
+ })
80
+ : object;
81
+ }
82
+ stripTransients(object, iterator, iteratorType) {
83
+ var iteratorType = iteratorType == 'iteratePaths' ? 'iteratePaths' : 'iterate';
84
+ var deleteRefs = [];
85
+ var result = object
86
+ ? iterator[iteratorType](object, (opts) => {
87
+ var { spec, fieldName, container } = opts;
88
+ if (spec && container) {
89
+ if (spec.$pathRef !== undefined || spec.$relation) {
90
+ deleteRefs.push({ container, fieldName });
91
+ }
92
+ }
93
+ })
94
+ : object;
95
+ deleteRefs.forEach((ref) => {
96
+ if (ref.container && ref.container[ref.fieldName])
97
+ delete ref.container[ref.fieldName];
98
+ });
99
+ return result;
100
+ }
101
+ stripFunctions(obj) {
102
+ if (obj === null || typeof obj !== 'object') {
103
+ return obj;
104
+ }
105
+ if (Array.isArray(obj)) {
106
+ return obj
107
+ .filter((item) => typeof item !== 'function')
108
+ .map((item) => this.stripFunctions(item));
109
+ }
110
+ const result = {};
111
+ for (const key in obj) {
112
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
113
+ const value = obj[key];
114
+ if (typeof value !== 'function') {
115
+ result[key] = this.stripFunctions(value);
116
+ }
117
+ }
118
+ }
119
+ return result;
120
+ }
121
+ }
122
+ exports.SchemaTransientProcessor = SchemaTransientProcessor;
123
+ exports.default = SchemaTransientProcessor;
124
+ //# sourceMappingURL=transient-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transient-processor.js","sourceRoot":"","sources":["../../src/processors/transient-processor.ts"],"names":[],"mappings":"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"}