@muziehdesign/forms 0.0.1-alpha.36
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/README.md +24 -0
- package/esm2020/lib/constants.mjs +2 -0
- package/esm2020/lib/field-error.mjs +2 -0
- package/esm2020/lib/forms.module.mjs +14 -0
- package/esm2020/lib/model-schema.factory.mjs +58 -0
- package/esm2020/lib/model-validator.mjs +16 -0
- package/esm2020/lib/property-schema-metadata.mjs +2 -0
- package/esm2020/lib/property-type.enum.mjs +8 -0
- package/esm2020/lib/string-schema.mjs +27 -0
- package/esm2020/muziehdesign-forms.mjs +5 -0
- package/esm2020/public-api.mjs +9 -0
- package/fesm2015/muziehdesign-forms.mjs +130 -0
- package/fesm2015/muziehdesign-forms.mjs.map +1 -0
- package/fesm2020/muziehdesign-forms.mjs +130 -0
- package/fesm2020/muziehdesign-forms.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/constants.d.ts +1 -0
- package/lib/field-error.d.ts +5 -0
- package/lib/forms.module.d.ts +6 -0
- package/lib/model-schema.factory.d.ts +10 -0
- package/lib/model-validator.d.ts +7 -0
- package/lib/property-schema-metadata.d.ts +6 -0
- package/lib/property-type.enum.d.ts +6 -0
- package/lib/string-schema.d.ts +15 -0
- package/package.json +31 -0
- package/public-api.d.ts +5 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Forms
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.0.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project forms` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project forms`.
|
|
8
|
+
> Note: Don't forget to add `--project forms` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build forms` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build forms`, go to the dist folder `cd dist/forms` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test forms` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UgPSAnY3VzdG9tOm11emllaGRlc2lnbjpzY2hlbWEnO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9maWVsZC1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWVsZEVycm9yIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FormsModule {
|
|
4
|
+
}
|
|
5
|
+
FormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
|
+
FormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
7
|
+
FormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, decorators: [{
|
|
9
|
+
type: NgModule,
|
|
10
|
+
args: [{
|
|
11
|
+
providers: []
|
|
12
|
+
}]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBT3pDLE1BQU0sT0FBTyxXQUFXOzt3R0FBWCxXQUFXO3lHQUFYLFdBQVc7eUdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQUh2QixRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybXNNb2R1bGUgeyB9XG4iXX0=
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { boolean, object, string } from 'yup';
|
|
3
|
+
import { ModelValidator } from './model-validator';
|
|
4
|
+
import { SCHEMA_METADATA_NAMESPACE } from './constants';
|
|
5
|
+
import { PropertyType } from './property-type.enum';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class ModelSchemaFactory {
|
|
8
|
+
constructor() { }
|
|
9
|
+
build(model) {
|
|
10
|
+
const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
|
|
11
|
+
let shape = {};
|
|
12
|
+
metadata.forEach((element) => {
|
|
13
|
+
if (element.type == PropertyType.string) {
|
|
14
|
+
shape[element.name] = this.buildStringSchema(element.options || {});
|
|
15
|
+
}
|
|
16
|
+
else if (element.type == PropertyType.boolean) {
|
|
17
|
+
shape[element.name] = this.buildBooleanSchema(element.options || {});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
const schema = object(shape);
|
|
21
|
+
return new ModelValidator(schema);
|
|
22
|
+
}
|
|
23
|
+
buildStringSchema(options) {
|
|
24
|
+
let stringSchema = string();
|
|
25
|
+
if (options.required) {
|
|
26
|
+
stringSchema = stringSchema.required();
|
|
27
|
+
}
|
|
28
|
+
if (options.length) {
|
|
29
|
+
stringSchema = stringSchema.length(options.length);
|
|
30
|
+
}
|
|
31
|
+
if (options.minimum) {
|
|
32
|
+
stringSchema = stringSchema.min(options.minimum);
|
|
33
|
+
}
|
|
34
|
+
if (options.maximum) {
|
|
35
|
+
stringSchema = stringSchema.max(options.maximum);
|
|
36
|
+
}
|
|
37
|
+
return stringSchema;
|
|
38
|
+
}
|
|
39
|
+
buildBooleanSchema(options) {
|
|
40
|
+
let booleanSchema = boolean();
|
|
41
|
+
if (options.equals) {
|
|
42
|
+
return booleanSchema.test({
|
|
43
|
+
name: 'mustBe',
|
|
44
|
+
test: (value) => value == options.equals
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return booleanSchema;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
|
+
ModelSchemaFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, providedIn: 'root' });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, decorators: [{
|
|
53
|
+
type: Injectable,
|
|
54
|
+
args: [{
|
|
55
|
+
providedIn: 'root',
|
|
56
|
+
}]
|
|
57
|
+
}], ctorParameters: function () { return []; } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFZLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixnQkFBZSxDQUFDO0lBRWhCLEtBQUssQ0FBSSxLQUFRO1FBQ2YsTUFBTSxRQUFRLEdBQTRDLE9BQU8sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEgsSUFBSSxLQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDckU7aUJBQU0sSUFBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7Z0JBQzlDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQWdCLENBQUM7UUFDNUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsT0FBNEI7UUFDcEQsSUFBSSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDeEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBNkI7UUFDdEQsSUFBSSxhQUFhLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBRyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU07YUFDeEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzsrR0E3Q1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYm9vbGVhbiwgb2JqZWN0LCBTY2hlbWFPZiwgc3RyaW5nIH0gZnJvbSAneXVwJztcbmltcG9ydCB7IE1vZGVsVmFsaWRhdG9yIH0gZnJvbSAnLi9tb2RlbC12YWxpZGF0b3InO1xuaW1wb3J0IHsgQm9vbGVhblNjaGVtYU9wdGlvbnMsIFNjaGVtYU9wdGlvbnMsIFN0cmluZ1NjaGVtYU9wdGlvbnMgfSBmcm9tICcuL3N0cmluZy1zY2hlbWEnO1xuaW1wb3J0IHsgU0NIRU1BX01FVEFEQVRBX05BTUVTUEFDRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9iamVjdFNoYXBlIH0gZnJvbSAneXVwL2xpYi9vYmplY3QnO1xuaW1wb3J0IHsgUHJvcGVydHlTY2hlbWFNZXRhZGF0YSB9IGZyb20gJy4vcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhJztcbmltcG9ydCB7IFByb3BlcnR5VHlwZSB9IGZyb20gJy4vcHJvcGVydHktdHlwZS5lbnVtJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIE1vZGVsU2NoZW1hRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBidWlsZDxUPihtb2RlbDogVCk6IE1vZGVsVmFsaWRhdG9yPFQ+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogUHJvcGVydHlTY2hlbWFNZXRhZGF0YTxTY2hlbWFPcHRpb25zPltdID0gUmVmbGVjdC5nZXRNZXRhZGF0YShTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFLCBtb2RlbCk7XG4gICAgbGV0IHNoYXBlOiBPYmplY3RTaGFwZSA9IHt9O1xuICAgIG1ldGFkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gUHJvcGVydHlUeXBlLnN0cmluZykge1xuICAgICAgICBzaGFwZVtlbGVtZW50Lm5hbWVdID0gdGhpcy5idWlsZFN0cmluZ1NjaGVtYShlbGVtZW50Lm9wdGlvbnMgfHwge30pO1xuICAgICAgfSBlbHNlIGlmKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuYm9vbGVhbikge1xuICAgICAgICBzaGFwZVtlbGVtZW50Lm5hbWVdID0gdGhpcy5idWlsZEJvb2xlYW5TY2hlbWEoZWxlbWVudC5vcHRpb25zIHx8IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzY2hlbWEgPSBvYmplY3Qoc2hhcGUpIGFzIFNjaGVtYU9mPFQ+O1xuICAgIHJldHVybiBuZXcgTW9kZWxWYWxpZGF0b3Ioc2NoZW1hKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTdHJpbmdTY2hlbWEob3B0aW9uczogU3RyaW5nU2NoZW1hT3B0aW9ucykge1xuICAgIGxldCBzdHJpbmdTY2hlbWEgPSBzdHJpbmcoKTtcbiAgICBpZiAob3B0aW9ucy5yZXF1aXJlZCkge1xuICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLnJlcXVpcmVkKCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLmxlbmd0aChvcHRpb25zLmxlbmd0aCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm1pbmltdW0pIHtcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5taW4ob3B0aW9ucy5taW5pbXVtKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubWF4aW11bSkge1xuICAgICAgc3RyaW5nU2NoZW1hID0gc3RyaW5nU2NoZW1hLm1heChvcHRpb25zLm1heGltdW0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmdTY2hlbWE7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQm9vbGVhblNjaGVtYShvcHRpb25zOiBCb29sZWFuU2NoZW1hT3B0aW9ucykge1xuICAgIGxldCBib29sZWFuU2NoZW1hID0gYm9vbGVhbigpO1xuICAgIGlmKG9wdGlvbnMuZXF1YWxzKSB7XG4gICAgICByZXR1cm4gYm9vbGVhblNjaGVtYS50ZXN0KHtcbiAgICAgICAgbmFtZTogJ211c3RCZScsXG4gICAgICAgIHRlc3Q6ICh2YWx1ZSk9PiB2YWx1ZSA9PSBvcHRpb25zLmVxdWFsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvb2xlYW5TY2hlbWE7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class ModelValidator {
|
|
2
|
+
constructor(modelSchema) {
|
|
3
|
+
this.schema = modelSchema;
|
|
4
|
+
}
|
|
5
|
+
validate(model) {
|
|
6
|
+
return this.schema
|
|
7
|
+
.validate(model, { abortEarly: false })
|
|
8
|
+
.then(() => {
|
|
9
|
+
return [];
|
|
10
|
+
})
|
|
11
|
+
.catch((e) => {
|
|
12
|
+
return e.inner.map((error) => ({ path: error.path, type: error.type, message: error.message }));
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbW9kZWwtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQVksV0FBd0I7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBSSxLQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRTtZQUM1QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWFPZiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAneXVwJztcbmltcG9ydCB7IEZpZWxkRXJyb3IgfSBmcm9tICcuL2ZpZWxkLWVycm9yJztcblxuZXhwb3J0IGNsYXNzIE1vZGVsVmFsaWRhdG9yPFQ+IHtcbiAgcHJpdmF0ZSBzY2hlbWE6IFNjaGVtYU9mPFQ+O1xuICBjb25zdHJ1Y3Rvcihtb2RlbFNjaGVtYTogU2NoZW1hT2Y8VD4pIHtcbiAgICB0aGlzLnNjaGVtYSA9IG1vZGVsU2NoZW1hO1xuICB9XG5cbiAgdmFsaWRhdGU8VD4obW9kZWw6IFQpOiBQcm9taXNlPEZpZWxkRXJyb3JbXT4ge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgLnZhbGlkYXRlKG1vZGVsLCB7IGFib3J0RWFybHk6IGZhbHNlIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGU6IFZhbGlkYXRpb25FcnJvcikgPT4ge1xuICAgICAgICByZXR1cm4gZS5pbm5lci5tYXAoKGVycm9yKSA9PiA8RmllbGRFcnJvcj57IHBhdGg6IGVycm9yLnBhdGgsIHR5cGU6IGVycm9yLnR5cGUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktc2NoZW1hLW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eVR5cGUgfSBmcm9tIFwiLi9wcm9wZXJ0eS10eXBlLmVudW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhPFQ+IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBQcm9wZXJ0eVR5cGU7XG4gIG9wdGlvbnM6IFQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export var PropertyType;
|
|
2
|
+
(function (PropertyType) {
|
|
3
|
+
PropertyType[PropertyType["string"] = 0] = "string";
|
|
4
|
+
PropertyType[PropertyType["number"] = 1] = "number";
|
|
5
|
+
PropertyType[PropertyType["array"] = 2] = "array";
|
|
6
|
+
PropertyType[PropertyType["boolean"] = 3] = "boolean";
|
|
7
|
+
})(PropertyType || (PropertyType = {}));
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktdHlwZS5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvcHJvcGVydHktdHlwZS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsbURBQU0sQ0FBQTtJQUNOLG1EQUFNLENBQUE7SUFDTixpREFBSyxDQUFBO0lBQ0wscURBQU8sQ0FBQTtBQUNULENBQUMsRUFMVyxZQUFZLEtBQVosWUFBWSxRQUt2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFByb3BlcnR5VHlwZSB7XG4gIHN0cmluZyxcbiAgbnVtYmVyLFxuICBhcnJheSxcbiAgYm9vbGVhblxufVxuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { PropertyType } from './property-type.enum';
|
|
3
|
+
export function StringSchema(options) {
|
|
4
|
+
return function (target, propertyKey) {
|
|
5
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
6
|
+
metadata.push({
|
|
7
|
+
name: propertyKey,
|
|
8
|
+
type: PropertyType.string,
|
|
9
|
+
options: options,
|
|
10
|
+
});
|
|
11
|
+
// TODO: define on property
|
|
12
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function BooleanSchema(options) {
|
|
16
|
+
return function (target, propertyKey) {
|
|
17
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
18
|
+
metadata.push({
|
|
19
|
+
name: propertyKey,
|
|
20
|
+
type: PropertyType.boolean,
|
|
21
|
+
options: options,
|
|
22
|
+
});
|
|
23
|
+
// TODO: define on property
|
|
24
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL3N0cmluZy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZcEQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUE2QjtJQUN4RCxPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQTRCO1FBQzNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pGLFFBQVEsQ0FBQyxJQUFJLENBQThDO1lBQ3pELElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUN6QixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7UUFDSCwyQkFBMkI7UUFDM0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBOEI7SUFDMUQsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUE0QjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRixRQUFRLENBQUMsSUFBSSxDQUE4QztZQUN6RCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87WUFDMUIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsMkJBQTJCO1FBQzNCLE9BQU8sQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHsgUHJvcGVydHlTY2hlbWFNZXRhZGF0YSB9IGZyb20gJy4vcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhJztcbmltcG9ydCB7IFByb3BlcnR5VHlwZSB9IGZyb20gJy4vcHJvcGVydHktdHlwZS5lbnVtJztcblxuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdTY2hlbWFPcHRpb25zIGV4dGVuZHMgU2NoZW1hT3B0aW9ucyB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgbWluaW11bT86IG51bWJlcjtcbiAgbWF4aW11bT86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hT3B0aW9ucyB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFN0cmluZ1NjaGVtYShvcHRpb25zPzogU3RyaW5nU2NoZW1hT3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgU3ltYm9sKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdjdXN0b206bXV6aWVoZGVzaWduOnNjaGVtYScsIHRhcmdldCkgfHwgW107XG4gICAgbWV0YWRhdGEucHVzaCg8UHJvcGVydHlTY2hlbWFNZXRhZGF0YTxTdHJpbmdTY2hlbWFPcHRpb25zPj57XG4gICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIHR5cGU6IFByb3BlcnR5VHlwZS5zdHJpbmcsXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH0pO1xuICAgIC8vIFRPRE86IGRlZmluZSBvbiBwcm9wZXJ0eVxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ2N1c3RvbTptdXppZWhkZXNpZ246c2NoZW1hJywgbWV0YWRhdGEsIHRhcmdldCk7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhblNjaGVtYU9wdGlvbnMgZXh0ZW5kcyBTY2hlbWFPcHRpb25zIHtcbiAgZXF1YWxzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEJvb2xlYW5TY2hlbWEob3B0aW9ucz86IEJvb2xlYW5TY2hlbWFPcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBTeW1ib2wpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2N1c3RvbTptdXppZWhkZXNpZ246c2NoZW1hJywgdGFyZ2V0KSB8fCBbXTtcbiAgICBtZXRhZGF0YS5wdXNoKDxQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhPFN0cmluZ1NjaGVtYU9wdGlvbnM+PntcbiAgICAgIG5hbWU6IHByb3BlcnR5S2V5LFxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLmJvb2xlYW4sXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH0pO1xuICAgIC8vIFRPRE86IGRlZmluZSBvbiBwcm9wZXJ0eVxuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoJ2N1c3RvbTptdXppZWhkZXNpZ246c2NoZW1hJywgbWV0YWRhdGEsIHRhcmdldCk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV6aWVoZGVzaWduLWZvcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9tdXppZWhkZXNpZ24tZm9ybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of forms
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/field-error';
|
|
5
|
+
export * from './lib/model-schema.factory';
|
|
6
|
+
export * from './lib/model-validator';
|
|
7
|
+
export * from './lib/string-schema';
|
|
8
|
+
export * from './lib/forms.module';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZm9ybXNcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmllbGQtZXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWwtc2NoZW1hLmZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWwtdmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0cmluZy1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybXMubW9kdWxlJztcbiJdfQ==
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import { object, string, boolean } from 'yup';
|
|
4
|
+
import 'reflect-metadata';
|
|
5
|
+
|
|
6
|
+
class ModelValidator {
|
|
7
|
+
constructor(modelSchema) {
|
|
8
|
+
this.schema = modelSchema;
|
|
9
|
+
}
|
|
10
|
+
validate(model) {
|
|
11
|
+
return this.schema
|
|
12
|
+
.validate(model, { abortEarly: false })
|
|
13
|
+
.then(() => {
|
|
14
|
+
return [];
|
|
15
|
+
})
|
|
16
|
+
.catch((e) => {
|
|
17
|
+
return e.inner.map((error) => ({ path: error.path, type: error.type, message: error.message }));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';
|
|
23
|
+
|
|
24
|
+
var PropertyType;
|
|
25
|
+
(function (PropertyType) {
|
|
26
|
+
PropertyType[PropertyType["string"] = 0] = "string";
|
|
27
|
+
PropertyType[PropertyType["number"] = 1] = "number";
|
|
28
|
+
PropertyType[PropertyType["array"] = 2] = "array";
|
|
29
|
+
PropertyType[PropertyType["boolean"] = 3] = "boolean";
|
|
30
|
+
})(PropertyType || (PropertyType = {}));
|
|
31
|
+
|
|
32
|
+
class ModelSchemaFactory {
|
|
33
|
+
constructor() { }
|
|
34
|
+
build(model) {
|
|
35
|
+
const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
|
|
36
|
+
let shape = {};
|
|
37
|
+
metadata.forEach((element) => {
|
|
38
|
+
if (element.type == PropertyType.string) {
|
|
39
|
+
shape[element.name] = this.buildStringSchema(element.options || {});
|
|
40
|
+
}
|
|
41
|
+
else if (element.type == PropertyType.boolean) {
|
|
42
|
+
shape[element.name] = this.buildBooleanSchema(element.options || {});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const schema = object(shape);
|
|
46
|
+
return new ModelValidator(schema);
|
|
47
|
+
}
|
|
48
|
+
buildStringSchema(options) {
|
|
49
|
+
let stringSchema = string();
|
|
50
|
+
if (options.required) {
|
|
51
|
+
stringSchema = stringSchema.required();
|
|
52
|
+
}
|
|
53
|
+
if (options.length) {
|
|
54
|
+
stringSchema = stringSchema.length(options.length);
|
|
55
|
+
}
|
|
56
|
+
if (options.minimum) {
|
|
57
|
+
stringSchema = stringSchema.min(options.minimum);
|
|
58
|
+
}
|
|
59
|
+
if (options.maximum) {
|
|
60
|
+
stringSchema = stringSchema.max(options.maximum);
|
|
61
|
+
}
|
|
62
|
+
return stringSchema;
|
|
63
|
+
}
|
|
64
|
+
buildBooleanSchema(options) {
|
|
65
|
+
let booleanSchema = boolean();
|
|
66
|
+
if (options.equals) {
|
|
67
|
+
return booleanSchema.test({
|
|
68
|
+
name: 'mustBe',
|
|
69
|
+
test: (value) => value == options.equals
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return booleanSchema;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
76
|
+
ModelSchemaFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, providedIn: 'root' });
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, decorators: [{
|
|
78
|
+
type: Injectable,
|
|
79
|
+
args: [{
|
|
80
|
+
providedIn: 'root',
|
|
81
|
+
}]
|
|
82
|
+
}], ctorParameters: function () { return []; } });
|
|
83
|
+
|
|
84
|
+
function StringSchema(options) {
|
|
85
|
+
return function (target, propertyKey) {
|
|
86
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
87
|
+
metadata.push({
|
|
88
|
+
name: propertyKey,
|
|
89
|
+
type: PropertyType.string,
|
|
90
|
+
options: options,
|
|
91
|
+
});
|
|
92
|
+
// TODO: define on property
|
|
93
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function BooleanSchema(options) {
|
|
97
|
+
return function (target, propertyKey) {
|
|
98
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
99
|
+
metadata.push({
|
|
100
|
+
name: propertyKey,
|
|
101
|
+
type: PropertyType.boolean,
|
|
102
|
+
options: options,
|
|
103
|
+
});
|
|
104
|
+
// TODO: define on property
|
|
105
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
class FormsModule {
|
|
110
|
+
}
|
|
111
|
+
FormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
112
|
+
FormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
113
|
+
FormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, decorators: [{
|
|
115
|
+
type: NgModule,
|
|
116
|
+
args: [{
|
|
117
|
+
providers: []
|
|
118
|
+
}]
|
|
119
|
+
}] });
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* Public API Surface of forms
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Generated bundle index. Do not edit.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
export { BooleanSchema, FormsModule, ModelSchemaFactory, ModelValidator, StringSchema };
|
|
130
|
+
//# sourceMappingURL=muziehdesign-forms.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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/property-type.enum.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/string-schema.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.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:schema';\n","export enum PropertyType {\n string,\n number,\n array,\n boolean\n}\n","import { Injectable } from '@angular/core';\nimport { boolean, object, SchemaOf, string } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { BooleanSchemaOptions, 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: PropertySchemaMetadata<SchemaOptions>[] = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\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();\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 'reflect-metadata';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\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","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import { object, string, boolean } from 'yup';
|
|
4
|
+
import 'reflect-metadata';
|
|
5
|
+
|
|
6
|
+
class ModelValidator {
|
|
7
|
+
constructor(modelSchema) {
|
|
8
|
+
this.schema = modelSchema;
|
|
9
|
+
}
|
|
10
|
+
validate(model) {
|
|
11
|
+
return this.schema
|
|
12
|
+
.validate(model, { abortEarly: false })
|
|
13
|
+
.then(() => {
|
|
14
|
+
return [];
|
|
15
|
+
})
|
|
16
|
+
.catch((e) => {
|
|
17
|
+
return e.inner.map((error) => ({ path: error.path, type: error.type, message: error.message }));
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';
|
|
23
|
+
|
|
24
|
+
var PropertyType;
|
|
25
|
+
(function (PropertyType) {
|
|
26
|
+
PropertyType[PropertyType["string"] = 0] = "string";
|
|
27
|
+
PropertyType[PropertyType["number"] = 1] = "number";
|
|
28
|
+
PropertyType[PropertyType["array"] = 2] = "array";
|
|
29
|
+
PropertyType[PropertyType["boolean"] = 3] = "boolean";
|
|
30
|
+
})(PropertyType || (PropertyType = {}));
|
|
31
|
+
|
|
32
|
+
class ModelSchemaFactory {
|
|
33
|
+
constructor() { }
|
|
34
|
+
build(model) {
|
|
35
|
+
const metadata = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);
|
|
36
|
+
let shape = {};
|
|
37
|
+
metadata.forEach((element) => {
|
|
38
|
+
if (element.type == PropertyType.string) {
|
|
39
|
+
shape[element.name] = this.buildStringSchema(element.options || {});
|
|
40
|
+
}
|
|
41
|
+
else if (element.type == PropertyType.boolean) {
|
|
42
|
+
shape[element.name] = this.buildBooleanSchema(element.options || {});
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
const schema = object(shape);
|
|
46
|
+
return new ModelValidator(schema);
|
|
47
|
+
}
|
|
48
|
+
buildStringSchema(options) {
|
|
49
|
+
let stringSchema = string();
|
|
50
|
+
if (options.required) {
|
|
51
|
+
stringSchema = stringSchema.required();
|
|
52
|
+
}
|
|
53
|
+
if (options.length) {
|
|
54
|
+
stringSchema = stringSchema.length(options.length);
|
|
55
|
+
}
|
|
56
|
+
if (options.minimum) {
|
|
57
|
+
stringSchema = stringSchema.min(options.minimum);
|
|
58
|
+
}
|
|
59
|
+
if (options.maximum) {
|
|
60
|
+
stringSchema = stringSchema.max(options.maximum);
|
|
61
|
+
}
|
|
62
|
+
return stringSchema;
|
|
63
|
+
}
|
|
64
|
+
buildBooleanSchema(options) {
|
|
65
|
+
let booleanSchema = boolean();
|
|
66
|
+
if (options.equals) {
|
|
67
|
+
return booleanSchema.test({
|
|
68
|
+
name: 'mustBe',
|
|
69
|
+
test: (value) => value == options.equals
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return booleanSchema;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
ModelSchemaFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
76
|
+
ModelSchemaFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, providedIn: 'root' });
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: ModelSchemaFactory, decorators: [{
|
|
78
|
+
type: Injectable,
|
|
79
|
+
args: [{
|
|
80
|
+
providedIn: 'root',
|
|
81
|
+
}]
|
|
82
|
+
}], ctorParameters: function () { return []; } });
|
|
83
|
+
|
|
84
|
+
function StringSchema(options) {
|
|
85
|
+
return function (target, propertyKey) {
|
|
86
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
87
|
+
metadata.push({
|
|
88
|
+
name: propertyKey,
|
|
89
|
+
type: PropertyType.string,
|
|
90
|
+
options: options,
|
|
91
|
+
});
|
|
92
|
+
// TODO: define on property
|
|
93
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function BooleanSchema(options) {
|
|
97
|
+
return function (target, propertyKey) {
|
|
98
|
+
const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];
|
|
99
|
+
metadata.push({
|
|
100
|
+
name: propertyKey,
|
|
101
|
+
type: PropertyType.boolean,
|
|
102
|
+
options: options,
|
|
103
|
+
});
|
|
104
|
+
// TODO: define on property
|
|
105
|
+
Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
class FormsModule {
|
|
110
|
+
}
|
|
111
|
+
FormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
112
|
+
FormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
113
|
+
FormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule });
|
|
114
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImport: i0, type: FormsModule, decorators: [{
|
|
115
|
+
type: NgModule,
|
|
116
|
+
args: [{
|
|
117
|
+
providers: []
|
|
118
|
+
}]
|
|
119
|
+
}] });
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* Public API Surface of forms
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Generated bundle index. Do not edit.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
export { BooleanSchema, FormsModule, ModelSchemaFactory, ModelValidator, StringSchema };
|
|
130
|
+
//# sourceMappingURL=muziehdesign-forms.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
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/property-type.enum.ts","../../../../projects/muziehdesign/forms/src/lib/model-schema.factory.ts","../../../../projects/muziehdesign/forms/src/lib/string-schema.ts","../../../../projects/muziehdesign/forms/src/lib/forms.module.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:schema';\n","export enum PropertyType {\n string,\n number,\n array,\n boolean\n}\n","import { Injectable } from '@angular/core';\nimport { boolean, object, SchemaOf, string } from 'yup';\nimport { ModelValidator } from './model-validator';\nimport { BooleanSchemaOptions, 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: PropertySchemaMetadata<SchemaOptions>[] = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\n let shape: ObjectShape = {};\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();\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 'reflect-metadata';\nimport { PropertySchemaMetadata } from './property-schema-metadata';\nimport { PropertyType } from './property-type.enum';\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","import { NgModule } from '@angular/core';\n\n\n\n@NgModule({\n providers: []\n})\nexport class FormsModule { }\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';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SCHEMA_METADATA_NAMESPACE = "custom:muziehdesign:schema";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ModelValidator } from './model-validator';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ModelSchemaFactory {
|
|
4
|
+
constructor();
|
|
5
|
+
build<T>(model: T): ModelValidator<T>;
|
|
6
|
+
private buildStringSchema;
|
|
7
|
+
private buildBooleanSchema;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModelSchemaFactory, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ModelSchemaFactory>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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;
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@muziehdesign/forms",
|
|
3
|
+
"version": "0.0.1-alpha.36",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "^14.0.0",
|
|
6
|
+
"@angular/core": "^14.0.0"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"module": "fesm2015/muziehdesign-forms.mjs",
|
|
12
|
+
"es2020": "fesm2020/muziehdesign-forms.mjs",
|
|
13
|
+
"esm2020": "esm2020/muziehdesign-forms.mjs",
|
|
14
|
+
"fesm2020": "fesm2020/muziehdesign-forms.mjs",
|
|
15
|
+
"fesm2015": "fesm2015/muziehdesign-forms.mjs",
|
|
16
|
+
"typings": "index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./package.json": {
|
|
19
|
+
"default": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./index.d.ts",
|
|
23
|
+
"esm2020": "./esm2020/muziehdesign-forms.mjs",
|
|
24
|
+
"es2020": "./fesm2020/muziehdesign-forms.mjs",
|
|
25
|
+
"es2015": "./fesm2015/muziehdesign-forms.mjs",
|
|
26
|
+
"node": "./fesm2015/muziehdesign-forms.mjs",
|
|
27
|
+
"default": "./fesm2020/muziehdesign-forms.mjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"sideEffects": false
|
|
31
|
+
}
|