@muziehdesign/forms 0.0.1-alpha.50 → 0.0.1-alpha.55

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.
@@ -1,60 +1,50 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { boolean, mixed, object, string } from 'yup';
2
+ import { object } from 'yup';
3
3
  import { ModelValidator } from './model-validator';
4
- import { Equals, Required } from './string-schema';
5
4
  import { SCHEMA_METADATA_NAMESPACE } from './constants';
5
+ import { BooleanType, StringType } from './type-annotations';
6
+ import * as Yup from 'yup';
6
7
  import * as i0 from "@angular/core";
7
8
  export class ModelSchemaFactory {
8
9
  constructor() { }
9
10
  build(model) {
10
11
  const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
11
12
  let shape = {};
12
- metadata.forEach((v, k, map) => {
13
- v.forEach((annotation) => {
14
- if (annotation.type == Required.name) {
15
- shape[k] = mixed().test('required', annotation.errorMessage || 'invalid default message', (v) => v && v != '');
16
- }
17
- else if (annotation.type == Equals.name) {
18
- const a = annotation;
19
- shape[k] = mixed().test('equals', annotation.errorMessage || 'invalid must be equal', (v) => v === a.specification.value);
20
- }
21
- });
13
+ metadata.forEach((value, key) => {
14
+ if (value.constraintType == StringType.name) {
15
+ shape[key] = this.buildStringSchema(value);
16
+ }
17
+ else if (value.constraintType == BooleanType.name) {
18
+ shape[key] = this.buildBooleanSchema(value);
19
+ }
22
20
  });
23
- /*metadata.forEach((element) => {
24
- if (element.type == PropertyType.string) {
25
- shape[element.name] = this.buildStringSchema(element.options || {});
26
- } else if (element.type == PropertyType.boolean) {
27
- shape[element.name] = this.buildBooleanSchema(element.options || {});
28
- }
29
- });*/
30
21
  const schema = object(shape);
31
22
  return new ModelValidator(schema);
32
23
  }
33
24
  buildStringSchema(options) {
34
- let stringSchema = string();
25
+ let schema = Yup.string();
35
26
  if (options.required) {
36
- stringSchema = stringSchema.required();
27
+ schema = schema.required(options.required.message);
37
28
  }
38
29
  if (options.length) {
39
- stringSchema = stringSchema.length(options.length);
30
+ schema = schema.length(options.length.length, options.length.message);
40
31
  }
41
- if (options.minimum) {
42
- stringSchema = stringSchema.min(options.minimum);
43
- }
44
- if (options.maximum) {
45
- stringSchema = stringSchema.max(options.maximum);
46
- }
47
- return stringSchema;
32
+ return schema;
48
33
  }
49
34
  buildBooleanSchema(options) {
50
- let booleanSchema = boolean().required();
35
+ let schema = Yup.boolean();
36
+ if (options.required) {
37
+ schema = schema.required(options.required.message);
38
+ }
51
39
  if (options.equals) {
52
- return booleanSchema.test({
53
- name: 'mustBe',
54
- test: (value) => value == options.equals,
55
- });
40
+ if (options.equals.equals) {
41
+ schema = schema.isTrue(options.equals.message);
42
+ }
43
+ else {
44
+ schema = schema.isFalse(options.equals.message);
45
+ }
56
46
  }
57
- return booleanSchema;
47
+ return schema;
58
48
  }
59
49
  }
60
50
  ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -65,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
65
55
  providedIn: 'root',
66
56
  }]
67
57
  }], ctorParameters: function () { return []; } });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBWSxNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBd0IsTUFBTSxFQUFrRSxRQUFRLEVBQXNDLE1BQU0saUJBQWlCLENBQUM7QUFDN0ssT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVF4RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLGdCQUFlLENBQUM7SUFFaEIsS0FBSyxDQUFJLEtBQVE7UUFDZixNQUFNLFFBQVEsR0FBMkMsT0FBTyxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRyxJQUFJLEtBQUssR0FBZ0IsRUFBRSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzdCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7b0JBQ3BDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxZQUFZLElBQUkseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7aUJBQ2hIO3FCQUFNLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO29CQUN6QyxNQUFNLENBQUMsR0FBRyxVQUF1RCxDQUFDO29CQUNsRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsWUFBWSxJQUFJLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0g7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0g7Ozs7OzthQU1LO1FBQ0wsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBZ0IsQ0FBQztRQUM1QyxPQUFPLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUE0QjtRQUNwRCxJQUFJLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsWUFBWSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUN4QztRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsWUFBWSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUE2QjtRQUN0RCxJQUFJLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN4QixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTTthQUN6QyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7OytHQXZEVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBib29sZWFuLCBtaXhlZCwgb2JqZWN0LCBTY2hlbWFPZiwgc3RyaW5nIH0gZnJvbSAneXVwJztcbmltcG9ydCB7IE1vZGVsVmFsaWRhdG9yIH0gZnJvbSAnLi9tb2RlbC12YWxpZGF0b3InO1xuaW1wb3J0IHsgQm9vbGVhblNjaGVtYU9wdGlvbnMsIEVxdWFscywgRXF1YWxzVmFsdWVBbm5vdGF0aW9uLCBQcm9wZXJ0eUFubm90YXRpb24sIFByb3BlcnR5QW5ub3RhdGlvbnMsIFJlcXVpcmVkLCBTY2hlbWFPcHRpb25zLCBTdHJpbmdTY2hlbWFPcHRpb25zIH0gZnJvbSAnLi9zdHJpbmctc2NoZW1hJztcbmltcG9ydCB7IFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPYmplY3RTaGFwZSB9IGZyb20gJ3l1cC9saWIvb2JqZWN0JztcbmltcG9ydCB7IFByb3BlcnR5U2NoZW1hTWV0YWRhdGEgfSBmcm9tICcuL3Byb3BlcnR5LXNjaGVtYS1tZXRhZGF0YSc7XG5pbXBvcnQgeyBQcm9wZXJ0eVR5cGUgfSBmcm9tICcuL3Byb3BlcnR5LXR5cGUuZW51bSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RlbFNjaGVtYUZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYnVpbGQ8VD4obW9kZWw6IFQpOiBNb2RlbFZhbGlkYXRvcjxUPiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IE1hcDxzdHJpbmcsIFByb3BlcnR5QW5ub3RhdGlvbjxhbnk+W10+ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFLCBtb2RlbCk7XG4gICAgbGV0IHNoYXBlOiBPYmplY3RTaGFwZSA9IHt9O1xuICAgIG1ldGFkYXRhLmZvckVhY2goKHYsIGssIG1hcCkgPT4ge1xuICAgICAgdi5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uLnR5cGUgPT0gUmVxdWlyZWQubmFtZSkge1xuICAgICAgICAgIHNoYXBlW2tdID0gbWl4ZWQoKS50ZXN0KCdyZXF1aXJlZCcsIGFubm90YXRpb24uZXJyb3JNZXNzYWdlIHx8ICdpbnZhbGlkIGRlZmF1bHQgbWVzc2FnZScsICh2KSA9PiB2ICYmIHYgIT0gJycpO1xuICAgICAgICB9IGVsc2UgaWYgKGFubm90YXRpb24udHlwZSA9PSBFcXVhbHMubmFtZSkge1xuICAgICAgICAgIGNvbnN0IGEgPSBhbm5vdGF0aW9uIGFzIFByb3BlcnR5QW5ub3RhdGlvbjxFcXVhbHNWYWx1ZUFubm90YXRpb24+O1xuICAgICAgICAgIHNoYXBlW2tdID0gbWl4ZWQoKS50ZXN0KCdlcXVhbHMnLCBhbm5vdGF0aW9uLmVycm9yTWVzc2FnZSB8fCAnaW52YWxpZCBtdXN0IGJlIGVxdWFsJywgKHYpID0+IHYgPT09IGEuc3BlY2lmaWNhdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8qbWV0YWRhdGEuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuc3RyaW5nKSB7XG4gICAgICAgIHNoYXBlW2VsZW1lbnQubmFtZV0gPSB0aGlzLmJ1aWxkU3RyaW5nU2NoZW1hKGVsZW1lbnQub3B0aW9ucyB8fCB7fSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuYm9vbGVhbikge1xuICAgICAgICBzaGFwZVtlbGVtZW50Lm5hbWVdID0gdGhpcy5idWlsZEJvb2xlYW5TY2hlbWEoZWxlbWVudC5vcHRpb25zIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9KTsqL1xuICAgIGNvbnN0IHNjaGVtYSA9IG9iamVjdChzaGFwZSkgYXMgU2NoZW1hT2Y8VD47XG4gICAgcmV0dXJuIG5ldyBNb2RlbFZhbGlkYXRvcihzY2hlbWEpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFN0cmluZ1NjaGVtYShvcHRpb25zOiBTdHJpbmdTY2hlbWFPcHRpb25zKSB7XG4gICAgbGV0IHN0cmluZ1NjaGVtYSA9IHN0cmluZygpO1xuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XG4gICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEucmVxdWlyZWQoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubGVuZ3RoKG9wdGlvbnMubGVuZ3RoKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWluaW11bSkge1xuICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1pbihvcHRpb25zLm1pbmltdW0pO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5tYXhpbXVtKSB7XG4gICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWF4KG9wdGlvbnMubWF4aW11bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ1NjaGVtYTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCb29sZWFuU2NoZW1hKG9wdGlvbnM6IEJvb2xlYW5TY2hlbWFPcHRpb25zKSB7XG4gICAgbGV0IGJvb2xlYW5TY2hlbWEgPSBib29sZWFuKCkucmVxdWlyZWQoKTtcbiAgICBpZiAob3B0aW9ucy5lcXVhbHMpIHtcbiAgICAgIHJldHVybiBib29sZWFuU2NoZW1hLnRlc3Qoe1xuICAgICAgICBuYW1lOiAnbXVzdEJlJyxcbiAgICAgICAgdGVzdDogKHZhbHVlKSA9PiB2YWx1ZSA9PSBvcHRpb25zLmVxdWFscyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBib29sZWFuU2NoZW1hO1xuICB9XG59XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxLQUFLLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQUUsV0FBVyxFQUFpRCxVQUFVLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDbkksT0FBTyxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUM7O0FBSzNCLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsZ0JBQWUsQ0FBQztJQUVoQixLQUFLLENBQUksS0FBUTtRQUNmLE1BQU0sUUFBUSxHQUF1QyxPQUFPLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNHLElBQUksS0FBSyxHQUFnQixFQUFFLENBQUM7UUFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM5QixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDM0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUE4QixDQUFDLENBQUM7YUFDckU7aUJBQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ25ELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBK0IsQ0FBQyxDQUFDO2FBQ3ZFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFnQixDQUFDO1FBQzVDLE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE9BQThCO1FBQ3RELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQStCO1FBQ3hELElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwRDtRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO2dCQUN6QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDakQ7U0FDRjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OytHQTNDVSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZqQixNQUFNOzJGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvYmplY3QsIFNjaGVtYU9mIH0gZnJvbSAneXVwJztcbmltcG9ydCB7IE1vZGVsVmFsaWRhdG9yIH0gZnJvbSAnLi9tb2RlbC12YWxpZGF0b3InO1xuaW1wb3J0IHsgU0NIRU1BX01FVEFEQVRBX05BTUVTUEFDRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9iamVjdFNoYXBlIH0gZnJvbSAneXVwL2xpYi9vYmplY3QnO1xuaW1wb3J0IHsgQm9vbGVhblR5cGUsIEJvb2xlYW5UeXBlQW5ub3RhdGlvbnMsIENvbnN0cmFpbnRBbm5vdGF0aW9ucywgU3RyaW5nVHlwZSwgU3RyaW5nVHlwZUFubm90YXRpb25zIH0gZnJvbSAnLi90eXBlLWFubm90YXRpb25zJztcbmltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxTY2hlbWFGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGJ1aWxkPFQ+KG1vZGVsOiBUKTogTW9kZWxWYWxpZGF0b3I8VD4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBNYXA8c3RyaW5nLCBDb25zdHJhaW50QW5ub3RhdGlvbnM+ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFLCBtb2RlbCk7XG4gICAgbGV0IHNoYXBlOiBPYmplY3RTaGFwZSA9IHt9O1xuICAgIG1ldGFkYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICh2YWx1ZS5jb25zdHJhaW50VHlwZSA9PSBTdHJpbmdUeXBlLm5hbWUpIHtcbiAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuYnVpbGRTdHJpbmdTY2hlbWEodmFsdWUgYXMgU3RyaW5nVHlwZUFubm90YXRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuY29uc3RyYWludFR5cGUgPT0gQm9vbGVhblR5cGUubmFtZSkge1xuICAgICAgICBzaGFwZVtrZXldID0gdGhpcy5idWlsZEJvb2xlYW5TY2hlbWEodmFsdWUgYXMgQm9vbGVhblR5cGVBbm5vdGF0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZW1hID0gb2JqZWN0KHNoYXBlKSBhcyBTY2hlbWFPZjxUPjtcbiAgICByZXR1cm4gbmV3IE1vZGVsVmFsaWRhdG9yKHNjaGVtYSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RyaW5nU2NoZW1hKG9wdGlvbnM6IFN0cmluZ1R5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAuc3RyaW5nKCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5yZXF1aXJlZChvcHRpb25zLnJlcXVpcmVkLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5sZW5ndGgob3B0aW9ucy5sZW5ndGgubGVuZ3RoLCBvcHRpb25zLmxlbmd0aC5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJvb2xlYW5TY2hlbWEob3B0aW9uczogQm9vbGVhblR5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAuYm9vbGVhbigpO1xuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEucmVxdWlyZWQob3B0aW9ucy5yZXF1aXJlZC5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZXF1YWxzKSB7XG4gICAgICBpZiAob3B0aW9ucy5lcXVhbHMuZXF1YWxzKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYS5pc1RydWUob3B0aW9ucy5lcXVhbHMubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWEuaXNGYWxzZShvcHRpb25zLmVxdWFscy5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG59XG4iXX0=
@@ -32,12 +32,12 @@ export class NgFormModelState {
32
32
  }))
33
33
  .subscribe();
34
34
  this.errors$.subscribe((list) => {
35
- console.log('errored', list);
36
- Object.keys(this.form.form.controls).forEach((key) => {
35
+ console.log('all errors', list);
36
+ const grouped = list.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map());
37
+ grouped.forEach((value, key) => {
37
38
  let validationErrors = {};
38
- list.filter((e) => e.path == key).forEach((v) => validationErrors[v.type] = v.message);
39
- this.form.form.controls[key].setErrors(validationErrors);
40
- console.log('validation errors: ', validationErrors);
39
+ value.forEach((v) => (validationErrors[v.type] = v.message));
40
+ this.form.controls[key].setErrors(validationErrors);
41
41
  });
42
42
  });
43
43
  }
@@ -56,4 +56,4 @@ export class NgFormModelState {
56
56
  this.errors.next(errors);
57
57
  }
58
58
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQVUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUWhFLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFBb0IsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFBRyxDQUFDO0lBRW5ELE1BQU0sQ0FBSSxJQUFZLEVBQUUsS0FBUTtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFJLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOztvSEFOVSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBVUQsTUFBTSxPQUFPLGdCQUFnQjtJQUkzQixZQUFvQixJQUFZLEVBQVUsY0FBaUMsRUFBVSxLQUFRO1FBQXpFLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFHO1FBSHJGLFdBQU0sR0FBa0MsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDL0UsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuRCxJQUFJLGdCQUFnQixHQUFxQixFQUFHLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFvQjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOT19FUlJPUlNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0Zvcm0sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgZnJvbSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi9maWVsZC1lcnJvcic7XG5pbXBvcnQgeyBNb2RlbFNjaGVtYUZhY3RvcnkgfSBmcm9tICcuL21vZGVsLXNjaGVtYS5mYWN0b3J5JztcbmltcG9ydCB7IE1vZGVsVmFsaWRhdG9yIH0gZnJvbSAnLi9tb2RlbC12YWxpZGF0b3InO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmdGb3JtTW9kZWxTdGF0ZUZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZhY3Rvcnk6IE1vZGVsU2NoZW1hRmFjdG9yeSkge31cblxuICBjcmVhdGU8VD4oZm9ybTogTmdGb3JtLCBtb2RlbDogVCkge1xuICAgIGNvbnN0IG1vZGVsU3RhdGUgPSBuZXcgTmdGb3JtTW9kZWxTdGF0ZTxUPihmb3JtLCB0aGlzLmZhY3RvcnkuYnVpbGQobW9kZWwpLCBtb2RlbCk7XG4gICAgcmV0dXJuIG1vZGVsU3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5nRm9ybU1vZGVsU3RhdGU8VD4ge1xuICBwcml2YXRlIGVycm9yczogQmVoYXZpb3JTdWJqZWN0PEZpZWxkRXJyb3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpZWxkRXJyb3JbXT4oW10pO1xuICBwdWJsaWMgZXJyb3JzJCA9IHRoaXMuZXJyb3JzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybTogTmdGb3JtLCBwcml2YXRlIG1vZGVsVmFsaWRhdG9yOiBNb2RlbFZhbGlkYXRvcjxUPiwgcHJpdmF0ZSBtb2RlbDogVCkge1xuICAgIHRoaXMuZm9ybS5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChhc3luYyAoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMucnVuVmFsaWRhdGlvbnMoKSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmVycm9ycyQuc3Vic2NyaWJlKChsaXN0KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnZXJyb3JlZCcsIGxpc3QpO1xuICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9ycyA9IDxWYWxpZGF0aW9uRXJyb3JzPnsgfTtcbiAgICAgICAgbGlzdC5maWx0ZXIoKGUpID0+IGUucGF0aCA9PSBrZXkpLmZvckVhY2goKHYpPT52YWxpZGF0aW9uRXJyb3JzW3YudHlwZV0gPSB2Lm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmZvcm0uZm9ybS5jb250cm9sc1trZXldLnNldEVycm9ycyh2YWxpZGF0aW9uRXJyb3JzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRpb24gZXJyb3JzOiAnLCB2YWxpZGF0aW9uRXJyb3JzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMudmFsdWUubGVuZ3RoID09IDA7XG4gIH1cblxuICBzZXRFcnJvcnMoZXJyb3JzOiBGaWVsZEVycm9yW10pIHtcbiAgICB0aGlzLmVycm9ycy5uZXh0KGVycm9ycyk7XG4gIH1cblxuICB2YWxpZGF0ZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ydW5WYWxpZGF0aW9ucygpLnRoZW4oKHgpID0+IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5WYWxpZGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygndmFsaWRhdGluZycsIHRoaXMubW9kZWwpO1xuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IHRoaXMubW9kZWxWYWxpZGF0b3IudmFsaWRhdGUodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5lcnJvcnMubmV4dChlcnJvcnMpO1xuICB9XG59XG4iXX0=
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxlQUFlLEVBQVUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBUWhFLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFBb0IsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFBRyxDQUFDO0lBRW5ELE1BQU0sQ0FBSSxJQUFZLEVBQUUsS0FBUTtRQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFJLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOztvSEFOVSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBVUQsTUFBTSxPQUFPLGdCQUFnQjtJQUkzQixZQUFvQixJQUFZLEVBQVUsY0FBaUMsRUFBVSxLQUFRO1FBQXpFLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFHO1FBSHJGLFdBQU0sR0FBa0MsSUFBSSxlQUFlLENBQWUsRUFBRSxDQUFDLENBQUM7UUFDL0UsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFHMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTthQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVoQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQXdCLENBQUMsQ0FBQztZQUV2SSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM3QixJQUFJLGdCQUFnQixHQUFxQixFQUFFLENBQUM7Z0JBQzVDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFvQjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOT19FUlJPUlNfU0NIRU1BIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0Zvcm0sIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbHRlciwgZnJvbSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi9maWVsZC1lcnJvcic7XG5pbXBvcnQgeyBNb2RlbFNjaGVtYUZhY3RvcnkgfSBmcm9tICcuL21vZGVsLXNjaGVtYS5mYWN0b3J5JztcbmltcG9ydCB7IE1vZGVsVmFsaWRhdG9yIH0gZnJvbSAnLi9tb2RlbC12YWxpZGF0b3InO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmdGb3JtTW9kZWxTdGF0ZUZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZhY3Rvcnk6IE1vZGVsU2NoZW1hRmFjdG9yeSkge31cblxuICBjcmVhdGU8VD4oZm9ybTogTmdGb3JtLCBtb2RlbDogVCkge1xuICAgIGNvbnN0IG1vZGVsU3RhdGUgPSBuZXcgTmdGb3JtTW9kZWxTdGF0ZTxUPihmb3JtLCB0aGlzLmZhY3RvcnkuYnVpbGQobW9kZWwpLCBtb2RlbCk7XG4gICAgcmV0dXJuIG1vZGVsU3RhdGU7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5nRm9ybU1vZGVsU3RhdGU8VD4ge1xuICBwcml2YXRlIGVycm9yczogQmVoYXZpb3JTdWJqZWN0PEZpZWxkRXJyb3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpZWxkRXJyb3JbXT4oW10pO1xuICBwdWJsaWMgZXJyb3JzJCA9IHRoaXMuZXJyb3JzLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybTogTmdGb3JtLCBwcml2YXRlIG1vZGVsVmFsaWRhdG9yOiBNb2RlbFZhbGlkYXRvcjxUPiwgcHJpdmF0ZSBtb2RlbDogVCkge1xuICAgIHRoaXMuZm9ybS5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChhc3luYyAoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMucnVuVmFsaWRhdGlvbnMoKSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLmVycm9ycyQuc3Vic2NyaWJlKChsaXN0KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnYWxsIGVycm9ycycsIGxpc3QpO1xuXG4gICAgICBjb25zdCBncm91cGVkID0gbGlzdC5yZWR1Y2UoKGdyb3VwZWQsIHYpID0+IGdyb3VwZWQuc2V0KHYucGF0aCwgWy4uLihncm91cGVkLmdldCh2LnBhdGgpIHx8IFtdKSwgdl0pLCBuZXcgTWFwPHN0cmluZywgRmllbGRFcnJvcltdPigpKTtcblxuICAgICAgZ3JvdXBlZC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0aW9uRXJyb3JzID0gPFZhbGlkYXRpb25FcnJvcnM+e307XG4gICAgICAgIHZhbHVlLmZvckVhY2goKHYpID0+ICh2YWxpZGF0aW9uRXJyb3JzW3YudHlwZV0gPSB2Lm1lc3NhZ2UpKTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uc2V0RXJyb3JzKHZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVycm9ycy52YWx1ZS5sZW5ndGggPT0gMDtcbiAgfVxuXG4gIHNldEVycm9ycyhlcnJvcnM6IEZpZWxkRXJyb3JbXSkge1xuICAgIHRoaXMuZXJyb3JzLm5leHQoZXJyb3JzKTtcbiAgfVxuXG4gIHZhbGlkYXRlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLnJ1blZhbGlkYXRpb25zKCkudGhlbigoeCkgPT4gdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blZhbGlkYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0aW5nJywgdGhpcy5tb2RlbCk7XG4gICAgY29uc3QgZXJyb3JzID0gYXdhaXQgdGhpcy5tb2RlbFZhbGlkYXRvci52YWxpZGF0ZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLmVycm9ycy5uZXh0KGVycm9ycyk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,42 @@
1
+ import 'reflect-metadata';
2
+ const METADATA_KEY = 'custom:muziehdesign:annotations';
3
+ const registerMetadata = (target, propertyKey, constraint) => {
4
+ const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
5
+ metadata.set(propertyKey, constraint);
6
+ Reflect.defineMetadata(METADATA_KEY, metadata, target);
7
+ };
8
+ /*
9
+ export function OfValues<T>(values: T[], message?: string) {
10
+ return function (target: Object, propertyKey: string) {
11
+ const o = { values: values, message: message } as OfValuesAnnotations;
12
+ o.constraintType = OfValues.name;
13
+ registerMetadata(target, propertyKey, o);
14
+ };
15
+ }*/
16
+ export function StringType(...annotations) {
17
+ return function (target, propertyKey) {
18
+ const o = Object.assign({}, ...annotations);
19
+ o.constraintType = StringType.name;
20
+ registerMetadata(target, propertyKey, o);
21
+ };
22
+ }
23
+ export function BooleanType(...annotations) {
24
+ return function (target, propertyKey) {
25
+ const o = Object.assign({}, ...annotations);
26
+ o.constraintType = BooleanType.name;
27
+ registerMetadata(target, propertyKey, o);
28
+ };
29
+ }
30
+ export function required(message) {
31
+ return { required: { required: true, message: message } };
32
+ }
33
+ export function length(length, message) {
34
+ return { length: { length: length, message: message } };
35
+ }
36
+ export function ofValues(values, message) {
37
+ return { ofValues: { values: values, message: message } };
38
+ }
39
+ export function equals(value, message) {
40
+ return { equals: { equals: value, message: message } };
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1hbm5vdGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL3R5cGUtYW5ub3RhdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUsxQixNQUFNLFlBQVksR0FBRyxpQ0FBaUMsQ0FBQztBQTBDdkQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLFVBQWlDLEVBQUUsRUFBRTtJQUNsRyxNQUFNLFFBQVEsR0FBcUIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUN2RyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN0QyxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUVILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRyxXQUFzRDtJQUNsRixPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQW1CO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUEwQixDQUFDO1FBQ3JFLENBQUMsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztRQUNuQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEdBQUcsV0FBc0Q7SUFDbkYsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUFtQjtRQUNsRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBMkIsQ0FBQztRQUN0RSxDQUFDLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDcEMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUFnQjtJQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUM1RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFjLEVBQUUsT0FBZ0I7SUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsTUFBVSxFQUFFLE9BQWdCO0lBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFJLEtBQVEsRUFBRSxPQUFnQjtJQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcbmltcG9ydCB7IEJvb2xlYW5TY2hlbWEsIFNjaGVtYU9mLCBTdHJpbmdTY2hlbWEgfSBmcm9tICd5dXAnO1xuaW1wb3J0IHsgUHJvcGVydHlTY2hlbWFNZXRhZGF0YSB9IGZyb20gJy4vcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhJztcbmltcG9ydCB7IFByb3BlcnR5VHlwZSB9IGZyb20gJy4vcHJvcGVydHktdHlwZS5lbnVtJztcblxuY29uc3QgTUVUQURBVEFfS0VZID0gJ2N1c3RvbTptdXppZWhkZXNpZ246YW5ub3RhdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cmFpbnRBbm5vdGF0aW9ucyB7XG4gIGNvbnN0cmFpbnRUeXBlOiBzdHJpbmc7XG59XG5cbi8qXG5leHBvcnQgaW50ZXJmYWNlIE9mVmFsdWVzQW5ub3RhdGlvbnMgZXh0ZW5kcyBDb25zdHJhaW50QW5ub3RhdGlvbnMge1xuICB2YWx1ZXM6IFtdO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufSovXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nVHlwZUFubm90YXRpb25zIGV4dGVuZHMgQ29uc3RyYWludEFubm90YXRpb25zIHtcbiAgcmVxdWlyZWQ/OiBSZXF1aXJlZEFubm90YXRpb247XG4gIGxlbmd0aDogTGVuZ3RoQW5ub3RhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCb29sZWFuVHlwZUFubm90YXRpb25zIGV4dGVuZHMgQ29uc3RyYWludEFubm90YXRpb25zIHtcbiAgcmVxdWlyZWQ/OiBSZXF1aXJlZEFubm90YXRpb247XG4gIGVxdWFscz86IEVxdWFsc0Fubm90YXRpb248Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkFubm90YXRpb24ge1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkQW5ub3RhdGlvbiBleHRlbmRzIFZhbGlkYXRpb25Bbm5vdGF0aW9uIHtcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVuZ3RoQW5ub3RhdGlvbiBleHRlbmRzIFZhbGlkYXRpb25Bbm5vdGF0aW9uIHtcbiAgbGVuZ3RoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2ZWYWx1ZXNBbm5vdGF0aW9uIGV4dGVuZHMgVmFsaWRhdGlvbkFubm90YXRpb24ge1xuICB2YWx1ZXM6IFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVxdWFsc0Fubm90YXRpb248VD4gZXh0ZW5kcyBWYWxpZGF0aW9uQW5ub3RhdGlvbiB7XG4gIGVxdWFsczogVDtcbn1cblxuY29uc3QgcmVnaXN0ZXJNZXRhZGF0YSA9ICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZywgY29uc3RyYWludDogQ29uc3RyYWludEFubm90YXRpb25zKSA9PiB7XG4gIGNvbnN0IG1ldGFkYXRhOiBNYXA8c3RyaW5nLCBhbnk+ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShNRVRBREFUQV9LRVksIHRhcmdldCkgfHwgbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgbWV0YWRhdGEuc2V0KHByb3BlcnR5S2V5LCBjb25zdHJhaW50KTtcbiAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShNRVRBREFUQV9LRVksIG1ldGFkYXRhLCB0YXJnZXQpO1xufTtcblxuLypcbmV4cG9ydCBmdW5jdGlvbiBPZlZhbHVlczxUPih2YWx1ZXM6IFRbXSwgbWVzc2FnZT86IHN0cmluZykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgbyA9IHsgdmFsdWVzOiB2YWx1ZXMsIG1lc3NhZ2U6IG1lc3NhZ2UgfSBhcyBPZlZhbHVlc0Fubm90YXRpb25zO1xuICAgIG8uY29uc3RyYWludFR5cGUgPSBPZlZhbHVlcy5uYW1lO1xuICAgIHJlZ2lzdGVyTWV0YWRhdGEodGFyZ2V0LCBwcm9wZXJ0eUtleSwgbyk7XG4gIH07XG59Ki9cblxuZXhwb3J0IGZ1bmN0aW9uIFN0cmluZ1R5cGUoLi4uYW5ub3RhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogVmFsaWRhdGlvbkFubm90YXRpb24gfVtdKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBvID0gT2JqZWN0LmFzc2lnbih7fSwgLi4uYW5ub3RhdGlvbnMpIGFzIFN0cmluZ1R5cGVBbm5vdGF0aW9ucztcbiAgICBvLmNvbnN0cmFpbnRUeXBlID0gU3RyaW5nVHlwZS5uYW1lO1xuICAgIHJlZ2lzdGVyTWV0YWRhdGEodGFyZ2V0LCBwcm9wZXJ0eUtleSwgbyk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCb29sZWFuVHlwZSguLi5hbm5vdGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBWYWxpZGF0aW9uQW5ub3RhdGlvbiB9W10pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IG8gPSBPYmplY3QuYXNzaWduKHt9LCAuLi5hbm5vdGF0aW9ucykgYXMgQm9vbGVhblR5cGVBbm5vdGF0aW9ucztcbiAgICBvLmNvbnN0cmFpbnRUeXBlID0gQm9vbGVhblR5cGUubmFtZTtcbiAgICByZWdpc3Rlck1ldGFkYXRhKHRhcmdldCwgcHJvcGVydHlLZXksIG8pO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQobWVzc2FnZT86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogUmVxdWlyZWRBbm5vdGF0aW9uIH0ge1xuICByZXR1cm4geyByZXF1aXJlZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogbWVzc2FnZSB9IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZW5ndGgobGVuZ3RoOiBudW1iZXIsIG1lc3NhZ2U/OiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IExlbmd0aEFubm90YXRpb24gfSB7XG4gIHJldHVybiB7IGxlbmd0aDogeyBsZW5ndGg6IGxlbmd0aCwgbWVzc2FnZTogbWVzc2FnZSB9IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvZlZhbHVlcyh2YWx1ZXM6IFtdLCBtZXNzYWdlPzogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBPZlZhbHVlc0Fubm90YXRpb24gfSB7XG4gIHJldHVybiB7IG9mVmFsdWVzOiB7IHZhbHVlczogdmFsdWVzLCBtZXNzYWdlOiBtZXNzYWdlIH0gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVxdWFsczxUPih2YWx1ZTogVCwgbWVzc2FnZT86IHN0cmluZykgOiB7IFtrZXk6IHN0cmluZ106IEVxdWFsc0Fubm90YXRpb248VD4gfSB7XG4gIHJldHVybiB7IGVxdWFsczogeyBlcXVhbHM6IHZhbHVlLCBtZXNzYWdlOiBtZXNzYWdlIH0gfTtcbn1cbiJdfQ==
@@ -4,7 +4,7 @@
4
4
  export * from './lib/field-error';
5
5
  export * from './lib/model-schema.factory';
6
6
  export * from './lib/model-validator';
7
- export * from './lib/string-schema';
7
+ export * from './lib/type-annotations';
8
8
  export * from './lib/forms.module';
9
9
  export * from './lib/ng-form-model-state.service';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBmb3Jtc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC1lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbC12YWxpZGF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RyaW5nLXNjaGVtYSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3Jtcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlJztcbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBmb3Jtc1xuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWVsZC1lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbC12YWxpZGF0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZS1hbm5vdGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3Jtcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlJztcbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
- import { mixed, object, string, boolean } from 'yup';
3
+ import * as Yup from 'yup';
4
+ import { object } from 'yup';
4
5
  import 'reflect-metadata';
5
6
  import { __awaiter } from 'tslib';
6
7
  import { BehaviorSubject, switchMap, from } from 'rxjs';
@@ -21,120 +22,89 @@ class ModelValidator {
21
22
  }
22
23
  }
23
24
 
24
- var PropertyType;
25
- (function (PropertyType) {
26
- PropertyType[PropertyType["string"] = 0] = "string";
27
- PropertyType[PropertyType["number"] = 1] = "number";
28
- PropertyType[PropertyType["array"] = 2] = "array";
29
- PropertyType[PropertyType["boolean"] = 3] = "boolean";
30
- })(PropertyType || (PropertyType = {}));
25
+ const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';
31
26
 
32
27
  const METADATA_KEY = 'custom:muziehdesign:annotations';
33
- function StringSchema(options) {
28
+ const registerMetadata = (target, propertyKey, constraint) => {
29
+ const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
30
+ metadata.set(propertyKey, constraint);
31
+ Reflect.defineMetadata(METADATA_KEY, metadata, target);
32
+ };
33
+ /*
34
+ export function OfValues<T>(values: T[], message?: string) {
35
+ return function (target: Object, propertyKey: string) {
36
+ const o = { values: values, message: message } as OfValuesAnnotations;
37
+ o.constraintType = OfValues.name;
38
+ registerMetadata(target, propertyKey, o);
39
+ };
40
+ }*/
41
+ function StringType(...annotations) {
34
42
  return function (target, propertyKey) {
35
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
36
- metadata.push({
37
- name: propertyKey,
38
- type: PropertyType.string,
39
- options: options,
40
- });
41
- // TODO: define on property
42
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
43
+ const o = Object.assign({}, ...annotations);
44
+ o.constraintType = StringType.name;
45
+ registerMetadata(target, propertyKey, o);
43
46
  };
44
47
  }
45
- function BooleanSchema(options) {
48
+ function BooleanType(...annotations) {
46
49
  return function (target, propertyKey) {
47
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
48
- metadata.push({
49
- name: propertyKey,
50
- type: PropertyType.boolean,
51
- options: options,
52
- });
53
- // TODO: define on property
54
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
50
+ const o = Object.assign({}, ...annotations);
51
+ o.constraintType = BooleanType.name;
52
+ registerMetadata(target, propertyKey, o);
55
53
  };
56
54
  }
57
- function Required(options) {
58
- return function (target, propertyKey) {
59
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
60
- const annotations = metadata.get(propertyKey) || [];
61
- annotations.push({ type: Required.name, errorMessage: options === null || options === void 0 ? void 0 : options.errorMessage });
62
- metadata.set(propertyKey, annotations);
63
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
64
- };
55
+ function required(message) {
56
+ return { required: { required: true, message: message } };
65
57
  }
66
- function Equals(value, options) {
67
- return function (target, propertyKey) {
68
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
69
- const annotations = metadata.get(propertyKey) || [];
70
- annotations.push({ type: Equals.name, errorMessage: options === null || options === void 0 ? void 0 : options.errorMessage, specification: { value: value } });
71
- metadata.set(propertyKey, annotations);
72
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
73
- };
58
+ function length(length, message) {
59
+ return { length: { length: length, message: message } };
74
60
  }
75
- function Email(options) {
76
- return function (target, propertyKey) {
77
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
78
- const annotations = metadata.get(propertyKey) || [];
79
- annotations.push({ type: Email.name, errorMessage: options === null || options === void 0 ? void 0 : options.errorMessage });
80
- metadata.set(propertyKey, annotations);
81
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
82
- };
61
+ function ofValues(values, message) {
62
+ return { ofValues: { values: values, message: message } };
63
+ }
64
+ function equals(value, message) {
65
+ return { equals: { equals: value, message: message } };
83
66
  }
84
-
85
- const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';
86
67
 
87
68
  class ModelSchemaFactory {
88
69
  constructor() { }
89
70
  build(model) {
90
71
  const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
91
72
  let shape = {};
92
- metadata.forEach((v, k, map) => {
93
- v.forEach((annotation) => {
94
- if (annotation.type == Required.name) {
95
- shape[k] = mixed().test('required', annotation.errorMessage || 'invalid default message', (v) => v && v != '');
96
- }
97
- else if (annotation.type == Equals.name) {
98
- const a = annotation;
99
- shape[k] = mixed().test('equals', annotation.errorMessage || 'invalid must be equal', (v) => v === a.specification.value);
100
- }
101
- });
73
+ metadata.forEach((value, key) => {
74
+ if (value.constraintType == StringType.name) {
75
+ shape[key] = this.buildStringSchema(value);
76
+ }
77
+ else if (value.constraintType == BooleanType.name) {
78
+ shape[key] = this.buildBooleanSchema(value);
79
+ }
102
80
  });
103
- /*metadata.forEach((element) => {
104
- if (element.type == PropertyType.string) {
105
- shape[element.name] = this.buildStringSchema(element.options || {});
106
- } else if (element.type == PropertyType.boolean) {
107
- shape[element.name] = this.buildBooleanSchema(element.options || {});
108
- }
109
- });*/
110
81
  const schema = object(shape);
111
82
  return new ModelValidator(schema);
112
83
  }
113
84
  buildStringSchema(options) {
114
- let stringSchema = string();
85
+ let schema = Yup.string();
115
86
  if (options.required) {
116
- stringSchema = stringSchema.required();
87
+ schema = schema.required(options.required.message);
117
88
  }
118
89
  if (options.length) {
119
- stringSchema = stringSchema.length(options.length);
120
- }
121
- if (options.minimum) {
122
- stringSchema = stringSchema.min(options.minimum);
90
+ schema = schema.length(options.length.length, options.length.message);
123
91
  }
124
- if (options.maximum) {
125
- stringSchema = stringSchema.max(options.maximum);
126
- }
127
- return stringSchema;
92
+ return schema;
128
93
  }
129
94
  buildBooleanSchema(options) {
130
- let booleanSchema = boolean().required();
95
+ let schema = Yup.boolean();
96
+ if (options.required) {
97
+ schema = schema.required(options.required.message);
98
+ }
131
99
  if (options.equals) {
132
- return booleanSchema.test({
133
- name: 'mustBe',
134
- test: (value) => value == options.equals,
135
- });
100
+ if (options.equals.equals) {
101
+ schema = schema.isTrue(options.equals.message);
102
+ }
103
+ else {
104
+ schema = schema.isFalse(options.equals.message);
105
+ }
136
106
  }
137
- return booleanSchema;
107
+ return schema;
138
108
  }
139
109
  }
140
110
  ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -188,12 +158,12 @@ class NgFormModelState {
188
158
  })))
189
159
  .subscribe();
190
160
  this.errors$.subscribe((list) => {
191
- console.log('errored', list);
192
- Object.keys(this.form.form.controls).forEach((key) => {
161
+ console.log('all errors', list);
162
+ const grouped = list.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map());
163
+ grouped.forEach((value, key) => {
193
164
  let validationErrors = {};
194
- list.filter((e) => e.path == key).forEach((v) => validationErrors[v.type] = v.message);
195
- this.form.form.controls[key].setErrors(validationErrors);
196
- console.log('validation errors: ', validationErrors);
165
+ value.forEach((v) => (validationErrors[v.type] = v.message));
166
+ this.form.controls[key].setErrors(validationErrors);
197
167
  });
198
168
  });
199
169
  }
@@ -223,5 +193,5 @@ class NgFormModelState {
223
193
  * Generated bundle index. Do not edit.
224
194
  */
225
195
 
226
- export { BooleanSchema, Email, Equals, FormsModule, ModelSchemaFactory, ModelValidator, NgFormModelState, NgFormModelStateFactory, Required, StringSchema };
196
+ export { BooleanType, FormsModule, ModelSchemaFactory, ModelValidator, NgFormModelState, NgFormModelStateFactory, StringType, equals, length, ofValues, required };
227
197
  //# sourceMappingURL=muziehdesign-forms.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"muziehdesign-forms.mjs","sources":["../../../../projects/muziehdesign/forms/src/lib/model-validator.ts","../../../../projects/muziehdesign/forms/src/lib/property-type.enum.ts","../../../../projects/muziehdesign/forms/src/lib/string-schema.ts","../../../../projects/muziehdesign/forms/src/lib/constants.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.ts","../../../../projects/muziehdesign/forms/src/lib/ng-form-model-state.service.ts","../../../../projects/muziehdesign/forms/src/public-api.ts","../../../../projects/muziehdesign/forms/src/muziehdesign-forms.ts"],"sourcesContent":["import { SchemaOf, ValidationError } from 'yup';\nimport { FieldError } from './field-error';\n\nexport class ModelValidator<T> {\n private schema: SchemaOf<T>;\n constructor(modelSchema: SchemaOf<T>) {\n this.schema = modelSchema;\n }\n\n validate<T>(model: T): Promise<FieldError[]> {\n return this.schema\n .validate(model, { abortEarly: false })\n .then(() => {\n return [];\n })\n .catch((e: ValidationError) => {\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\n });\n }\n}\n","export enum PropertyType {\n string,\n number,\n array,\n boolean\n}\n","import 'reflect-metadata';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\nconst METADATA_KEY = 'custom:muziehdesign:annotations';\n\nexport interface StringSchemaOptions extends SchemaOptions {\n length?: number;\n minimum?: number;\n maximum?: number;\n pattern?: RegExp;\n}\nexport interface SchemaOptions {\n required?: boolean;\n}\n\nexport function StringSchema(options?: StringSchemaOptions) {\n return function (target: Object, propertyKey: string | Symbol) {\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\n name: propertyKey,\n type: PropertyType.string,\n options: options,\n });\n // TODO: define on property\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\n };\n}\n\nexport interface BooleanSchemaOptions extends SchemaOptions {\n equals?: boolean;\n}\n\nexport function BooleanSchema(options?: BooleanSchemaOptions) {\n return function (target: Object, propertyKey: string | Symbol) {\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\n name: propertyKey,\n type: PropertyType.boolean,\n options: options,\n });\n // TODO: define on property\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\n };\n}\n\nexport interface AnnotationOptions {\n errorMessage?: string;\n}\n\nexport interface PropertyAnnotation<T> {\n type: string;\n errorMessage?: string;\n specification: T;\n}\n\nexport interface RequiredAnnotation {}\n\nexport interface EqualsValueAnnotation {\n value?: any;\n}\n\nexport interface PropertyAnnotations extends AnnotationOptions {\n type: string;\n}\n\nexport function Required(options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push({ type: Required.name, errorMessage: options?.errorMessage });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n\nexport function Equals<T>(value: T, options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push(<PropertyAnnotation<EqualsValueAnnotation>>{ type: Equals.name, errorMessage: options?.errorMessage, specification: { value: value } });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n\nexport function Email(options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push(<PropertyAnnotation<void>>{ type: Email.name, errorMessage: options?.errorMessage });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';\n","import { Injectable } from '@angular/core';\nimport { boolean, mixed, object, SchemaOf, string } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { BooleanSchemaOptions, Equals, EqualsValueAnnotation, PropertyAnnotation, PropertyAnnotations, Required, SchemaOptions, StringSchemaOptions } from './string-schema';\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\nimport { ObjectShape } from 'yup/lib/object';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelSchemaFactory {\n constructor() {}\n\n build<T>(model: T): ModelValidator<T> {\n const metadata: Map<string, PropertyAnnotation<any>[]> = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\n metadata.forEach((v, k, map) => {\n v.forEach((annotation) => {\n if (annotation.type == Required.name) {\n shape[k] = mixed().test('required', annotation.errorMessage || 'invalid default message', (v) => v && v != '');\n } else if (annotation.type == Equals.name) {\n const a = annotation as PropertyAnnotation<EqualsValueAnnotation>;\n shape[k] = mixed().test('equals', annotation.errorMessage || 'invalid must be equal', (v) => v === a.specification.value);\n }\n });\n });\n /*metadata.forEach((element) => {\n if (element.type == PropertyType.string) {\n shape[element.name] = this.buildStringSchema(element.options || {});\n } else if (element.type == PropertyType.boolean) {\n shape[element.name] = this.buildBooleanSchema(element.options || {});\n }\n });*/\n const schema = object(shape) as SchemaOf<T>;\n return new ModelValidator(schema);\n }\n\n private buildStringSchema(options: StringSchemaOptions) {\n let stringSchema = string();\n if (options.required) {\n stringSchema = stringSchema.required();\n }\n if (options.length) {\n stringSchema = stringSchema.length(options.length);\n }\n if (options.minimum) {\n stringSchema = stringSchema.min(options.minimum);\n }\n if (options.maximum) {\n stringSchema = stringSchema.max(options.maximum);\n }\n\n return stringSchema;\n }\n\n private buildBooleanSchema(options: BooleanSchemaOptions) {\n let booleanSchema = boolean().required();\n if (options.equals) {\n return booleanSchema.test({\n name: 'mustBe',\n test: (value) => value == options.equals,\n });\n }\n\n return booleanSchema;\n }\n}\n","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\n","import { Injectable, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NgForm, ValidationErrors } from '@angular/forms';\nimport { BehaviorSubject, filter, from, switchMap } from 'rxjs';\nimport { FieldError } from './field-error';\nimport { ModelSchemaFactory } from './model-schema.factory';\nimport { ModelValidator } from './model-validator';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFormModelStateFactory {\n constructor(private factory: ModelSchemaFactory) {}\n\n create<T>(form: NgForm, model: T) {\n const modelState = new NgFormModelState<T>(form, this.factory.build(model), model);\n return modelState;\n }\n}\n\nexport class NgFormModelState<T> {\n private errors: BehaviorSubject<FieldError[]> = new BehaviorSubject<FieldError[]>([]);\n public errors$ = this.errors.asObservable();\n\n constructor(private form: NgForm, private modelValidator: ModelValidator<T>, private model: T) {\n this.form.form.valueChanges\n .pipe(\n switchMap(async (x) => {\n return from(this.runValidations());\n })\n )\n .subscribe();\n\n this.errors$.subscribe((list) => {\n console.log('errored', list);\n Object.keys(this.form.form.controls).forEach((key) => {\n let validationErrors = <ValidationErrors>{ };\n list.filter((e) => e.path == key).forEach((v)=>validationErrors[v.type] = v.message);\n this.form.form.controls[key].setErrors(validationErrors);\n console.log('validation errors: ', validationErrors);\n });\n });\n }\n\n isValid(): boolean {\n return this.errors.value.length == 0;\n }\n\n setErrors(errors: FieldError[]) {\n this.errors.next(errors);\n }\n\n validate(): Promise<boolean> {\n return this.runValidations().then((x) => true);\n }\n\n private async runValidations(): Promise<void> {\n console.log('validating', this.model);\n const errors = await this.modelValidator.validate(this.model);\n this.errors.next(errors);\n }\n}\n","/*\n * Public API Surface of forms\n */\nexport * from './lib/field-error';\nexport * from './lib/model-schema.factory';\nexport * from './lib/model-validator';\nexport * from './lib/string-schema';\nexport * from './lib/forms.module';\nexport * from './lib/ng-form-model-state.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModelSchemaFactory"],"mappings":";;;;;;;MAGa,cAAc,CAAA;AAEzB,IAAA,WAAA,CAAY,WAAwB,EAAA;AAClC,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;KAC3B;AAED,IAAA,QAAQ,CAAI,KAAQ,EAAA;QAClB,OAAO,IAAI,CAAC,MAAM;aACf,QAAQ,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;aACtC,IAAI,CAAC,MAAK;AACT,YAAA,OAAO,EAAE,CAAC;AACZ,SAAC,CAAC;AACD,aAAA,KAAK,CAAC,CAAC,CAAkB,KAAI;AAC5B,YAAA,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,MAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC;AAC5G,SAAC,CAAC,CAAC;KACN;AACF;;ACnBD,IAAY,YAKX,CAAA;AALD,CAAA,UAAY,YAAY,EAAA;IACtB,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;IACN,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAM,CAAA;IACN,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;IACL,YAAA,CAAA,YAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAO,CAAA;AACT,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA;;ACDD,MAAM,YAAY,GAAG,iCAAiC,CAAC;AAYjD,SAAU,YAAY,CAAC,OAA6B,EAAA;IACxD,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAA8C;AACzD,YAAA,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,YAAY,CAAC,MAAM;AACzB,YAAA,OAAO,EAAE,OAAO;AACjB,SAAA,CAAC,CAAC;;QAEH,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzE,KAAC,CAAC;AACJ,CAAC;AAMK,SAAU,aAAa,CAAC,OAA8B,EAAA;IAC1D,OAAO,UAAU,MAAc,EAAE,WAA4B,EAAA;AAC3D,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAA8C;AACzD,YAAA,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,YAAY,CAAC,OAAO;AAC1B,YAAA,OAAO,EAAE,OAAO;AACjB,SAAA,CAAC,CAAC;;QAEH,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzE,KAAC,CAAC;AACJ,CAAC;AAsBK,SAAU,QAAQ,CAAC,OAA2B,EAAA;IAClD,OAAO,UAAU,MAAc,EAAE,WAAmB,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAuC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAqC,CAAC;QAC/I,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,YAAY,EAAE,CAAC,CAAC;AAC/E,QAAA,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzD,KAAC,CAAC;AACJ,CAAC;AAEe,SAAA,MAAM,CAAI,KAAQ,EAAE,OAA2B,EAAA;IAC7D,OAAO,UAAU,MAAc,EAAE,WAAmB,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAuC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAqC,CAAC;QAC/I,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACpD,QAAA,WAAW,CAAC,IAAI,CAA4C,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,YAAY,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACzJ,QAAA,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzD,KAAC,CAAC;AACJ,CAAC;AAEK,SAAU,KAAK,CAAC,OAA2B,EAAA;IAC/C,OAAO,UAAU,MAAc,EAAE,WAAmB,EAAA;AAClD,QAAA,MAAM,QAAQ,GAAuC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,EAAqC,CAAC;QAC/I,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpD,WAAW,CAAC,IAAI,CAA2B,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,YAAY,EAAE,CAAC,CAAC;AACtG,QAAA,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzD,KAAC,CAAC;AACJ;;AC9FO,MAAM,yBAAyB,GAAG,iCAAiC;;MCY7D,kBAAkB,CAAA;AAC7B,IAAA,WAAA,GAAA,GAAgB;AAEhB,IAAA,KAAK,CAAI,KAAQ,EAAA;QACf,MAAM,QAAQ,GAA2C,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAC/G,IAAI,KAAK,GAAgB,EAAE,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,KAAI;AAC7B,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,KAAI;AACvB,gBAAA,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;AACpC,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,IAAI,yBAAyB,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChH,iBAAA;AAAM,qBAAA,IAAI,UAAU,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE;oBACzC,MAAM,CAAC,GAAG,UAAuD,CAAC;AAClE,oBAAA,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,YAAY,IAAI,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC3H,iBAAA;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AACH;;;;;;AAMK;AACL,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAgB,CAAC;AAC5C,QAAA,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;KACnC;AAEO,IAAA,iBAAiB,CAAC,OAA4B,EAAA;AACpD,QAAA,IAAI,YAAY,GAAG,MAAM,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,QAAQ,EAAE;AACpB,YAAA,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;AACxC,SAAA;QACD,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACpD,SAAA;QACD,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClD,SAAA;QACD,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClD,SAAA;AAED,QAAA,OAAO,YAAY,CAAC;KACrB;AAEO,IAAA,kBAAkB,CAAC,OAA6B,EAAA;AACtD,QAAA,IAAI,aAAa,GAAG,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,OAAO,aAAa,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM;AACzC,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,OAAO,aAAa,CAAC;KACtB;;+GAvDU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;;MCJY,WAAW,CAAA;;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,CAAA,CAAA;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,SAAS,EAAE,EAAE;iBACd,CAAA;;;MCIY,uBAAuB,CAAA;AAClC,IAAA,WAAA,CAAoB,OAA2B,EAAA;AAA3B,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAoB;KAAI;IAEnD,MAAM,CAAI,IAAY,EAAE,KAAQ,EAAA;AAC9B,QAAA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAI,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACnF,QAAA,OAAO,UAAU,CAAC;KACnB;;oHANU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;2FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;iBACnB,CAAA;;MAUY,gBAAgB,CAAA;AAI3B,IAAA,WAAA,CAAoB,IAAY,EAAU,cAAiC,EAAU,KAAQ,EAAA;AAAzE,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;AAAU,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAmB;AAAU,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAG;QAHrF,IAAA,CAAA,MAAM,GAAkC,IAAI,eAAe,CAAe,EAAE,CAAC,CAAC;QAC/E,IAAA,CAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;AAG1C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY;AACxB,aAAA,IAAI,CACH,SAAS,CAAC,CAAO,CAAC,KAAI,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACpB,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;SACpC,CAAA,CAAC,CACH;AACA,aAAA,SAAS,EAAE,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACnD,IAAI,gBAAgB,GAAqB,EAAG,CAAC;AAC7C,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;AACrF,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AACzD,gBAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;AACvD,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;IAED,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;KACtC;AAED,IAAA,SAAS,CAAC,MAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1B;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;KAChD;IAEa,cAAc,GAAA;;YAC1B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC1B,CAAA,CAAA;AAAA,KAAA;AACF;;AC5DD;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"muziehdesign-forms.mjs","sources":["../../../../projects/muziehdesign/forms/src/lib/model-validator.ts","../../../../projects/muziehdesign/forms/src/lib/constants.ts","../../../../projects/muziehdesign/forms/src/lib/type-annotations.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.ts","../../../../projects/muziehdesign/forms/src/lib/ng-form-model-state.service.ts","../../../../projects/muziehdesign/forms/src/public-api.ts","../../../../projects/muziehdesign/forms/src/muziehdesign-forms.ts"],"sourcesContent":["import { SchemaOf, ValidationError } from 'yup';\nimport { FieldError } from './field-error';\n\nexport class ModelValidator<T> {\n private schema: SchemaOf<T>;\n constructor(modelSchema: SchemaOf<T>) {\n this.schema = modelSchema;\n }\n\n validate<T>(model: T): Promise<FieldError[]> {\n return this.schema\n .validate(model, { abortEarly: false })\n .then(() => {\n return [];\n })\n .catch((e: ValidationError) => {\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\n });\n }\n}\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';\n","import 'reflect-metadata';\nimport { BooleanSchema, SchemaOf, StringSchema } from 'yup';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\nconst METADATA_KEY = 'custom:muziehdesign:annotations';\n\nexport interface ConstraintAnnotations {\n constraintType: string;\n}\n\n/*\nexport interface OfValuesAnnotations extends ConstraintAnnotations {\n values: [];\n message?: string;\n}*/\n\nexport interface StringTypeAnnotations extends ConstraintAnnotations {\n required?: RequiredAnnotation;\n length: LengthAnnotation;\n}\n\nexport interface BooleanTypeAnnotations extends ConstraintAnnotations {\n required?: RequiredAnnotation;\n equals?: EqualsAnnotation<boolean>;\n}\n\nexport interface ValidationAnnotation {\n message?: string;\n}\n\nexport interface RequiredAnnotation extends ValidationAnnotation {\n required: boolean;\n}\n\nexport interface LengthAnnotation extends ValidationAnnotation {\n length: number;\n}\n\nexport interface OfValuesAnnotation extends ValidationAnnotation {\n values: [];\n}\n\nexport interface EqualsAnnotation<T> extends ValidationAnnotation {\n equals: T;\n}\n\nconst registerMetadata = (target: Object, propertyKey: string, constraint: ConstraintAnnotations) => {\n const metadata: Map<string, any> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, any>();\n metadata.set(propertyKey, constraint);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n};\n\n/*\nexport function OfValues<T>(values: T[], message?: string) {\n return function (target: Object, propertyKey: string) {\n const o = { values: values, message: message } as OfValuesAnnotations;\n o.constraintType = OfValues.name;\n registerMetadata(target, propertyKey, o);\n };\n}*/\n\nexport function StringType(...annotations: { [key: string]: ValidationAnnotation }[]) {\n return function (target: Object, propertyKey: string) {\n const o = Object.assign({}, ...annotations) as StringTypeAnnotations;\n o.constraintType = StringType.name;\n registerMetadata(target, propertyKey, o);\n };\n}\n\nexport function BooleanType(...annotations: { [key: string]: ValidationAnnotation }[]) {\n return function (target: Object, propertyKey: string) {\n const o = Object.assign({}, ...annotations) as BooleanTypeAnnotations;\n o.constraintType = BooleanType.name;\n registerMetadata(target, propertyKey, o);\n };\n}\n\nexport function required(message?: string): { [key: string]: RequiredAnnotation } {\n return { required: { required: true, message: message } };\n}\n\nexport function length(length: number, message?: string): { [key: string]: LengthAnnotation } {\n return { length: { length: length, message: message } };\n}\n\nexport function ofValues(values: [], message?: string): { [key: string]: OfValuesAnnotation } {\n return { ofValues: { values: values, message: message } };\n}\n\nexport function equals<T>(value: T, message?: string) : { [key: string]: EqualsAnnotation<T> } {\n return { equals: { equals: value, message: message } };\n}\n","import { Injectable } from '@angular/core';\nimport { object, SchemaOf } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\nimport { ObjectShape } from 'yup/lib/object';\nimport { BooleanType, BooleanTypeAnnotations, ConstraintAnnotations, StringType, StringTypeAnnotations } from './type-annotations';\nimport * as Yup from 'yup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelSchemaFactory {\n constructor() {}\n\n build<T>(model: T): ModelValidator<T> {\n const metadata: Map<string, ConstraintAnnotations> = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\n metadata.forEach((value, key) => {\n if (value.constraintType == StringType.name) {\n shape[key] = this.buildStringSchema(value as StringTypeAnnotations);\n } else if (value.constraintType == BooleanType.name) {\n shape[key] = this.buildBooleanSchema(value as BooleanTypeAnnotations);\n }\n });\n const schema = object(shape) as SchemaOf<T>;\n return new ModelValidator(schema);\n }\n\n private buildStringSchema(options: StringTypeAnnotations) {\n let schema = Yup.string();\n if (options.required) {\n schema = schema.required(options.required.message);\n }\n if (options.length) {\n schema = schema.length(options.length.length, options.length.message);\n }\n\n return schema;\n }\n\n private buildBooleanSchema(options: BooleanTypeAnnotations) {\n let schema = Yup.boolean();\n if (options.required) {\n schema = schema.required(options.required.message);\n }\n if (options.equals) {\n if (options.equals.equals) {\n schema = schema.isTrue(options.equals.message);\n } else {\n schema = schema.isFalse(options.equals.message);\n }\n }\n\n return schema;\n }\n}\n","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\n","import { Injectable, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NgForm, ValidationErrors } from '@angular/forms';\nimport { BehaviorSubject, filter, from, switchMap } from 'rxjs';\nimport { FieldError } from './field-error';\nimport { ModelSchemaFactory } from './model-schema.factory';\nimport { ModelValidator } from './model-validator';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFormModelStateFactory {\n constructor(private factory: ModelSchemaFactory) {}\n\n create<T>(form: NgForm, model: T) {\n const modelState = new NgFormModelState<T>(form, this.factory.build(model), model);\n return modelState;\n }\n}\n\nexport class NgFormModelState<T> {\n private errors: BehaviorSubject<FieldError[]> = new BehaviorSubject<FieldError[]>([]);\n public errors$ = this.errors.asObservable();\n\n constructor(private form: NgForm, private modelValidator: ModelValidator<T>, private model: T) {\n this.form.form.valueChanges\n .pipe(\n switchMap(async (x) => {\n return from(this.runValidations());\n })\n )\n .subscribe();\n\n this.errors$.subscribe((list) => {\n console.log('all errors', list);\n\n const grouped = list.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map<string, FieldError[]>());\n\n grouped.forEach((value, key) => {\n let validationErrors = <ValidationErrors>{};\n value.forEach((v) => (validationErrors[v.type] = v.message));\n this.form.controls[key].setErrors(validationErrors);\n });\n });\n }\n\n isValid(): boolean {\n return this.errors.value.length == 0;\n }\n\n setErrors(errors: FieldError[]) {\n this.errors.next(errors);\n }\n\n validate(): Promise<boolean> {\n return this.runValidations().then((x) => true);\n }\n\n private async runValidations(): Promise<void> {\n console.log('validating', this.model);\n const errors = await this.modelValidator.validate(this.model);\n this.errors.next(errors);\n }\n}\n","/*\n * Public API Surface of forms\n */\nexport * from './lib/field-error';\nexport * from './lib/model-schema.factory';\nexport * from './lib/model-validator';\nexport * from './lib/type-annotations';\nexport * from './lib/forms.module';\nexport * from './lib/ng-form-model-state.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModelSchemaFactory"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, NgModule } from '@angular/core';
3
- import { mixed, object, string, boolean } from 'yup';
3
+ import * as Yup from 'yup';
4
+ import { object } from 'yup';
4
5
  import 'reflect-metadata';
5
6
  import { BehaviorSubject, switchMap, from } from 'rxjs';
6
7
 
@@ -20,120 +21,89 @@ class ModelValidator {
20
21
  }
21
22
  }
22
23
 
23
- var PropertyType;
24
- (function (PropertyType) {
25
- PropertyType[PropertyType["string"] = 0] = "string";
26
- PropertyType[PropertyType["number"] = 1] = "number";
27
- PropertyType[PropertyType["array"] = 2] = "array";
28
- PropertyType[PropertyType["boolean"] = 3] = "boolean";
29
- })(PropertyType || (PropertyType = {}));
24
+ const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';
30
25
 
31
26
  const METADATA_KEY = 'custom:muziehdesign:annotations';
32
- function StringSchema(options) {
27
+ const registerMetadata = (target, propertyKey, constraint) => {
28
+ const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
29
+ metadata.set(propertyKey, constraint);
30
+ Reflect.defineMetadata(METADATA_KEY, metadata, target);
31
+ };
32
+ /*
33
+ export function OfValues<T>(values: T[], message?: string) {
34
+ return function (target: Object, propertyKey: string) {
35
+ const o = { values: values, message: message } as OfValuesAnnotations;
36
+ o.constraintType = OfValues.name;
37
+ registerMetadata(target, propertyKey, o);
38
+ };
39
+ }*/
40
+ function StringType(...annotations) {
33
41
  return function (target, propertyKey) {
34
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
35
- metadata.push({
36
- name: propertyKey,
37
- type: PropertyType.string,
38
- options: options,
39
- });
40
- // TODO: define on property
41
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
42
+ const o = Object.assign({}, ...annotations);
43
+ o.constraintType = StringType.name;
44
+ registerMetadata(target, propertyKey, o);
42
45
  };
43
46
  }
44
- function BooleanSchema(options) {
47
+ function BooleanType(...annotations) {
45
48
  return function (target, propertyKey) {
46
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
47
- metadata.push({
48
- name: propertyKey,
49
- type: PropertyType.boolean,
50
- options: options,
51
- });
52
- // TODO: define on property
53
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
49
+ const o = Object.assign({}, ...annotations);
50
+ o.constraintType = BooleanType.name;
51
+ registerMetadata(target, propertyKey, o);
54
52
  };
55
53
  }
56
- function Required(options) {
57
- return function (target, propertyKey) {
58
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
59
- const annotations = metadata.get(propertyKey) || [];
60
- annotations.push({ type: Required.name, errorMessage: options?.errorMessage });
61
- metadata.set(propertyKey, annotations);
62
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
63
- };
54
+ function required(message) {
55
+ return { required: { required: true, message: message } };
64
56
  }
65
- function Equals(value, options) {
66
- return function (target, propertyKey) {
67
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
68
- const annotations = metadata.get(propertyKey) || [];
69
- annotations.push({ type: Equals.name, errorMessage: options?.errorMessage, specification: { value: value } });
70
- metadata.set(propertyKey, annotations);
71
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
72
- };
57
+ function length(length, message) {
58
+ return { length: { length: length, message: message } };
73
59
  }
74
- function Email(options) {
75
- return function (target, propertyKey) {
76
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
77
- const annotations = metadata.get(propertyKey) || [];
78
- annotations.push({ type: Email.name, errorMessage: options?.errorMessage });
79
- metadata.set(propertyKey, annotations);
80
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
81
- };
60
+ function ofValues(values, message) {
61
+ return { ofValues: { values: values, message: message } };
62
+ }
63
+ function equals(value, message) {
64
+ return { equals: { equals: value, message: message } };
82
65
  }
83
-
84
- const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';
85
66
 
86
67
  class ModelSchemaFactory {
87
68
  constructor() { }
88
69
  build(model) {
89
70
  const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
90
71
  let shape = {};
91
- metadata.forEach((v, k, map) => {
92
- v.forEach((annotation) => {
93
- if (annotation.type == Required.name) {
94
- shape[k] = mixed().test('required', annotation.errorMessage || 'invalid default message', (v) => v && v != '');
95
- }
96
- else if (annotation.type == Equals.name) {
97
- const a = annotation;
98
- shape[k] = mixed().test('equals', annotation.errorMessage || 'invalid must be equal', (v) => v === a.specification.value);
99
- }
100
- });
72
+ metadata.forEach((value, key) => {
73
+ if (value.constraintType == StringType.name) {
74
+ shape[key] = this.buildStringSchema(value);
75
+ }
76
+ else if (value.constraintType == BooleanType.name) {
77
+ shape[key] = this.buildBooleanSchema(value);
78
+ }
101
79
  });
102
- /*metadata.forEach((element) => {
103
- if (element.type == PropertyType.string) {
104
- shape[element.name] = this.buildStringSchema(element.options || {});
105
- } else if (element.type == PropertyType.boolean) {
106
- shape[element.name] = this.buildBooleanSchema(element.options || {});
107
- }
108
- });*/
109
80
  const schema = object(shape);
110
81
  return new ModelValidator(schema);
111
82
  }
112
83
  buildStringSchema(options) {
113
- let stringSchema = string();
84
+ let schema = Yup.string();
114
85
  if (options.required) {
115
- stringSchema = stringSchema.required();
86
+ schema = schema.required(options.required.message);
116
87
  }
117
88
  if (options.length) {
118
- stringSchema = stringSchema.length(options.length);
119
- }
120
- if (options.minimum) {
121
- stringSchema = stringSchema.min(options.minimum);
89
+ schema = schema.length(options.length.length, options.length.message);
122
90
  }
123
- if (options.maximum) {
124
- stringSchema = stringSchema.max(options.maximum);
125
- }
126
- return stringSchema;
91
+ return schema;
127
92
  }
128
93
  buildBooleanSchema(options) {
129
- let booleanSchema = boolean().required();
94
+ let schema = Yup.boolean();
95
+ if (options.required) {
96
+ schema = schema.required(options.required.message);
97
+ }
130
98
  if (options.equals) {
131
- return booleanSchema.test({
132
- name: 'mustBe',
133
- test: (value) => value == options.equals,
134
- });
99
+ if (options.equals.equals) {
100
+ schema = schema.isTrue(options.equals.message);
101
+ }
102
+ else {
103
+ schema = schema.isFalse(options.equals.message);
104
+ }
135
105
  }
136
- return booleanSchema;
106
+ return schema;
137
107
  }
138
108
  }
139
109
  ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -187,12 +157,12 @@ class NgFormModelState {
187
157
  }))
188
158
  .subscribe();
189
159
  this.errors$.subscribe((list) => {
190
- console.log('errored', list);
191
- Object.keys(this.form.form.controls).forEach((key) => {
160
+ console.log('all errors', list);
161
+ const grouped = list.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map());
162
+ grouped.forEach((value, key) => {
192
163
  let validationErrors = {};
193
- list.filter((e) => e.path == key).forEach((v) => validationErrors[v.type] = v.message);
194
- this.form.form.controls[key].setErrors(validationErrors);
195
- console.log('validation errors: ', validationErrors);
164
+ value.forEach((v) => (validationErrors[v.type] = v.message));
165
+ this.form.controls[key].setErrors(validationErrors);
196
166
  });
197
167
  });
198
168
  }
@@ -220,5 +190,5 @@ class NgFormModelState {
220
190
  * Generated bundle index. Do not edit.
221
191
  */
222
192
 
223
- export { BooleanSchema, Email, Equals, FormsModule, ModelSchemaFactory, ModelValidator, NgFormModelState, NgFormModelStateFactory, Required, StringSchema };
193
+ export { BooleanType, FormsModule, ModelSchemaFactory, ModelValidator, NgFormModelState, NgFormModelStateFactory, StringType, equals, length, ofValues, required };
224
194
  //# sourceMappingURL=muziehdesign-forms.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"muziehdesign-forms.mjs","sources":["../../../../projects/muziehdesign/forms/src/lib/model-validator.ts","../../../../projects/muziehdesign/forms/src/lib/property-type.enum.ts","../../../../projects/muziehdesign/forms/src/lib/string-schema.ts","../../../../projects/muziehdesign/forms/src/lib/constants.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.ts","../../../../projects/muziehdesign/forms/src/lib/ng-form-model-state.service.ts","../../../../projects/muziehdesign/forms/src/public-api.ts","../../../../projects/muziehdesign/forms/src/muziehdesign-forms.ts"],"sourcesContent":["import { SchemaOf, ValidationError } from 'yup';\nimport { FieldError } from './field-error';\n\nexport class ModelValidator<T> {\n private schema: SchemaOf<T>;\n constructor(modelSchema: SchemaOf<T>) {\n this.schema = modelSchema;\n }\n\n validate<T>(model: T): Promise<FieldError[]> {\n return this.schema\n .validate(model, { abortEarly: false })\n .then(() => {\n return [];\n })\n .catch((e: ValidationError) => {\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\n });\n }\n}\n","export enum PropertyType {\n string,\n number,\n array,\n boolean\n}\n","import 'reflect-metadata';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\nconst METADATA_KEY = 'custom:muziehdesign:annotations';\n\nexport interface StringSchemaOptions extends SchemaOptions {\n length?: number;\n minimum?: number;\n maximum?: number;\n pattern?: RegExp;\n}\nexport interface SchemaOptions {\n required?: boolean;\n}\n\nexport function StringSchema(options?: StringSchemaOptions) {\n return function (target: Object, propertyKey: string | Symbol) {\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\n name: propertyKey,\n type: PropertyType.string,\n options: options,\n });\n // TODO: define on property\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\n };\n}\n\nexport interface BooleanSchemaOptions extends SchemaOptions {\n equals?: boolean;\n}\n\nexport function BooleanSchema(options?: BooleanSchemaOptions) {\n return function (target: Object, propertyKey: string | Symbol) {\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\n name: propertyKey,\n type: PropertyType.boolean,\n options: options,\n });\n // TODO: define on property\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\n };\n}\n\nexport interface AnnotationOptions {\n errorMessage?: string;\n}\n\nexport interface PropertyAnnotation<T> {\n type: string;\n errorMessage?: string;\n specification: T;\n}\n\nexport interface RequiredAnnotation {}\n\nexport interface EqualsValueAnnotation {\n value?: any;\n}\n\nexport interface PropertyAnnotations extends AnnotationOptions {\n type: string;\n}\n\nexport function Required(options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push({ type: Required.name, errorMessage: options?.errorMessage });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n\nexport function Equals<T>(value: T, options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push(<PropertyAnnotation<EqualsValueAnnotation>>{ type: Equals.name, errorMessage: options?.errorMessage, specification: { value: value } });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n\nexport function Email(options?: AnnotationOptions) {\n return function (target: Object, propertyKey: string) {\n const metadata: Map<string, PropertyAnnotations[]> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, PropertyAnnotation<any>[]>();\n const annotations = metadata.get(propertyKey) || [];\n annotations.push(<PropertyAnnotation<void>>{ type: Email.name, errorMessage: options?.errorMessage });\n metadata.set(propertyKey, annotations);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n };\n}\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';\n","import { Injectable } from '@angular/core';\nimport { boolean, mixed, object, SchemaOf, string } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { BooleanSchemaOptions, Equals, EqualsValueAnnotation, PropertyAnnotation, PropertyAnnotations, Required, SchemaOptions, StringSchemaOptions } from './string-schema';\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\nimport { ObjectShape } from 'yup/lib/object';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelSchemaFactory {\n constructor() {}\n\n build<T>(model: T): ModelValidator<T> {\n const metadata: Map<string, PropertyAnnotation<any>[]> = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\n metadata.forEach((v, k, map) => {\n v.forEach((annotation) => {\n if (annotation.type == Required.name) {\n shape[k] = mixed().test('required', annotation.errorMessage || 'invalid default message', (v) => v && v != '');\n } else if (annotation.type == Equals.name) {\n const a = annotation as PropertyAnnotation<EqualsValueAnnotation>;\n shape[k] = mixed().test('equals', annotation.errorMessage || 'invalid must be equal', (v) => v === a.specification.value);\n }\n });\n });\n /*metadata.forEach((element) => {\n if (element.type == PropertyType.string) {\n shape[element.name] = this.buildStringSchema(element.options || {});\n } else if (element.type == PropertyType.boolean) {\n shape[element.name] = this.buildBooleanSchema(element.options || {});\n }\n });*/\n const schema = object(shape) as SchemaOf<T>;\n return new ModelValidator(schema);\n }\n\n private buildStringSchema(options: StringSchemaOptions) {\n let stringSchema = string();\n if (options.required) {\n stringSchema = stringSchema.required();\n }\n if (options.length) {\n stringSchema = stringSchema.length(options.length);\n }\n if (options.minimum) {\n stringSchema = stringSchema.min(options.minimum);\n }\n if (options.maximum) {\n stringSchema = stringSchema.max(options.maximum);\n }\n\n return stringSchema;\n }\n\n private buildBooleanSchema(options: BooleanSchemaOptions) {\n let booleanSchema = boolean().required();\n if (options.equals) {\n return booleanSchema.test({\n name: 'mustBe',\n test: (value) => value == options.equals,\n });\n }\n\n return booleanSchema;\n }\n}\n","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\n","import { Injectable, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NgForm, ValidationErrors } from '@angular/forms';\nimport { BehaviorSubject, filter, from, switchMap } from 'rxjs';\nimport { FieldError } from './field-error';\nimport { ModelSchemaFactory } from './model-schema.factory';\nimport { ModelValidator } from './model-validator';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFormModelStateFactory {\n constructor(private factory: ModelSchemaFactory) {}\n\n create<T>(form: NgForm, model: T) {\n const modelState = new NgFormModelState<T>(form, this.factory.build(model), model);\n return modelState;\n }\n}\n\nexport class NgFormModelState<T> {\n private errors: BehaviorSubject<FieldError[]> = new BehaviorSubject<FieldError[]>([]);\n public errors$ = this.errors.asObservable();\n\n constructor(private form: NgForm, private modelValidator: ModelValidator<T>, private model: T) {\n this.form.form.valueChanges\n .pipe(\n switchMap(async (x) => {\n return from(this.runValidations());\n })\n )\n .subscribe();\n\n this.errors$.subscribe((list) => {\n console.log('errored', list);\n Object.keys(this.form.form.controls).forEach((key) => {\n let validationErrors = <ValidationErrors>{ };\n list.filter((e) => e.path == key).forEach((v)=>validationErrors[v.type] = v.message);\n this.form.form.controls[key].setErrors(validationErrors);\n console.log('validation errors: ', validationErrors);\n });\n });\n }\n\n isValid(): boolean {\n return this.errors.value.length == 0;\n }\n\n setErrors(errors: FieldError[]) {\n this.errors.next(errors);\n }\n\n validate(): Promise<boolean> {\n return this.runValidations().then((x) => true);\n }\n\n private async runValidations(): Promise<void> {\n console.log('validating', this.model);\n const errors = await this.modelValidator.validate(this.model);\n this.errors.next(errors);\n }\n}\n","/*\n * Public API Surface of forms\n */\nexport * from './lib/field-error';\nexport * from './lib/model-schema.factory';\nexport * from './lib/model-validator';\nexport * from './lib/string-schema';\nexport * from './lib/forms.module';\nexport * from './lib/ng-form-model-state.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModelSchemaFactory"],"mappings":"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"}
1
+ {"version":3,"file":"muziehdesign-forms.mjs","sources":["../../../../projects/muziehdesign/forms/src/lib/model-validator.ts","../../../../projects/muziehdesign/forms/src/lib/constants.ts","../../../../projects/muziehdesign/forms/src/lib/type-annotations.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.ts","../../../../projects/muziehdesign/forms/src/lib/ng-form-model-state.service.ts","../../../../projects/muziehdesign/forms/src/public-api.ts","../../../../projects/muziehdesign/forms/src/muziehdesign-forms.ts"],"sourcesContent":["import { SchemaOf, ValidationError } from 'yup';\nimport { FieldError } from './field-error';\n\nexport class ModelValidator<T> {\n private schema: SchemaOf<T>;\n constructor(modelSchema: SchemaOf<T>) {\n this.schema = modelSchema;\n }\n\n validate<T>(model: T): Promise<FieldError[]> {\n return this.schema\n .validate(model, { abortEarly: false })\n .then(() => {\n return [];\n })\n .catch((e: ValidationError) => {\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\n });\n }\n}\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';\n","import 'reflect-metadata';\nimport { BooleanSchema, SchemaOf, StringSchema } from 'yup';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\n\nconst METADATA_KEY = 'custom:muziehdesign:annotations';\n\nexport interface ConstraintAnnotations {\n constraintType: string;\n}\n\n/*\nexport interface OfValuesAnnotations extends ConstraintAnnotations {\n values: [];\n message?: string;\n}*/\n\nexport interface StringTypeAnnotations extends ConstraintAnnotations {\n required?: RequiredAnnotation;\n length: LengthAnnotation;\n}\n\nexport interface BooleanTypeAnnotations extends ConstraintAnnotations {\n required?: RequiredAnnotation;\n equals?: EqualsAnnotation<boolean>;\n}\n\nexport interface ValidationAnnotation {\n message?: string;\n}\n\nexport interface RequiredAnnotation extends ValidationAnnotation {\n required: boolean;\n}\n\nexport interface LengthAnnotation extends ValidationAnnotation {\n length: number;\n}\n\nexport interface OfValuesAnnotation extends ValidationAnnotation {\n values: [];\n}\n\nexport interface EqualsAnnotation<T> extends ValidationAnnotation {\n equals: T;\n}\n\nconst registerMetadata = (target: Object, propertyKey: string, constraint: ConstraintAnnotations) => {\n const metadata: Map<string, any> = Reflect.getMetadata(METADATA_KEY, target) || new Map<string, any>();\n metadata.set(propertyKey, constraint);\n Reflect.defineMetadata(METADATA_KEY, metadata, target);\n};\n\n/*\nexport function OfValues<T>(values: T[], message?: string) {\n return function (target: Object, propertyKey: string) {\n const o = { values: values, message: message } as OfValuesAnnotations;\n o.constraintType = OfValues.name;\n registerMetadata(target, propertyKey, o);\n };\n}*/\n\nexport function StringType(...annotations: { [key: string]: ValidationAnnotation }[]) {\n return function (target: Object, propertyKey: string) {\n const o = Object.assign({}, ...annotations) as StringTypeAnnotations;\n o.constraintType = StringType.name;\n registerMetadata(target, propertyKey, o);\n };\n}\n\nexport function BooleanType(...annotations: { [key: string]: ValidationAnnotation }[]) {\n return function (target: Object, propertyKey: string) {\n const o = Object.assign({}, ...annotations) as BooleanTypeAnnotations;\n o.constraintType = BooleanType.name;\n registerMetadata(target, propertyKey, o);\n };\n}\n\nexport function required(message?: string): { [key: string]: RequiredAnnotation } {\n return { required: { required: true, message: message } };\n}\n\nexport function length(length: number, message?: string): { [key: string]: LengthAnnotation } {\n return { length: { length: length, message: message } };\n}\n\nexport function ofValues(values: [], message?: string): { [key: string]: OfValuesAnnotation } {\n return { ofValues: { values: values, message: message } };\n}\n\nexport function equals<T>(value: T, message?: string) : { [key: string]: EqualsAnnotation<T> } {\n return { equals: { equals: value, message: message } };\n}\n","import { Injectable } from '@angular/core';\nimport { object, SchemaOf } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\nimport { ObjectShape } from 'yup/lib/object';\nimport { BooleanType, BooleanTypeAnnotations, ConstraintAnnotations, StringType, StringTypeAnnotations } from './type-annotations';\nimport * as Yup from 'yup';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModelSchemaFactory {\n constructor() {}\n\n build<T>(model: T): ModelValidator<T> {\n const metadata: Map<string, ConstraintAnnotations> = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\n metadata.forEach((value, key) => {\n if (value.constraintType == StringType.name) {\n shape[key] = this.buildStringSchema(value as StringTypeAnnotations);\n } else if (value.constraintType == BooleanType.name) {\n shape[key] = this.buildBooleanSchema(value as BooleanTypeAnnotations);\n }\n });\n const schema = object(shape) as SchemaOf<T>;\n return new ModelValidator(schema);\n }\n\n private buildStringSchema(options: StringTypeAnnotations) {\n let schema = Yup.string();\n if (options.required) {\n schema = schema.required(options.required.message);\n }\n if (options.length) {\n schema = schema.length(options.length.length, options.length.message);\n }\n\n return schema;\n }\n\n private buildBooleanSchema(options: BooleanTypeAnnotations) {\n let schema = Yup.boolean();\n if (options.required) {\n schema = schema.required(options.required.message);\n }\n if (options.equals) {\n if (options.equals.equals) {\n schema = schema.isTrue(options.equals.message);\n } else {\n schema = schema.isFalse(options.equals.message);\n }\n }\n\n return schema;\n }\n}\n","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\n","import { Injectable, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { NgForm, ValidationErrors } from '@angular/forms';\nimport { BehaviorSubject, filter, from, switchMap } from 'rxjs';\nimport { FieldError } from './field-error';\nimport { ModelSchemaFactory } from './model-schema.factory';\nimport { ModelValidator } from './model-validator';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NgFormModelStateFactory {\n constructor(private factory: ModelSchemaFactory) {}\n\n create<T>(form: NgForm, model: T) {\n const modelState = new NgFormModelState<T>(form, this.factory.build(model), model);\n return modelState;\n }\n}\n\nexport class NgFormModelState<T> {\n private errors: BehaviorSubject<FieldError[]> = new BehaviorSubject<FieldError[]>([]);\n public errors$ = this.errors.asObservable();\n\n constructor(private form: NgForm, private modelValidator: ModelValidator<T>, private model: T) {\n this.form.form.valueChanges\n .pipe(\n switchMap(async (x) => {\n return from(this.runValidations());\n })\n )\n .subscribe();\n\n this.errors$.subscribe((list) => {\n console.log('all errors', list);\n\n const grouped = list.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map<string, FieldError[]>());\n\n grouped.forEach((value, key) => {\n let validationErrors = <ValidationErrors>{};\n value.forEach((v) => (validationErrors[v.type] = v.message));\n this.form.controls[key].setErrors(validationErrors);\n });\n });\n }\n\n isValid(): boolean {\n return this.errors.value.length == 0;\n }\n\n setErrors(errors: FieldError[]) {\n this.errors.next(errors);\n }\n\n validate(): Promise<boolean> {\n return this.runValidations().then((x) => true);\n }\n\n private async runValidations(): Promise<void> {\n console.log('validating', this.model);\n const errors = await this.modelValidator.validate(this.model);\n this.errors.next(errors);\n }\n}\n","/*\n * Public API Surface of forms\n */\nexport * from './lib/field-error';\nexport * from './lib/model-schema.factory';\nexport * from './lib/model-validator';\nexport * from './lib/type-annotations';\nexport * from './lib/forms.module';\nexport * from './lib/ng-form-model-state.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ModelSchemaFactory"],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import 'reflect-metadata';
2
+ export interface ConstraintAnnotations {
3
+ constraintType: string;
4
+ }
5
+ export interface StringTypeAnnotations extends ConstraintAnnotations {
6
+ required?: RequiredAnnotation;
7
+ length: LengthAnnotation;
8
+ }
9
+ export interface BooleanTypeAnnotations extends ConstraintAnnotations {
10
+ required?: RequiredAnnotation;
11
+ equals?: EqualsAnnotation<boolean>;
12
+ }
13
+ export interface ValidationAnnotation {
14
+ message?: string;
15
+ }
16
+ export interface RequiredAnnotation extends ValidationAnnotation {
17
+ required: boolean;
18
+ }
19
+ export interface LengthAnnotation extends ValidationAnnotation {
20
+ length: number;
21
+ }
22
+ export interface OfValuesAnnotation extends ValidationAnnotation {
23
+ values: [];
24
+ }
25
+ export interface EqualsAnnotation<T> extends ValidationAnnotation {
26
+ equals: T;
27
+ }
28
+ export declare function StringType(...annotations: {
29
+ [key: string]: ValidationAnnotation;
30
+ }[]): (target: Object, propertyKey: string) => void;
31
+ export declare function BooleanType(...annotations: {
32
+ [key: string]: ValidationAnnotation;
33
+ }[]): (target: Object, propertyKey: string) => void;
34
+ export declare function required(message?: string): {
35
+ [key: string]: RequiredAnnotation;
36
+ };
37
+ export declare function length(length: number, message?: string): {
38
+ [key: string]: LengthAnnotation;
39
+ };
40
+ export declare function ofValues(values: [], message?: string): {
41
+ [key: string]: OfValuesAnnotation;
42
+ };
43
+ export declare function equals<T>(value: T, message?: string): {
44
+ [key: string]: EqualsAnnotation<T>;
45
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muziehdesign/forms",
3
- "version": "0.0.1-alpha.50",
3
+ "version": "0.0.1-alpha.55",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0"
package/public-api.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export * from './lib/field-error';
2
2
  export * from './lib/model-schema.factory';
3
3
  export * from './lib/model-validator';
4
- export * from './lib/string-schema';
4
+ export * from './lib/type-annotations';
5
5
  export * from './lib/forms.module';
6
6
  export * from './lib/ng-form-model-state.service';
@@ -1,55 +0,0 @@
1
- import 'reflect-metadata';
2
- import { PropertyType } from './property-type.enum';
3
- const METADATA_KEY = 'custom:muziehdesign:annotations';
4
- export function StringSchema(options) {
5
- return function (target, propertyKey) {
6
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
7
- metadata.push({
8
- name: propertyKey,
9
- type: PropertyType.string,
10
- options: options,
11
- });
12
- // TODO: define on property
13
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
14
- };
15
- }
16
- export function BooleanSchema(options) {
17
- return function (target, propertyKey) {
18
- const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
19
- metadata.push({
20
- name: propertyKey,
21
- type: PropertyType.boolean,
22
- options: options,
23
- });
24
- // TODO: define on property
25
- Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
26
- };
27
- }
28
- export function Required(options) {
29
- return function (target, propertyKey) {
30
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
31
- const annotations = metadata.get(propertyKey) || [];
32
- annotations.push({ type: Required.name, errorMessage: options?.errorMessage });
33
- metadata.set(propertyKey, annotations);
34
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
35
- };
36
- }
37
- export function Equals(value, options) {
38
- return function (target, propertyKey) {
39
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
40
- const annotations = metadata.get(propertyKey) || [];
41
- annotations.push({ type: Equals.name, errorMessage: options?.errorMessage, specification: { value: value } });
42
- metadata.set(propertyKey, annotations);
43
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
44
- };
45
- }
46
- export function Email(options) {
47
- return function (target, propertyKey) {
48
- const metadata = Reflect.getMetadata(METADATA_KEY, target) || new Map();
49
- const annotations = metadata.get(propertyKey) || [];
50
- annotations.push({ type: Email.name, errorMessage: options?.errorMessage });
51
- metadata.set(propertyKey, annotations);
52
- Reflect.defineMetadata(METADATA_KEY, metadata, target);
53
- };
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL3N0cmluZy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxZQUFZLEdBQUcsaUNBQWlDLENBQUM7QUFZdkQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUE2QjtJQUN4RCxPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQTRCO1FBQzNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pGLFFBQVEsQ0FBQyxJQUFJLENBQThDO1lBQ3pELElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUN6QixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7UUFDSCwyQkFBMkI7UUFDM0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBOEI7SUFDMUQsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUE0QjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRixRQUFRLENBQUMsSUFBSSxDQUE4QztZQUN6RCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87WUFDMUIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsMkJBQTJCO1FBQzNCLE9BQU8sQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztBQUNKLENBQUM7QUFzQkQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUEyQjtJQUNsRCxPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQW1CO1FBQ2xELE1BQU0sUUFBUSxHQUF1QyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUMvSSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBSSxLQUFRLEVBQUUsT0FBMkI7SUFDN0QsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUFtQjtRQUNsRCxNQUFNLFFBQVEsR0FBdUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQXFDLENBQUM7UUFDL0ksTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsV0FBVyxDQUFDLElBQUksQ0FBNEMsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pKLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUEyQjtJQUMvQyxPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQW1CO1FBQ2xELE1BQU0sUUFBUSxHQUF1QyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBcUMsQ0FBQztRQUMvSSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxXQUFXLENBQUMsSUFBSSxDQUEyQixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0RyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAncmVmbGVjdC1tZXRhZGF0YSc7XG5pbXBvcnQgeyBQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhIH0gZnJvbSAnLi9wcm9wZXJ0eS1zY2hlbWEtbWV0YWRhdGEnO1xuaW1wb3J0IHsgUHJvcGVydHlUeXBlIH0gZnJvbSAnLi9wcm9wZXJ0eS10eXBlLmVudW0nO1xuXG5jb25zdCBNRVRBREFUQV9LRVkgPSAnY3VzdG9tOm11emllaGRlc2lnbjphbm5vdGF0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nU2NoZW1hT3B0aW9ucyBleHRlbmRzIFNjaGVtYU9wdGlvbnMge1xuICBsZW5ndGg/OiBudW1iZXI7XG4gIG1pbmltdW0/OiBudW1iZXI7XG4gIG1heGltdW0/OiBudW1iZXI7XG4gIHBhdHRlcm4/OiBSZWdFeHA7XG59XG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYU9wdGlvbnMge1xuICByZXF1aXJlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdHJpbmdTY2hlbWEob3B0aW9ucz86IFN0cmluZ1NjaGVtYU9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IFN5bWJvbCkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnY3VzdG9tOm11emllaGRlc2lnbjpzY2hlbWEnLCB0YXJnZXQpIHx8IFtdO1xuICAgIG1ldGFkYXRhLnB1c2goPFByb3BlcnR5U2NoZW1hTWV0YWRhdGE8U3RyaW5nU2NoZW1hT3B0aW9ucz4+e1xuICAgICAgbmFtZTogcHJvcGVydHlLZXksXG4gICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuc3RyaW5nLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiBkZWZpbmUgb24gcHJvcGVydHlcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdjdXN0b206bXV6aWVoZGVzaWduOnNjaGVtYScsIG1ldGFkYXRhLCB0YXJnZXQpO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvb2xlYW5TY2hlbWFPcHRpb25zIGV4dGVuZHMgU2NoZW1hT3B0aW9ucyB7XG4gIGVxdWFscz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBCb29sZWFuU2NoZW1hKG9wdGlvbnM/OiBCb29sZWFuU2NoZW1hT3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgU3ltYm9sKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdjdXN0b206bXV6aWVoZGVzaWduOnNjaGVtYScsIHRhcmdldCkgfHwgW107XG4gICAgbWV0YWRhdGEucHVzaCg8UHJvcGVydHlTY2hlbWFNZXRhZGF0YTxTdHJpbmdTY2hlbWFPcHRpb25zPj57XG4gICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIHR5cGU6IFByb3BlcnR5VHlwZS5ib29sZWFuLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiBkZWZpbmUgb24gcHJvcGVydHlcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdjdXN0b206bXV6aWVoZGVzaWduOnNjaGVtYScsIG1ldGFkYXRhLCB0YXJnZXQpO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFubm90YXRpb25PcHRpb25zIHtcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5QW5ub3RhdGlvbjxUPiB7XG4gIHR5cGU6IHN0cmluZztcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICBzcGVjaWZpY2F0aW9uOiBUO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVpcmVkQW5ub3RhdGlvbiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEVxdWFsc1ZhbHVlQW5ub3RhdGlvbiB7XG4gIHZhbHVlPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5QW5ub3RhdGlvbnMgZXh0ZW5kcyBBbm5vdGF0aW9uT3B0aW9ucyB7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVpcmVkKG9wdGlvbnM/OiBBbm5vdGF0aW9uT3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IE1hcDxzdHJpbmcsIFByb3BlcnR5QW5ub3RhdGlvbnNbXT4gPSBSZWZsZWN0LmdldE1ldGFkYXRhKE1FVEFEQVRBX0tFWSwgdGFyZ2V0KSB8fCBuZXcgTWFwPHN0cmluZywgUHJvcGVydHlBbm5vdGF0aW9uPGFueT5bXT4oKTtcbiAgICBjb25zdCBhbm5vdGF0aW9ucyA9IG1ldGFkYXRhLmdldChwcm9wZXJ0eUtleSkgfHwgW107XG4gICAgYW5ub3RhdGlvbnMucHVzaCh7IHR5cGU6IFJlcXVpcmVkLm5hbWUsIGVycm9yTWVzc2FnZTogb3B0aW9ucz8uZXJyb3JNZXNzYWdlIH0pO1xuICAgIG1ldGFkYXRhLnNldChwcm9wZXJ0eUtleSwgYW5ub3RhdGlvbnMpO1xuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoTUVUQURBVEFfS0VZLCBtZXRhZGF0YSwgdGFyZ2V0KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVxdWFsczxUPih2YWx1ZTogVCwgb3B0aW9ucz86IEFubm90YXRpb25PcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRhZGF0YTogTWFwPHN0cmluZywgUHJvcGVydHlBbm5vdGF0aW9uc1tdPiA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoTUVUQURBVEFfS0VZLCB0YXJnZXQpIHx8IG5ldyBNYXA8c3RyaW5nLCBQcm9wZXJ0eUFubm90YXRpb248YW55PltdPigpO1xuICAgIGNvbnN0IGFubm90YXRpb25zID0gbWV0YWRhdGEuZ2V0KHByb3BlcnR5S2V5KSB8fCBbXTtcbiAgICBhbm5vdGF0aW9ucy5wdXNoKDxQcm9wZXJ0eUFubm90YXRpb248RXF1YWxzVmFsdWVBbm5vdGF0aW9uPj57IHR5cGU6IEVxdWFscy5uYW1lLCBlcnJvck1lc3NhZ2U6IG9wdGlvbnM/LmVycm9yTWVzc2FnZSwgc3BlY2lmaWNhdGlvbjogeyB2YWx1ZTogdmFsdWUgfSB9KTtcbiAgICBtZXRhZGF0YS5zZXQocHJvcGVydHlLZXksIGFubm90YXRpb25zKTtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKE1FVEFEQVRBX0tFWSwgbWV0YWRhdGEsIHRhcmdldCk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbWFpbChvcHRpb25zPzogQW5ub3RhdGlvbk9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBNYXA8c3RyaW5nLCBQcm9wZXJ0eUFubm90YXRpb25zW10+ID0gUmVmbGVjdC5nZXRNZXRhZGF0YShNRVRBREFUQV9LRVksIHRhcmdldCkgfHwgbmV3IE1hcDxzdHJpbmcsIFByb3BlcnR5QW5ub3RhdGlvbjxhbnk+W10+KCk7XG4gICAgY29uc3QgYW5ub3RhdGlvbnMgPSBtZXRhZGF0YS5nZXQocHJvcGVydHlLZXkpIHx8IFtdO1xuICAgIGFubm90YXRpb25zLnB1c2goPFByb3BlcnR5QW5ub3RhdGlvbjx2b2lkPj57IHR5cGU6IEVtYWlsLm5hbWUsIGVycm9yTWVzc2FnZTogb3B0aW9ucz8uZXJyb3JNZXNzYWdlIH0pO1xuICAgIG1ldGFkYXRhLnNldChwcm9wZXJ0eUtleSwgYW5ub3RhdGlvbnMpO1xuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoTUVUQURBVEFfS0VZLCBtZXRhZGF0YSwgdGFyZ2V0KTtcbiAgfTtcbn1cbiJdfQ==
@@ -1,34 +0,0 @@
1
- import 'reflect-metadata';
2
- export interface StringSchemaOptions extends SchemaOptions {
3
- length?: number;
4
- minimum?: number;
5
- maximum?: number;
6
- pattern?: RegExp;
7
- }
8
- export interface SchemaOptions {
9
- required?: boolean;
10
- }
11
- export declare function StringSchema(options?: StringSchemaOptions): (target: Object, propertyKey: string | Symbol) => void;
12
- export interface BooleanSchemaOptions extends SchemaOptions {
13
- equals?: boolean;
14
- }
15
- export declare function BooleanSchema(options?: BooleanSchemaOptions): (target: Object, propertyKey: string | Symbol) => void;
16
- export interface AnnotationOptions {
17
- errorMessage?: string;
18
- }
19
- export interface PropertyAnnotation<T> {
20
- type: string;
21
- errorMessage?: string;
22
- specification: T;
23
- }
24
- export interface RequiredAnnotation {
25
- }
26
- export interface EqualsValueAnnotation {
27
- value?: any;
28
- }
29
- export interface PropertyAnnotations extends AnnotationOptions {
30
- type: string;
31
- }
32
- export declare function Required(options?: AnnotationOptions): (target: Object, propertyKey: string) => void;
33
- export declare function Equals<T>(value: T, options?: AnnotationOptions): (target: Object, propertyKey: string) => void;
34
- export declare function Email(options?: AnnotationOptions): (target: Object, propertyKey: string) => void;