@allgemein/schema-api 1.5.0 → 1.5.4

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 (77) hide show
  1. package/api/ILookupRegistry.d.ts +1 -0
  2. package/api/ILookupRegistry.js +4 -4
  3. package/api/ILookupRegistry.js.map +1 -1
  4. package/decorators/Property.js +6 -6
  5. package/decorators/Property.js.map +1 -1
  6. package/decorators/PropertyOf.js +1 -1
  7. package/decorators/PropertyOf.js.map +1 -1
  8. package/decorators/validate/Hostname.js +3 -3
  9. package/decorators/validate/Hostname.js.map +1 -1
  10. package/decorators/validate/Ip4.js +3 -3
  11. package/decorators/validate/Ip4.js.map +1 -1
  12. package/decorators/validate/Ip6.js +3 -3
  13. package/decorators/validate/Ip6.js.map +1 -1
  14. package/decorators/validate/IsEmail.js +2 -2
  15. package/decorators/validate/IsEmail.js.map +1 -1
  16. package/decorators/validate/IsNotEmpty.js +5 -5
  17. package/decorators/validate/IsNotEmpty.js.map +1 -1
  18. package/decorators/validate/MaxLength.js +3 -3
  19. package/decorators/validate/MaxLength.js.map +1 -1
  20. package/decorators/validate/MinLength.js +3 -3
  21. package/decorators/validate/MinLength.js.map +1 -1
  22. package/decorators/validate/Regex.js +7 -4
  23. package/decorators/validate/Regex.js.map +1 -1
  24. package/decorators/validate/Required.js +3 -3
  25. package/decorators/validate/Required.js.map +1 -1
  26. package/lib/AbstractRef.js +9 -9
  27. package/lib/AbstractRef.js.map +1 -1
  28. package/lib/AnnotationsHelper.js +13 -13
  29. package/lib/AnnotationsHelper.js.map +1 -1
  30. package/lib/ClassRef.js +18 -18
  31. package/lib/ClassRef.js.map +1 -1
  32. package/lib/Constants.d.ts +4 -0
  33. package/lib/Constants.js +5 -1
  34. package/lib/Constants.js.map +1 -1
  35. package/lib/DataContainer.js +9 -9
  36. package/lib/DataContainer.js.map +1 -1
  37. package/lib/LookupRegistry.js +13 -13
  38. package/lib/LookupRegistry.js.map +1 -1
  39. package/lib/SchemaRef.js +2 -2
  40. package/lib/SchemaRef.js.map +1 -1
  41. package/lib/SchemaUtils.js +11 -11
  42. package/lib/SchemaUtils.js.map +1 -1
  43. package/lib/json-schema/IJsonSchemaSerializeOptions.d.ts +5 -0
  44. package/lib/json-schema/IJsonSchemaSerializeOptions.js.map +1 -1
  45. package/lib/json-schema/JsonSchema.js +6 -6
  46. package/lib/json-schema/JsonSchema.js.map +1 -1
  47. package/lib/json-schema/JsonSchema7Serializer.d.ts +1 -0
  48. package/lib/json-schema/JsonSchema7Serializer.js +46 -33
  49. package/lib/json-schema/JsonSchema7Serializer.js.map +1 -1
  50. package/lib/json-schema/JsonSchema7Unserializer.js +50 -50
  51. package/lib/json-schema/JsonSchema7Unserializer.js.map +1 -1
  52. package/lib/options/IPropertyOptions.d.ts +4 -0
  53. package/lib/options/IPropertyOptions.js.map +1 -1
  54. package/lib/registry/AbstractRegistry.d.ts +7 -1
  55. package/lib/registry/AbstractRegistry.js +10 -2
  56. package/lib/registry/AbstractRegistry.js.map +1 -1
  57. package/lib/registry/DefaultEntityRef.js +1 -1
  58. package/lib/registry/DefaultEntityRef.js.map +1 -1
  59. package/lib/registry/DefaultNamespacedRegistry.d.ts +10 -1
  60. package/lib/registry/DefaultNamespacedRegistry.js +135 -86
  61. package/lib/registry/DefaultNamespacedRegistry.js.map +1 -1
  62. package/lib/registry/DefaultPropertyRef.js +26 -20
  63. package/lib/registry/DefaultPropertyRef.js.map +1 -1
  64. package/lib/registry/IRegistryOptions.d.ts +8 -0
  65. package/lib/registry/IRegistryOptions.js +4 -0
  66. package/lib/registry/IRegistryOptions.js.map +1 -0
  67. package/lib/registry/MetadataRegistry.d.ts +14 -0
  68. package/lib/registry/MetadataRegistry.js +32 -18
  69. package/lib/registry/MetadataRegistry.js.map +1 -1
  70. package/lib/registry/RegistryFactory.d.ts +2 -1
  71. package/lib/registry/RegistryFactory.js +10 -10
  72. package/lib/registry/RegistryFactory.js.map +1 -1
  73. package/lib/validation/DefaultValidator.js +19 -19
  74. package/lib/validation/DefaultValidator.js.map +1 -1
  75. package/lib/validation/Validator.js +2 -2
  76. package/lib/validation/Validator.js.map +1 -1
  77. package/package.json +17 -17
@@ -17,25 +17,25 @@ class RegistryFactory {
17
17
  *
18
18
  * @param namespace
19
19
  */
20
- static get(namespace = Constants_1.DEFAULT_NAMESPACE) {
20
+ static get(namespace = Constants_1.DEFAULT_NAMESPACE, options) {
21
21
  if (!this.$handles[namespace]) {
22
22
  for (const type of this.$types) {
23
- if (lodash_1.isString(type.pattern)) {
23
+ if ((0, lodash_1.isString)(type.pattern)) {
24
24
  if (namespace === type.pattern) {
25
- this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace]);
25
+ this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace, options]);
26
26
  break;
27
27
  }
28
28
  }
29
29
  else {
30
- if (lodash_1.isRegExp(type.pattern) && type.pattern.test(namespace)) {
31
- this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace]);
30
+ if ((0, lodash_1.isRegExp)(type.pattern) && type.pattern.test(namespace)) {
31
+ this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace, options]);
32
32
  break;
33
33
  }
34
34
  }
35
35
  }
36
36
  if (!this.$handles[namespace]) {
37
37
  // create default as fallback if nothing passes
38
- this.$handles[namespace] = new DefaultNamespacedRegistry_1.DefaultNamespacedRegistry(namespace);
38
+ this.$handles[namespace] = new DefaultNamespacedRegistry_1.DefaultNamespacedRegistry(namespace, options);
39
39
  }
40
40
  if (this.$handles[namespace].prepare) {
41
41
  this.$handles[namespace].prepare();
@@ -49,7 +49,7 @@ class RegistryFactory {
49
49
  * @param namespace
50
50
  */
51
51
  static remove(namespace) {
52
- if (lodash_1.has(this.$handles, namespace)) {
52
+ if ((0, lodash_1.has)(this.$handles, namespace)) {
53
53
  this.get(namespace).reset();
54
54
  }
55
55
  delete this.$handles[namespace];
@@ -61,8 +61,8 @@ class RegistryFactory {
61
61
  * @param registry
62
62
  */
63
63
  static register(namespace, registryClass) {
64
- const existsAlready = this.$types.find(x => lodash_1.isString(x.pattern) && lodash_1.isString(namespace) ? x.pattern === namespace :
65
- lodash_1.isRegExp(x.pattern) && lodash_1.isRegExp(namespace) ? x.pattern.source === namespace.source :
64
+ const existsAlready = this.$types.find(x => (0, lodash_1.isString)(x.pattern) && (0, lodash_1.isString)(namespace) ? x.pattern === namespace :
65
+ (0, lodash_1.isRegExp)(x.pattern) && (0, lodash_1.isRegExp)(namespace) ? x.pattern.source === namespace.source :
66
66
  x.pattern === namespace);
67
67
  if (!existsAlready) {
68
68
  this.$types.unshift({
@@ -75,7 +75,7 @@ class RegistryFactory {
75
75
  * Return active and registered namespaces
76
76
  */
77
77
  static getNamespaces() {
78
- return lodash_1.keys(this.$handles);
78
+ return (0, lodash_1.keys)(this.$handles);
79
79
  }
80
80
  static getTargets() {
81
81
  return MetadataRegistry_1.MetadataRegistry.$().getTargets();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/registry/RegistryFactory.ts"],"names":[],"mappings":"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","file":"RegistryFactory.js","sourcesContent":["/**\n * Schema definitions can be different depending by handled structure.\n * We want use one api for use and accessing objects. The registry handle for a namespace can be\n * registered here.\n */\nimport {has, isRegExp, isString, keys} from 'lodash';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {ClassType, DEFAULT_NAMESPACE, METATYPE_ENTITY} from '../Constants';\nimport {DefaultNamespacedRegistry} from './DefaultNamespacedRegistry';\nimport {MetadataRegistry} from './MetadataRegistry';\nimport {C_DEFAULT} from '@allgemein/base';\n\nexport class RegistryFactory {\n\n static $types: { pattern: string | RegExp, registryClass: ClassType<ILookupRegistry> }[] = [\n {\n pattern: /.*/,\n registryClass: DefaultNamespacedRegistry\n }\n ];\n\n\n static $handles: { [key: string]: ILookupRegistry } = {};\n\n\n /**\n * Return the registry handling schema/objects of given context or if not exists the generic default namescaped registry\n *\n * @param namespace\n */\n static get<T extends ILookupRegistry>(namespace: string = DEFAULT_NAMESPACE): T {\n if (!this.$handles[namespace]) {\n for (const type of this.$types) {\n if (isString(type.pattern)) {\n if (namespace === type.pattern) {\n this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace]);\n break;\n }\n } else {\n if (isRegExp(type.pattern) && type.pattern.test(namespace)) {\n this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace]);\n break;\n }\n }\n }\n\n if (!this.$handles[namespace]) {\n // create default as fallback if nothing passes\n this.$handles[namespace] = new DefaultNamespacedRegistry(namespace);\n }\n\n if (this.$handles[namespace].prepare) {\n this.$handles[namespace].prepare();\n }\n }\n return this.$handles[namespace] as T;\n }\n\n /**\n * Remove registry from handles list\n *\n * @param namespace\n */\n static remove(namespace: string) {\n if (has(this.$handles, namespace)) {\n this.get(namespace).reset();\n }\n delete this.$handles[namespace];\n }\n\n\n /**\n * Register a special registry for a given namespace or pattern, remove previous if existed\n *\n * @param namespace\n * @param registry\n */\n static register(namespace: string | RegExp, registryClass: ClassType<ILookupRegistry>) {\n const existsAlready = this.$types.find(x =>\n isString(x.pattern) && isString(namespace) ? x.pattern === namespace :\n isRegExp(x.pattern) && isRegExp(namespace) ? x.pattern.source === namespace.source :\n x.pattern === namespace);\n if (!existsAlready) {\n this.$types.unshift({\n pattern: namespace,\n registryClass: registryClass\n });\n }\n }\n\n /**\n * Return active and registered namespaces\n */\n static getNamespaces() {\n return keys(this.$handles);\n }\n\n static getTargets() {\n return MetadataRegistry.$().getTargets();\n }\n\n /**\n * Return all declared namespaces\n */\n static getDeclaredNamespaces(): { target: Function, namespace: string }[] {\n return [].concat(...MetadataRegistry.$().getTargets().map(x => {\n const entries = MetadataRegistry.$().getByContextAndTarget(METATYPE_ENTITY, x, 'merge');\n return entries.map(x => {\n return {target: x.target, namespace: x.namespace ? x.namespace : C_DEFAULT};\n });\n }));\n }\n\n\n static reset() {\n for (const ns of this.getNamespaces()) {\n this.remove(ns);\n }\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../../src/lib/registry/RegistryFactory.ts"],"names":[],"mappings":"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","file":"RegistryFactory.js","sourcesContent":["/**\n * Schema definitions can be different depending by handled structure.\n * We want use one api for use and accessing objects. The registry handle for a namespace can be\n * registered here.\n */\nimport {has, isRegExp, isString, keys} from 'lodash';\nimport {ILookupRegistry} from '../../api/ILookupRegistry';\nimport {ClassType, DEFAULT_NAMESPACE, METATYPE_ENTITY} from '../Constants';\nimport {DefaultNamespacedRegistry} from './DefaultNamespacedRegistry';\nimport {MetadataRegistry} from './MetadataRegistry';\nimport {C_DEFAULT} from '@allgemein/base';\nimport {IRegistryOptions} from './IRegistryOptions';\n\nexport class RegistryFactory {\n\n static $types: { pattern: string | RegExp, registryClass: ClassType<ILookupRegistry> }[] = [\n {\n pattern: /.*/,\n registryClass: DefaultNamespacedRegistry\n }\n ];\n\n\n static $handles: { [key: string]: ILookupRegistry } = {};\n\n\n /**\n * Return the registry handling schema/objects of given context or if not exists the generic default namescaped registry\n *\n * @param namespace\n */\n static get<T extends ILookupRegistry>(namespace: string = DEFAULT_NAMESPACE, options?: IRegistryOptions): T {\n if (!this.$handles[namespace]) {\n for (const type of this.$types) {\n if (isString(type.pattern)) {\n if (namespace === type.pattern) {\n this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace, options]);\n break;\n }\n } else {\n if (isRegExp(type.pattern) && type.pattern.test(namespace)) {\n this.$handles[namespace] = Reflect.construct(type.registryClass, [namespace, options]);\n break;\n }\n }\n }\n\n if (!this.$handles[namespace]) {\n // create default as fallback if nothing passes\n this.$handles[namespace] = new DefaultNamespacedRegistry(namespace, options);\n }\n\n if (this.$handles[namespace].prepare) {\n this.$handles[namespace].prepare();\n }\n }\n return this.$handles[namespace] as T;\n }\n\n /**\n * Remove registry from handles list\n *\n * @param namespace\n */\n static remove(namespace: string) {\n if (has(this.$handles, namespace)) {\n this.get(namespace).reset();\n }\n delete this.$handles[namespace];\n }\n\n\n /**\n * Register a special registry for a given namespace or pattern, remove previous if existed\n *\n * @param namespace\n * @param registry\n */\n static register(namespace: string | RegExp, registryClass: ClassType<ILookupRegistry>) {\n const existsAlready = this.$types.find(x =>\n isString(x.pattern) && isString(namespace) ? x.pattern === namespace :\n isRegExp(x.pattern) && isRegExp(namespace) ? x.pattern.source === namespace.source :\n x.pattern === namespace);\n if (!existsAlready) {\n this.$types.unshift({\n pattern: namespace,\n registryClass: registryClass\n });\n }\n }\n\n /**\n * Return active and registered namespaces\n */\n static getNamespaces() {\n return keys(this.$handles);\n }\n\n static getTargets() {\n return MetadataRegistry.$().getTargets();\n }\n\n /**\n * Return all declared namespaces\n */\n static getDeclaredNamespaces(): { target: Function, namespace: string }[] {\n return [].concat(...MetadataRegistry.$().getTargets().map(x => {\n const entries = MetadataRegistry.$().getByContextAndTarget(METATYPE_ENTITY, x, 'merge');\n return entries.map(x => {\n return {target: x.target, namespace: x.namespace ? x.namespace : C_DEFAULT};\n });\n }));\n }\n\n\n static reset() {\n for (const ns of this.getNamespaces()) {\n this.remove(ns);\n }\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -22,16 +22,16 @@ class DefaultValidator {
22
22
  this.validators.push(validator);
23
23
  if (validator.involveOnOptionKey) {
24
24
  this.lookupKeys.unshift(validator.involveOnOptionKey);
25
- this.lookupKeys = lodash_1.uniq(this.lookupKeys);
25
+ this.lookupKeys = (0, lodash_1.uniq)(this.lookupKeys);
26
26
  }
27
27
  }
28
28
  static validationInfo(ref) {
29
29
  return __awaiter(this, void 0, void 0, function* () {
30
30
  let clazz = null;
31
- if (IEntityRef_1.isEntityRef(ref) || IClassRef_1.isClassRef(ref)) {
31
+ if ((0, IEntityRef_1.isEntityRef)(ref) || (0, IClassRef_1.isClassRef)(ref)) {
32
32
  clazz = ref.getClass();
33
33
  }
34
- else if (lodash_1.isFunction(ref)) {
34
+ else if ((0, lodash_1.isFunction)(ref)) {
35
35
  clazz = ref;
36
36
  }
37
37
  else {
@@ -44,7 +44,7 @@ class DefaultValidator {
44
44
  return __awaiter(this, void 0, void 0, function* () {
45
45
  let classRef = null;
46
46
  if (ref) {
47
- if (IEntityRef_1.isEntityRef(ref)) {
47
+ if ((0, IEntityRef_1.isEntityRef)(ref)) {
48
48
  classRef = ref.getClassRef();
49
49
  }
50
50
  else {
@@ -75,12 +75,12 @@ class DefaultValidator {
75
75
  else {
76
76
  value = instance;
77
77
  }
78
- let instanceOptions = lodash_1.clone(toValidateEntry.options[handle.name]);
78
+ let instanceOptions = (0, lodash_1.clone)(toValidateEntry.options[handle.name]);
79
79
  if (isPropertyCheck) {
80
80
  instanceOptions.property = toValidateEntry.property;
81
81
  }
82
82
  if (handle.defaultOptions) {
83
- lodash_1.defaults(instanceOptions, handle.defaultOptions);
83
+ (0, lodash_1.defaults)(instanceOptions, handle.defaultOptions);
84
84
  }
85
85
  if (!(yield handle.fn(value, instanceOptions, instance))) {
86
86
  const error = {
@@ -90,12 +90,12 @@ class DefaultValidator {
90
90
  constraints: {}
91
91
  };
92
92
  classErrors.push(error);
93
- let msg = lodash_1.get(instanceOptions, 'message', null);
93
+ let msg = (0, lodash_1.get)(instanceOptions, 'message', null);
94
94
  if (msg) {
95
95
  msg = msg.replace('%propertyName', error.property).replace('%value', value);
96
- lodash_1.keys(instanceOptions).forEach(k => {
96
+ (0, lodash_1.keys)(instanceOptions).forEach(k => {
97
97
  let v = instanceOptions[k];
98
- if (lodash_1.isObjectLike(v) || lodash_1.isArray(v)) {
98
+ if ((0, lodash_1.isObjectLike)(v) || (0, lodash_1.isArray)(v)) {
99
99
  v = JSON.stringify(v);
100
100
  }
101
101
  msg = msg.replace('%options.' + k, v);
@@ -140,13 +140,13 @@ class DefaultValidator {
140
140
  //
141
141
  static getValidationHandlesForFn(fn) {
142
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);
143
+ const entriesSecond = MetadataRegistry_1.MetadataRegistry.$().getCached().filter(x => x.target === fn && (0, lodash_1.intersection)(this.lookupKeys, (0, lodash_1.keys)(x)).length > 0);
144
144
  for (const e of entriesSecond) {
145
145
  const handlesAndOptions = this.extractValidationInfox(e);
146
146
  const validationEntry = {
147
147
  target: fn,
148
148
  };
149
- lodash_1.assign(validationEntry, handlesAndOptions);
149
+ (0, lodash_1.assign)(validationEntry, handlesAndOptions);
150
150
  if (e.propertyName) {
151
151
  validationEntry.property = e.propertyName;
152
152
  }
@@ -154,7 +154,7 @@ class DefaultValidator {
154
154
  }
155
155
  const entriesFirst = base_1.MetadataStorage
156
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);
157
+ .filter((x) => x.object === fn && (0, lodash_1.intersection)(this.lookupKeys, (0, lodash_1.keys)(x.options)).length > 0);
158
158
  for (const e of entriesFirst) {
159
159
  const alreadyAsProperty = entries.find(x => x.property === e.property);
160
160
  const handlesAndOptions = this.extractValidationInfox(e.options);
@@ -166,14 +166,14 @@ class DefaultValidator {
166
166
  continue;
167
167
  }
168
168
  alreadyAsProperty.handles.push(handle);
169
- lodash_1.set(alreadyAsProperty.options, handle.name, lodash_1.get(handlesAndOptions.options, handle.name, {}));
169
+ (0, lodash_1.set)(alreadyAsProperty.options, handle.name, (0, lodash_1.get)(handlesAndOptions.options, handle.name, {}));
170
170
  }
171
171
  }
172
172
  else {
173
173
  const validationEntry = {
174
174
  target: fn,
175
175
  };
176
- lodash_1.assign(validationEntry, handlesAndOptions);
176
+ (0, lodash_1.assign)(validationEntry, handlesAndOptions);
177
177
  if (e.property) {
178
178
  validationEntry.property = e.property;
179
179
  }
@@ -183,28 +183,28 @@ class DefaultValidator {
183
183
  return entries;
184
184
  }
185
185
  static extractValidationInfox(entryOptions) {
186
- const intersect = lodash_1.intersection(this.lookupKeys, lodash_1.keys(entryOptions));
186
+ const intersect = (0, lodash_1.intersection)(this.lookupKeys, (0, lodash_1.keys)(entryOptions));
187
187
  const handles = [];
188
188
  const options = {};
189
189
  for (const k of intersect) {
190
190
  const isLookupKey = ['validate', 'format'].includes(k);
191
- const valueForKey = lodash_1.get(entryOptions, k, null);
191
+ const valueForKey = (0, lodash_1.get)(entryOptions, k, null);
192
192
  const handle = this.validators.find(x => x.name === valueForKey || x.involveOnOptionKey === k);
193
193
  if (handle) {
194
194
  const handleAlreadySet = handles.find(x => x.name === handle.name);
195
195
  if (!handleAlreadySet) {
196
196
  handles.push(handle);
197
197
  }
198
- let v = lodash_1.clone(lodash_1.get(entryOptions, 'validateOptions.' + handle.name, {}));
198
+ let v = (0, lodash_1.clone)((0, lodash_1.get)(entryOptions, 'validateOptions.' + handle.name, {}));
199
199
  if (!isLookupKey) {
200
200
  // pass additional value
201
- v[handle.involveOnOptionKey] = lodash_1.get(entryOptions, handle.involveOnOptionKey, null);
201
+ v[handle.involveOnOptionKey] = (0, lodash_1.get)(entryOptions, handle.involveOnOptionKey, null);
202
202
  }
203
203
  if (v) {
204
204
  if (!options[handle.name]) {
205
205
  options[handle.name] = {};
206
206
  }
207
- lodash_1.merge(options[handle.name], v);
207
+ (0, lodash_1.merge)(options[handle.name], v);
208
208
  }
209
209
  }
210
210
  }
@@ -1 +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":"../.."}
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":"../.."}
@@ -26,7 +26,7 @@ class Validator {
26
26
  }
27
27
  static getValidationEntries(fn) {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
- if (lodash_1.isEmpty(this.info)) {
29
+ if ((0, lodash_1.isEmpty)(this.info)) {
30
30
  return [];
31
31
  }
32
32
  const data = yield Promise.all(this.info.map(x => x(fn)));
@@ -35,7 +35,7 @@ class Validator {
35
35
  }
36
36
  static validate(instance, ref) {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
- if (lodash_1.isEmpty(this.fn)) {
38
+ if ((0, lodash_1.isEmpty)(this.fn)) {
39
39
  return [];
40
40
  }
41
41
  const data = yield Promise.all(this.fn.map(x => x(instance, ref)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/validation/Validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAI/B,yDAAoD;AAOpD;;GAEG;AACH,MAAa,SAAS;IAUpB,MAAM,CAAC,GAAG,CAAC,EAAqB,EAAE,MAA8B;QAC9D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,CAAO,oBAAoB,CAAC,EAAqC;;YACrE,IAAI,gBAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtB,OAAO,EAAE,CAAC;aACX;YACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;KAAA;IAED,MAAM,CAAO,QAAQ,CAAC,QAAa,EAAE,GAA4B;;YAC/D,IAAI,gBAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACpB,OAAO,EAAE,CAAC;aACX;YACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;KAAA;;AAlCH,8BAmCC;AAjCgB,YAAE,GAAwB;IACvC,mCAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,mCAAgB,CAAC;CACjD,CAAC;AAEa,cAAI,GAA6B;IAC9C,mCAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAgB,CAAC;CACvD,CAAC","file":"Validator.js","sourcesContent":["import {isEmpty} from 'lodash';\nimport {IValidationError} from './IValidationError';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IEntityRef} from '../../api/IEntityRef';\nimport {DefaultValidator} from './DefaultValidator';\nimport {IValidatorEntry} from './IValidatorEntry';\n\n\nexport type validate_function = (instance: any, ref?: IClassRef | IEntityRef) => Promise<IValidationError[]>;\nexport type validate_info_function = (ref?: Function | IClassRef | IEntityRef) => Promise<IValidatorEntry[]>;\n\n/**\n * Abstraction for defualt validator functions\n */\nexport class Validator {\n\n private static fn: validate_function[] = [\n DefaultValidator.validate.bind(DefaultValidator)\n ];\n\n private static info: validate_info_function[] = [\n DefaultValidator.validationInfo.bind(DefaultValidator)\n ];\n\n static add(fn: validate_function, fnInfo: validate_info_function) {\n this.fn.push(fn);\n this.info.push(fnInfo);\n }\n\n static reset() {\n this.fn = [];\n this.info = [];\n }\n\n static async getValidationEntries(fn: Function | IClassRef | IEntityRef) {\n if (isEmpty(this.info)) {\n return [];\n }\n const data = await Promise.all(this.info.map(x => x(fn)));\n return [].concat(...data);\n }\n\n static async validate(instance: any, ref?: IClassRef | IEntityRef): Promise<IValidationError[]> {\n if (isEmpty(this.fn)) {\n return [];\n }\n const data = await Promise.all(this.fn.map(x => x(instance, ref)));\n return [].concat(...data);\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../../src/lib/validation/Validator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAA+B;AAI/B,yDAAoD;AAOpD;;GAEG;AACH,MAAa,SAAS;IAUpB,MAAM,CAAC,GAAG,CAAC,EAAqB,EAAE,MAA8B;QAC9D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,CAAO,oBAAoB,CAAC,EAAqC;;YACrE,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtB,OAAO,EAAE,CAAC;aACX;YACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;KAAA;IAED,MAAM,CAAO,QAAQ,CAAC,QAAa,EAAE,GAA4B;;YAC/D,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACpB,OAAO,EAAE,CAAC;aACX;YACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;KAAA;;AAlCH,8BAmCC;AAjCgB,YAAE,GAAwB;IACvC,mCAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,mCAAgB,CAAC;CACjD,CAAC;AAEa,cAAI,GAA6B;IAC9C,mCAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,mCAAgB,CAAC;CACvD,CAAC","file":"Validator.js","sourcesContent":["import {isEmpty} from 'lodash';\nimport {IValidationError} from './IValidationError';\nimport {IClassRef} from '../../api/IClassRef';\nimport {IEntityRef} from '../../api/IEntityRef';\nimport {DefaultValidator} from './DefaultValidator';\nimport {IValidatorEntry} from './IValidatorEntry';\n\n\nexport type validate_function = (instance: any, ref?: IClassRef | IEntityRef) => Promise<IValidationError[]>;\nexport type validate_info_function = (ref?: Function | IClassRef | IEntityRef) => Promise<IValidatorEntry[]>;\n\n/**\n * Abstraction for defualt validator functions\n */\nexport class Validator {\n\n private static fn: validate_function[] = [\n DefaultValidator.validate.bind(DefaultValidator)\n ];\n\n private static info: validate_info_function[] = [\n DefaultValidator.validationInfo.bind(DefaultValidator)\n ];\n\n static add(fn: validate_function, fnInfo: validate_info_function) {\n this.fn.push(fn);\n this.info.push(fnInfo);\n }\n\n static reset() {\n this.fn = [];\n this.info = [];\n }\n\n static async getValidationEntries(fn: Function | IClassRef | IEntityRef) {\n if (isEmpty(this.info)) {\n return [];\n }\n const data = await Promise.all(this.info.map(x => x(fn)));\n return [].concat(...data);\n }\n\n static async validate(instance: any, ref?: IClassRef | IEntityRef): Promise<IValidationError[]> {\n if (isEmpty(this.fn)) {\n return [];\n }\n const data = await Promise.all(this.fn.map(x => x(instance, ref)));\n return [].concat(...data);\n }\n}\n"],"sourceRoot":"../.."}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allgemein/schema-api",
3
- "version": "1.5.0",
3
+ "version": "1.5.4",
4
4
  "description": "Library for schema api",
5
5
  "main": "index.js",
6
6
  "private": false,
@@ -33,22 +33,22 @@
33
33
  },
34
34
  "homepage": "https://github.com/allgemein-node/schema-api#readme",
35
35
  "devDependencies": {
36
- "@allgemein/packaging": "^1.1.1",
36
+ "@allgemein/packaging": "^1.2.14",
37
37
  "@testdeck/mocha": "^0.1.2",
38
- "@types/chai": "^4.2.18",
39
- "@types/glob": "^7.1.3",
40
- "@types/json-schema": "^7.0.7",
41
- "@types/lodash": "^4.14.170",
42
- "@types/mocha": "^8.2.2",
43
- "@types/node": "^15.6.1",
44
- "@typescript-eslint/eslint-plugin": "^4.26.1",
45
- "@typescript-eslint/parser": "^4.26.1",
38
+ "@types/chai": "^4.2.22",
39
+ "@types/glob": "^7.2.0",
40
+ "@types/json-schema": "^7.0.9",
41
+ "@types/lodash": "^4.14.176",
42
+ "@types/mocha": "^9.0.0",
43
+ "@types/node": "^16.11.2",
44
+ "@typescript-eslint/eslint-plugin": "^5.1.0",
45
+ "@typescript-eslint/parser": "^5.1.0",
46
46
  "chai": "^4.3.4",
47
- "codecov": "^3.8.2",
47
+ "codecov": "^3.8.3",
48
48
  "codelyzer": "^6.0.2",
49
49
  "del": "6.0.0",
50
- "eslint": "^7.28.0",
51
- "eslint-plugin-import": "^2.23.4",
50
+ "eslint": "^8.0.1",
51
+ "eslint-plugin-import": "^2.25.2",
52
52
  "got": "^11.8.2",
53
53
  "gulp": "4.0.2",
54
54
  "gulp-bump": "^3.2.0",
@@ -58,14 +58,14 @@
58
58
  "gulp-sourcemaps": "3.0.0",
59
59
  "gulp-typescript": "5.0.1",
60
60
  "merge-stream": "^2.0.0",
61
- "mocha": "^8.4.0",
61
+ "mocha": "^9.1.3",
62
62
  "nyc": "^15.1.0",
63
63
  "reflect-metadata": "^0.1.13",
64
- "ts-node": "^10.0.0",
65
- "typescript": "4.3.2"
64
+ "ts-node": "^10.3.1",
65
+ "typescript": "4.4.4"
66
66
  },
67
67
  "dependencies": {
68
- "@allgemein/base": "^1.5.6"
68
+ "@allgemein/base": "^1.6.2"
69
69
  },
70
70
  "peerDependencies": {
71
71
  "reflect-metadata": "^0.1.13"