@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 +1 -0
- package/dist/constants/message-patterns.d.ts +7 -0
- package/dist/constants/message-patterns.js +10 -0
- package/dist/filters/http-exception.filter.d.ts +4 -0
- package/dist/filters/http-exception.filter.js +34 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +19 -0
- package/dist/interceptors/response.interceptor.d.ts +6 -0
- package/dist/interceptors/response.interceptor.js +23 -0
- package/dist/interfaces/api-response.interface.d.ts +4 -0
- package/dist/interfaces/api-response.interface.js +2 -0
- package/package.json +23 -0
- package/src/constants/message-patterns.ts +7 -0
- package/src/filters/http-exception.filter.ts +37 -0
- package/src/index.ts +3 -0
- package/src/interceptors/response.interceptor.ts +26 -0
- package/src/interfaces/api-response.interface.ts +4 -0
- package/tsconfig.json +18 -0
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,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);
|
package/dist/index.d.ts
ADDED
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);
|
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,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,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
|
+
}
|
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
|
+
}
|