@muziehdesign/forms 0.0.1 → 0.0.397-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/esm2020/lib/constants.mjs +2 -2
  2. package/esm2020/lib/field-error.mjs +2 -2
  3. package/esm2020/lib/field-errors/field-errors.component.mjs +18 -0
  4. package/esm2020/lib/forms.module.mjs +27 -14
  5. package/esm2020/lib/masks.mjs +62 -0
  6. package/esm2020/lib/model-schema.factory.mjs +126 -58
  7. package/esm2020/lib/model-state-options.mjs +2 -0
  8. package/esm2020/lib/model-state-result.mjs +2 -0
  9. package/esm2020/lib/model-validator.mjs +16 -16
  10. package/esm2020/lib/ng-form-model-state.service.mjs +22 -0
  11. package/esm2020/lib/ngform-model-state.mjs +105 -0
  12. package/esm2020/lib/type-annotations.mjs +81 -0
  13. package/esm2020/muziehdesign-forms.mjs +4 -4
  14. package/esm2020/public-api.mjs +14 -9
  15. package/fesm2015/muziehdesign-forms.mjs +448 -112
  16. package/fesm2015/muziehdesign-forms.mjs.map +1 -1
  17. package/fesm2020/muziehdesign-forms.mjs +440 -112
  18. package/fesm2020/muziehdesign-forms.mjs.map +1 -1
  19. package/index.d.ts +5 -5
  20. package/lib/constants.d.ts +1 -1
  21. package/lib/field-error.d.ts +5 -5
  22. package/lib/field-errors/field-errors.component.d.ts +8 -0
  23. package/lib/forms.module.d.ts +8 -6
  24. package/lib/masks.d.ts +42 -0
  25. package/lib/model-schema.factory.d.ts +14 -10
  26. package/lib/model-state-options.d.ts +4 -0
  27. package/lib/model-state-result.d.ts +6 -0
  28. package/lib/model-validator.d.ts +7 -7
  29. package/lib/ng-form-model-state.service.d.ts +12 -0
  30. package/lib/ngform-model-state.d.ts +25 -0
  31. package/lib/type-annotations.d.ts +116 -0
  32. package/package.json +7 -2
  33. package/public-api.d.ts +10 -5
  34. package/esm2020/lib/property-schema-metadata.mjs +0 -2
  35. package/esm2020/lib/property-type.enum.mjs +0 -8
  36. package/esm2020/lib/string-schema.mjs +0 -27
  37. package/lib/property-schema-metadata.d.ts +0 -6
  38. package/lib/property-type.enum.d.ts +0 -6
  39. package/lib/string-schema.d.ts +0 -15
@@ -1,2 +1,2 @@
1
- export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UgPSAnY3VzdG9tOm11emllaGRlc2lnbjpzY2hlbWEnO1xyXG4iXX0=
1
+ export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:annotations';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLGlDQUFpQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UgPSAnY3VzdG9tOm11emllaGRlc2lnbjphbm5vdGF0aW9ucyc7XG4iXX0=
@@ -1,2 +1,2 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9maWVsZC1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWVsZEVycm9yIHtcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxufVxyXG4iXX0=
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9maWVsZC1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWVsZEVycm9yIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class FieldErrorsComponent {
5
+ get errorMessage() {
6
+ const errorKeys = Object.keys(this.field?.errors || {});
7
+ return errorKeys.length > 0 ? this.field?.errors[errorKeys[0]] : '';
8
+ }
9
+ }
10
+ FieldErrorsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FieldErrorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11
+ FieldErrorsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.5", type: FieldErrorsComponent, selector: "mz-field-errors", inputs: { field: "field" }, ngImport: i0, template: "<div class=\"field-error\" *ngIf=\"errorMessage\">{{ errorMessage }}</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FieldErrorsComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'mz-field-errors', template: "<div class=\"field-error\" *ngIf=\"errorMessage\">{{ errorMessage }}</div>\n" }]
15
+ }], propDecorators: { field: [{
16
+ type: Input
17
+ }] } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3JzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL2ZpZWxkLWVycm9ycy9maWVsZC1lcnJvcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvZmllbGQtZXJyb3JzL2ZpZWxkLWVycm9ycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7O0FBUXpELE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsSUFBSSxZQUFZO1FBQ2QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQTJCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM1RixDQUFDOztpSEFOVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixtRkNSakMsOEVBQ0E7MkZET2Esb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjs4QkFLbEIsS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0NvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ216LWZpZWxkLWVycm9ycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWVsZC1lcnJvcnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWVsZC1lcnJvcnMuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZEVycm9yc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGZpZWxkPzogTmdDb250cm9sO1xuXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnJvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZpZWxkPy5lcnJvcnMgfHwge30pO1xuICAgIHJldHVybiBlcnJvcktleXMubGVuZ3RoID4gMCA/ICh0aGlzLmZpZWxkPy5lcnJvcnMgYXMgVmFsaWRhdGlvbkVycm9ycylbZXJyb3JLZXlzWzBdXSA6ICcnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvZGl2PlxuIl19
@@ -1,14 +1,27 @@
1
- import { NgModule } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class FormsModule {
4
- }
5
- FormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
6
- FormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
7
- FormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, decorators: [{
9
- type: NgModule,
10
- args: [{
11
- providers: []
12
- }]
13
- }] });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3pDLE1BQU0sT0FBTyxXQUFXOzt3R0FBWCxXQUFXO3lHQUFYLFdBQVc7eUdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUh2QixRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybXNNb2R1bGUgeyB9XG4iXX0=
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FieldErrorsComponent } from './field-errors/field-errors.component';
4
+ import * as i0 from "@angular/core";
5
+ export class FormsModule {
6
+ }
7
+ FormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
+ FormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, declarations: [FieldErrorsComponent], imports: [CommonModule // TODO: can remove once done with temp error displaying
9
+ ], exports: [FieldErrorsComponent] });
10
+ FormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, imports: [CommonModule // TODO: can remove once done with temp error displaying
11
+ ] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ providers: [],
16
+ declarations: [
17
+ FieldErrorsComponent
18
+ ],
19
+ exports: [
20
+ FieldErrorsComponent
21
+ ],
22
+ imports: [
23
+ CommonModule // TODO: can remove once done with temp error displaying
24
+ ]
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOztBQWdCN0UsTUFBTSxPQUFPLFdBQVc7O3dHQUFYLFdBQVc7eUdBQVgsV0FBVyxpQkFUcEIsb0JBQW9CLGFBTXBCLFlBQVksQ0FBQyx3REFBd0Q7aUJBSHJFLG9CQUFvQjt5R0FNWCxXQUFXLFlBSHBCLFlBQVksQ0FBQyx3REFBd0Q7OzJGQUc1RCxXQUFXO2tCQVp2QixRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRSxFQUFFO29CQUNiLFlBQVksRUFBRTt3QkFDWixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZLENBQUMsd0RBQXdEO3FCQUN0RTtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRFcnJvcnNDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkLWVycm9ycy9maWVsZC1lcnJvcnMuY29tcG9uZW50JztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW10sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEZpZWxkRXJyb3JzQ29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBGaWVsZEVycm9yc0NvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlIC8vIFRPRE86IGNhbiByZW1vdmUgb25jZSBkb25lIHdpdGggdGVtcCBlcnJvciBkaXNwbGF5aW5nXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRm9ybXNNb2R1bGUgeyB9XG4iXX0=
@@ -0,0 +1,62 @@
1
+ import { format, isValid, parse } from 'date-fns';
2
+ import * as IMask from 'imask';
3
+ export const dateMaskOptions = {
4
+ mask: 'MM/dd/yyyy',
5
+ format: (date) => {
6
+ if (!date) {
7
+ return '';
8
+ }
9
+ return format(date, 'MM/dd/yyyy');
10
+ },
11
+ parse: (str) => {
12
+ const dateRegex = /(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01])\/([12]\d{3})/;
13
+ if (!str.match(dateRegex)) {
14
+ return undefined;
15
+ }
16
+ const parsed = parse(str, 'MM/dd/yyyy', new Date());
17
+ if (isValid(parsed)) {
18
+ return parsed;
19
+ }
20
+ return undefined;
21
+ },
22
+ blocks: {
23
+ // eslint-disable-next-line @typescript-eslint/naming-convention
24
+ MM: {
25
+ mask: IMask.MaskedRange,
26
+ from: 1,
27
+ to: 12,
28
+ },
29
+ // eslint-disable-next-line @typescript-eslint/naming-convention
30
+ dd: {
31
+ mask: IMask.MaskedRange,
32
+ from: 1,
33
+ to: 31,
34
+ },
35
+ // eslint-disable-next-line @typescript-eslint/naming-convention
36
+ yyyy: {
37
+ mask: IMask.MaskedRange,
38
+ from: 1000,
39
+ to: 9999,
40
+ },
41
+ },
42
+ };
43
+ export const phoneNumberOptions = {
44
+ mask: '(000) 000-0000',
45
+ };
46
+ export const currencyOptions = {
47
+ mask: Number,
48
+ scale: 2,
49
+ thousandsSeparator: ',',
50
+ padFractionalZeros: true,
51
+ radix: '.',
52
+ mapToRadix: ['.'],
53
+ };
54
+ export const integerOptions = {
55
+ mask: Number,
56
+ scale: 0,
57
+ thousandsSeparator: ',',
58
+ padFractionalZeros: true,
59
+ radix: '.',
60
+ mapToRadix: ['.'],
61
+ };
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFza3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tYXNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLElBQUksRUFBRSxZQUFZO0lBQ2xCLE1BQU0sRUFBRSxDQUFDLElBQXNCLEVBQVUsRUFBRTtRQUN6QyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFvQixFQUFFO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLHFEQUFxRCxDQUFDO1FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxFQUFFO1FBQ04sZ0VBQWdFO1FBQ2hFLEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVztZQUN2QixJQUFJLEVBQUUsQ0FBQztZQUNQLEVBQUUsRUFBRSxFQUFFO1NBQ1A7UUFDRCxnRUFBZ0U7UUFDaEUsRUFBRSxFQUFFO1lBQ0YsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQ3ZCLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLEVBQUU7U0FDUDtRQUNELGdFQUFnRTtRQUNoRSxJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDdkIsSUFBSSxFQUFFLElBQUk7WUFDVixFQUFFLEVBQUUsSUFBSTtTQUNUO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsSUFBSSxFQUFFLGdCQUFnQjtDQUN2QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLENBQUM7SUFDUixrQkFBa0IsRUFBRSxHQUFHO0lBQ3ZCLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsS0FBSyxFQUFFLEdBQUc7SUFDVixVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUM7Q0FDbEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUM1QixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxDQUFDO0lBQ1Isa0JBQWtCLEVBQUUsR0FBRztJQUN2QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDO0NBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQsIGlzVmFsaWQsIHBhcnNlIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0ICogYXMgSU1hc2sgZnJvbSAnaW1hc2snO1xuXG5leHBvcnQgY29uc3QgZGF0ZU1hc2tPcHRpb25zID0ge1xuICBtYXNrOiAnTU0vZGQveXl5eScsXG4gIGZvcm1hdDogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0KGRhdGUsICdNTS9kZC95eXl5Jyk7XG4gIH0sXG4gIHBhcnNlOiAoc3RyOiBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBkYXRlUmVnZXggPSAvKDBbMS05XXwxWzAtMl0pXFwvKDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMTJdXFxkezN9KS87XG4gICAgaWYgKCFzdHIubWF0Y2goZGF0ZVJlZ2V4KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2Uoc3RyLCAnTU0vZGQveXl5eScsIG5ldyBEYXRlKCkpO1xuICAgIGlmIChpc1ZhbGlkKHBhcnNlZCkpIHtcbiAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sXG4gIGJsb2Nrczoge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICBNTToge1xuICAgICAgbWFzazogSU1hc2suTWFza2VkUmFuZ2UsXG4gICAgICBmcm9tOiAxLFxuICAgICAgdG86IDEyLFxuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIGRkOiB7XG4gICAgICBtYXNrOiBJTWFzay5NYXNrZWRSYW5nZSxcbiAgICAgIGZyb206IDEsXG4gICAgICB0bzogMzEsXG4gICAgfSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgeXl5eToge1xuICAgICAgbWFzazogSU1hc2suTWFza2VkUmFuZ2UsXG4gICAgICBmcm9tOiAxMDAwLFxuICAgICAgdG86IDk5OTksXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBwaG9uZU51bWJlck9wdGlvbnMgPSB7XG4gIG1hc2s6ICcoMDAwKSAwMDAtMDAwMCcsXG59O1xuXG5leHBvcnQgY29uc3QgY3VycmVuY3lPcHRpb25zID0ge1xuICBtYXNrOiBOdW1iZXIsXG4gIHNjYWxlOiAyLFxuICB0aG91c2FuZHNTZXBhcmF0b3I6ICcsJyxcbiAgcGFkRnJhY3Rpb25hbFplcm9zOiB0cnVlLFxuICByYWRpeDogJy4nLFxuICBtYXBUb1JhZGl4OiBbJy4nXSxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyT3B0aW9ucyA9IHtcbiAgbWFzazogTnVtYmVyLFxuICBzY2FsZTogMCxcbiAgdGhvdXNhbmRzU2VwYXJhdG9yOiAnLCcsXG4gIHBhZEZyYWN0aW9uYWxaZXJvczogdHJ1ZSxcbiAgcmFkaXg6ICcuJyxcbiAgbWFwVG9SYWRpeDogWycuJ10sXG59O1xuIl19
@@ -1,58 +1,126 @@
1
- import { Injectable } from '@angular/core';
2
- import { boolean, object, string } from 'yup';
3
- import { ModelValidator } from './model-validator';
4
- import { SCHEMA_METADATA_NAMESPACE } from './constants';
5
- import { PropertyType } from './property-type.enum';
6
- import * as i0 from "@angular/core";
7
- export class ModelSchemaFactory {
8
- constructor() { }
9
- build(model) {
10
- const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
11
- let shape = {};
12
- metadata.forEach((element) => {
13
- if (element.type == PropertyType.string) {
14
- shape[element.name] = this.buildStringSchema(element.options || {});
15
- }
16
- else if (element.type == PropertyType.boolean) {
17
- shape[element.name] = this.buildBooleanSchema(element.options || {});
18
- }
19
- });
20
- const schema = object(shape);
21
- return new ModelValidator(schema);
22
- }
23
- buildStringSchema(options) {
24
- let stringSchema = string();
25
- if (options.required) {
26
- stringSchema = stringSchema.required();
27
- }
28
- if (options.length) {
29
- stringSchema = stringSchema.length(options.length);
30
- }
31
- if (options.minimum) {
32
- stringSchema = stringSchema.min(options.minimum);
33
- }
34
- if (options.maximum) {
35
- stringSchema = stringSchema.max(options.maximum);
36
- }
37
- return stringSchema;
38
- }
39
- buildBooleanSchema(options) {
40
- let booleanSchema = boolean();
41
- if (options.equals) {
42
- return booleanSchema.test({
43
- name: 'mustBe',
44
- test: (value) => value == options.equals
45
- });
46
- }
47
- return booleanSchema;
48
- }
49
- }
50
- ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
51
- ModelSchemaFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, providedIn: 'root' });
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, decorators: [{
53
- type: Injectable,
54
- args: [{
55
- providedIn: 'root',
56
- }]
57
- }], ctorParameters: function () { return []; } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFZLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixnQkFBZSxDQUFDO0lBRWhCLEtBQUssQ0FBSSxLQUFRO1FBQ2YsTUFBTSxRQUFRLEdBQTRDLE9BQU8sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEgsSUFBSSxLQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDckU7aUJBQU0sSUFBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7Z0JBQzlDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQWdCLENBQUM7UUFDNUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsT0FBNEI7UUFDcEQsSUFBSSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDeEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBNkI7UUFDdEQsSUFBSSxhQUFhLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBRyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU07YUFDeEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzsrR0E3Q1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBib29sZWFuLCBvYmplY3QsIFNjaGVtYU9mLCBzdHJpbmcgfSBmcm9tICd5dXAnO1xyXG5pbXBvcnQgeyBNb2RlbFZhbGlkYXRvciB9IGZyb20gJy4vbW9kZWwtdmFsaWRhdG9yJztcclxuaW1wb3J0IHsgQm9vbGVhblNjaGVtYU9wdGlvbnMsIFNjaGVtYU9wdGlvbnMsIFN0cmluZ1NjaGVtYU9wdGlvbnMgfSBmcm9tICcuL3N0cmluZy1zY2hlbWEnO1xyXG5pbXBvcnQgeyBTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBPYmplY3RTaGFwZSB9IGZyb20gJ3l1cC9saWIvb2JqZWN0JztcclxuaW1wb3J0IHsgUHJvcGVydHlTY2hlbWFNZXRhZGF0YSB9IGZyb20gJy4vcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhJztcclxuaW1wb3J0IHsgUHJvcGVydHlUeXBlIH0gZnJvbSAnLi9wcm9wZXJ0eS10eXBlLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGVsU2NoZW1hRmFjdG9yeSB7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBidWlsZDxUPihtb2RlbDogVCk6IE1vZGVsVmFsaWRhdG9yPFQ+IHtcclxuICAgIGNvbnN0IG1ldGFkYXRhOiBQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhPFNjaGVtYU9wdGlvbnM+W10gPSBSZWZsZWN0LmdldE1ldGFkYXRhKFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UsIG1vZGVsKTtcclxuICAgIGxldCBzaGFwZTogT2JqZWN0U2hhcGUgPSB7fTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuc3RyaW5nKSB7XHJcbiAgICAgICAgc2hhcGVbZWxlbWVudC5uYW1lXSA9IHRoaXMuYnVpbGRTdHJpbmdTY2hlbWEoZWxlbWVudC5vcHRpb25zIHx8IHt9KTtcclxuICAgICAgfSBlbHNlIGlmKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuYm9vbGVhbikge1xyXG4gICAgICAgIHNoYXBlW2VsZW1lbnQubmFtZV0gPSB0aGlzLmJ1aWxkQm9vbGVhblNjaGVtYShlbGVtZW50Lm9wdGlvbnMgfHwge30pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNjaGVtYSA9IG9iamVjdChzaGFwZSkgYXMgU2NoZW1hT2Y8VD47XHJcbiAgICByZXR1cm4gbmV3IE1vZGVsVmFsaWRhdG9yKHNjaGVtYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkU3RyaW5nU2NoZW1hKG9wdGlvbnM6IFN0cmluZ1NjaGVtYU9wdGlvbnMpIHtcclxuICAgIGxldCBzdHJpbmdTY2hlbWEgPSBzdHJpbmcoKTtcclxuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5yZXF1aXJlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5sZW5ndGgob3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMubWluaW11bSkge1xyXG4gICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWluKG9wdGlvbnMubWluaW11bSk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5tYXhpbXVtKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5tYXgob3B0aW9ucy5tYXhpbXVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyaW5nU2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEJvb2xlYW5TY2hlbWEob3B0aW9uczogQm9vbGVhblNjaGVtYU9wdGlvbnMpIHtcclxuICAgIGxldCBib29sZWFuU2NoZW1hID0gYm9vbGVhbigpO1xyXG4gICAgaWYob3B0aW9ucy5lcXVhbHMpIHtcclxuICAgICAgcmV0dXJuIGJvb2xlYW5TY2hlbWEudGVzdCh7XHJcbiAgICAgICAgbmFtZTogJ211c3RCZScsXHJcbiAgICAgICAgdGVzdDogKHZhbHVlKT0+IHZhbHVlID09IG9wdGlvbnMuZXF1YWxzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib29sZWFuU2NoZW1hO1xyXG4gIH1cclxufVxyXG4iXX0=
1
+ import { Injectable } from '@angular/core';
2
+ import { object } from 'yup';
3
+ import { ModelValidator } from './model-validator';
4
+ import { SCHEMA_METADATA_NAMESPACE } from './constants';
5
+ import { ConstraintType } from './type-annotations';
6
+ import * as Yup from 'yup';
7
+ import * as i0 from "@angular/core";
8
+ /*
9
+ Schema rules need to be built in the order they need to be evaluated in.
10
+ For example,
11
+ ```
12
+ schema.required().max(...).matches(...);
13
+ ```
14
+ evaluates the 3 rules in this order
15
+ - required
16
+ - max
17
+ - matches
18
+ */
19
+ export class ModelSchemaFactory {
20
+ constructor() { }
21
+ build(model) {
22
+ const schema = this.buildObjectSchema(model);
23
+ return new ModelValidator(schema);
24
+ }
25
+ buildObjectSchema(model) {
26
+ const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
27
+ let shape = {};
28
+ metadata.forEach((value, key) => {
29
+ if (value.constraintType == ConstraintType.string) {
30
+ shape[key] = this.buildStringSchema(value);
31
+ }
32
+ else if (value.constraintType == ConstraintType.boolean) {
33
+ shape[key] = this.buildBooleanSchema(value);
34
+ }
35
+ else if (value.constraintType == ConstraintType.date) {
36
+ shape[key] = this.buildDateSchema(value);
37
+ }
38
+ else if (value.constraintType == ConstraintType.object) {
39
+ shape[key] = this.buildNestedObjectSchema(value);
40
+ }
41
+ else if (value.constraintType == ConstraintType.number) {
42
+ shape[key] = this.buildNumberSchema(value);
43
+ }
44
+ });
45
+ return object(shape);
46
+ }
47
+ buildStringSchema(options) {
48
+ let schema = Yup.string();
49
+ if (options.required) {
50
+ schema = schema.required(options.required.message);
51
+ }
52
+ if (options.length) {
53
+ schema = schema.length(options.length.length, options.length.message);
54
+ }
55
+ if (options.maxLength) {
56
+ schema = schema.max(options.maxLength.maxLength, options.maxLength.message);
57
+ }
58
+ if (options.minLength) {
59
+ schema = schema.min(options.minLength.minLength, options.minLength.message);
60
+ }
61
+ if (options.pattern) {
62
+ schema = schema.matches(options.pattern.pattern, { message: options.pattern.message, excludeEmptyString: true });
63
+ }
64
+ return schema;
65
+ }
66
+ buildBooleanSchema(options) {
67
+ let schema = Yup.boolean();
68
+ if (options.required) {
69
+ schema = schema.required(options.required.message);
70
+ }
71
+ if (options.equals) {
72
+ if (options.equals.equals) {
73
+ schema = schema.isTrue(options.equals.message);
74
+ }
75
+ else {
76
+ schema = schema.isFalse(options.equals.message);
77
+ }
78
+ }
79
+ return schema;
80
+ }
81
+ buildDateSchema(options) {
82
+ let schema = Yup.date();
83
+ if (options.required) {
84
+ schema = schema.required(options.required.message);
85
+ }
86
+ if (options.min) {
87
+ schema = schema.min(options.min.min, options.min.message);
88
+ }
89
+ if (options.max) {
90
+ schema = schema.max(options.max.max, options.max.message);
91
+ }
92
+ if (options.test) {
93
+ schema = schema.test({
94
+ name: options.test.name,
95
+ message: options.test.message,
96
+ test: (d, context) => {
97
+ return options.test.test(d);
98
+ }
99
+ });
100
+ }
101
+ return schema;
102
+ }
103
+ buildNumberSchema(options) {
104
+ let schema = Yup.number();
105
+ if (options.required) {
106
+ schema = schema.required(options.required.message);
107
+ }
108
+ return schema;
109
+ }
110
+ buildNestedObjectSchema(options) {
111
+ let nestedSchema = this.buildObjectSchema(options.getInstance());
112
+ if (options.required) {
113
+ nestedSchema = nestedSchema.required();
114
+ }
115
+ return nestedSchema;
116
+ }
117
+ }
118
+ ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
119
+ ModelSchemaFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, providedIn: 'root' });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, decorators: [{
121
+ type: Injectable,
122
+ args: [{
123
+ providedIn: 'root',
124
+ }]
125
+ }], ctorParameters: function () { return []; } });
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQVksTUFBTSxLQUFLLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4RCxPQUFPLEVBQWlELGNBQWMsRUFBNEYsTUFBTSxvQkFBb0IsQ0FBQztBQUM3TCxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQzs7QUFFM0I7Ozs7Ozs7Ozs7RUFVRTtBQUtGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsZ0JBQWUsQ0FBQztJQUVoQixLQUFLLENBQUksS0FBUTtRQUNmLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUIsQ0FBSSxLQUFRO1FBQ25DLE1BQU0sUUFBUSxHQUF1QyxPQUFPLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNHLElBQUksS0FBSyxHQUFnQixFQUFFLENBQUM7UUFDNUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM5QixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtnQkFDakQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUE4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Q3BCLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBOEI7UUFFNUQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNuQixZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7K0dBNUdVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9iamVjdCwgU2NoZW1hT2YgfSBmcm9tICd5dXAnO1xuaW1wb3J0IHsgTW9kZWxWYWxpZGF0b3IgfSBmcm9tICcuL21vZGVsLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT2JqZWN0U2hhcGUgfSBmcm9tICd5dXAvbGliL29iamVjdCc7XG5pbXBvcnQgeyBCb29sZWFuVHlwZUFubm90YXRpb25zLCBDb25zdHJhaW50QW5ub3RhdGlvbnMsIENvbnN0cmFpbnRUeXBlLCBEYXRlVHlwZUFubm90YXRpb25zLCBPYmplY3RUeXBlQW5ub3RhdGlvbnMsIE51bWJlclR5cGVBbm5vdGF0aW9ucywgU3RyaW5nVHlwZUFubm90YXRpb25zIH0gZnJvbSAnLi90eXBlLWFubm90YXRpb25zJztcbmltcG9ydCAqIGFzIFl1cCBmcm9tICd5dXAnO1xuXG4vKlxuU2NoZW1hIHJ1bGVzIG5lZWQgdG8gYmUgYnVpbHQgaW4gdGhlIG9yZGVyIHRoZXkgbmVlZCB0byBiZSBldmFsdWF0ZWQgaW4uXG5Gb3IgZXhhbXBsZSxcbiAgYGBgXG4gICAgc2NoZW1hLnJlcXVpcmVkKCkubWF4KC4uLikubWF0Y2hlcyguLi4pO1xuICBgYGBcbmV2YWx1YXRlcyB0aGUgMyBydWxlcyBpbiB0aGlzIG9yZGVyXG4gIC0gcmVxdWlyZWRcbiAgLSBtYXhcbiAgLSBtYXRjaGVzXG4qL1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTW9kZWxTY2hlbWFGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGJ1aWxkPFQ+KG1vZGVsOiBUKTogTW9kZWxWYWxpZGF0b3I8VD4ge1xuICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuYnVpbGRPYmplY3RTY2hlbWEobW9kZWwpO1xuICAgIHJldHVybiBuZXcgTW9kZWxWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRPYmplY3RTY2hlbWE8VD4obW9kZWw6IFQpIHtcbiAgICBjb25zdCBtZXRhZGF0YTogTWFwPHN0cmluZywgQ29uc3RyYWludEFubm90YXRpb25zPiA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoU0NIRU1BX01FVEFEQVRBX05BTUVTUEFDRSwgbW9kZWwpO1xuICAgIGxldCBzaGFwZTogT2JqZWN0U2hhcGUgPSB7fTtcbiAgICBtZXRhZGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodmFsdWUuY29uc3RyYWludFR5cGUgPT0gQ29uc3RyYWludFR5cGUuc3RyaW5nKSB7XG4gICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLmJ1aWxkU3RyaW5nU2NoZW1hKHZhbHVlIGFzIFN0cmluZ1R5cGVBbm5vdGF0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlLmNvbnN0cmFpbnRUeXBlID09IENvbnN0cmFpbnRUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuYnVpbGRCb29sZWFuU2NoZW1hKHZhbHVlIGFzIEJvb2xlYW5UeXBlQW5ub3RhdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZS5jb25zdHJhaW50VHlwZSA9PSBDb25zdHJhaW50VHlwZS5kYXRlKSB7XG4gICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLmJ1aWxkRGF0ZVNjaGVtYSh2YWx1ZSBhcyBEYXRlVHlwZUFubm90YXRpb25zKTtcbiAgICAgIH0gZWxzZSBpZih2YWx1ZS5jb25zdHJhaW50VHlwZSA9PSBDb25zdHJhaW50VHlwZS5vYmplY3QpIHtcbiAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuYnVpbGROZXN0ZWRPYmplY3RTY2hlbWEodmFsdWUgYXMgT2JqZWN0VHlwZUFubm90YXRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUuY29uc3RyYWludFR5cGUgPT0gQ29uc3RyYWludFR5cGUubnVtYmVyKSB7XG4gICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLmJ1aWxkTnVtYmVyU2NoZW1hKHZhbHVlIGFzIE51bWJlclR5cGVBbm5vdGF0aW9ucyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9iamVjdChzaGFwZSkgYXMgU2NoZW1hT2Y8VD47XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3RyaW5nU2NoZW1hKG9wdGlvbnM6IFN0cmluZ1R5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAuc3RyaW5nKCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5yZXF1aXJlZChvcHRpb25zLnJlcXVpcmVkLm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5sZW5ndGgob3B0aW9ucy5sZW5ndGgubGVuZ3RoLCBvcHRpb25zLmxlbmd0aC5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tYXhMZW5ndGgpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5tYXgob3B0aW9ucy5tYXhMZW5ndGgubWF4TGVuZ3RoLCBvcHRpb25zLm1heExlbmd0aC5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5taW5MZW5ndGgpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5taW4ob3B0aW9ucy5taW5MZW5ndGgubWluTGVuZ3RoLCBvcHRpb25zLm1pbkxlbmd0aC5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wYXR0ZXJuKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEubWF0Y2hlcyhvcHRpb25zLnBhdHRlcm4ucGF0dGVybiwgIHsgbWVzc2FnZTogb3B0aW9ucy5wYXR0ZXJuLm1lc3NhZ2UsIGV4Y2x1ZGVFbXB0eVN0cmluZzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEJvb2xlYW5TY2hlbWEob3B0aW9uczogQm9vbGVhblR5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAuYm9vbGVhbigpO1xuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEucmVxdWlyZWQob3B0aW9ucy5yZXF1aXJlZC5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZXF1YWxzKSB7XG4gICAgICBpZiAob3B0aW9ucy5lcXVhbHMuZXF1YWxzKSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYS5pc1RydWUob3B0aW9ucy5lcXVhbHMubWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWEuaXNGYWxzZShvcHRpb25zLmVxdWFscy5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERhdGVTY2hlbWEob3B0aW9uczogRGF0ZVR5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAuZGF0ZSgpO1xuICAgIFxuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEucmVxdWlyZWQob3B0aW9ucy5yZXF1aXJlZC5tZXNzYWdlKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWluKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEubWluKG9wdGlvbnMubWluLm1pbiwgb3B0aW9ucy5taW4ubWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1heCkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLm1heChvcHRpb25zLm1heC5tYXgsIG9wdGlvbnMubWF4Lm1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50ZXN0KSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEudGVzdCh7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMudGVzdC5uYW1lLFxuICAgICAgICBtZXNzYWdlOiBvcHRpb25zLnRlc3QubWVzc2FnZSxcbiAgICAgICAgdGVzdDogKGQ/OiBEYXRlLCBjb250ZXh0PzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnRlc3QhLnRlc3QoZCEpO1xuICAgICAgfX0pO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTnVtYmVyU2NoZW1hKG9wdGlvbnM6IE51bWJlclR5cGVBbm5vdGF0aW9ucykge1xuICAgIGxldCBzY2hlbWEgPSBZdXAubnVtYmVyKCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWlyZWQpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5yZXF1aXJlZChvcHRpb25zLnJlcXVpcmVkLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTmVzdGVkT2JqZWN0U2NoZW1hKG9wdGlvbnM6IE9iamVjdFR5cGVBbm5vdGF0aW9ucykge1xuXG4gICAgbGV0IG5lc3RlZFNjaGVtYSA9IHRoaXMuYnVpbGRPYmplY3RTY2hlbWEob3B0aW9ucy5nZXRJbnN0YW5jZSgpKTtcbiAgICBpZihvcHRpb25zLnJlcXVpcmVkKSB7XG4gICAgICBuZXN0ZWRTY2hlbWEgPSBuZXN0ZWRTY2hlbWEucmVxdWlyZWQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmVzdGVkU2NoZW1hO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc3RhdGUtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL21vZGVsLXN0YXRlLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuL2ZpZWxkLWVycm9yJztcblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbFN0YXRlT3B0aW9ucyB7XG4gIG9uVmFsaWRhdGU6IChlcnJvcnM6IEZpZWxkRXJyb3JbXSkgPT4gRmllbGRFcnJvcltdO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc3RhdGUtcmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbW9kZWwtc3RhdGUtcmVzdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSBcIi4vZmllbGQtZXJyb3JcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNb2RlbFN0YXRlUmVzdWx0PFQ+IHtcbiAgdmFsaWQ6IGJvb2xlYW47XG4gIGVycm9yczogRmllbGRFcnJvcltdO1xuICBtb2RlbDogVDtcbn1cbiJdfQ==
@@ -1,16 +1,16 @@
1
- export class ModelValidator {
2
- constructor(modelSchema) {
3
- this.schema = modelSchema;
4
- }
5
- validate(model) {
6
- return this.schema
7
- .validate(model, { abortEarly: false })
8
- .then(() => {
9
- return [];
10
- })
11
- .catch((e) => {
12
- return e.inner.map((error) => ({ path: error.path, type: error.type, message: error.message }));
13
- });
14
- }
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbW9kZWwtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQVksV0FBd0I7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBSSxLQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRTtZQUM1QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWFPZiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAneXVwJztcclxuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4vZmllbGQtZXJyb3InO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZGVsVmFsaWRhdG9yPFQ+IHtcclxuICBwcml2YXRlIHNjaGVtYTogU2NoZW1hT2Y8VD47XHJcbiAgY29uc3RydWN0b3IobW9kZWxTY2hlbWE6IFNjaGVtYU9mPFQ+KSB7XHJcbiAgICB0aGlzLnNjaGVtYSA9IG1vZGVsU2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGU8VD4obW9kZWw6IFQpOiBQcm9taXNlPEZpZWxkRXJyb3JbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hXHJcbiAgICAgIC52YWxpZGF0ZShtb2RlbCwgeyBhYm9ydEVhcmx5OiBmYWxzZSB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGU6IFZhbGlkYXRpb25FcnJvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBlLmlubmVyLm1hcCgoZXJyb3IpID0+IDxGaWVsZEVycm9yPnsgcGF0aDogZXJyb3IucGF0aCwgdHlwZTogZXJyb3IudHlwZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ export class ModelValidator {
2
+ constructor(modelSchema) {
3
+ this.schema = modelSchema;
4
+ }
5
+ validate(model) {
6
+ return this.schema
7
+ .validate(model, { abortEarly: false })
8
+ .then(() => {
9
+ return [];
10
+ })
11
+ .catch((e) => {
12
+ return e.inner.map((error) => ({ path: error.path, type: error.type, message: error.message }));
13
+ });
14
+ }
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbW9kZWwtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQVksV0FBd0I7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBSSxLQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRTtZQUM1QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWFPZiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAneXVwJztcbmltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuL2ZpZWxkLWVycm9yJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsVmFsaWRhdG9yPFQ+IHtcbiAgcHJpdmF0ZSBzY2hlbWE6IFNjaGVtYU9mPFQ+O1xuICBjb25zdHJ1Y3Rvcihtb2RlbFNjaGVtYTogU2NoZW1hT2Y8VD4pIHtcbiAgICB0aGlzLnNjaGVtYSA9IG1vZGVsU2NoZW1hO1xuICB9XG5cbiAgdmFsaWRhdGU8VD4obW9kZWw6IFQpOiBQcm9taXNlPEZpZWxkRXJyb3JbXT4ge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgLnZhbGlkYXRlKG1vZGVsLCB7IGFib3J0RWFybHk6IGZhbHNlIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGU6IFZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gZS5pbm5lci5tYXAoKGVycm9yKSA9PiA8RmllbGRFcnJvcj57IHBhdGg6IGVycm9yLnBhdGgsIHR5cGU6IGVycm9yLnR5cGUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,22 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NgFormModelState } from './ngform-model-state';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./model-schema.factory";
5
+ export class NgFormModelStateFactory {
6
+ constructor(factory) {
7
+ this.factory = factory;
8
+ }
9
+ create(form, model, options) {
10
+ const modelState = new NgFormModelState(form, this.factory.build(model), options);
11
+ return modelState;
12
+ }
13
+ }
14
+ NgFormModelStateFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: NgFormModelStateFactory, deps: [{ token: i1.ModelSchemaFactory }], target: i0.ɵɵFactoryTarget.Injectable });
15
+ NgFormModelStateFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: NgFormModelStateFactory, providedIn: 'root' });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: NgFormModelStateFactory, decorators: [{
17
+ type: Injectable,
18
+ args: [{
19
+ providedIn: 'root',
20
+ }]
21
+ }], ctorParameters: function () { return [{ type: i1.ModelSchemaFactory }]; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbmctZm9ybS1tb2RlbC1zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUt4RCxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDLFlBQW9CLE9BQTJCO1FBQTNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO0lBQUcsQ0FBQztJQUVuRCxNQUFNLENBQUksSUFBWSxFQUFFLEtBQVEsRUFBRSxPQUEyQjtRQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFJLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRixPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOztvSEFOVSx1QkFBdUI7d0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNb2RlbFNjaGVtYUZhY3RvcnkgfSBmcm9tICcuL21vZGVsLXNjaGVtYS5mYWN0b3J5JztcbmltcG9ydCB7IE1vZGVsU3RhdGVPcHRpb25zIH0gZnJvbSAnLi9tb2RlbC1zdGF0ZS1vcHRpb25zJztcbmltcG9ydCB7IE5nRm9ybU1vZGVsU3RhdGUgfSBmcm9tICcuL25nZm9ybS1tb2RlbC1zdGF0ZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0Zvcm1Nb2RlbFN0YXRlRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmFjdG9yeTogTW9kZWxTY2hlbWFGYWN0b3J5KSB7fVxuXG4gIGNyZWF0ZTxUPihmb3JtOiBOZ0Zvcm0sIG1vZGVsOiBULCBvcHRpb25zPzogTW9kZWxTdGF0ZU9wdGlvbnMpIHtcbiAgICBjb25zdCBtb2RlbFN0YXRlID0gbmV3IE5nRm9ybU1vZGVsU3RhdGU8VD4oZm9ybSwgdGhpcy5mYWN0b3J5LmJ1aWxkKG1vZGVsKSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG1vZGVsU3RhdGU7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,105 @@
1
+ import { FormArray, FormGroup } from '@angular/forms';
2
+ import { BehaviorSubject, from, switchMap } from 'rxjs';
3
+ export class NgFormModelState {
4
+ constructor(form, modelValidator, options) {
5
+ this.form = form;
6
+ this.modelValidator = modelValidator;
7
+ this.options = options;
8
+ this.changesSubject = new BehaviorSubject(undefined);
9
+ this.changes = this.changesSubject.asObservable();
10
+ this.form.form.valueChanges
11
+ .pipe(switchMap(async (x) => {
12
+ return from(this.validate());
13
+ }))
14
+ .subscribe();
15
+ }
16
+ getCurrent() {
17
+ return this.changesSubject.value;
18
+ }
19
+ setState(model, errors) {
20
+ const state = {
21
+ model: model,
22
+ errors: errors,
23
+ valid: errors.length === 0,
24
+ };
25
+ this.setStateInternal(state);
26
+ }
27
+ setErrors(errors) {
28
+ //this.errors.next(errors);
29
+ throw new Error('needs implementation');
30
+ }
31
+ appendErrors(errors, skipEmit) {
32
+ const allErrors = [...(this.changesSubject.value?.errors || []), ...errors];
33
+ const state = { ...this.changesSubject.value };
34
+ state.errors = allErrors;
35
+ this.setStateInternal(state);
36
+ }
37
+ async validate() {
38
+ const model = this.form.value;
39
+ const state = await this.runValidations(model, this.options?.onValidate);
40
+ this.setStateInternal(state);
41
+ return state;
42
+ }
43
+ setStateInternal(state) {
44
+ this.deleteFormErrors();
45
+ const grouped = state.errors.reduce((grouped, v) => grouped.set(v.path, [...(grouped.get(v.path) || []), v]), new Map());
46
+ grouped.forEach((value, path) => {
47
+ let validationErrors = {};
48
+ value.forEach((v) => (validationErrors[v.type] = v.message));
49
+ const control = this.form.form.get(path);
50
+ if (!control) {
51
+ // TODO: use actual logging service
52
+ }
53
+ else {
54
+ control.setErrors(validationErrors);
55
+ }
56
+ });
57
+ this.changesSubject.next(state);
58
+ }
59
+ deleteFormErrors() {
60
+ this.deleteErrors(this.form.form);
61
+ }
62
+ deleteErrors(rootFormGroup) {
63
+ Object.keys(rootFormGroup.controls).forEach((key) => {
64
+ const control = rootFormGroup.controls[key];
65
+ if (!this.isParentControl(control)) {
66
+ this.deleteErrorsFromControl(key, control);
67
+ }
68
+ else if (control instanceof FormGroup) {
69
+ this.deleteErrors(control);
70
+ }
71
+ else if (control instanceof FormArray) {
72
+ this.loopFormArray(control);
73
+ }
74
+ });
75
+ }
76
+ deleteErrorsFromControl(key, control) {
77
+ control.setErrors(null);
78
+ }
79
+ isParentControl(control) {
80
+ return control instanceof FormGroup || control instanceof FormArray;
81
+ }
82
+ loopFormArray(formArray) {
83
+ formArray.controls.forEach((control, index) => {
84
+ if (!this.isParentControl(control)) {
85
+ this.deleteErrorsFromControl(index, control);
86
+ }
87
+ else if (control instanceof FormGroup) {
88
+ this.deleteErrors(control);
89
+ }
90
+ else if (control instanceof FormArray) {
91
+ this.loopFormArray(control);
92
+ }
93
+ });
94
+ }
95
+ async runValidations(model, callback) {
96
+ const list = await this.modelValidator.validate(model);
97
+ const final = callback?.(list) || list;
98
+ return {
99
+ valid: final.length === 0,
100
+ errors: final,
101
+ model: model,
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdmb3JtLW1vZGVsLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbmdmb3JtLW1vZGVsLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFNBQVMsRUFBMEMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRyxPQUFPLEVBQUUsZUFBZSxFQUF3QixJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTlFLE1BQU0sT0FBTyxnQkFBZ0I7SUFJM0IsWUFBb0IsSUFBWSxFQUFVLGNBQWlDLEVBQVUsT0FBMkI7UUFBNUYsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBSHhHLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQWtDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLFlBQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRzNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVk7YUFDeEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFRLEVBQUUsTUFBb0I7UUFDckMsTUFBTSxLQUFLLEdBQUc7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxN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SyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQztRQUN2QyxPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN6QixNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIE5nRm9ybSwgTmdNb2RlbEdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZnJvbSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWVsZEVycm9yIH0gZnJvbSAnLi9maWVsZC1lcnJvcic7XG5pbXBvcnQgeyBNb2RlbFN0YXRlT3B0aW9ucyB9IGZyb20gJy4vbW9kZWwtc3RhdGUtb3B0aW9ucyc7XG5pbXBvcnQgeyBNb2RlbFN0YXRlUmVzdWx0IH0gZnJvbSAnLi9tb2RlbC1zdGF0ZS1yZXN1bHQnO1xuaW1wb3J0IHsgTW9kZWxWYWxpZGF0b3IgfSBmcm9tICcuL21vZGVsLXZhbGlkYXRvcic7XG5cbmV4cG9ydCBjbGFzcyBOZ0Zvcm1Nb2RlbFN0YXRlPFQ+IHtcbiAgcHJpdmF0ZSBjaGFuZ2VzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TW9kZWxTdGF0ZVJlc3VsdDxUPiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5nZXMgPSB0aGlzLmNoYW5nZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybTogTmdGb3JtLCBwcml2YXRlIG1vZGVsVmFsaWRhdG9yOiBNb2RlbFZhbGlkYXRvcjxUPiwgcHJpdmF0ZSBvcHRpb25zPzogTW9kZWxTdGF0ZU9wdGlvbnMpIHtcbiAgICB0aGlzLmZvcm0uZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLnZhbGlkYXRlKCkpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudCgpOiBNb2RlbFN0YXRlUmVzdWx0PFQ+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VzU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHNldFN0YXRlKG1vZGVsOiBULCBlcnJvcnM6IEZpZWxkRXJyb3JbXSkge1xuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgbW9kZWw6IG1vZGVsLFxuICAgICAgZXJyb3JzOiBlcnJvcnMsXG4gICAgICB2YWxpZDogZXJyb3JzLmxlbmd0aCA9PT0gMCxcbiAgICB9IGFzIE1vZGVsU3RhdGVSZXN1bHQ8VD47XG4gICAgdGhpcy5zZXRTdGF0ZUludGVybmFsKHN0YXRlKTtcbiAgfVxuXG4gIHNldEVycm9ycyhlcnJvcnM6IEZpZWxkRXJyb3JbXSkge1xuICAgIC8vdGhpcy5lcnJvcnMubmV4dChlcnJvcnMpO1xuICAgIHRocm93IG5ldyBFcnJvcignbmVlZHMgaW1wbGVtZW50YXRpb24nKTtcbiAgfVxuXG4gIGFwcGVuZEVycm9ycyhlcnJvcnM6IEZpZWxkRXJyb3JbXSwgc2tpcEVtaXQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgYWxsRXJyb3JzID0gWy4uLih0aGlzLmNoYW5nZXNTdWJqZWN0LnZhbHVlPy5lcnJvcnMgfHwgW10pLCAuLi5lcnJvcnNdO1xuICAgIGNvbnN0IHN0YXRlID0geyAuLi50aGlzLmNoYW5nZXNTdWJqZWN0LnZhbHVlIH0gYXMgTW9kZWxTdGF0ZVJlc3VsdDxUPjtcbiAgICBzdGF0ZS5lcnJvcnMgPSBhbGxFcnJvcnM7XG4gICAgdGhpcy5zZXRTdGF0ZUludGVybmFsKHN0YXRlKTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8TW9kZWxTdGF0ZVJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5mb3JtLnZhbHVlO1xuICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgdGhpcy5ydW5WYWxpZGF0aW9ucyhtb2RlbCwgdGhpcy5vcHRpb25zPy5vblZhbGlkYXRlKTtcbiAgICB0aGlzLnNldFN0YXRlSW50ZXJuYWwoc3RhdGUpO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhdGVJbnRlcm5hbChzdGF0ZTogTW9kZWxTdGF0ZVJlc3VsdDxUPikge1xuICAgIHRoaXMuZGVsZXRlRm9ybUVycm9ycygpO1xuXG4gICAgY29uc3QgZ3JvdXBlZCA9IHN0YXRlLmVycm9ycy5yZWR1Y2UoKGdyb3VwZWQsIHYpID0+IGdyb3VwZWQuc2V0KHYucGF0aCwgWy4uLihncm91cGVkLmdldCh2LnBhdGgpIHx8IFtdKSwgdl0pLCBuZXcgTWFwPHN0cmluZywgRmllbGRFcnJvcltdPigpKTtcbiAgICBncm91cGVkLmZvckVhY2goKHZhbHVlLCBwYXRoKSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGlvbkVycm9ycyA9IDxWYWxpZGF0aW9uRXJyb3JzPnt9O1xuICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4gKHZhbGlkYXRpb25FcnJvcnNbdi50eXBlXSA9IHYubWVzc2FnZSkpO1xuXG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmZvcm0uZ2V0KHBhdGgpO1xuICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBhY3R1YWwgbG9nZ2luZyBzZXJ2aWNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyh2YWxpZGF0aW9uRXJyb3JzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuY2hhbmdlc1N1YmplY3QubmV4dChzdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUZvcm1FcnJvcnMoKSB7XG4gICAgdGhpcy5kZWxldGVFcnJvcnModGhpcy5mb3JtLmZvcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVFcnJvcnMocm9vdEZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgT2JqZWN0LmtleXMocm9vdEZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gcm9vdEZvcm1Hcm91cC5jb250cm9sc1trZXldO1xuXG4gICAgICBpZiAoIXRoaXMuaXNQYXJlbnRDb250cm9sKGNvbnRyb2wpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlRXJyb3JzRnJvbUNvbnRyb2woa2V5LCBjb250cm9sKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRlbGV0ZUVycm9ycyhjb250cm9sIGFzIEZvcm1Hcm91cCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5sb29wRm9ybUFycmF5KGNvbnRyb2wgYXMgRm9ybUFycmF5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlRXJyb3JzRnJvbUNvbnRyb2woa2V5OiBzdHJpbmcgfCBudW1iZXIsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhcmVudENvbnRyb2woY29udHJvbDogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheTtcbiAgfVxuXG4gIHByaXZhdGUgbG9vcEZvcm1BcnJheShmb3JtQXJyYXk6IEZvcm1BcnJheSkge1xuICAgIGZvcm1BcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzUGFyZW50Q29udHJvbChjb250cm9sKSkge1xuICAgICAgICB0aGlzLmRlbGV0ZUVycm9yc0Zyb21Db250cm9sKGluZGV4LCBjb250cm9sKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLmRlbGV0ZUVycm9ycyhjb250cm9sIGFzIEZvcm1Hcm91cCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5sb29wRm9ybUFycmF5KGNvbnRyb2wgYXMgRm9ybUFycmF5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuVmFsaWRhdGlvbnM8VD4obW9kZWw6IFQsIGNhbGxiYWNrPzogKGxpc3Q6IEZpZWxkRXJyb3JbXSkgPT4gRmllbGRFcnJvcltdKTogUHJvbWlzZTxNb2RlbFN0YXRlUmVzdWx0PFQ+PiB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHRoaXMubW9kZWxWYWxpZGF0b3IudmFsaWRhdGUobW9kZWwpO1xuICAgIGNvbnN0IGZpbmFsID0gY2FsbGJhY2s/LihsaXN0KSB8fCBsaXN0O1xuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogZmluYWwubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzOiBmaW5hbCxcbiAgICAgIG1vZGVsOiBtb2RlbCxcbiAgICB9O1xuICB9XG59XG4iXX0=