@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.
- package/esm2020/lib/model-schema.factory.mjs +26 -36
- package/esm2020/lib/ng-form-model-state.service.mjs +6 -6
- package/esm2020/lib/type-annotations.mjs +42 -0
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/muziehdesign-forms.mjs +61 -91
- package/fesm2015/muziehdesign-forms.mjs.map +1 -1
- package/fesm2020/muziehdesign-forms.mjs +61 -91
- package/fesm2020/muziehdesign-forms.mjs.map +1 -1
- package/lib/type-annotations.d.ts +45 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2020/lib/string-schema.mjs +0 -55
- package/lib/string-schema.d.ts +0 -34
|
@@ -1,60 +1,50 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import {
|
|
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((
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
25
|
+
let schema = Yup.string();
|
|
35
26
|
if (options.required) {
|
|
36
|
-
|
|
27
|
+
schema = schema.required(options.required.message);
|
|
37
28
|
}
|
|
38
29
|
if (options.length) {
|
|
39
|
-
|
|
30
|
+
schema = schema.length(options.length.length, options.length.message);
|
|
40
31
|
}
|
|
41
|
-
|
|
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
|
|
35
|
+
let schema = Yup.boolean();
|
|
36
|
+
if (options.required) {
|
|
37
|
+
schema = schema.required(options.required.message);
|
|
38
|
+
}
|
|
51
39
|
if (options.equals) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
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,
|
|
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('
|
|
36
|
-
|
|
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
|
-
|
|
39
|
-
this.form.
|
|
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,
|
|
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==
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -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/
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
48
|
+
function BooleanType(...annotations) {
|
|
46
49
|
return function (target, propertyKey) {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
58
|
-
return
|
|
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
|
|
67
|
-
return
|
|
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
|
|
76
|
-
return
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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((
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
|
85
|
+
let schema = Yup.string();
|
|
115
86
|
if (options.required) {
|
|
116
|
-
|
|
87
|
+
schema = schema.required(options.required.message);
|
|
117
88
|
}
|
|
118
89
|
if (options.length) {
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
if (options.minimum) {
|
|
122
|
-
stringSchema = stringSchema.min(options.minimum);
|
|
90
|
+
schema = schema.length(options.length.length, options.length.message);
|
|
123
91
|
}
|
|
124
|
-
|
|
125
|
-
stringSchema = stringSchema.max(options.maximum);
|
|
126
|
-
}
|
|
127
|
-
return stringSchema;
|
|
92
|
+
return schema;
|
|
128
93
|
}
|
|
129
94
|
buildBooleanSchema(options) {
|
|
130
|
-
let
|
|
95
|
+
let schema = Yup.boolean();
|
|
96
|
+
if (options.required) {
|
|
97
|
+
schema = schema.required(options.required.message);
|
|
98
|
+
}
|
|
131
99
|
if (options.equals) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
|
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('
|
|
192
|
-
|
|
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
|
-
|
|
195
|
-
this.form.
|
|
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 {
|
|
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":"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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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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, NgModule } from '@angular/core';
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
47
|
+
function BooleanType(...annotations) {
|
|
45
48
|
return function (target, propertyKey) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
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
|
|
57
|
-
return
|
|
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
|
|
66
|
-
return
|
|
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
|
|
75
|
-
return
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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((
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
|
84
|
+
let schema = Yup.string();
|
|
114
85
|
if (options.required) {
|
|
115
|
-
|
|
86
|
+
schema = schema.required(options.required.message);
|
|
116
87
|
}
|
|
117
88
|
if (options.length) {
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
if (options.minimum) {
|
|
121
|
-
stringSchema = stringSchema.min(options.minimum);
|
|
89
|
+
schema = schema.length(options.length.length, options.length.message);
|
|
122
90
|
}
|
|
123
|
-
|
|
124
|
-
stringSchema = stringSchema.max(options.maximum);
|
|
125
|
-
}
|
|
126
|
-
return stringSchema;
|
|
91
|
+
return schema;
|
|
127
92
|
}
|
|
128
93
|
buildBooleanSchema(options) {
|
|
129
|
-
let
|
|
94
|
+
let schema = Yup.boolean();
|
|
95
|
+
if (options.required) {
|
|
96
|
+
schema = schema.required(options.required.message);
|
|
97
|
+
}
|
|
130
98
|
if (options.equals) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
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('
|
|
191
|
-
|
|
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
|
-
|
|
194
|
-
this.form.
|
|
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 {
|
|
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
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/
|
|
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==
|
package/lib/string-schema.d.ts
DELETED
|
@@ -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;
|