@allgemein/schema-api 1.5.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 (228) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +34 -0
  3. package/api/IBaseRef.d.ts +44 -0
  4. package/api/IBaseRef.js +4 -0
  5. package/api/IBaseRef.js.map +1 -0
  6. package/api/IBuildOptions.d.ts +31 -0
  7. package/api/IBuildOptions.js +4 -0
  8. package/api/IBuildOptions.js.map +1 -0
  9. package/api/IClassRef.d.ts +24 -0
  10. package/api/IClassRef.js +13 -0
  11. package/api/IClassRef.js.map +1 -0
  12. package/api/IEntityRef.d.ts +16 -0
  13. package/api/IEntityRef.js +11 -0
  14. package/api/IEntityRef.js.map +1 -0
  15. package/api/IJsonSchema.d.ts +11 -0
  16. package/api/IJsonSchema.js +26 -0
  17. package/api/IJsonSchema.js.map +1 -0
  18. package/api/ILookupRegistry.d.ts +60 -0
  19. package/api/ILookupRegistry.js +17 -0
  20. package/api/ILookupRegistry.js.map +1 -0
  21. package/api/IPropertyExtentions.d.ts +8 -0
  22. package/api/IPropertyExtentions.js +5 -0
  23. package/api/IPropertyExtentions.js.map +1 -0
  24. package/api/IPropertyRef.d.ts +28 -0
  25. package/api/IPropertyRef.js +13 -0
  26. package/api/IPropertyRef.js.map +1 -0
  27. package/api/ISchemaRef.d.ts +8 -0
  28. package/api/ISchemaRef.js +4 -0
  29. package/api/ISchemaRef.js.map +1 -0
  30. package/api/ISerializeSupport.d.ts +11 -0
  31. package/api/ISerializeSupport.js +26 -0
  32. package/api/ISerializeSupport.js.map +1 -0
  33. package/browser.d.ts +62 -0
  34. package/browser.js +117 -0
  35. package/browser.js.map +1 -0
  36. package/decorators/Embeddable.d.ts +2 -0
  37. package/decorators/Embeddable.js +14 -0
  38. package/decorators/Embeddable.js.map +1 -0
  39. package/decorators/Entity.d.ts +2 -0
  40. package/decorators/Entity.js +14 -0
  41. package/decorators/Entity.js.map +1 -0
  42. package/decorators/Namespace.d.ts +1 -0
  43. package/decorators/Namespace.js +20 -0
  44. package/decorators/Namespace.js.map +1 -0
  45. package/decorators/Property.d.ts +3 -0
  46. package/decorators/Property.js +59 -0
  47. package/decorators/Property.js.map +1 -0
  48. package/decorators/PropertyOf.d.ts +2 -0
  49. package/decorators/PropertyOf.js +28 -0
  50. package/decorators/PropertyOf.js.map +1 -0
  51. package/decorators/Schema.d.ts +2 -0
  52. package/decorators/Schema.js +14 -0
  53. package/decorators/Schema.js.map +1 -0
  54. package/decorators/validate/Hostname.d.ts +6 -0
  55. package/decorators/validate/Hostname.js +38 -0
  56. package/decorators/validate/Hostname.js.map +1 -0
  57. package/decorators/validate/Ip4.d.ts +6 -0
  58. package/decorators/validate/Ip4.js +37 -0
  59. package/decorators/validate/Ip4.js.map +1 -0
  60. package/decorators/validate/Ip6.d.ts +5 -0
  61. package/decorators/validate/Ip6.js +37 -0
  62. package/decorators/validate/Ip6.js.map +1 -0
  63. package/decorators/validate/IsEmail.d.ts +5 -0
  64. package/decorators/validate/IsEmail.js +37 -0
  65. package/decorators/validate/IsEmail.js.map +1 -0
  66. package/decorators/validate/IsNotEmpty.d.ts +5 -0
  67. package/decorators/validate/IsNotEmpty.js +36 -0
  68. package/decorators/validate/IsNotEmpty.js.map +1 -0
  69. package/decorators/validate/MaxLength.d.ts +6 -0
  70. package/decorators/validate/MaxLength.js +34 -0
  71. package/decorators/validate/MaxLength.js.map +1 -0
  72. package/decorators/validate/MinLength.d.ts +6 -0
  73. package/decorators/validate/MinLength.js +34 -0
  74. package/decorators/validate/MinLength.js.map +1 -0
  75. package/decorators/validate/Regex.d.ts +7 -0
  76. package/decorators/validate/Regex.js +46 -0
  77. package/decorators/validate/Regex.js.map +1 -0
  78. package/decorators/validate/Required.d.ts +5 -0
  79. package/decorators/validate/Required.js +34 -0
  80. package/decorators/validate/Required.js.map +1 -0
  81. package/decorators/validate/index.d.ts +9 -0
  82. package/decorators/validate/index.js +21 -0
  83. package/decorators/validate/index.js.map +1 -0
  84. package/index.d.ts +1 -0
  85. package/index.js +15 -0
  86. package/index.js.map +1 -0
  87. package/lib/AbstractRef.d.ts +26 -0
  88. package/lib/AbstractRef.js +126 -0
  89. package/lib/AbstractRef.js.map +1 -0
  90. package/lib/AnnotationsHelper.d.ts +7 -0
  91. package/lib/AnnotationsHelper.js +97 -0
  92. package/lib/AnnotationsHelper.js.map +1 -0
  93. package/lib/ClassRef.d.ts +120 -0
  94. package/lib/ClassRef.js +319 -0
  95. package/lib/ClassRef.js.map +1 -0
  96. package/lib/Constants.d.ts +45 -0
  97. package/lib/Constants.js +65 -0
  98. package/lib/Constants.js.map +1 -0
  99. package/lib/DataContainer.d.ts +31 -0
  100. package/lib/DataContainer.js +148 -0
  101. package/lib/DataContainer.js.map +1 -0
  102. package/lib/LookupRegistry.d.ts +36 -0
  103. package/lib/LookupRegistry.js +106 -0
  104. package/lib/LookupRegistry.js.map +1 -0
  105. package/lib/SchemaRef.d.ts +14 -0
  106. package/lib/SchemaRef.js +51 -0
  107. package/lib/SchemaRef.js.map +1 -0
  108. package/lib/SchemaUtils.d.ts +39 -0
  109. package/lib/SchemaUtils.js +129 -0
  110. package/lib/SchemaUtils.js.map +1 -0
  111. package/lib/json-schema/Constants.d.ts +2 -0
  112. package/lib/json-schema/Constants.js +7 -0
  113. package/lib/json-schema/Constants.js.map +1 -0
  114. package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +40 -0
  115. package/lib/json-schema/IJsonSchemaSerializeOptions.js +4 -0
  116. package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -0
  117. package/lib/json-schema/IJsonSchemaSerializer.d.ts +7 -0
  118. package/lib/json-schema/IJsonSchemaSerializer.js +4 -0
  119. package/lib/json-schema/IJsonSchemaSerializer.js.map +1 -0
  120. package/lib/json-schema/IJsonSchemaUnserializeOptions.d.ts +41 -0
  121. package/lib/json-schema/IJsonSchemaUnserializeOptions.js +4 -0
  122. package/lib/json-schema/IJsonSchemaUnserializeOptions.js.map +1 -0
  123. package/lib/json-schema/IJsonSchemaUnserializer.d.ts +5 -0
  124. package/lib/json-schema/IJsonSchemaUnserializer.js +4 -0
  125. package/lib/json-schema/IJsonSchemaUnserializer.js.map +1 -0
  126. package/lib/json-schema/IParseOptions.d.ts +16 -0
  127. package/lib/json-schema/IParseOptions.js +6 -0
  128. package/lib/json-schema/IParseOptions.js.map +1 -0
  129. package/lib/json-schema/JsonSchema.d.ts +22 -0
  130. package/lib/json-schema/JsonSchema.js +109 -0
  131. package/lib/json-schema/JsonSchema.js.map +1 -0
  132. package/lib/json-schema/JsonSchema7.d.ts +16 -0
  133. package/lib/json-schema/JsonSchema7.js +22 -0
  134. package/lib/json-schema/JsonSchema7.js.map +1 -0
  135. package/lib/json-schema/JsonSchema7Serializer.d.ts +42 -0
  136. package/lib/json-schema/JsonSchema7Serializer.js +438 -0
  137. package/lib/json-schema/JsonSchema7Serializer.js.map +1 -0
  138. package/lib/json-schema/JsonSchema7Unserializer.d.ts +60 -0
  139. package/lib/json-schema/JsonSchema7Unserializer.js +499 -0
  140. package/lib/json-schema/JsonSchema7Unserializer.js.map +1 -0
  141. package/lib/options/IAbstractOptions.d.ts +19 -0
  142. package/lib/options/IAbstractOptions.js +4 -0
  143. package/lib/options/IAbstractOptions.js.map +1 -0
  144. package/lib/options/IAttributeOptions.d.ts +7 -0
  145. package/lib/options/IAttributeOptions.js +4 -0
  146. package/lib/options/IAttributeOptions.js.map +1 -0
  147. package/lib/options/IEntityOptions.d.ts +4 -0
  148. package/lib/options/IEntityOptions.js +4 -0
  149. package/lib/options/IEntityOptions.js.map +1 -0
  150. package/lib/options/IObjectOptions.d.ts +4 -0
  151. package/lib/options/IObjectOptions.js +4 -0
  152. package/lib/options/IObjectOptions.js.map +1 -0
  153. package/lib/options/IPropertyOptions.d.ts +24 -0
  154. package/lib/options/IPropertyOptions.js +4 -0
  155. package/lib/options/IPropertyOptions.js.map +1 -0
  156. package/lib/options/ISchemaOptions.d.ts +4 -0
  157. package/lib/options/ISchemaOptions.js +4 -0
  158. package/lib/options/ISchemaOptions.js.map +1 -0
  159. package/lib/registry/AbstractRegistry.d.ts +91 -0
  160. package/lib/registry/AbstractRegistry.js +135 -0
  161. package/lib/registry/AbstractRegistry.js.map +1 -0
  162. package/lib/registry/Binding.d.ts +9 -0
  163. package/lib/registry/Binding.js +17 -0
  164. package/lib/registry/Binding.js.map +1 -0
  165. package/lib/registry/DefaultEntityRef.d.ts +30 -0
  166. package/lib/registry/DefaultEntityRef.js +60 -0
  167. package/lib/registry/DefaultEntityRef.js.map +1 -0
  168. package/lib/registry/DefaultNamespacedRegistry.d.ts +153 -0
  169. package/lib/registry/DefaultNamespacedRegistry.js +511 -0
  170. package/lib/registry/DefaultNamespacedRegistry.js.map +1 -0
  171. package/lib/registry/DefaultPropertyRef.d.ts +44 -0
  172. package/lib/registry/DefaultPropertyRef.js +175 -0
  173. package/lib/registry/DefaultPropertyRef.js.map +1 -0
  174. package/lib/registry/MetadataRegistry.d.ts +52 -0
  175. package/lib/registry/MetadataRegistry.js +186 -0
  176. package/lib/registry/MetadataRegistry.js.map +1 -0
  177. package/lib/registry/RegistryFactory.d.ts +43 -0
  178. package/lib/registry/RegistryFactory.js +109 -0
  179. package/lib/registry/RegistryFactory.js.map +1 -0
  180. package/lib/serializer/ISerializeOptions.d.ts +10 -0
  181. package/lib/serializer/ISerializeOptions.js +4 -0
  182. package/lib/serializer/ISerializeOptions.js.map +1 -0
  183. package/lib/serializer/ISerializer.d.ts +5 -0
  184. package/lib/serializer/ISerializer.js +4 -0
  185. package/lib/serializer/ISerializer.js.map +1 -0
  186. package/lib/serializer/ISerializerFactory.d.ts +13 -0
  187. package/lib/serializer/ISerializerFactory.js +4 -0
  188. package/lib/serializer/ISerializerFactory.js.map +1 -0
  189. package/lib/serializer/IUnserializeOptions.d.ts +14 -0
  190. package/lib/serializer/IUnserializeOptions.js +4 -0
  191. package/lib/serializer/IUnserializeOptions.js.map +1 -0
  192. package/lib/serializer/IUnserializer.d.ts +5 -0
  193. package/lib/serializer/IUnserializer.js +4 -0
  194. package/lib/serializer/IUnserializer.js.map +1 -0
  195. package/lib/serializer/SerializerRegistry.d.ts +8 -0
  196. package/lib/serializer/SerializerRegistry.js +20 -0
  197. package/lib/serializer/SerializerRegistry.js.map +1 -0
  198. package/lib/validation/DefaultValidator.d.ts +14 -0
  199. package/lib/validation/DefaultValidator.js +221 -0
  200. package/lib/validation/DefaultValidator.js.map +1 -0
  201. package/lib/validation/IValidateOptions.d.ts +4 -0
  202. package/lib/validation/IValidateOptions.js +4 -0
  203. package/lib/validation/IValidateOptions.js.map +1 -0
  204. package/lib/validation/IValidationError.d.ts +10 -0
  205. package/lib/validation/IValidationError.js +4 -0
  206. package/lib/validation/IValidationError.js.map +1 -0
  207. package/lib/validation/IValidationMessage.d.ts +4 -0
  208. package/lib/validation/IValidationMessage.js +4 -0
  209. package/lib/validation/IValidationMessage.js.map +1 -0
  210. package/lib/validation/IValidationOptions.d.ts +1 -0
  211. package/lib/validation/IValidationOptions.js +30 -0
  212. package/lib/validation/IValidationOptions.js.map +1 -0
  213. package/lib/validation/IValidationResult.d.ts +7 -0
  214. package/lib/validation/IValidationResult.js +4 -0
  215. package/lib/validation/IValidationResult.js.map +1 -0
  216. package/lib/validation/IValidator.d.ts +9 -0
  217. package/lib/validation/IValidator.js +4 -0
  218. package/lib/validation/IValidator.js.map +1 -0
  219. package/lib/validation/IValidatorEntry.d.ts +7 -0
  220. package/lib/validation/IValidatorEntry.js +4 -0
  221. package/lib/validation/IValidatorEntry.js.map +1 -0
  222. package/lib/validation/IValidatorHandle.d.ts +2 -0
  223. package/lib/validation/IValidatorHandle.js +4 -0
  224. package/lib/validation/IValidatorHandle.js.map +1 -0
  225. package/lib/validation/Validator.d.ts +17 -0
  226. package/lib/validation/Validator.js +54 -0
  227. package/lib/validation/Validator.js.map +1 -0
  228. package/package.json +73 -0
@@ -0,0 +1,5 @@
1
+ import { IClassRef } from '../../api/IClassRef';
2
+ import { IEntityRef } from '../../api/IEntityRef';
3
+ export interface ISerializer {
4
+ serialize(klass: IClassRef | IEntityRef | Function | object): any | Promise<any>;
5
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=ISerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/serializer/ISerializer.ts"],"names":[],"mappings":"","file":"ISerializer.js","sourcesContent":["import {IClassRef} from '../../api/IClassRef';\nimport {IEntityRef} from '../../api/IEntityRef';\n\nexport interface ISerializer {\n serialize(klass: IClassRef | IEntityRef | Function | object): any | Promise<any>;\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,13 @@
1
+ import { ISerializeOptions } from './ISerializeOptions';
2
+ import { ISerializer } from './ISerializer';
3
+ import { IUnserializeOptions } from './IUnserializeOptions';
4
+ import { IUnserializer } from './IUnserializer';
5
+ import { IClassRef } from '../../api/IClassRef';
6
+ import { IEntityRef } from '../../api/IEntityRef';
7
+ export interface ISerializerFactory {
8
+ getName(): string;
9
+ getSerializer(options?: ISerializeOptions): ISerializer;
10
+ getUnserializer(options?: IUnserializeOptions): IUnserializer;
11
+ serialize(klass: IClassRef | IEntityRef | Function | object, options?: ISerializeOptions): Promise<any>;
12
+ unserialize(data: string, options?: ISerializeOptions): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]>;
13
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=ISerializerFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/serializer/ISerializerFactory.ts"],"names":[],"mappings":"","file":"ISerializerFactory.js","sourcesContent":["import {ISerializeOptions} from './ISerializeOptions';\nimport {ISerializer} from './ISerializer';\nimport {IUnserializeOptions} from './IUnserializeOptions';\nimport {IUnserializer} from './IUnserializer';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IEntityRef} from '../../api/IEntityRef';\n\nexport interface ISerializerFactory {\n\n getName(): string;\n\n getSerializer(options?: ISerializeOptions): ISerializer;\n\n getUnserializer(options?: IUnserializeOptions): IUnserializer;\n\n serialize(klass: IClassRef | IEntityRef | Function | object, options?: ISerializeOptions): Promise<any>;\n\n unserialize(data: string, options?: ISerializeOptions): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]>;\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,14 @@
1
+ export interface IUnserializeOptions {
2
+ /**
3
+ * Name of serializer
4
+ */
5
+ serializer?: string;
6
+ /**
7
+ * Namespace of the registry
8
+ */
9
+ namespace?: string;
10
+ /**
11
+ * Return found entity refs or class refs.
12
+ */
13
+ return?: 'entity-refs' | 'class-refs' | 'default';
14
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IUnserializeOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/serializer/IUnserializeOptions.ts"],"names":[],"mappings":"","file":"IUnserializeOptions.js","sourcesContent":["export interface IUnserializeOptions {\n\n /**\n * Name of serializer\n */\n serializer?: string;\n\n /**\n * Namespace of the registry\n */\n namespace?: string;\n\n\n /**\n * Return found entity refs or class refs.\n */\n return?: 'entity-refs' | 'class-refs' | 'default';\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,5 @@
1
+ import { IClassRef } from '../../api/IClassRef';
2
+ import { IEntityRef } from '../../api/IEntityRef';
3
+ export interface IUnserializer {
4
+ unserialize(data: string): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]>;
5
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IUnserializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/serializer/IUnserializer.ts"],"names":[],"mappings":"","file":"IUnserializer.js","sourcesContent":["import {IClassRef} from '../../api/IClassRef';\nimport {IEntityRef} from '../../api/IEntityRef';\n\nexport interface IUnserializer {\n unserialize(data: string): Promise<IClassRef | IEntityRef | (IClassRef | IEntityRef)[]>;\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,8 @@
1
+ import { ISerializerFactory } from './ISerializerFactory';
2
+ export declare class SerializerRegistry {
3
+ static serializer: {
4
+ [k: string]: ISerializerFactory;
5
+ };
6
+ static register(factory: ISerializerFactory): void;
7
+ static get(name: string): ISerializerFactory;
8
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerializerRegistry = void 0;
4
+ const JsonSchema_1 = require("../json-schema/JsonSchema");
5
+ class SerializerRegistry {
6
+ static register(factory) {
7
+ this.serializer[factory.getName()] = factory;
8
+ }
9
+ static get(name) {
10
+ if (this.serializer[name]) {
11
+ return this.serializer[name];
12
+ }
13
+ return null;
14
+ }
15
+ }
16
+ exports.SerializerRegistry = SerializerRegistry;
17
+ SerializerRegistry.serializer = {};
18
+ SerializerRegistry.register(new JsonSchema_1.JsonSchema());
19
+
20
+ //# sourceMappingURL=SerializerRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/serializer/SerializerRegistry.ts"],"names":[],"mappings":";;;AACA,0DAAqD;AAErD,MAAa,kBAAkB;IAI7B,MAAM,CAAC,QAAQ,CAAC,OAA2B;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,IAAY;QACrB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;YACzB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAbH,gDAcC;AAZQ,6BAAU,GAAwC,EAAE,CAAC;AAc9D,kBAAkB,CAAC,QAAQ,CAAC,IAAI,uBAAU,EAAE,CAAC,CAAC","file":"SerializerRegistry.js","sourcesContent":["import {ISerializerFactory} from './ISerializerFactory';\nimport {JsonSchema} from '../json-schema/JsonSchema';\n\nexport class SerializerRegistry {\n\n static serializer: { [k: string]: ISerializerFactory } = {};\n\n static register(factory: ISerializerFactory) {\n this.serializer[factory.getName()] = factory;\n }\n\n static get(name: string) {\n if (this.serializer[name]) {\n return this.serializer[name];\n }\n return null;\n }\n}\n\nSerializerRegistry.register(new JsonSchema());\n"],"sourceRoot":"../.."}
@@ -0,0 +1,14 @@
1
+ import { IClassRef } from '../../api/IClassRef';
2
+ import { IEntityRef } from '../../api/IEntityRef';
3
+ import { IValidationError } from './IValidationError';
4
+ import { IValidator } from './IValidator';
5
+ import { IValidatorEntry } from './IValidatorEntry';
6
+ export declare class DefaultValidator {
7
+ private static validators;
8
+ private static lookupKeys;
9
+ static define(validator: IValidator): void;
10
+ static validationInfo(ref: Function | IClassRef | IEntityRef): Promise<IValidatorEntry[]>;
11
+ static validate(instance: any, ref?: IClassRef | IEntityRef): Promise<IValidationError[]>;
12
+ static getValidationHandlesForFn(fn: Function): IValidatorEntry[];
13
+ private static extractValidationInfox;
14
+ }
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DefaultValidator = void 0;
13
+ const lodash_1 = require("lodash");
14
+ const IClassRef_1 = require("../../api/IClassRef");
15
+ const IEntityRef_1 = require("../../api/IEntityRef");
16
+ const base_1 = require("@allgemein/base");
17
+ const ClassRef_1 = require("../ClassRef");
18
+ const Constants_1 = require("../Constants");
19
+ const MetadataRegistry_1 = require("../registry/MetadataRegistry");
20
+ class DefaultValidator {
21
+ static define(validator) {
22
+ this.validators.push(validator);
23
+ if (validator.involveOnOptionKey) {
24
+ this.lookupKeys.unshift(validator.involveOnOptionKey);
25
+ this.lookupKeys = lodash_1.uniq(this.lookupKeys);
26
+ }
27
+ }
28
+ static validationInfo(ref) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ let clazz = null;
31
+ if (IEntityRef_1.isEntityRef(ref) || IClassRef_1.isClassRef(ref)) {
32
+ clazz = ref.getClass();
33
+ }
34
+ else if (lodash_1.isFunction(ref)) {
35
+ clazz = ref;
36
+ }
37
+ else {
38
+ throw new Error('not implemented for ' + ref);
39
+ }
40
+ return this.getValidationHandlesForFn(clazz);
41
+ });
42
+ }
43
+ static validate(instance, ref) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ let classRef = null;
46
+ if (ref) {
47
+ if (IEntityRef_1.isEntityRef(ref)) {
48
+ classRef = ref.getClassRef();
49
+ }
50
+ else {
51
+ classRef = ref;
52
+ }
53
+ }
54
+ else {
55
+ const target = base_1.ClassUtils.getFunction(instance);
56
+ if (!target) {
57
+ throw new base_1.NotYetImplementedError();
58
+ }
59
+ classRef = ClassRef_1.ClassRef.get(target);
60
+ }
61
+ // const entries:IPropertyExtentions[] = MetadataStorage
62
+ // .key(XS_ANNOTATION_OPTIONS_CACHE)
63
+ // .filter((x:IPropertyExtentions) =>
64
+ // x.object === classRef.getClass() && (has(x.options, 'format') || has(x.options, 'format'))
65
+ // );
66
+ const classErrors = [];
67
+ const toValidateList = this.getValidationHandlesForFn(classRef.getClass());
68
+ for (const toValidateEntry of toValidateList) {
69
+ for (const handle of toValidateEntry.handles) {
70
+ let value = null;
71
+ let isPropertyCheck = toValidateEntry.property ? true : false;
72
+ if (isPropertyCheck) {
73
+ value = instance[toValidateEntry.property];
74
+ }
75
+ else {
76
+ value = instance;
77
+ }
78
+ let instanceOptions = lodash_1.clone(toValidateEntry.options[handle.name]);
79
+ if (isPropertyCheck) {
80
+ instanceOptions.property = toValidateEntry.property;
81
+ }
82
+ if (handle.defaultOptions) {
83
+ lodash_1.defaults(instanceOptions, handle.defaultOptions);
84
+ }
85
+ if (!(yield handle.fn(value, instanceOptions, instance))) {
86
+ const error = {
87
+ metaType: toValidateEntry.property ? 'property' : 'entity',
88
+ property: toValidateEntry.property,
89
+ value: value,
90
+ constraints: {}
91
+ };
92
+ classErrors.push(error);
93
+ let msg = lodash_1.get(instanceOptions, 'message', null);
94
+ if (msg) {
95
+ msg = msg.replace('%propertyName', error.property).replace('%value', value);
96
+ lodash_1.keys(instanceOptions).forEach(k => {
97
+ let v = instanceOptions[k];
98
+ if (lodash_1.isObjectLike(v) || lodash_1.isArray(v)) {
99
+ v = JSON.stringify(v);
100
+ }
101
+ msg = msg.replace('%options.' + k, v);
102
+ });
103
+ error.constraints[handle.name] = msg;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ // validate entity
109
+ // const classErrors = await this.validateHandles(classRef, instance);
110
+ // for (const ref of classRef.getPropertyRefs()) {
111
+ // if (ref.isReference()) {
112
+ // // TODO
113
+ // } else {
114
+ // classErrors.push(...await this.validateHandles(ref, ref.get(instance)));
115
+ // }
116
+ // }
117
+ return classErrors;
118
+ });
119
+ }
120
+ //
121
+ //
122
+ // static async validateHandles(ref: IBaseRef, value: any) {
123
+ // const handleKeys = this.getHandleKeys(ref);
124
+ // if (isEmpty(handleKeys)) {
125
+ // return [];
126
+ // }
127
+ // const handles = this.getHandles(handleKeys);
128
+ // const errors: IValidationError[] = [];
129
+ // for (const handle of handles) {
130
+ // if (handle) {
131
+ // }
132
+ // }
133
+ // return errors;
134
+ // }
135
+ //
136
+ //
137
+ // static getHandles(handleKeys: string[]): { name: string, fn: (value: any) => boolean, opts?: { message?: string } }[] {
138
+ // return [].concat(...handleKeys.map(k => this.validators.filter(y => y.name === k)));
139
+ // }
140
+ //
141
+ static getValidationHandlesForFn(fn) {
142
+ const entries = [];
143
+ const entriesSecond = MetadataRegistry_1.MetadataRegistry.$().getCached().filter(x => x.target === fn && lodash_1.intersection(this.lookupKeys, lodash_1.keys(x)).length > 0);
144
+ for (const e of entriesSecond) {
145
+ const handlesAndOptions = this.extractValidationInfox(e);
146
+ const validationEntry = {
147
+ target: fn,
148
+ };
149
+ lodash_1.assign(validationEntry, handlesAndOptions);
150
+ if (e.propertyName) {
151
+ validationEntry.property = e.propertyName;
152
+ }
153
+ entries.push(validationEntry);
154
+ }
155
+ const entriesFirst = base_1.MetadataStorage
156
+ .key(Constants_1.XS_ANNOTATION_OPTIONS_CACHE)
157
+ .filter((x) => x.object === fn && lodash_1.intersection(this.lookupKeys, lodash_1.keys(x.options)).length > 0);
158
+ for (const e of entriesFirst) {
159
+ const alreadyAsProperty = entries.find(x => x.property === e.property);
160
+ const handlesAndOptions = this.extractValidationInfox(e.options);
161
+ if (alreadyAsProperty) {
162
+ for (let i = 0; i < handlesAndOptions.handles.length; i++) {
163
+ const handle = handlesAndOptions.handles[i];
164
+ if (alreadyAsProperty.handles.find(x => x.name === handle.name)) {
165
+ // ignore double declarations
166
+ continue;
167
+ }
168
+ alreadyAsProperty.handles.push(handle);
169
+ lodash_1.set(alreadyAsProperty.options, handle.name, lodash_1.get(handlesAndOptions.options, handle.name, {}));
170
+ }
171
+ }
172
+ else {
173
+ const validationEntry = {
174
+ target: fn,
175
+ };
176
+ lodash_1.assign(validationEntry, handlesAndOptions);
177
+ if (e.property) {
178
+ validationEntry.property = e.property;
179
+ }
180
+ entries.push(validationEntry);
181
+ }
182
+ }
183
+ return entries;
184
+ }
185
+ static extractValidationInfox(entryOptions) {
186
+ const intersect = lodash_1.intersection(this.lookupKeys, lodash_1.keys(entryOptions));
187
+ const handles = [];
188
+ const options = {};
189
+ for (const k of intersect) {
190
+ const isLookupKey = ['validate', 'format'].includes(k);
191
+ const valueForKey = lodash_1.get(entryOptions, k, null);
192
+ const handle = this.validators.find(x => x.name === valueForKey || x.involveOnOptionKey === k);
193
+ if (handle) {
194
+ const handleAlreadySet = handles.find(x => x.name === handle.name);
195
+ if (!handleAlreadySet) {
196
+ handles.push(handle);
197
+ }
198
+ let v = lodash_1.clone(lodash_1.get(entryOptions, 'validateOptions.' + handle.name, {}));
199
+ if (!isLookupKey) {
200
+ // pass additional value
201
+ v[handle.involveOnOptionKey] = lodash_1.get(entryOptions, handle.involveOnOptionKey, null);
202
+ }
203
+ if (v) {
204
+ if (!options[handle.name]) {
205
+ options[handle.name] = {};
206
+ }
207
+ lodash_1.merge(options[handle.name], v);
208
+ }
209
+ }
210
+ }
211
+ return {
212
+ handles: handles,
213
+ options: options
214
+ };
215
+ }
216
+ }
217
+ exports.DefaultValidator = DefaultValidator;
218
+ DefaultValidator.validators = [];
219
+ DefaultValidator.lookupKeys = ['format', 'validate'];
220
+
221
+ //# sourceMappingURL=DefaultValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/DefaultValidator.ts"],"names":[],"mappings":"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","file":"DefaultValidator.js","sourcesContent":["import {\n assign,\n clone,\n defaults,\n get,\n intersection,\n isArray,\n isFunction,\n isObjectLike,\n keys,\n merge,\n set,\n uniq\n} from 'lodash';\n\nimport {IClassRef, isClassRef} from '../../api/IClassRef';\nimport {IEntityRef, isEntityRef} from '../../api/IEntityRef';\nimport {ClassUtils, MetadataStorage, NotYetImplementedError} from '@allgemein/base';\nimport {IValidationError} from './IValidationError';\nimport {ClassRef} from '../ClassRef';\nimport {IPropertyExtentions} from '../../api/IPropertyExtentions';\nimport {XS_ANNOTATION_OPTIONS_CACHE} from '../Constants';\nimport {MetadataRegistry} from '../registry/MetadataRegistry';\nimport {IValidator} from './IValidator';\nimport {IValidatorEntry} from './IValidatorEntry';\n\n\nexport class DefaultValidator {\n\n private static validators: IValidator[] = [];\n\n private static lookupKeys = ['format', 'validate'];\n\n\n static define(validator: IValidator) {\n this.validators.push(validator);\n if (validator.involveOnOptionKey) {\n this.lookupKeys.unshift(validator.involveOnOptionKey);\n this.lookupKeys = uniq(this.lookupKeys);\n }\n }\n\n\n static async validationInfo(ref: Function | IClassRef | IEntityRef) {\n let clazz: Function = null;\n if (isEntityRef(ref) || isClassRef(ref)) {\n clazz = ref.getClass();\n } else if (isFunction(ref)) {\n clazz = ref;\n } else {\n throw new Error('not implemented for ' + ref);\n }\n return this.getValidationHandlesForFn(clazz);\n }\n\n\n static async validate(instance: any, ref?: IClassRef | IEntityRef): Promise<IValidationError[]> {\n let classRef: IClassRef = null;\n if (ref) {\n if (isEntityRef(ref)) {\n classRef = ref.getClassRef();\n } else {\n classRef = ref;\n }\n } else {\n const target = ClassUtils.getFunction(instance);\n if (!target) {\n throw new NotYetImplementedError();\n }\n classRef = ClassRef.get(target);\n }\n\n // const entries:IPropertyExtentions[] = MetadataStorage\n // .key(XS_ANNOTATION_OPTIONS_CACHE)\n // .filter((x:IPropertyExtentions) =>\n // x.object === classRef.getClass() && (has(x.options, 'format') || has(x.options, 'format'))\n // );\n const classErrors: IValidationError[] = [];\n const toValidateList = this.getValidationHandlesForFn(classRef.getClass());\n for (const toValidateEntry of toValidateList) {\n for (const handle of toValidateEntry.handles) {\n let value = null;\n let isPropertyCheck = toValidateEntry.property ? true : false;\n\n if (isPropertyCheck) {\n value = instance[toValidateEntry.property];\n } else {\n value = instance;\n }\n\n let instanceOptions = clone(toValidateEntry.options[handle.name]);\n if (isPropertyCheck) {\n instanceOptions.property = toValidateEntry.property;\n }\n if (handle.defaultOptions) {\n defaults(instanceOptions, handle.defaultOptions);\n }\n\n if (!(await handle.fn(value, instanceOptions, instance))) {\n const error: IValidationError = {\n metaType: toValidateEntry.property ? 'property' : 'entity',\n property: toValidateEntry.property,\n value: value,\n constraints: {}\n };\n classErrors.push(error);\n\n let msg = get(instanceOptions, 'message', null);\n if (msg) {\n msg = msg.replace('%propertyName', error.property).replace('%value', value);\n keys(instanceOptions).forEach(k => {\n let v = instanceOptions[k];\n if (isObjectLike(v) || isArray(v)) {\n v = JSON.stringify(v);\n }\n msg = msg.replace('%options.' + k, v);\n });\n error.constraints[handle.name] = msg;\n }\n }\n\n }\n }\n\n\n // validate entity\n // const classErrors = await this.validateHandles(classRef, instance);\n // for (const ref of classRef.getPropertyRefs()) {\n // if (ref.isReference()) {\n // // TODO\n // } else {\n // classErrors.push(...await this.validateHandles(ref, ref.get(instance)));\n // }\n // }\n\n return classErrors;\n }\n\n //\n //\n // static async validateHandles(ref: IBaseRef, value: any) {\n // const handleKeys = this.getHandleKeys(ref);\n // if (isEmpty(handleKeys)) {\n // return [];\n // }\n // const handles = this.getHandles(handleKeys);\n // const errors: IValidationError[] = [];\n // for (const handle of handles) {\n // if (handle) {\n // }\n // }\n // return errors;\n // }\n //\n //\n // static getHandles(handleKeys: string[]): { name: string, fn: (value: any) => boolean, opts?: { message?: string } }[] {\n // return [].concat(...handleKeys.map(k => this.validators.filter(y => y.name === k)));\n // }\n //\n\n static getValidationHandlesForFn(fn: Function) {\n const entries: IValidatorEntry[] = [];\n const entriesSecond = MetadataRegistry.$().getCached().filter(x =>\n x.target === fn && intersection(this.lookupKeys, keys(x)).length > 0\n );\n\n for (const e of entriesSecond) {\n const handlesAndOptions = this.extractValidationInfox(e);\n const validationEntry: IValidatorEntry = {\n target: fn,\n };\n assign(validationEntry, handlesAndOptions);\n if (e.propertyName) {\n validationEntry.property = e.propertyName;\n }\n entries.push(validationEntry);\n }\n\n\n const entriesFirst: IPropertyExtentions[] = MetadataStorage\n .key(XS_ANNOTATION_OPTIONS_CACHE)\n .filter((x: IPropertyExtentions) =>\n x.object === fn && intersection(this.lookupKeys, keys(x.options)).length > 0\n );\n\n for (const e of entriesFirst) {\n const alreadyAsProperty = entries.find(x => x.property === e.property) as IValidatorEntry;\n const handlesAndOptions = this.extractValidationInfox(e.options);\n if (alreadyAsProperty) {\n for (let i = 0; i < handlesAndOptions.handles.length; i++) {\n const handle = handlesAndOptions.handles[i];\n if (alreadyAsProperty.handles.find(x => x.name === handle.name)) {\n // ignore double declarations\n continue;\n }\n alreadyAsProperty.handles.push(handle);\n set(alreadyAsProperty.options, handle.name, get(handlesAndOptions.options, handle.name, {}));\n }\n } else {\n const validationEntry: IValidatorEntry = {\n target: fn,\n };\n assign(validationEntry, handlesAndOptions);\n if (e.property) {\n validationEntry.property = e.property;\n }\n entries.push(validationEntry);\n }\n }\n return entries;\n }\n\n\n private static extractValidationInfox(entryOptions: any) {\n const intersect = intersection(this.lookupKeys, keys(entryOptions));\n const handles: any[] = [];\n const options = {};\n for (const k of intersect) {\n const isLookupKey = ['validate', 'format'].includes(k);\n const valueForKey = get(entryOptions, k, null);\n const handle = this.validators.find(x => x.name === valueForKey || x.involveOnOptionKey === k);\n if (handle) {\n const handleAlreadySet = handles.find(x => x.name === handle.name);\n if (!handleAlreadySet) {\n handles.push(handle);\n }\n\n let v = clone(get(entryOptions, 'validateOptions.' + handle.name, {}));\n if (!isLookupKey) {\n // pass additional value\n v[handle.involveOnOptionKey] = get(entryOptions, handle.involveOnOptionKey, null);\n }\n\n if (v) {\n if (!options[handle.name]) {\n options[handle.name] = {};\n }\n merge(options[handle.name], v);\n }\n }\n }\n return {\n handles: handles,\n options: options\n };\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,4 @@
1
+ export interface IValidateOptions {
2
+ property?: string;
3
+ message?: string;
4
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidateOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidateOptions.ts"],"names":[],"mappings":"","file":"IValidateOptions.js","sourcesContent":["export interface IValidateOptions {\n property?: string;\n message?: string;\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,10 @@
1
+ export interface IValidationError {
2
+ metaType?: 'entity' | 'property';
3
+ property?: string;
4
+ value?: string;
5
+ constraints?: {
6
+ [k: string]: string;
7
+ };
8
+ type?: 'error' | 'validate';
9
+ handle?: string;
10
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidationError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidationError.ts"],"names":[],"mappings":"","file":"IValidationError.js","sourcesContent":["export interface IValidationError {\n metaType?: 'entity' | 'property';\n property?: string;\n value?: string;\n constraints?: { [k: string]: string };\n type?: 'error' | 'validate';\n handle?: string;\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,4 @@
1
+ export interface IValidationMessage {
2
+ type: string;
3
+ content: string;
4
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidationMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidationMessage.ts"],"names":[],"mappings":"","file":"IValidationMessage.js","sourcesContent":["export interface IValidationMessage {\n type: string;\n content: string;\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,30 @@
1
+ // /**
2
+ // * Options used to pass to validation decorators.
3
+ // */
4
+ // export interface IValidationOptions {
5
+ // /**
6
+ // * Specifies if validated value is an array and each of its item must be validated.
7
+ // */
8
+ // each?: boolean;
9
+ // /**
10
+ // * Error message used to be used on validation fail.
11
+ // * You can use "$value" to use value that was failed by validation.
12
+ // * You can use "$constraint1" and "$constraint2" keys in the message string,
13
+ // * and they will be replaced with constraint values if they exist.
14
+ // * Message can be either string, either a function that returns a string.
15
+ // * Second option allows to use values and custom messages depend of them.
16
+ // */
17
+ // message?: string | ((value?: any, constraint1?: any, constraint2?: any) => string);
18
+ // /**
19
+ // * Validation groups used for this validation.
20
+ // */
21
+ // groups?: string[];
22
+ // /**
23
+ // * Indicates if validation must be performed always, no matter of validation groups used.
24
+ // */
25
+ // always?: boolean;
26
+ // context?: any;
27
+ // }
28
+ // //# sourceMappingURL=ValidationOptions.d.ts.map
29
+
30
+ //# sourceMappingURL=IValidationOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidationOptions.ts"],"names":[],"mappings":"AAAA,MAAM;AACN,oDAAoD;AACpD,MAAM;AACN,wCAAwC;AACxC,QAAQ;AACR,wFAAwF;AACxF,QAAQ;AACR,oBAAoB;AACpB,QAAQ;AACR,yDAAyD;AACzD,wEAAwE;AACxE,iFAAiF;AACjF,uEAAuE;AACvE,8EAA8E;AAC9E,8EAA8E;AAC9E,QAAQ;AACR,wFAAwF;AACxF,QAAQ;AACR,mDAAmD;AACnD,QAAQ;AACR,uBAAuB;AACvB,QAAQ;AACR,8FAA8F;AAC9F,QAAQ;AACR,sBAAsB;AACtB,mBAAmB;AACnB,IAAI;AACJ,kDAAkD","file":"IValidationOptions.js","sourcesContent":["// /**\n// * Options used to pass to validation decorators.\n// */\n// export interface IValidationOptions {\n// /**\n// * Specifies if validated value is an array and each of its item must be validated.\n// */\n// each?: boolean;\n// /**\n// * Error message used to be used on validation fail.\n// * You can use \"$value\" to use value that was failed by validation.\n// * You can use \"$constraint1\" and \"$constraint2\" keys in the message string,\n// * and they will be replaced with constraint values if they exist.\n// * Message can be either string, either a function that returns a string.\n// * Second option allows to use values and custom messages depend of them.\n// */\n// message?: string | ((value?: any, constraint1?: any, constraint2?: any) => string);\n// /**\n// * Validation groups used for this validation.\n// */\n// groups?: string[];\n// /**\n// * Indicates if validation must be performed always, no matter of validation groups used.\n// */\n// always?: boolean;\n// context?: any;\n// }\n// //# sourceMappingURL=ValidationOptions.d.ts.map\n"],"sourceRoot":"../.."}
@@ -0,0 +1,7 @@
1
+ import { IValidationMessage } from './IValidationMessage';
2
+ export interface IValidationResult {
3
+ key: string;
4
+ valid: boolean;
5
+ checked: boolean;
6
+ messages: IValidationMessage[];
7
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidationResult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidationResult.ts"],"names":[],"mappings":"","file":"IValidationResult.js","sourcesContent":["import {IValidationMessage} from './IValidationMessage';\n\nexport interface IValidationResult {\n key: string;\n valid: boolean;\n checked: boolean;\n messages: IValidationMessage[];\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,9 @@
1
+ import { IValidateOptions } from './IValidateOptions';
2
+ export interface IValidator {
3
+ name: string;
4
+ fn: (value: any, options: IValidateOptions, instance?: any) => boolean;
5
+ defaultOptions?: {
6
+ message?: string;
7
+ };
8
+ involveOnOptionKey?: string;
9
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidator.ts"],"names":[],"mappings":"","file":"IValidator.js","sourcesContent":["import {IValidateOptions} from './IValidateOptions';\n\nexport interface IValidator {\n\n name: string;\n\n fn: (value: any, options: IValidateOptions, instance?: any) => boolean;\n\n defaultOptions?: {\n message?: string\n };\n\n involveOnOptionKey?: string\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,7 @@
1
+ import { IValidator } from './IValidator';
2
+ export interface IValidatorEntry {
3
+ target: Function;
4
+ property?: string;
5
+ options?: any[];
6
+ handles?: IValidator[];
7
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidatorEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidatorEntry.ts"],"names":[],"mappings":"","file":"IValidatorEntry.js","sourcesContent":["import {IValidator} from './IValidator';\n\nexport interface IValidatorEntry {\n target: Function,\n property?: string,\n options?: any[],\n handles?: IValidator[]\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,2 @@
1
+ export interface IValidatorHandle {
2
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=IValidatorHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/validation/IValidatorHandle.ts"],"names":[],"mappings":"","file":"IValidatorHandle.js","sourcesContent":["export interface IValidatorHandle {\n\n\n}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,17 @@
1
+ import { IValidationError } from './IValidationError';
2
+ import { IClassRef } from '../../api/IClassRef';
3
+ import { IEntityRef } from '../../api/IEntityRef';
4
+ import { IValidatorEntry } from './IValidatorEntry';
5
+ export declare type validate_function = (instance: any, ref?: IClassRef | IEntityRef) => Promise<IValidationError[]>;
6
+ export declare type validate_info_function = (ref?: Function | IClassRef | IEntityRef) => Promise<IValidatorEntry[]>;
7
+ /**
8
+ * Abstraction for defualt validator functions
9
+ */
10
+ export declare class Validator {
11
+ private static fn;
12
+ private static info;
13
+ static add(fn: validate_function, fnInfo: validate_info_function): void;
14
+ static reset(): void;
15
+ static getValidationEntries(fn: Function | IClassRef | IEntityRef): Promise<any[]>;
16
+ static validate(instance: any, ref?: IClassRef | IEntityRef): Promise<IValidationError[]>;
17
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Validator = void 0;
13
+ const lodash_1 = require("lodash");
14
+ const DefaultValidator_1 = require("./DefaultValidator");
15
+ /**
16
+ * Abstraction for defualt validator functions
17
+ */
18
+ class Validator {
19
+ static add(fn, fnInfo) {
20
+ this.fn.push(fn);
21
+ this.info.push(fnInfo);
22
+ }
23
+ static reset() {
24
+ this.fn = [];
25
+ this.info = [];
26
+ }
27
+ static getValidationEntries(fn) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ if (lodash_1.isEmpty(this.info)) {
30
+ return [];
31
+ }
32
+ const data = yield Promise.all(this.info.map(x => x(fn)));
33
+ return [].concat(...data);
34
+ });
35
+ }
36
+ static validate(instance, ref) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ if (lodash_1.isEmpty(this.fn)) {
39
+ return [];
40
+ }
41
+ const data = yield Promise.all(this.fn.map(x => x(instance, ref)));
42
+ return [].concat(...data);
43
+ });
44
+ }
45
+ }
46
+ exports.Validator = Validator;
47
+ Validator.fn = [
48
+ DefaultValidator_1.DefaultValidator.validate.bind(DefaultValidator_1.DefaultValidator)
49
+ ];
50
+ Validator.info = [
51
+ DefaultValidator_1.DefaultValidator.validationInfo.bind(DefaultValidator_1.DefaultValidator)
52
+ ];
53
+
54
+ //# sourceMappingURL=Validator.js.map