@muziehdesign/forms 0.0.1
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UgPSAnY3VzdG9tOm11emllaGRlc2lnbjpzY2hlbWEnO1xyXG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9maWVsZC1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBGaWVsZEVycm9yIHtcclxuICBwYXRoOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtc2NoZW1hLmZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tdXppZWhkZXNpZ24vZm9ybXMvc3JjL2xpYi9tb2RlbC1zY2hlbWEuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFZLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLcEQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixnQkFBZSxDQUFDO0lBRWhCLEtBQUssQ0FBSSxLQUFRO1FBQ2YsTUFBTSxRQUFRLEdBQTRDLE9BQU8sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEgsSUFBSSxLQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDckU7aUJBQU0sSUFBRyxPQUFPLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7Z0JBQzlDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7YUFDdEU7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQWdCLENBQUM7UUFDNUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsT0FBNEI7UUFDcEQsSUFBSSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLFlBQVksR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDeEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixZQUFZLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsT0FBNkI7UUFDdEQsSUFBSSxhQUFhLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBRyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDeEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU07YUFDeEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDOzsrR0E3Q1Usa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGakIsTUFBTTsyRkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBib29sZWFuLCBvYmplY3QsIFNjaGVtYU9mLCBzdHJpbmcgfSBmcm9tICd5dXAnO1xyXG5pbXBvcnQgeyBNb2RlbFZhbGlkYXRvciB9IGZyb20gJy4vbW9kZWwtdmFsaWRhdG9yJztcclxuaW1wb3J0IHsgQm9vbGVhblNjaGVtYU9wdGlvbnMsIFNjaGVtYU9wdGlvbnMsIFN0cmluZ1NjaGVtYU9wdGlvbnMgfSBmcm9tICcuL3N0cmluZy1zY2hlbWEnO1xyXG5pbXBvcnQgeyBTQ0hFTUFfTUVUQURBVEFfTkFNRVNQQUNFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBPYmplY3RTaGFwZSB9IGZyb20gJ3l1cC9saWIvb2JqZWN0JztcclxuaW1wb3J0IHsgUHJvcGVydHlTY2hlbWFNZXRhZGF0YSB9IGZyb20gJy4vcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhJztcclxuaW1wb3J0IHsgUHJvcGVydHlUeXBlIH0gZnJvbSAnLi9wcm9wZXJ0eS10eXBlLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGVsU2NoZW1hRmFjdG9yeSB7XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBidWlsZDxUPihtb2RlbDogVCk6IE1vZGVsVmFsaWRhdG9yPFQ+IHtcclxuICAgIGNvbnN0IG1ldGFkYXRhOiBQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhPFNjaGVtYU9wdGlvbnM+W10gPSBSZWZsZWN0LmdldE1ldGFkYXRhKFNDSEVNQV9NRVRBREFUQV9OQU1FU1BBQ0UsIG1vZGVsKTtcclxuICAgIGxldCBzaGFwZTogT2JqZWN0U2hhcGUgPSB7fTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuc3RyaW5nKSB7XHJcbiAgICAgICAgc2hhcGVbZWxlbWVudC5uYW1lXSA9IHRoaXMuYnVpbGRTdHJpbmdTY2hlbWEoZWxlbWVudC5vcHRpb25zIHx8IHt9KTtcclxuICAgICAgfSBlbHNlIGlmKGVsZW1lbnQudHlwZSA9PSBQcm9wZXJ0eVR5cGUuYm9vbGVhbikge1xyXG4gICAgICAgIHNoYXBlW2VsZW1lbnQubmFtZV0gPSB0aGlzLmJ1aWxkQm9vbGVhblNjaGVtYShlbGVtZW50Lm9wdGlvbnMgfHwge30pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHNjaGVtYSA9IG9iamVjdChzaGFwZSkgYXMgU2NoZW1hT2Y8VD47XHJcbiAgICByZXR1cm4gbmV3IE1vZGVsVmFsaWRhdG9yKHNjaGVtYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkU3RyaW5nU2NoZW1hKG9wdGlvbnM6IFN0cmluZ1NjaGVtYU9wdGlvbnMpIHtcclxuICAgIGxldCBzdHJpbmdTY2hlbWEgPSBzdHJpbmcoKTtcclxuICAgIGlmIChvcHRpb25zLnJlcXVpcmVkKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5yZXF1aXJlZCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5sZW5ndGgob3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMubWluaW11bSkge1xyXG4gICAgICBzdHJpbmdTY2hlbWEgPSBzdHJpbmdTY2hlbWEubWluKG9wdGlvbnMubWluaW11bSk7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5tYXhpbXVtKSB7XHJcbiAgICAgIHN0cmluZ1NjaGVtYSA9IHN0cmluZ1NjaGVtYS5tYXgob3B0aW9ucy5tYXhpbXVtKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyaW5nU2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEJvb2xlYW5TY2hlbWEob3B0aW9uczogQm9vbGVhblNjaGVtYU9wdGlvbnMpIHtcclxuICAgIGxldCBib29sZWFuU2NoZW1hID0gYm9vbGVhbigpO1xyXG4gICAgaWYob3B0aW9ucy5lcXVhbHMpIHtcclxuICAgICAgcmV0dXJuIGJvb2xlYW5TY2hlbWEudGVzdCh7XHJcbiAgICAgICAgbmFtZTogJ211c3RCZScsXHJcbiAgICAgICAgdGVzdDogKHZhbHVlKT0+IHZhbHVlID09IG9wdGlvbnMuZXF1YWxzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBib29sZWFuU2NoZW1hO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvbW9kZWwtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQVksV0FBd0I7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELFFBQVEsQ0FBSSxLQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLENBQWtCLEVBQUUsRUFBRTtZQUM1QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQSxDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2hlbWFPZiwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAneXVwJztcclxuaW1wb3J0IHsgRmllbGRFcnJvciB9IGZyb20gJy4vZmllbGQtZXJyb3InO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1vZGVsVmFsaWRhdG9yPFQ+IHtcclxuICBwcml2YXRlIHNjaGVtYTogU2NoZW1hT2Y8VD47XHJcbiAgY29uc3RydWN0b3IobW9kZWxTY2hlbWE6IFNjaGVtYU9mPFQ+KSB7XHJcbiAgICB0aGlzLnNjaGVtYSA9IG1vZGVsU2NoZW1hO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGU8VD4obW9kZWw6IFQpOiBQcm9taXNlPEZpZWxkRXJyb3JbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NoZW1hXHJcbiAgICAgIC52YWxpZGF0ZShtb2RlbCwgeyBhYm9ydEVhcmx5OiBmYWxzZSB9KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGU6IFZhbGlkYXRpb25FcnJvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBlLmlubmVyLm1hcCgoZXJyb3IpID0+IDxGaWVsZEVycm9yPnsgcGF0aDogZXJyb3IucGF0aCwgdHlwZTogZXJyb3IudHlwZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktc2NoZW1hLW1ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvcHJvcGVydHktc2NoZW1hLW1ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eVR5cGUgfSBmcm9tIFwiLi9wcm9wZXJ0eS10eXBlLmVudW1cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlTY2hlbWFNZXRhZGF0YTxUPiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IFByb3BlcnR5VHlwZTtcclxuICBvcHRpb25zOiBUO1xyXG59XHJcbiJdfQ==
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktdHlwZS5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXV6aWVoZGVzaWduL2Zvcm1zL3NyYy9saWIvcHJvcGVydHktdHlwZS5lbnVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEIsbURBQU0sQ0FBQTtJQUNOLG1EQUFNLENBQUE7SUFDTixpREFBSyxDQUFBO0lBQ0wscURBQU8sQ0FBQTtBQUNULENBQUMsRUFMVyxZQUFZLEtBQVosWUFBWSxRQUt2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIFByb3BlcnR5VHlwZSB7XHJcbiAgc3RyaW5nLFxyXG4gIG51bWJlcixcclxuICBhcnJheSxcclxuICBib29sZWFuXHJcbn1cclxuIl19
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL211emllaGRlc2lnbi9mb3Jtcy9zcmMvbGliL3N0cmluZy1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFZcEQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUE2QjtJQUN4RCxPQUFPLFVBQVUsTUFBYyxFQUFFLFdBQTRCO1FBQzNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsNEJBQTRCLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pGLFFBQVEsQ0FBQyxJQUFJLENBQThDO1lBQ3pELElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsTUFBTTtZQUN6QixPQUFPLEVBQUUsT0FBTztTQUNqQixDQUFDLENBQUM7UUFDSCwyQkFBMkI7UUFDM0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyw0QkFBNEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBOEI7SUFDMUQsT0FBTyxVQUFVLE1BQWMsRUFBRSxXQUE0QjtRQUMzRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRixRQUFRLENBQUMsSUFBSSxDQUE4QztZQUN6RCxJQUFJLEVBQUUsV0FBVztZQUNqQixJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU87WUFDMUIsT0FBTyxFQUFFLE9BQU87U0FDakIsQ0FBQyxDQUFDO1FBQ0gsMkJBQTJCO1FBQzNCLE9BQU8sQ0FBQyxjQUFjLENBQUMsNEJBQTRCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVNjaGVtYU1ldGFkYXRhIH0gZnJvbSAnLi9wcm9wZXJ0eS1zY2hlbWEtbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVR5cGUgfSBmcm9tICcuL3Byb3BlcnR5LXR5cGUuZW51bSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ1NjaGVtYU9wdGlvbnMgZXh0ZW5kcyBTY2hlbWFPcHRpb25zIHtcclxuICBsZW5ndGg/OiBudW1iZXI7XHJcbiAgbWluaW11bT86IG51bWJlcjtcclxuICBtYXhpbXVtPzogbnVtYmVyO1xyXG4gIHBhdHRlcm4/OiBSZWdFeHA7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFPcHRpb25zIHtcclxuICByZXF1aXJlZD86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTdHJpbmdTY2hlbWEob3B0aW9ucz86IFN0cmluZ1NjaGVtYU9wdGlvbnMpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgU3ltYm9sKSB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2N1c3RvbTptdXppZWhkZXNpZ246c2NoZW1hJywgdGFyZ2V0KSB8fCBbXTtcclxuICAgIG1ldGFkYXRhLnB1c2goPFByb3BlcnR5U2NoZW1hTWV0YWRhdGE8U3RyaW5nU2NoZW1hT3B0aW9ucz4+e1xyXG4gICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcclxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLnN0cmluZyxcclxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcclxuICAgIH0pO1xyXG4gICAgLy8gVE9ETzogZGVmaW5lIG9uIHByb3BlcnR5XHJcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKCdjdXN0b206bXV6aWVoZGVzaWduOnNjaGVtYScsIG1ldGFkYXRhLCB0YXJnZXQpO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQm9vbGVhblNjaGVtYU9wdGlvbnMgZXh0ZW5kcyBTY2hlbWFPcHRpb25zIHtcclxuICBlcXVhbHM/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gQm9vbGVhblNjaGVtYShvcHRpb25zPzogQm9vbGVhblNjaGVtYU9wdGlvbnMpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgU3ltYm9sKSB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2N1c3RvbTptdXppZWhkZXNpZ246c2NoZW1hJywgdGFyZ2V0KSB8fCBbXTtcclxuICAgIG1ldGFkYXRhLnB1c2goPFByb3BlcnR5U2NoZW1hTWV0YWRhdGE8U3RyaW5nU2NoZW1hT3B0aW9ucz4+e1xyXG4gICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcclxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLmJvb2xlYW4sXHJcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXHJcbiAgICB9KTtcclxuICAgIC8vIFRPRE86IGRlZmluZSBvbiBwcm9wZXJ0eVxyXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSgnY3VzdG9tOm11emllaGRlc2lnbjpzY2hlbWEnLCBtZXRhZGF0YSwgdGFyZ2V0KTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -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';\r\nimport { FieldError } from './field-error';\r\n\r\nexport class ModelValidator<T> {\r\n private schema: SchemaOf<T>;\r\n constructor(modelSchema: SchemaOf<T>) {\r\n this.schema = modelSchema;\r\n }\r\n\r\n validate<T>(model: T): Promise<FieldError[]> {\r\n return this.schema\r\n .validate(model, { abortEarly: false })\r\n .then(() => {\r\n return [];\r\n })\r\n .catch((e: ValidationError) => {\r\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\r\n });\r\n }\r\n}\r\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';\r\n","export enum PropertyType {\r\n string,\r\n number,\r\n array,\r\n boolean\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { boolean, object, SchemaOf, string } from 'yup';\r\nimport { ModelValidator } from './model-validator';\r\nimport { BooleanSchemaOptions, SchemaOptions, StringSchemaOptions } from './string-schema';\r\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\r\nimport { ObjectShape } from 'yup/lib/object';\r\nimport { PropertySchemaMetadata } from './property-schema-metadata';\r\nimport { PropertyType } from './property-type.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ModelSchemaFactory {\r\n constructor() {}\r\n\r\n build<T>(model: T): ModelValidator<T> {\r\n const metadata: PropertySchemaMetadata<SchemaOptions>[] = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\r\n let shape: ObjectShape = {};\r\n metadata.forEach((element) => {\r\n if (element.type == PropertyType.string) {\r\n shape[element.name] = this.buildStringSchema(element.options || {});\r\n } else if(element.type == PropertyType.boolean) {\r\n shape[element.name] = this.buildBooleanSchema(element.options || {});\r\n }\r\n });\r\n const schema = object(shape) as SchemaOf<T>;\r\n return new ModelValidator(schema);\r\n }\r\n\r\n private buildStringSchema(options: StringSchemaOptions) {\r\n let stringSchema = string();\r\n if (options.required) {\r\n stringSchema = stringSchema.required();\r\n }\r\n if (options.length) {\r\n stringSchema = stringSchema.length(options.length);\r\n }\r\n if (options.minimum) {\r\n stringSchema = stringSchema.min(options.minimum);\r\n }\r\n if (options.maximum) {\r\n stringSchema = stringSchema.max(options.maximum);\r\n }\r\n\r\n return stringSchema;\r\n }\r\n\r\n private buildBooleanSchema(options: BooleanSchemaOptions) {\r\n let booleanSchema = boolean();\r\n if(options.equals) {\r\n return booleanSchema.test({\r\n name: 'mustBe',\r\n test: (value)=> value == options.equals\r\n });\r\n }\r\n\r\n return booleanSchema;\r\n }\r\n}\r\n","import 'reflect-metadata';\r\nimport { PropertySchemaMetadata } from './property-schema-metadata';\r\nimport { PropertyType } from './property-type.enum';\r\n\r\nexport interface StringSchemaOptions extends SchemaOptions {\r\n length?: number;\r\n minimum?: number;\r\n maximum?: number;\r\n pattern?: RegExp;\r\n}\r\nexport interface SchemaOptions {\r\n required?: boolean;\r\n}\r\n\r\nexport function StringSchema(options?: StringSchemaOptions) {\r\n return function (target: Object, propertyKey: string | Symbol) {\r\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\r\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\r\n name: propertyKey,\r\n type: PropertyType.string,\r\n options: options,\r\n });\r\n // TODO: define on property\r\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\r\n };\r\n}\r\n\r\nexport interface BooleanSchemaOptions extends SchemaOptions {\r\n equals?: boolean;\r\n}\r\n\r\nexport function BooleanSchema(options?: BooleanSchemaOptions) {\r\n return function (target: Object, propertyKey: string | Symbol) {\r\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\r\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\r\n name: propertyKey,\r\n type: PropertyType.boolean,\r\n options: options,\r\n });\r\n // TODO: define on property\r\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\r\n };\r\n}\r\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';\r\nimport { FieldError } from './field-error';\r\n\r\nexport class ModelValidator<T> {\r\n private schema: SchemaOf<T>;\r\n constructor(modelSchema: SchemaOf<T>) {\r\n this.schema = modelSchema;\r\n }\r\n\r\n validate<T>(model: T): Promise<FieldError[]> {\r\n return this.schema\r\n .validate(model, { abortEarly: false })\r\n .then(() => {\r\n return [];\r\n })\r\n .catch((e: ValidationError) => {\r\n return e.inner.map((error) => <FieldError>{ path: error.path, type: error.type, message: error.message });\r\n });\r\n }\r\n}\r\n","export const SCHEMA_METADATA_NAMESPACE = 'custom:muziehdesign:schema';\r\n","export enum PropertyType {\r\n string,\r\n number,\r\n array,\r\n boolean\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { boolean, object, SchemaOf, string } from 'yup';\r\nimport { ModelValidator } from './model-validator';\r\nimport { BooleanSchemaOptions, SchemaOptions, StringSchemaOptions } from './string-schema';\r\nimport { SCHEMA_METADATA_NAMESPACE } from './constants';\r\nimport { ObjectShape } from 'yup/lib/object';\r\nimport { PropertySchemaMetadata } from './property-schema-metadata';\r\nimport { PropertyType } from './property-type.enum';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ModelSchemaFactory {\r\n constructor() {}\r\n\r\n build<T>(model: T): ModelValidator<T> {\r\n const metadata: PropertySchemaMetadata<SchemaOptions>[] = Reflect.getMetadata(SCHEMA_METADATA_NAMESPACE, model);\r\n let shape: ObjectShape = {};\r\n metadata.forEach((element) => {\r\n if (element.type == PropertyType.string) {\r\n shape[element.name] = this.buildStringSchema(element.options || {});\r\n } else if(element.type == PropertyType.boolean) {\r\n shape[element.name] = this.buildBooleanSchema(element.options || {});\r\n }\r\n });\r\n const schema = object(shape) as SchemaOf<T>;\r\n return new ModelValidator(schema);\r\n }\r\n\r\n private buildStringSchema(options: StringSchemaOptions) {\r\n let stringSchema = string();\r\n if (options.required) {\r\n stringSchema = stringSchema.required();\r\n }\r\n if (options.length) {\r\n stringSchema = stringSchema.length(options.length);\r\n }\r\n if (options.minimum) {\r\n stringSchema = stringSchema.min(options.minimum);\r\n }\r\n if (options.maximum) {\r\n stringSchema = stringSchema.max(options.maximum);\r\n }\r\n\r\n return stringSchema;\r\n }\r\n\r\n private buildBooleanSchema(options: BooleanSchemaOptions) {\r\n let booleanSchema = boolean();\r\n if(options.equals) {\r\n return booleanSchema.test({\r\n name: 'mustBe',\r\n test: (value)=> value == options.equals\r\n });\r\n }\r\n\r\n return booleanSchema;\r\n }\r\n}\r\n","import 'reflect-metadata';\r\nimport { PropertySchemaMetadata } from './property-schema-metadata';\r\nimport { PropertyType } from './property-type.enum';\r\n\r\nexport interface StringSchemaOptions extends SchemaOptions {\r\n length?: number;\r\n minimum?: number;\r\n maximum?: number;\r\n pattern?: RegExp;\r\n}\r\nexport interface SchemaOptions {\r\n required?: boolean;\r\n}\r\n\r\nexport function StringSchema(options?: StringSchemaOptions) {\r\n return function (target: Object, propertyKey: string | Symbol) {\r\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\r\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\r\n name: propertyKey,\r\n type: PropertyType.string,\r\n options: options,\r\n });\r\n // TODO: define on property\r\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\r\n };\r\n}\r\n\r\nexport interface BooleanSchemaOptions extends SchemaOptions {\r\n equals?: boolean;\r\n}\r\n\r\nexport function BooleanSchema(options?: BooleanSchemaOptions) {\r\n return function (target: Object, propertyKey: string | Symbol) {\r\n const metadata = Reflect.getMetadata('custom:muziehdesign:schema', target) || [];\r\n metadata.push(<PropertySchemaMetadata<StringSchemaOptions>>{\r\n name: propertyKey,\r\n type: PropertyType.boolean,\r\n options: options,\r\n });\r\n // TODO: define on property\r\n Reflect.defineMetadata('custom:muziehdesign:schema', metadata, target);\r\n };\r\n}\r\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",
|
|
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
|
+
}
|