Gathering detailed insights and metrics for @anot/http-response-builder
Gathering detailed insights and metrics for @anot/http-response-builder
Gathering detailed insights and metrics for @anot/http-response-builder
Gathering detailed insights and metrics for @anot/http-response-builder
npm install @anot/http-response-builder
Typescript
Module System
Node Version
NPM Version
Cumulative downloads
Total Downloads
Last Day
0%
NaN
Compared to previous day
Last Week
0%
NaN
Compared to previous week
Last Month
0%
NaN
Compared to previous month
Last Year
0%
NaN
Compared to previous year
A TypeScript package that provides a flexible and type-safe way to build HTTP responses with support for pagination, metadata, and standard HTTP status codes.
1npm install @anot/http-response-builder 2# or 3yarn add @anot/http-response-builder
The package provides a builder pattern to construct HTTP responses. Here's a simple example:
1import { HttpResponseBuilder } from '@anot/http-response-builder'; 2 3const response = HttpResponseBuilder.ok() 4 .setData({ message: 'Hello World' })
1import { Controller, Get } from '@nestjs/common'; 2import { HttpResponseBuilder, Paging } from '@anot/http-response-builder'; 3 4interface UserDTO { 5 id: number; 6 name: string; 7 email: string; 8} 9 10@Controller('users') 11export class UsersController { 12 @Get() 13 async getUsers(): HttpResponseBuilder<UserDTO[]> { 14 const users: UserDTO[] = [ 15 { id: 1, name: 'John Doe', email: 'john@example.com' }, 16 { id: 2, name: 'Jane Doe', email: 'jane@example.com' } 17 ]; 18 19 const totalUsers = users.length; 20 const paging = new Paging(1, 10, totalUsers); 21 22 return HttpResponseBuilder.ok<UserDTO[]>() 23 .setData(users) 24 .setPaging(paging) 25 .setMetadata({ timestamp: new Date() }) 26 } 27 28 @Get(':id') 29 async getUser(): HttpResponseBuilder<UserDTO> { 30 const user: UserDTO = { 31 id: 1, 32 name: 'John Doe', 33 email: 'john@example.com' 34 }; 35 36 return HttpResponseBuilder.ok<UserDTO>() 37 .setData(user) 38 } 39}
1import express from "express"; 2const app = express(); 3import { HttpResponseBuilder, Paging } from "@anot/http-response-builder"; 4 5var server = app.listen(3000, function () { 6 console.log("Node.js is listening to PORT:" + server.address().port); 7}); 8 9var photoList = [ 10 { 11 id: "001", 12 name: "photo001.jpg", 13 type: "jpg", 14 dataUrl: "http://localhost:3000/data/photo001.jpg", 15 }, 16 { 17 id: "002", 18 name: "photo002.jpg", 19 type: "jpg", 20 dataUrl: "http://localhost:3000/data/photo002.jpg", 21 }, 22]; 23 24app.get("/api/photo/list", function (req, res, next) { 25 const results = HttpResponseBuilder.ok() 26 .setData(photoList) 27 .setMessage("Successfully fetched photo list") 28 .setMetadata({ timestamp: new Date() }) 29 res.json(results) 30});
The Paging
class provides pagination functionality:
1const paging = new Paging(1, 10, 100); // page 1, 10 items per page, 100 total items 2const response = HttpResponseBuilder.ok<UserDTO[]>() 3 .setData(users) 4 .setPaging(paging)
You can include additional metadata in your response:
1const metadata = { 2 timestamp: new Date(), 3 version: '1.0.0' 4}; 5 6const response = HttpResponseBuilder.ok<UserDTO>() 7 .setData(user) 8 .setMetadata(metadata)
The builder includes methods for common HTTP status codes:
HttpResponseBuilder.ok()
HttpResponseBuilder.created()
HttpResponseBuilder.badRequest()
HttpResponseBuilder.unauthorized()
HttpResponseBuilder.forbidden()
HttpResponseBuilder.notFound()
HttpResponseBuilder.internalServerError()
And many more...You can create a custom response with any status code:
1const response = HttpResponseBuilder.customResponse<UserDTO>() 2 .setStatus(418) // I'm a teapot 3 .setMessage("Custom message") 4 .setData(user)
The response object has the following structure:
1 2{ 3 status: number; // HTTP status code 4 message: string; // Status message 5 data ? : T; // Response data (generic type) 6 paging ? : { // Optional pagination info 7 page: number; 8 size: number; 9 total: number; 10 }; 11 metadata ? : Record<string, any>; // Optional additional metadata 12 currentUser ? : { // Optional current user info 13 id: number | string; 14 extraData: Record<string, any>; 15 } 16}
The builder includes validation and will throw TypeError for invalid inputs:
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the ISC License
No vulnerabilities found.
No security vulnerabilities found.