Skip to content

Latest commit

History

History

model-builder

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

@dandi/model-builder

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 models

ModelBuilder

The 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.

ModelBuilderOptions

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

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:

  • Nested models are supported - it will recurse into each complex type and convert any properties defined by the @dandi/model decorators.
  • When using the keyTransform option, it will not transform the keys of Map properties (defined with @MapOf()), or JSON properties (specified by adding @Json()).