Model generator
Model generator is a simple model generator tool that enables you to create models with types and validators.
How to use
install model-generator
Run install command to install model-generator.
npm install model-generator
import model-generator
The module has differend exports. Best practice is to put these in differend variables.
let ModelGeneratorModule = ;let ModelGenerator = ModelGenerator;let Property = Property;let Validators = Validators;
Optional settings
Include an object
let settings =/*** name: debug* default: false* requires: Boolean*/debug: true;
Edit the following line if you want to add settings:
let ModelGenerator = ModelGenerator;
Create your model
Create a class and extend it with the ModelGenerator class. Create a constructor and then call super(<=StructureForYourModel=>).
{superStructureForYourModel;}
Structure
Model generator generates a model using a structure. A structure is how your model will be generated. A structure takes an array of type Property. Example structure:
const ExampleModelStructure =// array of all properties you want in your modelproperties:'UserEmail'// property nameundefined // default valueString // typeValidatorsRequired ValidatorsEmail // Array of validators'Test'undefinedNumber;
Property
This module has an exported class Property. Property class can be used in the structure to define a property.
Property takes 4 arguments:
- Name : name of the property that needs to be generated
- Default value: the default value the property gets when you initialize the object.
- Type: Type of property(String , Number ,...)
- Validators : An array of all validators that need to run when you set a value on the property.
Property setting and getting
Properties are normal properties that automaticly run all validators and type checking. Use it like you would a normal property
ModelProperty = "value"; // setting property runs all validators in the backgroundlet model = ModelProperty;
Validator
Validator is a check that needs to happen when a value is set on a property. Validators Need 2 Properties to work:
- Name: Name of the validator is the name you can use in the validators array. (example : Validators.Email has name 'Email') Must be a string!
- Validate : This function gets called when the validator is used. This function returns true or throws error.
Default validators
Here is a list of all validators that are available in the Validators array by default:
- Required : Makes sure the property is required
- Email : Makes sure the property is an email
- String : Alphabetic letters with accents
- DefaultPassword : Length: 8 to 128, with at least 1 lowercase, 1 capital, 1 number and/or symbol. https://goo.gl/dufj6t
- LettersOnly : Alphabetic letters, lowercase or uppercase
- NumbersOnly : Only numbers
- DateTime : SQL format for a date
- Base64 : Lowercase, uppercase, hyphen and underscore
- NationalRegistryNumberBE : National registry number for in belgium
Register a custom validator
Need more validators? No problem you can inject your own validator using registerValidator.
let ModelGeneratorModule = ;// create validatorNotNegativeValidator =Name : 'NotNegative'{ifvalue<=0throw Error"Value can not be negative";return true;}// register ValidatorModelGeneratorModule;
When you add a validator it gets added to the ModelGeneratorModule.Validators
The example above can be used like this:
New
Get clean model in json format
The generated model is bloated with properties and functions. Sometimes you need to return a model that is a clean javascript object without setters and getters. The getCleanModel is a function set on the generated model that returns the json model.
Casting in model
You can cast a json format into a Model using the exported member Cast. The function will throw error if it fails and return a model if it succeeds.
let Cast = Cast;let Model = <= Insert your modeljson =Prop1:1Prop2:'test'
Full example of a model
let ModelGeneratorModule = ;let ModelGenerator = ModelGeneratorModuleModelGenerator;let Property = ModelGeneratorModuleProperty;let Validators = ModelGeneratorModuleValidators;const ExampleModelStructure =properties:'UserEmail'//property nameundefined // default valueString // typeValidatorsRequired ValidatorsEmail // Array of validators'Test'undefinedNumber;{superExampleModelStructure;}