@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,104 @@
1
+ import { SchemaIterator, SchemaIteratorMeta } from './iterator';
2
+ import SchemaConfig from './config';
3
+ import SchemaSpec from './spec';
4
+ import SchemaInquisitor from './inquisitor';
5
+ export interface SchemaValidationMeta {
6
+ errors?: any;
7
+ isValid?: boolean;
8
+ }
9
+ export interface SchemaValidationResult {
10
+ errors?: {
11
+ [path: string]: string[] | {
12
+ [path: string]: string[];
13
+ };
14
+ };
15
+ isValid?: boolean;
16
+ }
17
+ export interface SchemaPaths {
18
+ [key: string]: any;
19
+ }
20
+ export interface SchemaQuery {
21
+ $eq?: any;
22
+ $lt?: any;
23
+ $gt?: any;
24
+ $in?: Array<any>;
25
+ $nin?: Array<any>;
26
+ $and?: SchemaQuery | Array<SchemaQuery>;
27
+ $or?: SchemaQuery | Array<SchemaQuery>;
28
+ [key: string]: SchemaQuery | Array<SchemaQuery> | any;
29
+ }
30
+ export declare class Schema {
31
+ config: SchemaConfig;
32
+ name: string;
33
+ spec: SchemaSpec;
34
+ constructors: {
35
+ [key: string]: any;
36
+ };
37
+ schemas: {
38
+ [key: string]: Schema;
39
+ };
40
+ schemaIterator: SchemaIterator;
41
+ private fieldTypeCaster?;
42
+ private fieldFilter?;
43
+ private fieldValidator?;
44
+ private transientProcessor?;
45
+ private fieldPrivateFilter?;
46
+ constructor(spec?: SchemaSpec, options?: SchemaConfig);
47
+ init(): void;
48
+ getName(): string;
49
+ setName(name: string): void;
50
+ getMapper(): SchemaIterator;
51
+ getSpec(): SchemaSpec;
52
+ setSpec(spec: SchemaSpec): void;
53
+ getInquisitor(): SchemaInquisitor;
54
+ private getFieldTypeCaster;
55
+ private getFieldFilter;
56
+ private getFieldValidator;
57
+ private getTransientProcessor;
58
+ private getFieldPrivateFilter;
59
+ addConstructor(value: any): void;
60
+ getConstructor(constructorName: any): any;
61
+ addConstructors(constructors: any): void;
62
+ addSchema(schema: Schema): void;
63
+ addSchemas(schemas: Array<Schema> | {
64
+ [key: string]: Schema;
65
+ }): void;
66
+ applyTransients(object: any): any;
67
+ stripTransients(object: any, iteratorType?: string): any;
68
+ stripFunctions(obj: any): any;
69
+ validate(object: any, config?: SchemaConfig): Promise<SchemaValidationResult>;
70
+ validatePaths(paths: SchemaPaths | Array<SchemaPaths>, config?: SchemaConfig, meta?: SchemaValidationMeta): Promise<SchemaValidationResult>;
71
+ validateQuery(query: any, config?: SchemaConfig): Promise<SchemaValidationResult>;
72
+ filterPrivate(object: any, mode?: boolean | string, iteratorType?: string): any;
73
+ specToFieldType(spec: any, value: any): any;
74
+ validateField(opts: {
75
+ spec: SchemaSpec;
76
+ specParent: SchemaSpec;
77
+ fieldName: string | number;
78
+ value: any;
79
+ path: string | number;
80
+ config?: SchemaConfig;
81
+ meta?: SchemaValidationMeta;
82
+ mapperMeta?: SchemaIteratorMeta;
83
+ }): Promise<any>;
84
+ filterField(opts: {
85
+ spec: SchemaSpec;
86
+ specParent: SchemaSpec;
87
+ fieldName: string | number;
88
+ value: any;
89
+ path: string | number;
90
+ config?: SchemaConfig;
91
+ meta?: SchemaValidationMeta;
92
+ mapperMeta?: SchemaIteratorMeta;
93
+ }): Promise<any>;
94
+ typeCast(requiredType: any, value: any, path?: any, meta?: SchemaValidationMeta): any;
95
+ static appendError(meta: SchemaValidationMeta, path: any, error: any): void;
96
+ static isNull(value: any): boolean;
97
+ static mergeValidationResults(results: Array<SchemaValidationResult>): SchemaValidationResult;
98
+ applyFilters<T extends any>(object: T, config?: SchemaConfig): Promise<T>;
99
+ applyFiltersPaths<T extends Record<string, any>>(paths: T, config?: SchemaConfig): Promise<T>;
100
+ applyEncrypt<T>(object: T): Promise<T>;
101
+ applyEncryptPaths<T extends Record<string, any>>(paths: T): Promise<T>;
102
+ applyDecrypt<T>(object: T): Promise<T>;
103
+ }
104
+ export default Schema;
package/dist/schema.js ADDED
@@ -0,0 +1,400 @@
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.Schema = void 0;
7
+ const iterator_1 = require("./iterator");
8
+ const inquisitor_1 = __importDefault(require("./inquisitor"));
9
+ const field_type_caster_1 = __importDefault(require("./processors/field-type-caster"));
10
+ const field_filter_1 = __importDefault(require("./processors/field-filter"));
11
+ const field_validator_1 = __importDefault(require("./processors/field-validator"));
12
+ const transient_processor_1 = __importDefault(require("./processors/transient-processor"));
13
+ const field_private_filter_1 = __importDefault(require("./processors/field-private-filter"));
14
+ class Schema {
15
+ constructor(spec, options) {
16
+ this.config = options == undefined ? {} : options;
17
+ this.config.name = this.config.name ? this.config.name : '';
18
+ this.config.spec = spec ? spec : {};
19
+ this.config.constructors = this.config.constructors
20
+ ? this.config.constructors
21
+ : {};
22
+ this.config.schemas = this.config.schemas ? this.config.schemas : {};
23
+ this.name = this.config.name
24
+ ? this.config.name
25
+ : this.config.spec.$name
26
+ ? this.config.spec.$name
27
+ : this.constructor.name;
28
+ this.spec = this.config.spec ? this.config.spec : {};
29
+ this.constructors = {};
30
+ if (this.config.constructors)
31
+ this.addConstructors(this.config.constructors);
32
+ this.schemas = {};
33
+ if (this.config.schemas)
34
+ this.addSchemas(this.config.schemas);
35
+ this.schemaIterator = null;
36
+ }
37
+ init() {
38
+ if (!this.schemaIterator) {
39
+ this.schemaIterator = new iterator_1.SchemaIterator(this.spec, this.config);
40
+ this.schemaIterator.addSchemas(this.schemas);
41
+ this.schemaIterator.init();
42
+ }
43
+ }
44
+ getName() {
45
+ return this.name;
46
+ }
47
+ setName(name) {
48
+ this.name = name;
49
+ }
50
+ getMapper() {
51
+ this.init();
52
+ return this.schemaIterator;
53
+ }
54
+ getSpec() {
55
+ return this.getMapper().getSpec();
56
+ }
57
+ setSpec(spec) {
58
+ this.spec = spec;
59
+ }
60
+ getInquisitor() {
61
+ return new inquisitor_1.default(this);
62
+ }
63
+ getFieldTypeCaster() {
64
+ if (!this.fieldTypeCaster) {
65
+ this.fieldTypeCaster = new field_type_caster_1.default();
66
+ }
67
+ return this.fieldTypeCaster;
68
+ }
69
+ getFieldFilter() {
70
+ if (!this.fieldFilter) {
71
+ this.fieldFilter = new field_filter_1.default(this.getFieldTypeCaster());
72
+ }
73
+ return this.fieldFilter;
74
+ }
75
+ getFieldValidator() {
76
+ if (!this.fieldValidator) {
77
+ this.fieldValidator = new field_validator_1.default(this.config, this.getFieldTypeCaster(), this.getFieldFilter());
78
+ }
79
+ return this.fieldValidator;
80
+ }
81
+ getTransientProcessor() {
82
+ if (!this.transientProcessor) {
83
+ this.transientProcessor = new transient_processor_1.default(this.getFieldTypeCaster());
84
+ }
85
+ return this.transientProcessor;
86
+ }
87
+ getFieldPrivateFilter() {
88
+ if (!this.fieldPrivateFilter) {
89
+ this.fieldPrivateFilter = new field_private_filter_1.default();
90
+ }
91
+ return this.fieldPrivateFilter;
92
+ }
93
+ addConstructor(value) {
94
+ this.constructors[value.alias !== undefined ? value.alias : value.name] =
95
+ value;
96
+ }
97
+ getConstructor(constructorName) {
98
+ return this.constructors[constructorName]
99
+ ? this.constructors[constructorName]
100
+ : null;
101
+ }
102
+ addConstructors(constructors) {
103
+ if (constructors) {
104
+ var constructorsArray = Array.isArray(constructors)
105
+ ? constructors
106
+ : Object.keys(constructors).map((name) => constructors[name]);
107
+ constructorsArray.forEach((construct) => {
108
+ if (typeof construct == 'function')
109
+ this.addConstructor(construct);
110
+ });
111
+ }
112
+ }
113
+ addSchema(schema) {
114
+ this.schemas[schema.getName()] = schema;
115
+ }
116
+ addSchemas(schemas) {
117
+ if (schemas) {
118
+ var schemasArray = Array.isArray(schemas)
119
+ ? schemas
120
+ : Object.keys(schemas).map((name) => schemas[name]);
121
+ schemasArray.forEach((schema) => {
122
+ if (schema instanceof Schema)
123
+ this.addSchema(schema);
124
+ });
125
+ }
126
+ }
127
+ applyTransients(object) {
128
+ this.init();
129
+ return this.getTransientProcessor().applyTransients(object, this.schemaIterator, this.constructors, this.schemas, this.name);
130
+ }
131
+ stripTransients(object, iteratorType) {
132
+ this.init();
133
+ return this.getTransientProcessor().stripTransients(object, this.schemaIterator, iteratorType);
134
+ }
135
+ stripFunctions(obj) {
136
+ return this.getTransientProcessor().stripFunctions(obj);
137
+ }
138
+ async validate(object, config) {
139
+ this.init();
140
+ var meta = { errors: {} };
141
+ config = config ? config : {};
142
+ var promises = [];
143
+ this.schemaIterator.iterate(object, (opts) => {
144
+ promises.push((async () => {
145
+ let { spec, specParent, fieldName, container, path, meta: mapperMeta, } = opts;
146
+ try {
147
+ let value = await this.validateField({
148
+ spec,
149
+ specParent,
150
+ fieldName,
151
+ value: container ? container[fieldName] : undefined,
152
+ path,
153
+ config,
154
+ meta,
155
+ mapperMeta,
156
+ });
157
+ if (container)
158
+ container[fieldName] = value;
159
+ }
160
+ catch (e) {
161
+ throw new Error('Validate field failed at "' + path + '": ' + e.toString());
162
+ }
163
+ })());
164
+ }, {
165
+ skipTransients: true,
166
+ });
167
+ await Promise.all(promises);
168
+ meta.isValid = Object.keys(meta.errors).length == 0;
169
+ return meta;
170
+ }
171
+ async validatePaths(paths, config, meta) {
172
+ this.init();
173
+ var meta = meta ? meta : { errors: {} };
174
+ var objects = Array.isArray(paths) ? paths : [paths];
175
+ config = config ? config : {};
176
+ var promises = [];
177
+ this.schemaIterator.iteratePaths(objects, (opts) => {
178
+ promises.push((async () => {
179
+ let { spec, specParent, fieldName, container, path, meta: mapperMeta, } = opts;
180
+ try {
181
+ mapperMeta.root = container;
182
+ let value = await this.validateField({
183
+ spec,
184
+ specParent,
185
+ fieldName,
186
+ value: container ? container[fieldName] : undefined,
187
+ path,
188
+ config,
189
+ meta,
190
+ mapperMeta,
191
+ });
192
+ if (container)
193
+ container[fieldName] = value;
194
+ }
195
+ catch (e) {
196
+ throw new Error('Validate field failed at "' + path + '": ' + e.toString());
197
+ }
198
+ })());
199
+ }, {
200
+ skipTransients: true,
201
+ });
202
+ await Promise.all(promises);
203
+ meta.isValid = Object.keys(meta.errors).length == 0;
204
+ return meta;
205
+ }
206
+ async validateQuery(query, config) {
207
+ this.init();
208
+ var meta = meta ? meta : { errors: {} };
209
+ config = config ? config : {};
210
+ config.strict = false;
211
+ var promises = [];
212
+ this.schemaIterator.mapQueryPaths(query, (path, queryPathFieldName, queryPathContainer) => {
213
+ var paths = {};
214
+ paths[path] = queryPathContainer[queryPathFieldName];
215
+ this.schemaIterator.iteratePaths(paths, (opts) => {
216
+ promises.push((async () => {
217
+ let { spec, specParent, fieldName, container, path } = opts;
218
+ let value = await this.validateField({
219
+ spec,
220
+ specParent,
221
+ fieldName,
222
+ value: container ? container[fieldName] : undefined,
223
+ path,
224
+ config,
225
+ meta,
226
+ });
227
+ if (queryPathContainer)
228
+ queryPathContainer[queryPathFieldName] = value;
229
+ })());
230
+ }, { skipTransients: true });
231
+ }, { skipTransients: true });
232
+ await Promise.all(promises);
233
+ meta.isValid = Object.keys(meta.errors).length == 0;
234
+ return meta;
235
+ }
236
+ filterPrivate(object, mode, iteratorType) {
237
+ this.init();
238
+ return this.getFieldPrivateFilter().filterPrivate(object, this.schemaIterator, mode, iteratorType);
239
+ }
240
+ specToFieldType(spec, value) {
241
+ return this.getFieldTypeCaster().specToFieldType(spec, value);
242
+ }
243
+ async validateField(opts) {
244
+ return this.getFieldValidator().validateField(opts);
245
+ }
246
+ async filterField(opts) {
247
+ return this.getFieldFilter().filterField(opts);
248
+ }
249
+ typeCast(requiredType, value, path, meta) {
250
+ return this.getFieldTypeCaster().typeCast(requiredType, value, path, meta);
251
+ }
252
+ static appendError(meta, path, error) {
253
+ var errors = Array.isArray(meta.errors[path]) ? meta.errors[path] : [];
254
+ errors.push(error);
255
+ meta.errors[path] = errors;
256
+ }
257
+ static isNull(value) {
258
+ var result = value === null ||
259
+ (typeof value == 'string' && value.toLowerCase() == 'null');
260
+ return result;
261
+ }
262
+ static mergeValidationResults(results) {
263
+ results = Array.isArray(results) ? results : [];
264
+ var finalResult = { errors: {} };
265
+ results.forEach((result) => {
266
+ if (result.errors)
267
+ Object.assign(finalResult.errors, result.errors);
268
+ });
269
+ finalResult.isValid = Object.keys(finalResult.errors).length == 0;
270
+ return finalResult;
271
+ }
272
+ async applyFilters(object, config) {
273
+ this.init();
274
+ var meta = { errors: {} };
275
+ config = config ? config : {};
276
+ var promises = [];
277
+ this.schemaIterator.iterate(object, (opts) => {
278
+ promises.push((async () => {
279
+ let { spec, specParent, fieldName, container, path, meta: mapperMeta, } = opts;
280
+ try {
281
+ let value = await this.filterField({
282
+ spec,
283
+ specParent,
284
+ fieldName,
285
+ value: container ? container[fieldName] : undefined,
286
+ path,
287
+ config,
288
+ meta,
289
+ mapperMeta,
290
+ });
291
+ if (container)
292
+ container[fieldName] = value;
293
+ }
294
+ catch (e) {
295
+ throw new Error('Filter field failed at "' + path + '": ' + e.toString());
296
+ }
297
+ })());
298
+ });
299
+ await Promise.all(promises);
300
+ return object;
301
+ }
302
+ async applyFiltersPaths(paths, config) {
303
+ this.init();
304
+ var meta = { errors: {} };
305
+ config = config ? config : {};
306
+ var promises = [];
307
+ this.schemaIterator.iteratePaths(paths, (opts) => {
308
+ promises.push((async () => {
309
+ let { spec, specParent, fieldName, container, path, meta: mapperMeta, } = opts;
310
+ try {
311
+ let value = await this.filterField({
312
+ spec,
313
+ specParent,
314
+ fieldName,
315
+ value: container ? container[fieldName] : undefined,
316
+ path,
317
+ config,
318
+ meta,
319
+ mapperMeta,
320
+ });
321
+ if (container)
322
+ container[fieldName] = value;
323
+ }
324
+ catch (e) {
325
+ throw new Error('Filter field failed at "' + path + '": ' + e.toString());
326
+ }
327
+ })());
328
+ }, { skipTransients: true });
329
+ await Promise.all(promises);
330
+ return paths;
331
+ }
332
+ async applyEncrypt(object) {
333
+ this.init();
334
+ const promises = [];
335
+ this.schemaIterator.iterate(object, (opts) => {
336
+ var _a;
337
+ const { spec, fieldName, container } = opts;
338
+ if (!((_a = spec === null || spec === void 0 ? void 0 : spec.$filter) === null || _a === void 0 ? void 0 : _a.encrypt))
339
+ return;
340
+ if (!container || container[fieldName] == null)
341
+ return;
342
+ if (!this.config.encryptionService) {
343
+ throw new Error(`Encryption required for field "${String(fieldName)}" but no encryptionService configured in schema`);
344
+ }
345
+ const service = this.config.encryptionService;
346
+ promises.push((async () => {
347
+ container[fieldName] = await service.encrypt(String(container[fieldName]));
348
+ })());
349
+ });
350
+ await Promise.all(promises);
351
+ return object;
352
+ }
353
+ async applyEncryptPaths(paths) {
354
+ this.init();
355
+ const promises = [];
356
+ this.schemaIterator.iteratePaths(paths, (opts) => {
357
+ var _a;
358
+ const { spec, fieldName, container } = opts;
359
+ if (!((_a = spec === null || spec === void 0 ? void 0 : spec.$filter) === null || _a === void 0 ? void 0 : _a.encrypt))
360
+ return;
361
+ if (!container || container[fieldName] == null)
362
+ return;
363
+ if (!this.config.encryptionService) {
364
+ throw new Error(`Encryption required for field "${String(fieldName)}" but no encryptionService configured in schema`);
365
+ }
366
+ const service = this.config.encryptionService;
367
+ promises.push((async () => {
368
+ container[fieldName] = await service.encrypt(String(container[fieldName]));
369
+ })());
370
+ }, { skipTransients: true });
371
+ await Promise.all(promises);
372
+ return paths;
373
+ }
374
+ async applyDecrypt(object) {
375
+ this.init();
376
+ const promises = [];
377
+ this.schemaIterator.iterate(object, (opts) => {
378
+ var _a;
379
+ const { spec, fieldName, container } = opts;
380
+ if (!((_a = spec === null || spec === void 0 ? void 0 : spec.$filter) === null || _a === void 0 ? void 0 : _a.encrypt))
381
+ return;
382
+ if (!container ||
383
+ container[fieldName] == null ||
384
+ container[fieldName] === '')
385
+ return;
386
+ if (!this.config.encryptionService) {
387
+ throw new Error(`Encryption required for field "${String(fieldName)}" but no encryptionService configured in schema`);
388
+ }
389
+ const service = this.config.encryptionService;
390
+ promises.push((async () => {
391
+ container[fieldName] = await service.decrypt(String(container[fieldName]));
392
+ })());
393
+ });
394
+ await Promise.all(promises);
395
+ return object;
396
+ }
397
+ }
398
+ exports.Schema = Schema;
399
+ exports.default = Schema;
400
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/spec.d.ts ADDED
@@ -0,0 +1,69 @@
1
+ import { FilterConditionSpec } from './filter/filter-condition';
2
+ export interface SchemaSpec {
3
+ $type?: any;
4
+ $spec?: SchemaSpec;
5
+ $or?: SchemaSpec[];
6
+ $pathRef?: string;
7
+ $construct?: Function | string;
8
+ $constructCollection?: Function | string;
9
+ $filter?: SchemaSpecFilter;
10
+ $validate?: SchemaSpecValidate;
11
+ $label?: string;
12
+ $strict?: boolean;
13
+ $nullable?: boolean;
14
+ $noCast?: boolean;
15
+ [key: string]: SchemaSpec | any;
16
+ }
17
+ export interface SchemaSpecFilterConditional<T = any> {
18
+ $if: FilterConditionSpec;
19
+ $then?: T;
20
+ }
21
+ export interface SchemaSpecFilter {
22
+ trim?: boolean;
23
+ uppercase?: boolean;
24
+ lowercase?: boolean;
25
+ defaultValue?: any;
26
+ callback?: (value: any) => any | Promise<any>;
27
+ private?: boolean;
28
+ privateValue?: boolean;
29
+ encrypt?: boolean;
30
+ prependHttp?: boolean | SchemaSpecFilterConditional<boolean>;
31
+ }
32
+ export type CustomValidatorFn = (value: any, options: {
33
+ root?: any;
34
+ label?: string;
35
+ }) => boolean | string | string[] | Promise<boolean | string | string[]>;
36
+ export interface SchemaSpecValidateOptionsCallback extends SchemaSpecValidateOptions {
37
+ validator: CustomValidatorFn;
38
+ }
39
+ export interface SchemaSpecValidate {
40
+ notNull?: boolean | SchemaSpecValidateOptions;
41
+ required?: boolean | SchemaSpecValidateOptions;
42
+ notEmpty?: boolean | SchemaSpecValidateOptions;
43
+ isEmpty?: boolean | SchemaSpecValidateOptions;
44
+ email?: boolean | SchemaSpecValidateOptions;
45
+ valueLength?: SchemaSpecValidateOptionsValueLength;
46
+ equality?: SchemaSpecValidateOptionsEquality | Array<SchemaSpecValidateOptionsEquality>;
47
+ inArray?: SchemaSpecValidateOptionsInArray;
48
+ regex?: SchemaSpecValidateOptionsRegex | Array<SchemaSpecValidateOptionsRegex>;
49
+ callback?: SchemaSpecValidateOptionsCallback | Array<SchemaSpecValidateOptionsCallback>;
50
+ }
51
+ export interface SchemaSpecValidateOptions {
52
+ name?: string;
53
+ message?: string;
54
+ }
55
+ export interface SchemaSpecValidateOptionsValueLength extends SchemaSpecValidateOptions {
56
+ min?: number;
57
+ max?: number;
58
+ }
59
+ export interface SchemaSpecValidateOptionsEquality extends SchemaSpecValidateOptions {
60
+ path: string;
61
+ root: any;
62
+ }
63
+ export interface SchemaSpecValidateOptionsInArray extends SchemaSpecValidateOptions {
64
+ values?: Array<any>;
65
+ }
66
+ export interface SchemaSpecValidateOptionsRegex extends SchemaSpecValidateOptions {
67
+ pattern?: any;
68
+ }
69
+ export default SchemaSpec;
package/dist/spec.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../src/spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export type PropsOf<T> = T extends new (...args: any[]) => any ? Omit<InstanceType<T>, {
2
+ [K in keyof InstanceType<T>]: InstanceType<T>[K] extends Function ? K : never;
3
+ }[keyof InstanceType<T>]> : Omit<T, {
4
+ [K in keyof T]: T[K] extends Function ? K : never;
5
+ }[keyof T]>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=PropsOf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropsOf.js","sourceRoot":"","sources":["../../src/type/PropsOf.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export * from './PropsOf';
@@ -0,0 +1,18 @@
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("./PropsOf"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/type/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB"}
@@ -0,0 +1,13 @@
1
+ declare class Mixed {
2
+ }
3
+ export declare const SchemaTypes: {
4
+ String: StringConstructor;
5
+ Number: NumberConstructor;
6
+ Boolean: BooleanConstructor;
7
+ Array: ArrayConstructor;
8
+ Object: ObjectConstructor;
9
+ Date: DateConstructor;
10
+ ObjectID: any;
11
+ Mixed: typeof Mixed;
12
+ };
13
+ export default SchemaTypes;