@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,120 @@
1
+ import { METADATA_TYPE } from './Constants';
2
+ import { IClassRef } from '../api/IClassRef';
3
+ import { IEntityRef } from '../api/IEntityRef';
4
+ import { IPropertyRef } from '../api/IPropertyRef';
5
+ import { IBuildOptions } from '../api/IBuildOptions';
6
+ import { AbstractRef } from './AbstractRef';
7
+ /**
8
+ * Reflective reference to a class function
9
+ *
10
+ * There can exist multiple ClassRef depending of context for a single class function.
11
+ * The context is defined by the lookup registry.
12
+ * It can be also a placeholder, for a dummy or later loaded class.
13
+ *
14
+ * This is a default implementation for IClassRef
15
+ *
16
+
17
+ class can be in different namespaces
18
+ */
19
+ export declare class ClassRef extends AbstractRef implements IClassRef {
20
+ static __inc: number;
21
+ private readonly idx;
22
+ /**
23
+ * Original reference to the class function or the given class name as string
24
+ */
25
+ originalValue: string | Function;
26
+ private _cacheEntity;
27
+ private _isPlaceholder;
28
+ private _isAnonymous;
29
+ extends: IClassRef[];
30
+ constructor(klass: string | Function, namespace?: string);
31
+ isPlaceholder(): boolean;
32
+ isAnonymous(): boolean;
33
+ getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef;
34
+ static getClassName(k: any): any;
35
+ updateClass(cls: Function): void;
36
+ get className(): string;
37
+ get storingName(): string;
38
+ set storingName(v: string);
39
+ /**
40
+ * Check if name is passed by options
41
+ */
42
+ hasName(): boolean;
43
+ /**
44
+ * Return the namespace for/of this class
45
+ */
46
+ getNamespace(): string;
47
+ /**
48
+ * TODO implement
49
+ *
50
+ * @param namespace
51
+ */
52
+ switchNamespace(namespace: string): void;
53
+ isOf(instance: any): boolean;
54
+ get machineName(): string;
55
+ getClass(create?: boolean): Function;
56
+ static find(klass: string | Function, namespace?: string): ClassRef;
57
+ /**
58
+ * get all class refs for some class name
59
+ *
60
+ * @param klass
61
+ */
62
+ static getAllByClassName(klass: any): IClassRef[];
63
+ /**
64
+ * filter function for classrefs
65
+ *
66
+ * @param klass
67
+ */
68
+ static filter(fn: (c: IClassRef) => boolean): IClassRef[];
69
+ static checkIfFunctionCallback(klass: string | Function): string | Function;
70
+ /**
71
+ * check if class reference already exists for given string or Function, if not create a new one
72
+ *
73
+ * @param klass
74
+ * @param namespace
75
+ * @param resolve
76
+ */
77
+ static get(klass: string | Function, namespace?: string, resolve?: boolean): ClassRef;
78
+ /**
79
+ * Create a class ref.
80
+ *
81
+ * @param klass
82
+ * @param namespace
83
+ */
84
+ static createRef(klass: Function | string, namespace?: string): ClassRef;
85
+ /**
86
+ * return global class reference
87
+ *
88
+ * @param klass
89
+ * @param resolve
90
+ */
91
+ static getGlobal(klass: string | Function, resolve?: boolean): ClassRef;
92
+ getRegistry(): import("..").ILookupRegistry;
93
+ getEntityRef(): IEntityRef;
94
+ hasEntityRef(): boolean;
95
+ create<T>(addinfo?: boolean): T;
96
+ new<T>(addinfo?: boolean): T;
97
+ getPropertyRefs(): IPropertyRef[];
98
+ getPropertyRef(name: string): IPropertyRef;
99
+ id(): string;
100
+ build<T>(data: any, options?: IBuildOptions): T;
101
+ /**
102
+ * Return base inherited class for the underlying class
103
+ * ```
104
+ * class X exnteds Y { }
105
+ * ```
106
+ * Y would be returned.
107
+ *
108
+ */
109
+ getExtend(): IClassRef;
110
+ /**
111
+ * Return all inherited classes for underlying class. Mostly added manually.
112
+ *
113
+ */
114
+ getExtends(): IClassRef[];
115
+ /**
116
+ * Append extend class ref.
117
+ * @param ref
118
+ */
119
+ addExtend(ref: IClassRef): IClassRef;
120
+ }
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClassRef = void 0;
4
+ const lodash_1 = require("lodash");
5
+ const base_1 = require("@allgemein/base");
6
+ const SchemaUtils_1 = require("./SchemaUtils");
7
+ const Constants_1 = require("./Constants");
8
+ const LookupRegistry_1 = require("./LookupRegistry");
9
+ const RegistryFactory_1 = require("./registry/RegistryFactory");
10
+ const AbstractRef_1 = require("./AbstractRef");
11
+ /**
12
+ * Reflective reference to a class function
13
+ *
14
+ * There can exist multiple ClassRef depending of context for a single class function.
15
+ * The context is defined by the lookup registry.
16
+ * It can be also a placeholder, for a dummy or later loaded class.
17
+ *
18
+ * This is a default implementation for IClassRef
19
+ *
20
+
21
+ class can be in different namespaces
22
+ */
23
+ class ClassRef extends AbstractRef_1.AbstractRef {
24
+ constructor(klass, namespace = Constants_1.DEFAULT_NAMESPACE) {
25
+ super(Constants_1.METATYPE_CLASS_REF, ClassRef.getClassName(klass), null, namespace);
26
+ this._isPlaceholder = false;
27
+ this._isAnonymous = false;
28
+ this.extends = [];
29
+ this._isAnonymous = lodash_1.isFunction(klass) && klass.name === 'anonymous';
30
+ this.idx = ClassRef.__inc++;
31
+ if (lodash_1.isString(klass)) {
32
+ this.originalValue = klass;
33
+ this._isPlaceholder = true;
34
+ }
35
+ else {
36
+ this.originalValue = base_1.ClassUtils.getFunction(klass);
37
+ }
38
+ }
39
+ isPlaceholder() {
40
+ return this._isPlaceholder;
41
+ }
42
+ isAnonymous() {
43
+ return this._isAnonymous;
44
+ }
45
+ getClassRefFor(object, type) {
46
+ return ClassRef.get(object, this.namespace, type == Constants_1.METATYPE_PROPERTY);
47
+ }
48
+ static getClassName(k) {
49
+ if (k[Constants_1.__CLASS__]) {
50
+ return k[Constants_1.__CLASS__];
51
+ }
52
+ return base_1.ClassUtils.getClassName(k);
53
+ }
54
+ updateClass(cls) {
55
+ this.originalValue = base_1.ClassUtils.getFunction(cls);
56
+ this._isPlaceholder = false;
57
+ }
58
+ get className() {
59
+ return this.name;
60
+ }
61
+ get storingName() {
62
+ let name = this.getOptions(Constants_1.C_PROP_NAME, this.className);
63
+ return lodash_1.snakeCase(name);
64
+ }
65
+ set storingName(v) {
66
+ this.setOption(Constants_1.C_PROP_NAME, v);
67
+ }
68
+ /**
69
+ * Check if name is passed by options
70
+ */
71
+ hasName() {
72
+ return this.hasOption(Constants_1.C_PROP_NAME);
73
+ }
74
+ /**
75
+ * Return the namespace for/of this class
76
+ */
77
+ getNamespace() {
78
+ return this.namespace;
79
+ }
80
+ /**
81
+ * TODO implement
82
+ *
83
+ * @param namespace
84
+ */
85
+ switchNamespace(namespace) {
86
+ // this.getRegistry().remove(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass() === this.getClass());
87
+ // this.namespace = namespace;
88
+ // this.getRegistry().add(METATYPE_CLASS_REF, this);
89
+ }
90
+ isOf(instance) {
91
+ const name = ClassRef.getClassName(instance);
92
+ // if(name)
93
+ if (name && name === this.name) {
94
+ return true;
95
+ }
96
+ else if (lodash_1.has(instance, Constants_1.__CLASS__) && instance[Constants_1.__CLASS__] === this.name) {
97
+ return true;
98
+ }
99
+ else {
100
+ return this.getPropertyRefs()
101
+ .map(x => lodash_1.has(instance, x.name))
102
+ .reduce((previousValue, currentValue) => previousValue && currentValue, true);
103
+ }
104
+ return false;
105
+ }
106
+ get machineName() {
107
+ return lodash_1.snakeCase(this.className);
108
+ }
109
+ getClass(create = false) {
110
+ if (lodash_1.isFunction(this.originalValue)) {
111
+ return this.originalValue;
112
+ }
113
+ else if (lodash_1.isString(this.originalValue) && this.isPlaceholder) {
114
+ if (create) {
115
+ this.originalValue = SchemaUtils_1.SchemaUtils.clazz(this.originalValue);
116
+ return this.originalValue;
117
+ }
118
+ }
119
+ throw new base_1.NotYetImplementedError('getClass for ' + this.originalValue);
120
+ }
121
+ static find(klass, namespace = Constants_1.DEFAULT_NAMESPACE) {
122
+ if (lodash_1.isString(klass)) {
123
+ let name = ClassRef.getClassName(klass);
124
+ let classRef = null;
125
+ if (namespace === Constants_1.GLOBAL_NAMESPACE) {
126
+ classRef = LookupRegistry_1.LookupRegistry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.className === name);
127
+ }
128
+ else {
129
+ classRef = LookupRegistry_1.LookupRegistry.$(namespace).find(Constants_1.METATYPE_CLASS_REF, (c) => c.className === name);
130
+ }
131
+ return classRef;
132
+ }
133
+ else {
134
+ let classRef = null;
135
+ if (namespace === Constants_1.GLOBAL_NAMESPACE) {
136
+ classRef = LookupRegistry_1.LookupRegistry.find(Constants_1.METATYPE_CLASS_REF, (c) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name));
137
+ }
138
+ else {
139
+ classRef = LookupRegistry_1.LookupRegistry.$(namespace).find(Constants_1.METATYPE_CLASS_REF, (c) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name));
140
+ }
141
+ return classRef;
142
+ }
143
+ }
144
+ /**
145
+ * get all class refs for some class name
146
+ *
147
+ * @param klass
148
+ */
149
+ static getAllByClassName(klass) {
150
+ let name = ClassRef.getClassName(klass);
151
+ return LookupRegistry_1.LookupRegistry.filter(Constants_1.METATYPE_CLASS_REF, (c) => c.name == name);
152
+ }
153
+ /**
154
+ * filter function for classrefs
155
+ *
156
+ * @param klass
157
+ */
158
+ static filter(fn) {
159
+ return LookupRegistry_1.LookupRegistry.filter(Constants_1.METATYPE_CLASS_REF, fn);
160
+ }
161
+ static checkIfFunctionCallback(klass) {
162
+ if (lodash_1.isFunction(klass)) {
163
+ // maybe function which return type like () => type
164
+ let name = ClassRef.getClassName(klass);
165
+ if (lodash_1.isEmpty(name)) {
166
+ let fn = null;
167
+ try {
168
+ //fn = klass();
169
+ }
170
+ catch (e) {
171
+ }
172
+ if (fn) {
173
+ let name = ClassRef.getClassName(fn);
174
+ if (!lodash_1.isEmpty(name)) {
175
+ klass = fn;
176
+ }
177
+ }
178
+ }
179
+ }
180
+ return klass;
181
+ }
182
+ /**
183
+ * check if class reference already exists for given string or Function, if not create a new one
184
+ *
185
+ * @param klass
186
+ * @param namespace
187
+ * @param resolve
188
+ */
189
+ static get(klass, namespace = Constants_1.GLOBAL_NAMESPACE, resolve = false) {
190
+ if (resolve) {
191
+ klass = this.checkIfFunctionCallback(klass);
192
+ }
193
+ const isAnonymous = lodash_1.isFunction(klass) && klass.name === 'anonymous';
194
+ let classRef = this.find(klass, namespace);
195
+ if (classRef) {
196
+ if (classRef.isPlaceholder && lodash_1.isFunction(klass) && !isAnonymous) {
197
+ classRef.updateClass(klass);
198
+ }
199
+ return classRef;
200
+ }
201
+ if (namespace === Constants_1.GLOBAL_NAMESPACE) {
202
+ namespace = Constants_1.DEFAULT_NAMESPACE;
203
+ }
204
+ return this.createRef(klass, namespace);
205
+ }
206
+ /**
207
+ * Create a class ref.
208
+ *
209
+ * @param klass
210
+ * @param namespace
211
+ */
212
+ static createRef(klass, namespace = Constants_1.GLOBAL_NAMESPACE) {
213
+ const classRef = new ClassRef(klass, namespace);
214
+ if (lodash_1.isFunction(klass)) {
215
+ const proto = SchemaUtils_1.SchemaUtils.getInherited(klass);
216
+ if (proto) {
217
+ // is extends
218
+ // TODO how to handle cirlces
219
+ const extendRef = ClassRef.get(proto, namespace);
220
+ classRef.addExtend(extendRef);
221
+ }
222
+ }
223
+ return classRef.getRegistry().add(Constants_1.METATYPE_CLASS_REF, classRef);
224
+ }
225
+ /**
226
+ * return global class reference
227
+ *
228
+ * @param klass
229
+ * @param resolve
230
+ */
231
+ static getGlobal(klass, resolve = false) {
232
+ return this.get(klass, Constants_1.GLOBAL_NAMESPACE, resolve);
233
+ }
234
+ getRegistry() {
235
+ return RegistryFactory_1.RegistryFactory.get(this.namespace);
236
+ }
237
+ getEntityRef() {
238
+ if (lodash_1.isUndefined(this._cacheEntity)) {
239
+ this._cacheEntity = this.getRegistry().find(Constants_1.METATYPE_ENTITY, (x) => x.getClassRef() === this);
240
+ }
241
+ return this._cacheEntity;
242
+ }
243
+ hasEntityRef() {
244
+ return !!this.getEntityRef();
245
+ }
246
+ create(addinfo = true) {
247
+ return this.new(addinfo);
248
+ }
249
+ new(addinfo = true) {
250
+ let klass = this.getClass();
251
+ let instance = Reflect.construct(klass, []);
252
+ if (addinfo) {
253
+ Reflect.defineProperty(instance, Constants_1.__NS__, { value: this.namespace, enumerable: true });
254
+ Reflect.defineProperty(instance, Constants_1.__CLASS__, { value: this.className, enumerable: true });
255
+ }
256
+ return instance;
257
+ }
258
+ getPropertyRefs() {
259
+ const inheritedProps = [].concat(...this.getExtends().map(x => x.getPropertyRefs()));
260
+ const registeredProps = this.getRegistry().getPropertyRefs(this);
261
+ inheritedProps.forEach((x) => {
262
+ if (!registeredProps.find(z => x.name === z.name)) {
263
+ registeredProps.push(x);
264
+ }
265
+ });
266
+ return registeredProps;
267
+ }
268
+ getPropertyRef(name) {
269
+ let registeredProp = this.getRegistry().getPropertyRef(this, name);
270
+ if (registeredProp) {
271
+ return registeredProp;
272
+ }
273
+ else {
274
+ for (const clsRef of this.getExtends()) {
275
+ registeredProp = clsRef.getPropertyRef(name);
276
+ if (registeredProp) {
277
+ return registeredProp;
278
+ }
279
+ }
280
+ }
281
+ return null;
282
+ }
283
+ id() {
284
+ return [this.namespace, this.className].map(x => lodash_1.kebabCase(x)).join(Constants_1.XS_ID_SEPARATOR);
285
+ }
286
+ build(data, options = {}) {
287
+ return SchemaUtils_1.SchemaUtils.transform(this, data, options);
288
+ }
289
+ /**
290
+ * Return base inherited class for the underlying class
291
+ * ```
292
+ * class X exnteds Y { }
293
+ * ```
294
+ * Y would be returned.
295
+ *
296
+ */
297
+ getExtend() {
298
+ return !lodash_1.isEmpty(this.extends) ? lodash_1.first(this.extends) : null;
299
+ }
300
+ /**
301
+ * Return all inherited classes for underlying class. Mostly added manually.
302
+ *
303
+ */
304
+ getExtends() {
305
+ return this.extends;
306
+ }
307
+ /**
308
+ * Append extend class ref.
309
+ * @param ref
310
+ */
311
+ addExtend(ref) {
312
+ this.extends.push(ref);
313
+ return ref;
314
+ }
315
+ }
316
+ exports.ClassRef = ClassRef;
317
+ ClassRef.__inc = 0;
318
+
319
+ //# sourceMappingURL=ClassRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/ClassRef.ts"],"names":[],"mappings":"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","file":"ClassRef.js","sourcesContent":["import {first, has, isEmpty, isFunction, isString, isUndefined, kebabCase, snakeCase} from 'lodash';\nimport {ClassUtils, NotYetImplementedError} from '@allgemein/base';\nimport {SchemaUtils} from './SchemaUtils';\nimport {\n __CLASS__,\n __NS__,\n C_PROP_NAME,\n DEFAULT_NAMESPACE,\n GLOBAL_NAMESPACE,\n METADATA_TYPE,\n METATYPE_CLASS_REF,\n METATYPE_ENTITY,\n METATYPE_PROPERTY,\n XS_ID_SEPARATOR\n} from './Constants';\nimport {LookupRegistry} from './LookupRegistry';\nimport {IClassRef} from '../api/IClassRef';\nimport {IEntityRef} from '../api/IEntityRef';\nimport {IPropertyRef} from '../api/IPropertyRef';\nimport {IBuildOptions} from '../api/IBuildOptions';\nimport {RegistryFactory} from './registry/RegistryFactory';\nimport {AbstractRef} from './AbstractRef';\n\n/**\n * Reflective reference to a class function\n *\n * There can exist multiple ClassRef depending of context for a single class function.\n * The context is defined by the lookup registry.\n * It can be also a placeholder, for a dummy or later loaded class.\n *\n * This is a default implementation for IClassRef\n *\n\n class can be in different namespaces\n */\nexport class ClassRef extends AbstractRef implements IClassRef {\n\n static __inc: number = 0;\n\n private readonly idx: number;\n\n /**\n * Original reference to the class function or the given class name as string\n */\n originalValue: string | Function;\n\n private _cacheEntity: IEntityRef;\n\n private _isPlaceholder: boolean = false;\n\n private _isAnonymous: boolean = false;\n\n extends: IClassRef[] = [];\n\n constructor(klass: string | Function, namespace: string = DEFAULT_NAMESPACE) {\n super(METATYPE_CLASS_REF, ClassRef.getClassName(klass), null, namespace);\n this._isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n this.idx = ClassRef.__inc++;\n if (isString(klass)) {\n this.originalValue = klass;\n this._isPlaceholder = true;\n } else {\n this.originalValue = ClassUtils.getFunction(klass);\n }\n }\n\n\n isPlaceholder() {\n return this._isPlaceholder;\n }\n\n\n isAnonymous() {\n return this._isAnonymous;\n }\n\n getClassRefFor(object: string | Function | IClassRef, type: METADATA_TYPE): IClassRef {\n return ClassRef.get(<string | Function>object, this.namespace, type == METATYPE_PROPERTY);\n }\n\n static getClassName(k: any) {\n if (k[__CLASS__]) {\n return k[__CLASS__];\n }\n return ClassUtils.getClassName(k);\n }\n\n\n updateClass(cls: Function) {\n this.originalValue = ClassUtils.getFunction(cls);\n this._isPlaceholder = false;\n }\n\n\n get className() {\n return this.name;\n }\n\n get storingName() {\n let name = this.getOptions(C_PROP_NAME, this.className);\n return snakeCase(name);\n }\n\n set storingName(v: string) {\n this.setOption(C_PROP_NAME, v);\n }\n\n /**\n * Check if name is passed by options\n */\n hasName() {\n return this.hasOption(C_PROP_NAME);\n }\n\n /**\n * Return the namespace for/of this class\n */\n getNamespace() {\n return this.namespace;\n }\n\n /**\n * TODO implement\n *\n * @param namespace\n */\n switchNamespace(namespace: string) {\n // this.getRegistry().remove(METATYPE_CLASS_REF, (x: IClassRef) => x.getClass() === this.getClass());\n // this.namespace = namespace;\n // this.getRegistry().add(METATYPE_CLASS_REF, this);\n }\n\n isOf(instance: any): boolean {\n const name = ClassRef.getClassName(instance);\n // if(name)\n if (name && name === this.name) {\n return true;\n } else if (has(instance, __CLASS__) && instance[__CLASS__] === this.name) {\n return true;\n } else {\n return this.getPropertyRefs()\n .map(x => has(instance, x.name))\n .reduce((previousValue, currentValue) => previousValue && currentValue, true);\n }\n return false;\n }\n\n\n get machineName() {\n return snakeCase(this.className);\n }\n\n\n getClass(create: boolean = false): Function {\n if (isFunction(this.originalValue)) {\n return this.originalValue;\n } else if (isString(this.originalValue) && this.isPlaceholder) {\n if (create) {\n this.originalValue = SchemaUtils.clazz(this.originalValue);\n return this.originalValue;\n }\n }\n throw new NotYetImplementedError('getClass for ' + this.originalValue);\n }\n\n\n static find(klass: string | Function, namespace: string = DEFAULT_NAMESPACE): ClassRef {\n if (isString(klass)) {\n let name = ClassRef.getClassName(klass);\n let classRef = null;\n if (namespace === GLOBAL_NAMESPACE) {\n classRef = LookupRegistry.find<ClassRef>(METATYPE_CLASS_REF, (c: ClassRef) => c.className === name);\n } else {\n classRef = LookupRegistry.$(namespace).find<ClassRef>(METATYPE_CLASS_REF, (c: ClassRef) => c.className === name);\n }\n return classRef;\n } else {\n let classRef = null;\n if (namespace === GLOBAL_NAMESPACE) {\n classRef = LookupRegistry.find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name)\n );\n } else {\n classRef = LookupRegistry.$(namespace).find<ClassRef>(METATYPE_CLASS_REF,\n (c: ClassRef) => c.getClass(true) === klass || (c.isPlaceholder() && c.className === klass.name)\n );\n }\n return classRef;\n }\n }\n\n\n /**\n * get all class refs for some class name\n *\n * @param klass\n */\n static getAllByClassName(klass: any): IClassRef[] {\n let name = ClassRef.getClassName(klass);\n return LookupRegistry.filter<ClassRef>(METATYPE_CLASS_REF, (c: IClassRef) => c.name == name);\n }\n\n\n /**\n * filter function for classrefs\n *\n * @param klass\n */\n static filter(fn: (c: IClassRef) => boolean): IClassRef[] {\n return LookupRegistry.filter<IClassRef>(METATYPE_CLASS_REF, fn);\n }\n\n\n static checkIfFunctionCallback(klass: string | Function) {\n if (isFunction(klass)) {\n // maybe function which return type like () => type\n let name = ClassRef.getClassName(klass);\n\n if (isEmpty(name)) {\n let fn = null;\n try {\n //fn = klass();\n } catch (e) {\n\n }\n if (fn) {\n let name = ClassRef.getClassName(fn);\n if (!isEmpty(name)) {\n klass = fn;\n }\n }\n }\n }\n return klass;\n }\n\n\n /**\n * check if class reference already exists for given string or Function, if not create a new one\n *\n * @param klass\n * @param namespace\n * @param resolve\n */\n static get(klass: string | Function, namespace: string = GLOBAL_NAMESPACE, resolve: boolean = false): ClassRef {\n if (resolve) {\n klass = this.checkIfFunctionCallback(klass);\n }\n\n const isAnonymous = isFunction(klass) && klass.name === 'anonymous';\n\n let classRef = this.find(klass, namespace);\n if (classRef) {\n if (classRef.isPlaceholder && isFunction(klass) && !isAnonymous) {\n classRef.updateClass(klass);\n }\n return classRef;\n }\n\n if (namespace === GLOBAL_NAMESPACE) {\n namespace = DEFAULT_NAMESPACE;\n }\n return this.createRef(klass, namespace);\n }\n\n /**\n * Create a class ref.\n *\n * @param klass\n * @param namespace\n */\n static createRef(klass: Function | string, namespace: string = GLOBAL_NAMESPACE) {\n const classRef = new ClassRef(klass, namespace);\n if (isFunction(klass)) {\n const proto = SchemaUtils.getInherited(klass);\n if (proto) {\n // is extends\n // TODO how to handle cirlces\n const extendRef = ClassRef.get(proto, namespace);\n classRef.addExtend(extendRef);\n }\n }\n return classRef.getRegistry().add(METATYPE_CLASS_REF, classRef);\n }\n\n\n /**\n * return global class reference\n *\n * @param klass\n * @param resolve\n */\n static getGlobal(klass: string | Function, resolve: boolean = false): ClassRef {\n return this.get(klass, GLOBAL_NAMESPACE, resolve);\n }\n\n\n getRegistry() {\n return RegistryFactory.get(this.namespace);\n }\n\n\n getEntityRef(): IEntityRef {\n if (isUndefined(this._cacheEntity)) {\n this._cacheEntity = this.getRegistry().find(METATYPE_ENTITY, (x: IEntityRef) => x.getClassRef() === this);\n }\n return this._cacheEntity;\n }\n\n hasEntityRef() {\n return !!this.getEntityRef();\n }\n\n\n create<T>(addinfo: boolean = true): T {\n return this.new(addinfo);\n }\n\n\n new<T>(addinfo: boolean = true): T {\n let klass = this.getClass();\n let instance = Reflect.construct(klass, []);\n if (addinfo) {\n Reflect.defineProperty(instance, __NS__, {value: this.namespace, enumerable: true});\n Reflect.defineProperty(instance, __CLASS__, {value: this.className, enumerable: true});\n }\n return instance;\n }\n\n\n getPropertyRefs(): IPropertyRef[] {\n const inheritedProps = [].concat(...this.getExtends().map(x => x.getPropertyRefs()));\n const registeredProps = this.getRegistry().getPropertyRefs(this);\n inheritedProps.forEach((x: IPropertyRef) => {\n if (!registeredProps.find(z => x.name === z.name)) {\n registeredProps.push(x);\n }\n });\n return registeredProps;\n }\n\n\n getPropertyRef(name: string): IPropertyRef {\n let registeredProp = this.getRegistry().getPropertyRef(this, name);\n if (registeredProp) {\n return registeredProp;\n } else {\n for (const clsRef of this.getExtends()) {\n registeredProp = clsRef.getPropertyRef(name);\n if (registeredProp) {\n return registeredProp;\n }\n }\n }\n return null;\n }\n\n\n id() {\n return [this.namespace, this.className].map(x => kebabCase(x)).join(XS_ID_SEPARATOR);\n }\n\n\n build<T>(data: any, options: IBuildOptions = {}): T {\n return <T>SchemaUtils.transform(this, data, options);\n }\n\n /**\n * Return base inherited class for the underlying class\n * ```\n * class X exnteds Y { }\n * ```\n * Y would be returned.\n *\n */\n getExtend(): IClassRef {\n return !isEmpty(this.extends) ? first(this.extends) : null;\n }\n\n /**\n * Return all inherited classes for underlying class. Mostly added manually.\n *\n */\n getExtends(): IClassRef[] {\n return this.extends;\n }\n\n /**\n * Append extend class ref.\n * @param ref\n */\n addExtend(ref: IClassRef) {\n this.extends.push(ref);\n return ref;\n }\n\n\n}\n"],"sourceRoot":".."}
@@ -0,0 +1,45 @@
1
+ export declare const DEFAULT_NAMESPACE = "default";
2
+ export declare const GLOBAL_NAMESPACE = "__global__";
3
+ export declare const XS_DEFAULT_CLASSES = "default_class_ref";
4
+ export declare const REFLECT_DESIGN_TYPE = "design:type";
5
+ export declare const METATYPE_SCHEMA = "schema";
6
+ export declare const METATYPE_ENTITY = "entity";
7
+ export declare const METATYPE_NAMESPACE = "namespace";
8
+ export declare const METATYPE_CLASS_REF = "class_ref";
9
+ export declare const METATYPE_PROPERTY = "property";
10
+ export declare const METATYPE_EMBEDDABLE = "object";
11
+ export declare type METADATA_TYPE = 'schema' | 'object' | 'entity' | 'property' | 'class_ref';
12
+ export declare const BINDING_SCHEMA_ENTITY = "schema_entity";
13
+ export declare const BINDING_SCHEMA_CLASS_REF = "schema_class_ref";
14
+ export declare type METADATA_AND_BIND_TYPE = METADATA_TYPE | 'schema_entity' | 'entity_property' | 'property_entity' | 'schema_class_ref';
15
+ export declare type XS_DATA_TYPES = 'string' | 'number' | 'boolean' | 'entity' | 'array' | 'any';
16
+ export declare const XS_ID_SEPARATOR = "--";
17
+ export declare const XS_DEFAULT_SCHEMA = "default";
18
+ export declare const METADATA_REGISTRY = "metadata/registry";
19
+ export declare type ClassType<T> = {
20
+ new (...args: any[]): T;
21
+ };
22
+ export declare type JS_DATA_TYPES = 'string' | 'text' | 'number' | 'boolean' | 'double' | 'json' | 'date' | 'time' | 'datetime' | 'timestamp' | 'byte' | 'object' | 'array' | 'symbol' | 'null' | 'undefined' | 'bigint';
23
+ export declare const XS_ANNOTATION_OPTIONS_CACHE = "anno_options_cache";
24
+ export declare const JS_DATA_TYPES: JS_DATA_TYPES[];
25
+ export declare const JS_PRIMATIVE_TYPES: JS_DATA_TYPES[];
26
+ export declare const C_EVENT_ADD = "add";
27
+ export declare const C_EVENT_REMOVE = "remove";
28
+ export declare const C_EVENT_UPDATE = "update";
29
+ export declare const T_STRING = "string";
30
+ export declare const T_ARRAY = "array";
31
+ export declare const T_OBJECT = "object";
32
+ export declare const C_PROP_NAME = "name";
33
+ export declare const __CLASS__ = "__CLASS__";
34
+ export declare const __NS__ = "__NS__";
35
+ export declare const OPT_CREAT_AND_COPY = "createAndCopy";
36
+ export declare const STATE_KEY = "$state";
37
+ export declare const K_PATTERN_PROPERTY = "patternProperty";
38
+ export declare const K_TRIGGERED: unique symbol;
39
+ export declare type CLASS_TYPE = Function | ClassType<any>;
40
+ export declare type MERGE_TYPE = 'default' | 'assign' | 'merge';
41
+ export interface IMinMax {
42
+ min: number;
43
+ max: number;
44
+ }
45
+ export declare const DEFAULT_KEY_TO_SKIP: string[];
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_KEY_TO_SKIP = exports.K_TRIGGERED = exports.K_PATTERN_PROPERTY = exports.STATE_KEY = exports.OPT_CREAT_AND_COPY = exports.__NS__ = exports.__CLASS__ = exports.C_PROP_NAME = exports.T_OBJECT = exports.T_ARRAY = exports.T_STRING = exports.C_EVENT_UPDATE = exports.C_EVENT_REMOVE = exports.C_EVENT_ADD = exports.JS_PRIMATIVE_TYPES = exports.JS_DATA_TYPES = exports.XS_ANNOTATION_OPTIONS_CACHE = exports.METADATA_REGISTRY = exports.XS_DEFAULT_SCHEMA = exports.XS_ID_SEPARATOR = exports.BINDING_SCHEMA_CLASS_REF = exports.BINDING_SCHEMA_ENTITY = exports.METATYPE_EMBEDDABLE = exports.METATYPE_PROPERTY = exports.METATYPE_CLASS_REF = exports.METATYPE_NAMESPACE = exports.METATYPE_ENTITY = exports.METATYPE_SCHEMA = exports.REFLECT_DESIGN_TYPE = exports.XS_DEFAULT_CLASSES = exports.GLOBAL_NAMESPACE = exports.DEFAULT_NAMESPACE = void 0;
4
+ exports.DEFAULT_NAMESPACE = 'default';
5
+ exports.GLOBAL_NAMESPACE = '__global__';
6
+ exports.XS_DEFAULT_CLASSES = 'default_class_ref';
7
+ exports.REFLECT_DESIGN_TYPE = 'design:type';
8
+ exports.METATYPE_SCHEMA = 'schema';
9
+ exports.METATYPE_ENTITY = 'entity';
10
+ exports.METATYPE_NAMESPACE = 'namespace';
11
+ exports.METATYPE_CLASS_REF = 'class_ref';
12
+ exports.METATYPE_PROPERTY = 'property';
13
+ exports.METATYPE_EMBEDDABLE = 'object';
14
+ exports.BINDING_SCHEMA_ENTITY = 'schema_entity';
15
+ exports.BINDING_SCHEMA_CLASS_REF = 'schema_class_ref';
16
+ exports.XS_ID_SEPARATOR = '--';
17
+ exports.XS_DEFAULT_SCHEMA = 'default';
18
+ exports.METADATA_REGISTRY = 'metadata/registry';
19
+ exports.XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';
20
+ // export const XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';
21
+ exports.JS_DATA_TYPES = [
22
+ 'string',
23
+ 'text',
24
+ 'number',
25
+ 'boolean',
26
+ 'double',
27
+ 'json',
28
+ 'date',
29
+ 'time',
30
+ 'datetime',
31
+ 'timestamp',
32
+ 'byte',
33
+ 'object',
34
+ 'symbol',
35
+ 'null',
36
+ 'undefined',
37
+ 'bigint'
38
+ ];
39
+ exports.JS_PRIMATIVE_TYPES = [
40
+ 'string',
41
+ 'number',
42
+ 'boolean',
43
+ 'object',
44
+ 'symbol',
45
+ 'date',
46
+ 'null',
47
+ 'undefined',
48
+ 'bigint'
49
+ ];
50
+ exports.C_EVENT_ADD = 'add';
51
+ exports.C_EVENT_REMOVE = 'remove';
52
+ exports.C_EVENT_UPDATE = 'update';
53
+ exports.T_STRING = 'string';
54
+ exports.T_ARRAY = 'array';
55
+ exports.T_OBJECT = 'object';
56
+ exports.C_PROP_NAME = 'name';
57
+ exports.__CLASS__ = '__CLASS__';
58
+ exports.__NS__ = '__NS__';
59
+ exports.OPT_CREAT_AND_COPY = 'createAndCopy';
60
+ exports.STATE_KEY = '$state';
61
+ exports.K_PATTERN_PROPERTY = 'patternProperty';
62
+ exports.K_TRIGGERED = Symbol('_triggered_');
63
+ exports.DEFAULT_KEY_TO_SKIP = ['type', '$ref', 'target', 'propertyName', 'metaType', 'namespace', 'name'];
64
+
65
+ //# sourceMappingURL=Constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/lib/Constants.ts"],"names":[],"mappings":";;;AAEa,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAC9B,QAAA,gBAAgB,GAAG,YAAY,CAAC;AAEhC,QAAA,kBAAkB,GAAG,mBAAmB,CAAC;AAEzC,QAAA,mBAAmB,GAAG,aAAa,CAAC;AACpC,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,eAAe,GAAG,QAAQ,CAAC;AAC3B,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,kBAAkB,GAAG,WAAW,CAAC;AACjC,QAAA,iBAAiB,GAAG,UAAU,CAAC;AAC/B,QAAA,mBAAmB,GAAG,QAAQ,CAAC;AAU/B,QAAA,qBAAqB,GAAG,eAAe,CAAC;AACxC,QAAA,wBAAwB,GAAG,kBAAkB,CAAC;AAS9C,QAAA,eAAe,GAAG,IAAI,CAAC;AAEvB,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAG9B,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AAyBxC,QAAA,2BAA2B,GAAG,oBAAoB,CAAC;AAChE,mEAAmE;AAEtD,QAAA,aAAa,GAAoB;IAC5C,QAAQ;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,WAAW;IACX,QAAQ;CACX,CAAC;AAEW,QAAA,kBAAkB,GAAoB;IACjD,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,MAAM;IACN,WAAW;IACX,QAAQ;CACT,CAAC;AAGW,QAAA,WAAW,GAAG,KAAK,CAAC;AACpB,QAAA,cAAc,GAAG,QAAQ,CAAC;AAC1B,QAAA,cAAc,GAAG,QAAQ,CAAC;AAE1B,QAAA,QAAQ,GAAG,QAAQ,CAAC;AACpB,QAAA,OAAO,GAAG,OAAO,CAAC;AAClB,QAAA,QAAQ,GAAG,QAAQ,CAAC;AAEpB,QAAA,WAAW,GAAG,MAAM,CAAC;AACrB,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,MAAM,GAAG,QAAQ,CAAC;AAClB,QAAA,kBAAkB,GAAG,eAAe,CAAC;AAErC,QAAA,SAAS,GAAG,QAAQ,CAAC;AAErB,QAAA,kBAAkB,GAAG,iBAAiB,CAAC;AACvC,QAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAWpC,QAAA,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC","file":"Constants.js","sourcesContent":["import exp = require('constants');\n\nexport const DEFAULT_NAMESPACE = 'default';\nexport const GLOBAL_NAMESPACE = '__global__';\n\nexport const XS_DEFAULT_CLASSES = 'default_class_ref';\n\nexport const REFLECT_DESIGN_TYPE = 'design:type';\nexport const METATYPE_SCHEMA = 'schema';\nexport const METATYPE_ENTITY = 'entity';\nexport const METATYPE_NAMESPACE = 'namespace';\nexport const METATYPE_CLASS_REF = 'class_ref';\nexport const METATYPE_PROPERTY = 'property';\nexport const METATYPE_EMBEDDABLE = 'object';\n\nexport type METADATA_TYPE =\n 'schema'\n | 'object'\n | 'entity'\n | 'property'\n | 'class_ref';\n\n\nexport const BINDING_SCHEMA_ENTITY = 'schema_entity';\nexport const BINDING_SCHEMA_CLASS_REF = 'schema_class_ref';\n\nexport type METADATA_AND_BIND_TYPE = METADATA_TYPE\n | 'schema_entity'\n | 'entity_property'\n | 'property_entity'\n | 'schema_class_ref';\n\nexport type XS_DATA_TYPES = 'string' | 'number' | 'boolean' | 'entity' | 'array' | 'any' ;\nexport const XS_ID_SEPARATOR = '--';\n\nexport const XS_DEFAULT_SCHEMA = 'default';\n\n\nexport const METADATA_REGISTRY = 'metadata/registry';\n\n\nexport type ClassType<T> = { new(...args: any[]): T; };\n\nexport type JS_DATA_TYPES =\n 'string'\n | 'text'\n | 'number'\n | 'boolean'\n | 'double'\n | 'json'\n | 'date'\n | 'time'\n | 'datetime'\n | 'timestamp'\n | 'byte'\n | 'object'\n | 'array'\n | 'symbol'\n | 'null'\n | 'undefined'\n | 'bigint'\n ;\n\nexport const XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';\n// export const XS_ANNOTATION_OPTIONS_CACHE = 'anno_options_cache';\n\nexport const JS_DATA_TYPES: JS_DATA_TYPES[] = [\n 'string'\n , 'text'\n , 'number'\n , 'boolean'\n , 'double'\n , 'json'\n , 'date'\n , 'time'\n , 'datetime'\n , 'timestamp'\n , 'byte'\n , 'object'\n , 'symbol'\n , 'null'\n , 'undefined'\n , 'bigint'\n];\n\nexport const JS_PRIMATIVE_TYPES: JS_DATA_TYPES[] = [\n 'string',\n 'number',\n 'boolean',\n 'object',\n 'symbol',\n 'date',\n 'null',\n 'undefined',\n 'bigint'\n];\n\n\nexport const C_EVENT_ADD = 'add';\nexport const C_EVENT_REMOVE = 'remove';\nexport const C_EVENT_UPDATE = 'update';\n\nexport const T_STRING = 'string';\nexport const T_ARRAY = 'array';\nexport const T_OBJECT = 'object';\n\nexport const C_PROP_NAME = 'name';\nexport const __CLASS__ = '__CLASS__';\nexport const __NS__ = '__NS__';\nexport const OPT_CREAT_AND_COPY = 'createAndCopy';\n\nexport const STATE_KEY = '$state';\n\nexport const K_PATTERN_PROPERTY = 'patternProperty';\nexport const K_TRIGGERED = Symbol('_triggered_');\n\nexport type CLASS_TYPE = Function | ClassType<any>;\nexport type MERGE_TYPE = 'default' | 'assign' | 'merge';\n\nexport interface IMinMax {\n min: number;\n max: number;\n}\n\n\nexport const DEFAULT_KEY_TO_SKIP = ['type', '$ref', 'target', 'propertyName', 'metaType', 'namespace', 'name'];\n"],"sourceRoot":".."}
@@ -0,0 +1,31 @@
1
+ import { IValidationError } from './validation/IValidationError';
2
+ import { IValidationResult } from './validation/IValidationResult';
3
+ import { ILookupRegistry } from '../api/ILookupRegistry';
4
+ import { IEntityRef } from '../api/IEntityRef';
5
+ import { IClassRef } from '../api/IClassRef';
6
+ import { IValidationMessage } from './validation/IValidationMessage';
7
+ /**
8
+ * Container for validation of object
9
+ */
10
+ export declare class DataContainer<T> {
11
+ static keys: string[];
12
+ isValidated: boolean;
13
+ isSuccess: boolean;
14
+ isSuccessValidated: boolean;
15
+ errors: IValidationError[];
16
+ validation: {
17
+ [k: string]: IValidationResult;
18
+ };
19
+ instance: T;
20
+ ref: IEntityRef | IClassRef;
21
+ constructor(instance: T, registry?: ILookupRegistry | IEntityRef | IClassRef);
22
+ addError(e: IValidationError): void;
23
+ hasErrors(): boolean;
24
+ checked(str: string): boolean;
25
+ value(str: string): any;
26
+ valid(str: string): boolean;
27
+ messages(str: string): IValidationMessage[];
28
+ validate(): Promise<boolean>;
29
+ applyState(): void;
30
+ resetErrors(): void;
31
+ }