birdhouse v0.1.1
Birdhouse
About
Birdhouse is an API scaffolding / generation tool for NestJS
Go from YAML to YAPI in minutes :D
Features
By default, this initializes a NestJS application with a Postgres database, Swagger Docs, an ER diagram, a dockerfile, a docker-compose file, and creates the entities and routes that you declare in the YML file.
This originated as a hackathon project, so the code may be flaky on some edge cases.
Usage
Install module globally npm i -g birdhouse
Usage: birdhouse <command>
where <command>
is one of:
construct, init
construct
Construct creates an application using the .birdhouse.yml file in the current folder. No arguments for construct exist as of now.
init
Does nothing now, would be nice to use this to initialize a yml in the command line.
Example Syntax
api:
name: SuperBlog
domain: superblogging
entities:
user:
primary-key:
id: string
schema:
name: string
email: string
age: number
one-to-many:
- article
article:
primary-key:
id: string
schema:
title: string
body: string
created: Date
updated: Date
many-to-one:
- user
one-to-many:
- articleTag
tag:
primary-key:
name:
type: string
autogenerated: false
one-to-many:
- articleTag
articleTag:
primary-key:
id: string
many-to-one:
- article
- tag
routes:
article:
- INDEX
- GET
- POST
- PUT
- DELETE
user:
- INDEX
- GET
- POST
- PUT
- DELETE
tag:
- INDEX
- GET
Will result in something like
├── package.json
├── README.md
├── docs
│ ├── db.er
│ ├── README.md
│ └── db.png
├── src
│ ├── article
│ │ ├── article.entity.ts
│ │ ├── article.service.ts
│ │ ├── article.controller.ts
│ │ └── article.module.ts
│ ├── tag
│ │ ├── tag.entity.ts
│ │ ├── tag.service.ts
│ │ ├── tag.controller.ts
│ │ └── tag.module.ts
│ ├── articleTag
│ │ ├── articleTag.entity.ts
│ │ ├── articleTag.service.ts
│ │ ├── articleTag.controller.ts
│ │ └── articleTag.module.ts
│ ├── user
│ │ ├── user.entity.ts
│ │ ├── user.service.ts
│ │ ├── user.controller.ts
│ │ └── user.module.ts
│ ├── app.controller.ts
│ |── app.module.ts
│ └── main.ts
├── dockerfile
└── docker-compose.yml
Does not generate .gitignore
Development
use npm link
Future
Would love to use AST rather than injecting files. But hey, hackathon, right? Also, cleanup is probably needed and it'd be nice to include options for GraphQL, other databases, and include a React frontend with basic crud to match routes.