@ffsm/napi
Version:
Napi - A framework using with Next.js for building APIs.
149 lines (116 loc) • 2.73 kB
Markdown
# Napi - API Framework for NextJS
> This is beta. If you do not understand source code from "src" folder. Please do not using it until documentation ready.
## Documentation
_Wait for next version_
## Installation
Generate new project with NextJS App Router (Page Router is not tested yet but it should work.)
```bash
npx create-next-app --use-yarn
```
Install this package
```bash
yarn add /napi
```
## Using
Using same NestJS.
Make project folder structure:
```
<project>/
| |_public/
| | ...
| |_src/
| | |_app/
| | | |_api/
| | | | |_[[...v1]]
| | | | | |_route.ts
| |_package.json
| |_tsconfig.json
| |_eslint.config.mjs
| |_postcss.config.mjs
| |_yarn.lock
| |_...
```
Register app for API.
```ts
// <project>/src/app/api/[[...v1]]/route.ts
import { NapiApplication } from "@ffsm/napi";
import { UserController } from "./modules/users/user.controller.ts"
// Remove methods that you does not using.
export const {
GET,
POST,
PUT,
PATCH,
DELETE,
HEAD,
OPTIONS
} = NapiApplication.register({
prefix: "v1",
configs: [], // For load env same @nestjs/config
controllers: [
UserController,
],
});
```
Make controller
```ts
// <project>/src/app/api/[[...v1]]/modules/users/user.controller.ts
import { Controller, Get, Params } from "@ffsm/napi";
()
export class UserController {
()
getUsers() {
return [
{ id: 1, name: "User 1" },
];
}
(":userId")
getUserById(() params: { userId: string }) {
return {
params,
};
}
}
```
Update tsconfig.json
```json
{
...
"compilerOptions": {
...
"esModuleInterop": true,
"strictPropertyInitialization": false,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
...
},
...
}
```
OR extends `/napi/tsconfig.napi.json`
```json
{
"extends": "@ffsm/napi/tsconfig.napi.json",
"compilerOptions": {
...
},
...
}
```
## API
### Decorators
- Controller class: `Controller`
- Controller methods: `Get`, `Post`, `Put`, `Patch`, `Delete`, `Options`, `Head`, `HttpStatus`, `HttpText`, `SetHeaders`.
- Controller method params: `Params`, `Body`, `Query`, `Res`, `Req`, `Headers`, `Cookies`, `Files`, `Session`
In this version, initialize service inside constructor of controller.
Next version will support decorator `Injectable()` to make DI for service.
## WIP
- `()`: Done (will apply `Injectable` when it ready)
- `(), (), ...`: Will support more options.
- `()`: In-Progress
- `/napi-typeorm`: In-Progress
- `ExceptionFilter`: In-Progress
- `PipeTransform`: In-Progress
- `CanActivate`: In-progress
- `/napi-swagger`: To-Do
- ...