🌻A modular DI, MVC, and Model binding/validation framework for NodeJS and TypeScript or ES6
The @dandi/model-builder
package contains utilities for dynamically
constructing and validating models defined using decorators from
@dandi/model
.
While ModelBuilder
can be used on its own, is used by several other
Dandi packages to provide automatic construction and validation of
data models:
@dandi/mvc
- data binding and validation by @RequestBody()
,
@PathParam()
, and @QueryParam()
@dandi/data
- validates integrity of database connection configuration@dandi-contrib/data-pg
- converts data from their database representations
to their defined models when using queryModel
and queryModelSingle
@dandi-contrib/aws-lambda
- converts incoming AWS event data to Dandi
modelsThe ModelBuilder
interface exposes two methods for working with models.
constructModel
is used for converting a POJO (“Plain Old JavaScript
Object”) into an instance of a desired model class. constructMember
is
used to convert individual values to a specified type.
Providing options to constructModel
or constructMember
calls will
allow you to configure validation, transform the keys of your source
object, or for constructModel
, transform the source object itself
before construction.
validators
: An array of ModelValidator
instances that will be
used to validate the constructed model.keyTransform
: A KeyTransformFn
that will be used to modify the
keys of the source object when mapping properties to the constructed
model. This is useful when dealing with external data sources that
provide data is in one case (e.g. snake_case
), and your models are
written in another (hopefully, camelCase
).dataTransformers
: An array of DataTransformer
instances that
will modify the source object before starting construction of the model.
This can be used to do just about anything, but as an example, it can
be used with @dandi-contrib/data-pg
and NestedKeyTransformer
to convert a
flat POJO with dot notated keys to a complex object with nested
properties.MetadataModelBuilder
is the default implementation of ModelBuilder
and is included in the @dandi/model-builder
package.
MetadataModelBuilder
uses the metadata generated by using decorators
from @dandi/model
to define a model. Some things to note about using
MetadataModelBuilder
:
@dandi/model
decorators.keyTransform
option, it will not transform the keys
of Map
properties (defined with @MapOf()
), or JSON properties
(specified by adding @Json()
).