@rcky1983/nest-common 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # nest-common
@@ -0,0 +1,7 @@
1
+ export declare const PRODUCT_PATTERNS: {
2
+ readonly FIND: "product.find";
3
+ readonly RESERVE: "product.reserve";
4
+ readonly DECREASE_STOCK: "product.decreaseStock";
5
+ readonly RELEASE_STOCK: "product.releaseStock";
6
+ readonly INCREASE_STOCK: "product.increaseStock";
7
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PRODUCT_PATTERNS = void 0;
4
+ exports.PRODUCT_PATTERNS = {
5
+ FIND: 'product.find',
6
+ RESERVE: 'product.reserve',
7
+ DECREASE_STOCK: 'product.decreaseStock',
8
+ RELEASE_STOCK: 'product.releaseStock',
9
+ INCREASE_STOCK: 'product.increaseStock',
10
+ };
@@ -0,0 +1,4 @@
1
+ import { ArgumentsHost, ExceptionFilter } from '@nestjs/common';
2
+ export declare class HttpExceptionFilter implements ExceptionFilter {
3
+ catch(exception: unknown, host: ArgumentsHost): void;
4
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HttpExceptionFilter = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ let HttpExceptionFilter = class HttpExceptionFilter {
12
+ catch(exception, host) {
13
+ const ctx = host.switchToHttp();
14
+ const response = ctx.getResponse();
15
+ const request = ctx.getRequest();
16
+ const status = exception instanceof common_1.HttpException
17
+ ? exception.getStatus()
18
+ : common_1.HttpStatus.INTERNAL_SERVER_ERROR;
19
+ const message = exception instanceof common_1.HttpException
20
+ ? exception.getResponse()
21
+ : 'Internal Server Error';
22
+ response.status(status).json({
23
+ success: false,
24
+ statusCode: status,
25
+ message,
26
+ timestamp: new Date().toISOString(),
27
+ path: request.url,
28
+ });
29
+ }
30
+ };
31
+ exports.HttpExceptionFilter = HttpExceptionFilter;
32
+ exports.HttpExceptionFilter = HttpExceptionFilter = __decorate([
33
+ (0, common_1.Catch)()
34
+ ], HttpExceptionFilter);
@@ -0,0 +1,3 @@
1
+ export * from './constants/message-patterns';
2
+ export * from './filters/http-exception.filter';
3
+ export * from './interceptors/response.interceptor';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants/message-patterns"), exports);
18
+ __exportStar(require("./filters/http-exception.filter"), exports);
19
+ __exportStar(require("./interceptors/response.interceptor"), exports);
@@ -0,0 +1,6 @@
1
+ import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { ApiResponse } from '../interfaces/api-response.interface';
4
+ export declare class ResponseInterceptor implements NestInterceptor {
5
+ intercept<T>(_context: ExecutionContext, next: CallHandler<T>): Observable<ApiResponse<T>>;
6
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ResponseInterceptor = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const operators_1 = require("rxjs/operators");
12
+ let ResponseInterceptor = class ResponseInterceptor {
13
+ intercept(_context, next) {
14
+ return next.handle().pipe((0, operators_1.map)((data) => ({
15
+ success: true,
16
+ data,
17
+ })));
18
+ }
19
+ };
20
+ exports.ResponseInterceptor = ResponseInterceptor;
21
+ exports.ResponseInterceptor = ResponseInterceptor = __decorate([
22
+ (0, common_1.Injectable)()
23
+ ], ResponseInterceptor);
@@ -0,0 +1,4 @@
1
+ export interface ApiResponse<T> {
2
+ success: boolean;
3
+ data: T;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@rcky1983/nest-common",
3
+ "version": "1.0.0",
4
+ "description": "Shared library for Nest Microservices",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc"
9
+ },
10
+ "peerDependencies": {
11
+ "@nestjs/common": "^11.0.0",
12
+ "@nestjs/core": "^11.0.0",
13
+ "@nestjs/swagger": "^11.0.0",
14
+ "rxjs": "^7.8.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/express": "^5.0.6",
18
+ "typescript": "^5.8.3"
19
+ },
20
+ "dependencies": {
21
+ "express": "^5.2.1"
22
+ }
23
+ }
@@ -0,0 +1,7 @@
1
+ export const PRODUCT_PATTERNS = {
2
+ FIND: 'product.find',
3
+ RESERVE: 'product.reserve',
4
+ DECREASE_STOCK: 'product.decreaseStock',
5
+ RELEASE_STOCK: 'product.releaseStock',
6
+ INCREASE_STOCK: 'product.increaseStock',
7
+ } as const;
@@ -0,0 +1,37 @@
1
+ import {
2
+ ArgumentsHost,
3
+ Catch,
4
+ ExceptionFilter,
5
+ HttpException,
6
+ HttpStatus,
7
+ } from '@nestjs/common';
8
+
9
+ import { Request, Response } from 'express';
10
+
11
+ @Catch()
12
+ export class HttpExceptionFilter implements ExceptionFilter {
13
+ catch(exception: unknown, host: ArgumentsHost): void {
14
+ const ctx = host.switchToHttp();
15
+
16
+ const response = ctx.getResponse<Response>();
17
+ const request = ctx.getRequest<Request>();
18
+
19
+ const status =
20
+ exception instanceof HttpException
21
+ ? exception.getStatus()
22
+ : HttpStatus.INTERNAL_SERVER_ERROR;
23
+
24
+ const message =
25
+ exception instanceof HttpException
26
+ ? exception.getResponse()
27
+ : 'Internal Server Error';
28
+
29
+ response.status(status).json({
30
+ success: false,
31
+ statusCode: status,
32
+ message,
33
+ timestamp: new Date().toISOString(),
34
+ path: request.url,
35
+ });
36
+ }
37
+ }
package/src/index.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './constants/message-patterns';
2
+ export * from './filters/http-exception.filter';
3
+ export * from './interceptors/response.interceptor';
@@ -0,0 +1,26 @@
1
+ import {
2
+ CallHandler,
3
+ ExecutionContext,
4
+ Injectable,
5
+ NestInterceptor,
6
+ } from '@nestjs/common';
7
+
8
+ import { Observable } from 'rxjs';
9
+ import { map } from 'rxjs/operators';
10
+
11
+ import { ApiResponse } from '../interfaces/api-response.interface';
12
+
13
+ @Injectable()
14
+ export class ResponseInterceptor implements NestInterceptor {
15
+ intercept<T>(
16
+ _context: ExecutionContext,
17
+ next: CallHandler<T>,
18
+ ): Observable<ApiResponse<T>> {
19
+ return next.handle().pipe(
20
+ map((data): ApiResponse<T> => ({
21
+ success: true,
22
+ data,
23
+ })),
24
+ );
25
+ }
26
+ }
@@ -0,0 +1,4 @@
1
+ export interface ApiResponse<T> {
2
+ success: boolean;
3
+ data: T;
4
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2023",
4
+ "module": "CommonJS",
5
+ "moduleResolution": "Node",
6
+ "declaration": true,
7
+ "outDir": "dist",
8
+ "rootDir": "src",
9
+ "strict": true,
10
+ "experimentalDecorators": true,
11
+ "emitDecoratorMetadata": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true
14
+ },
15
+ "include": [
16
+ "src/**/*"
17
+ ]
18
+ }