Dandi is a modular DI and MVC application framework designed to make it easier to write RESTful APIs, console applications, and other services for NodeJS with TypeScript. It is split into modules to allow developers to use only the features they require.
- MVC-style Application Servers
- CLI Applications
- AWS Lambda functions
- Modeled after Angular's dependency injection system
- Inject dependencies into class constructors or methods
- 3rd party dependencies can be configured to be injected with Providers
- Standalone pipeline for handling and responding to HTTP requests
- Automatic input content negotiation based on request
content-type
header - Automatic output content negotiation based on request
accept
header - Create and configure interdependent middleware handlers (
HttpPipelinePreparer
) and they will automatically be invoked in the correct order - Add global transformers to control response data structure
- Modeled after ASP.NET Core MVC
- Builds on functionality of
@dandi/http-pipeline
to add routing and other MVC features - Web framework agnostic - Built for Express 4, but can be used with other frameworks if desired
- Decorator-based route configuration
- Automatic path parameter, query parameter, and body model mapping and validation
- Support for automatically generating HA JSON output
- Robust set of decorators for defining models and validation metadata
- Automatically construct model class instances from JSON objects or POJOs
- Convert from objects using a different property key casing
(e.g.
snake_case
tocamelCase
)
- Wraps
@dandi/http-pipeline
for use with handline AWS Lambda requests - Use the same framework, models, and add-ons (
HttpPipelinePreparer
,HttpPipelineResultTransformer
) between your Lambda functions and MVC API
Disposable
interface and utilities for managing disposable resources- Uses Luxon as a replacement for Date objects
- Models can be reused between backend NodeJS and frontend TypeScript/JavaScript applications
Uuid
class based on the uuid library for working with and comparing UUIDs.
- @dandi/cache - Caching functionality
- @dandi/common 🕸 - Common types and utilities
- @dandi/config 🕸 - Configuration services
- @dandi/core 🕸 - Dependency Injection
- @dandi/core/logging 🕸 - Core logging and configuration
- @dandi/core-node - Additional DI utilities specific to NodeJS
- @dandi/data 🕸 - Base types and utilities for working with data services
- @dandi/hal - 🕸 - Model decorators, basic types and utilities for supporting HAL
- @dandi/hal-model-builder - 🕸 - Model building utilities supporting HAL embedded resources
- @dandi/http - Types, utilities and DI tokens for basic HTTP concepts (headers, mime types, etc)
- @dandi/http-model - Types, decorators, and utilities for using model building and validation in an HTTP context
- @dandi/http-pipeline - A pipeline for handling and responding to HTTP requests
- @dandi/logging - 🕸 - Additional utilities for logging and logging configuration
- @dandi/model 🕸 - Decorators for describing models, for use with
@dandi/model-builder
- @dandi/model-builder 🕸 - Utilities for dynamically constructing and validating models
- @dandi/mvc - MVC decorators and base utilities (not specific to Express)
- @dandi/mvc-hal - Supports rendering HAL JSON from existing
@dandi/mvc
controllers - @dandi/mvc-view - Use
@dandi/mvc
with your favorite templating engine
- @dandi-contrib/aws-lambda Helpers for using
@dandi/core
and@dandi/http-pipeline
with AWS Lambda - @dandi-contrib/config-aws-ssm -
@dandi/config
client for AWS SSM Parameter Store - @dandi-contrib/data-pg -
@dandi/data
client implementations for Postgres - @dandi-contrib/mvc-auth-firebase - Google Firebase Authorization service implementation for
@dandi/mvc
- @dandi-contrib/mvc-express - Express-specific
@dandi/mvc
service implementations - @dandi-contrib/mvc-view-ejs - EJS implementation for
@dandi/mvc-view
- @dandi-contrib/mvc-view-pug - Pug implementation for
@dandi/mvc-view
🕸 - web browser compatible/no NodeJS-specific dependencies
Simple Express REST API - An
implementation of a very simple REST API using @dandi
To set up this project as a local repository:
- Install Yarn Classic if you don't have it installed
- After cloning the repostory, run
yarn setup
- this will install the dependencies for all the individual packages, as well as the Dandi builder - You can now run
yarn build
to build all packages, oryarn test
to run all tests