listpage-next-nest 0.0.5

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.
@@ -0,0 +1,378 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ BaseQueryDto: ()=>BaseQueryDto,
28
+ HttpExceptionFilter: ()=>HttpExceptionFilter,
29
+ RequestContextMiddleware: ()=>RequestContextMiddleware,
30
+ setup: ()=>setup,
31
+ RequestContextService: ()=>RequestContextService,
32
+ RequestIdMiddleware: ()=>RequestIdMiddleware,
33
+ LoggingInterceptor: ()=>LoggingInterceptor,
34
+ ResponseInterceptor: ()=>ResponseInterceptor,
35
+ CorsInterceptor: ()=>CorsInterceptor,
36
+ ApiResponse: ()=>ApiResponse
37
+ });
38
+ const common_namespaceObject = require("@nestjs/common");
39
+ const external_async_hooks_namespaceObject = require("async_hooks");
40
+ function _ts_decorate(decorators, target, key, desc) {
41
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
42
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
43
+ 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;
44
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
45
+ }
46
+ class RequestContextService {
47
+ static{
48
+ this.asyncLocalStorage = new external_async_hooks_namespaceObject.AsyncLocalStorage();
49
+ }
50
+ static run(context, callback) {
51
+ return this.asyncLocalStorage.run(context, callback);
52
+ }
53
+ static getContext() {
54
+ return this.asyncLocalStorage.getStore();
55
+ }
56
+ static getRequestId() {
57
+ const context = this.getContext();
58
+ return context?.requestId;
59
+ }
60
+ static setRequestId(requestId) {
61
+ const context = this.getContext();
62
+ if (context) context.requestId = requestId;
63
+ }
64
+ getRequestId() {
65
+ return RequestContextService.getRequestId();
66
+ }
67
+ getContext() {
68
+ return RequestContextService.getContext();
69
+ }
70
+ }
71
+ RequestContextService = _ts_decorate([
72
+ (0, common_namespaceObject.Injectable)({
73
+ scope: common_namespaceObject.Scope.REQUEST
74
+ })
75
+ ], RequestContextService);
76
+ const external_uuid_namespaceObject = require("uuid");
77
+ function request_context_middleware_ts_decorate(decorators, target, key, desc) {
78
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
79
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
80
+ 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;
81
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
82
+ }
83
+ class RequestContextMiddleware {
84
+ use(req, res, next) {
85
+ const requestId = req.headers['x-request-id'] || (0, external_uuid_namespaceObject.v4)();
86
+ req.requestId = requestId;
87
+ res.setHeader('X-Request-Id', requestId);
88
+ const context = {
89
+ requestId,
90
+ startTime: Date.now(),
91
+ method: req.method,
92
+ url: req.url,
93
+ ip: req.ip || 'unknown',
94
+ userAgent: req.headers['user-agent'] || 'unknown'
95
+ };
96
+ RequestContextService.run(context, ()=>{
97
+ next();
98
+ });
99
+ }
100
+ }
101
+ RequestContextMiddleware = request_context_middleware_ts_decorate([
102
+ (0, common_namespaceObject.Injectable)()
103
+ ], RequestContextMiddleware);
104
+ function request_id_middleware_ts_decorate(decorators, target, key, desc) {
105
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
106
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
107
+ 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;
108
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
109
+ }
110
+ class RequestIdMiddleware {
111
+ use(req, res, next) {
112
+ const requestId = req.headers['x-request-id'] || (0, external_uuid_namespaceObject.v4)();
113
+ req.requestId = requestId;
114
+ res.setHeader('X-Request-Id', requestId);
115
+ next();
116
+ }
117
+ }
118
+ RequestIdMiddleware = request_id_middleware_ts_decorate([
119
+ (0, common_namespaceObject.Injectable)()
120
+ ], RequestIdMiddleware);
121
+ class ApiResponse {
122
+ constructor(code, message, data){
123
+ this.code = code;
124
+ this.message = message;
125
+ this.data = data;
126
+ }
127
+ static success(data, message = '操作成功') {
128
+ return new ApiResponse(10000, message, data);
129
+ }
130
+ static error(message, code = 50000) {
131
+ return new ApiResponse(code, message);
132
+ }
133
+ static created(data, message = '创建成功') {
134
+ return new ApiResponse(10000, message, data);
135
+ }
136
+ static badRequest(message = '请求参数错误') {
137
+ return new ApiResponse(20001, message);
138
+ }
139
+ static unauthorized(message = '未授权访问') {
140
+ return new ApiResponse(30001, message);
141
+ }
142
+ static forbidden(message = '禁止访问') {
143
+ return new ApiResponse(30002, message);
144
+ }
145
+ static notFound(message = '资源不存在') {
146
+ return new ApiResponse(40001, message);
147
+ }
148
+ static conflict(message = '资源冲突') {
149
+ return new ApiResponse(40002, message);
150
+ }
151
+ static validationError(message = '数据验证失败') {
152
+ return new ApiResponse(20002, message);
153
+ }
154
+ static internalError(message = '服务器内部错误') {
155
+ return new ApiResponse(50001, message);
156
+ }
157
+ }
158
+ function http_exception_filter_ts_decorate(decorators, target, key, desc) {
159
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
160
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
161
+ 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;
162
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
163
+ }
164
+ class HttpExceptionFilter {
165
+ catch(exception, host) {
166
+ const ctx = host.switchToHttp();
167
+ const response = ctx.getResponse();
168
+ const request = ctx.getRequest();
169
+ let requestId = RequestContextService.getRequestId();
170
+ if (!requestId) requestId = request.requestId;
171
+ if (!requestId) requestId = request.headers['x-request-id'];
172
+ if (!requestId) requestId = (0, external_uuid_namespaceObject.v4)();
173
+ let status = common_namespaceObject.HttpStatus.INTERNAL_SERVER_ERROR;
174
+ let message = '服务器内部错误';
175
+ if (exception instanceof common_namespaceObject.HttpException) {
176
+ status = exception.getStatus();
177
+ const exceptionResponse = exception.getResponse();
178
+ if ('string' == typeof exceptionResponse) message = exceptionResponse;
179
+ else if ('object' == typeof exceptionResponse && null !== exceptionResponse) {
180
+ const responseObj = exceptionResponse;
181
+ message = responseObj.message || responseObj.error || message;
182
+ if (Array.isArray(responseObj.message)) message = responseObj.message.join(', ');
183
+ }
184
+ } else if (exception instanceof Error) message = exception.message;
185
+ this.logger.error(`[${request.method}] ${request.url} - ${status} - ${message} - RequestId: ${requestId}`, exception instanceof Error ? exception.stack : void 0);
186
+ let errorResponse;
187
+ switch(status){
188
+ case common_namespaceObject.HttpStatus.BAD_REQUEST:
189
+ errorResponse = ApiResponse.badRequest(message);
190
+ break;
191
+ case common_namespaceObject.HttpStatus.UNAUTHORIZED:
192
+ errorResponse = ApiResponse.unauthorized(message);
193
+ break;
194
+ case common_namespaceObject.HttpStatus.FORBIDDEN:
195
+ errorResponse = ApiResponse.forbidden(message);
196
+ break;
197
+ case common_namespaceObject.HttpStatus.NOT_FOUND:
198
+ errorResponse = ApiResponse.notFound(message);
199
+ break;
200
+ case common_namespaceObject.HttpStatus.CONFLICT:
201
+ errorResponse = ApiResponse.conflict(message);
202
+ break;
203
+ case common_namespaceObject.HttpStatus.UNPROCESSABLE_ENTITY:
204
+ errorResponse = ApiResponse.validationError(message);
205
+ break;
206
+ default:
207
+ errorResponse = ApiResponse.internalError(message);
208
+ break;
209
+ }
210
+ response.status(200).json(errorResponse);
211
+ }
212
+ constructor(){
213
+ this.logger = new common_namespaceObject.Logger(HttpExceptionFilter.name);
214
+ }
215
+ }
216
+ HttpExceptionFilter = http_exception_filter_ts_decorate([
217
+ (0, common_namespaceObject.Catch)()
218
+ ], HttpExceptionFilter);
219
+ const operators_namespaceObject = require("rxjs/operators");
220
+ function cors_interceptor_ts_decorate(decorators, target, key, desc) {
221
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
222
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
223
+ 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;
224
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
225
+ }
226
+ class CorsInterceptor {
227
+ intercept(context, next) {
228
+ const ctx = context.switchToHttp();
229
+ const response = ctx.getResponse();
230
+ const request = ctx.getRequest();
231
+ if ('text/event-stream' === request.headers.accept) return next.handle();
232
+ response.header('Access-Control-Allow-Origin', '*');
233
+ response.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,UPDATE,OPTIONS');
234
+ response.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
235
+ return next.handle().pipe((0, operators_namespaceObject.tap)(()=>{}));
236
+ }
237
+ }
238
+ CorsInterceptor = cors_interceptor_ts_decorate([
239
+ (0, common_namespaceObject.Injectable)()
240
+ ], CorsInterceptor);
241
+ function logging_interceptor_ts_decorate(decorators, target, key, desc) {
242
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
243
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
244
+ 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;
245
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
246
+ }
247
+ class LoggingInterceptor {
248
+ intercept(context, next) {
249
+ const ctx = context.switchToHttp();
250
+ const request = ctx.getRequest();
251
+ const response = ctx.getResponse();
252
+ const { method, url, ip, headers } = request;
253
+ const userAgent = headers['user-agent'] || '';
254
+ const startTime = Date.now();
255
+ const requestId = RequestContextService.getRequestId() || 'unknown';
256
+ this.logger.log(`[${method}] ${url} - ${ip} - ${userAgent} - RequestId: ${requestId}`);
257
+ return next.handle().pipe((0, operators_namespaceObject.tap)({
258
+ next: (data)=>{
259
+ const duration = Date.now() - startTime;
260
+ const { statusCode } = response;
261
+ this.logger.log(`[${method}] ${url} - ${statusCode} - ${duration}ms - ${ip} - RequestId: ${requestId}`);
262
+ },
263
+ error: (error)=>{
264
+ const duration = Date.now() - startTime;
265
+ this.logger.error(`[${method}] ${url} - ERROR - ${duration}ms - ${ip} - RequestId: ${requestId} - ${error.message}`);
266
+ }
267
+ }));
268
+ }
269
+ constructor(){
270
+ this.logger = new common_namespaceObject.Logger(LoggingInterceptor.name);
271
+ }
272
+ }
273
+ LoggingInterceptor = logging_interceptor_ts_decorate([
274
+ (0, common_namespaceObject.Injectable)()
275
+ ], LoggingInterceptor);
276
+ function response_interceptor_ts_decorate(decorators, target, key, desc) {
277
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
278
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
279
+ 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;
280
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
281
+ }
282
+ class ResponseInterceptor {
283
+ intercept(context, next) {
284
+ const request = context.switchToHttp().getRequest();
285
+ if ('text/event-stream' === request.headers.accept) return next.handle();
286
+ return next.handle().pipe((0, operators_namespaceObject.map)((data)=>{
287
+ if (data && 'object' == typeof data && 'code' in data && 'message' in data) return {
288
+ ...data
289
+ };
290
+ return ApiResponse.success(data, '操作成功');
291
+ }));
292
+ }
293
+ }
294
+ ResponseInterceptor = response_interceptor_ts_decorate([
295
+ (0, common_namespaceObject.Injectable)()
296
+ ], ResponseInterceptor);
297
+ const external_class_transformer_namespaceObject = require("class-transformer");
298
+ const external_class_validator_namespaceObject = require("class-validator");
299
+ function query_dto_ts_decorate(decorators, target, key, desc) {
300
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
301
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
302
+ 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;
303
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
304
+ }
305
+ function _ts_metadata(k, v) {
306
+ if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
307
+ }
308
+ class BaseQueryDto {
309
+ get sortField() {
310
+ return this.sort?.split(',')[0] || 'createdAt';
311
+ }
312
+ get sortOrder() {
313
+ const order = this.sort?.split(',')[1]?.toLowerCase();
314
+ return 'asc' === order ? 'asc' : 'desc';
315
+ }
316
+ get skip() {
317
+ return (this.current - 1) * this.pageSize;
318
+ }
319
+ get take() {
320
+ return this.pageSize;
321
+ }
322
+ constructor(){
323
+ this.current = 1;
324
+ this.pageSize = 10;
325
+ this.sort = 'createdAt,desc';
326
+ }
327
+ }
328
+ query_dto_ts_decorate([
329
+ (0, external_class_validator_namespaceObject.IsOptional)(),
330
+ (0, external_class_transformer_namespaceObject.Type)(()=>Number),
331
+ (0, external_class_validator_namespaceObject.IsInt)(),
332
+ (0, external_class_validator_namespaceObject.Min)(1),
333
+ _ts_metadata("design:type", Number)
334
+ ], BaseQueryDto.prototype, "current", void 0);
335
+ query_dto_ts_decorate([
336
+ (0, external_class_validator_namespaceObject.IsOptional)(),
337
+ (0, external_class_transformer_namespaceObject.Type)(()=>Number),
338
+ (0, external_class_validator_namespaceObject.IsInt)(),
339
+ (0, external_class_validator_namespaceObject.Min)(1),
340
+ (0, external_class_validator_namespaceObject.Max)(100),
341
+ _ts_metadata("design:type", Number)
342
+ ], BaseQueryDto.prototype, "pageSize", void 0);
343
+ query_dto_ts_decorate([
344
+ (0, external_class_validator_namespaceObject.IsOptional)(),
345
+ (0, external_class_validator_namespaceObject.IsString)(),
346
+ _ts_metadata("design:type", String)
347
+ ], BaseQueryDto.prototype, "sort", void 0);
348
+ function setup(app) {
349
+ app.useGlobalInterceptors(new LoggingInterceptor(), new CorsInterceptor(), new ResponseInterceptor());
350
+ console.log('✅ 全局拦截器配置完成');
351
+ app.useGlobalFilters(new HttpExceptionFilter());
352
+ console.log('✅ 全局异常过滤器配置完成');
353
+ }
354
+ exports.ApiResponse = __webpack_exports__.ApiResponse;
355
+ exports.BaseQueryDto = __webpack_exports__.BaseQueryDto;
356
+ exports.CorsInterceptor = __webpack_exports__.CorsInterceptor;
357
+ exports.HttpExceptionFilter = __webpack_exports__.HttpExceptionFilter;
358
+ exports.LoggingInterceptor = __webpack_exports__.LoggingInterceptor;
359
+ exports.RequestContextMiddleware = __webpack_exports__.RequestContextMiddleware;
360
+ exports.RequestContextService = __webpack_exports__.RequestContextService;
361
+ exports.RequestIdMiddleware = __webpack_exports__.RequestIdMiddleware;
362
+ exports.ResponseInterceptor = __webpack_exports__.ResponseInterceptor;
363
+ exports.setup = __webpack_exports__.setup;
364
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
365
+ "ApiResponse",
366
+ "BaseQueryDto",
367
+ "CorsInterceptor",
368
+ "HttpExceptionFilter",
369
+ "LoggingInterceptor",
370
+ "RequestContextMiddleware",
371
+ "RequestContextService",
372
+ "RequestIdMiddleware",
373
+ "ResponseInterceptor",
374
+ "setup"
375
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
376
+ Object.defineProperty(exports, '__esModule', {
377
+ value: true
378
+ });
@@ -0,0 +1,317 @@
1
+ import { Catch, HttpException, HttpStatus, Injectable, Logger, Scope } from "@nestjs/common";
2
+ import { AsyncLocalStorage } from "async_hooks";
3
+ import { v4 } from "uuid";
4
+ import { map, tap } from "rxjs/operators";
5
+ import { Type } from "class-transformer";
6
+ import { IsInt, IsOptional, IsString, Max, Min } from "class-validator";
7
+ function _ts_decorate(decorators, target, key, desc) {
8
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
10
+ 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;
11
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
12
+ }
13
+ class RequestContextService {
14
+ static{
15
+ this.asyncLocalStorage = new AsyncLocalStorage();
16
+ }
17
+ static run(context, callback) {
18
+ return this.asyncLocalStorage.run(context, callback);
19
+ }
20
+ static getContext() {
21
+ return this.asyncLocalStorage.getStore();
22
+ }
23
+ static getRequestId() {
24
+ const context = this.getContext();
25
+ return context?.requestId;
26
+ }
27
+ static setRequestId(requestId) {
28
+ const context = this.getContext();
29
+ if (context) context.requestId = requestId;
30
+ }
31
+ getRequestId() {
32
+ return RequestContextService.getRequestId();
33
+ }
34
+ getContext() {
35
+ return RequestContextService.getContext();
36
+ }
37
+ }
38
+ RequestContextService = _ts_decorate([
39
+ Injectable({
40
+ scope: Scope.REQUEST
41
+ })
42
+ ], RequestContextService);
43
+ function request_context_middleware_ts_decorate(decorators, target, key, desc) {
44
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
45
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
46
+ 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;
47
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
48
+ }
49
+ class RequestContextMiddleware {
50
+ use(req, res, next) {
51
+ const requestId = req.headers['x-request-id'] || v4();
52
+ req.requestId = requestId;
53
+ res.setHeader('X-Request-Id', requestId);
54
+ const context = {
55
+ requestId,
56
+ startTime: Date.now(),
57
+ method: req.method,
58
+ url: req.url,
59
+ ip: req.ip || 'unknown',
60
+ userAgent: req.headers['user-agent'] || 'unknown'
61
+ };
62
+ RequestContextService.run(context, ()=>{
63
+ next();
64
+ });
65
+ }
66
+ }
67
+ RequestContextMiddleware = request_context_middleware_ts_decorate([
68
+ Injectable()
69
+ ], RequestContextMiddleware);
70
+ function request_id_middleware_ts_decorate(decorators, target, key, desc) {
71
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
72
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
73
+ 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;
74
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
75
+ }
76
+ class RequestIdMiddleware {
77
+ use(req, res, next) {
78
+ const requestId = req.headers['x-request-id'] || v4();
79
+ req.requestId = requestId;
80
+ res.setHeader('X-Request-Id', requestId);
81
+ next();
82
+ }
83
+ }
84
+ RequestIdMiddleware = request_id_middleware_ts_decorate([
85
+ Injectable()
86
+ ], RequestIdMiddleware);
87
+ class ApiResponse {
88
+ constructor(code, message, data){
89
+ this.code = code;
90
+ this.message = message;
91
+ this.data = data;
92
+ }
93
+ static success(data, message = '操作成功') {
94
+ return new ApiResponse(10000, message, data);
95
+ }
96
+ static error(message, code = 50000) {
97
+ return new ApiResponse(code, message);
98
+ }
99
+ static created(data, message = '创建成功') {
100
+ return new ApiResponse(10000, message, data);
101
+ }
102
+ static badRequest(message = '请求参数错误') {
103
+ return new ApiResponse(20001, message);
104
+ }
105
+ static unauthorized(message = '未授权访问') {
106
+ return new ApiResponse(30001, message);
107
+ }
108
+ static forbidden(message = '禁止访问') {
109
+ return new ApiResponse(30002, message);
110
+ }
111
+ static notFound(message = '资源不存在') {
112
+ return new ApiResponse(40001, message);
113
+ }
114
+ static conflict(message = '资源冲突') {
115
+ return new ApiResponse(40002, message);
116
+ }
117
+ static validationError(message = '数据验证失败') {
118
+ return new ApiResponse(20002, message);
119
+ }
120
+ static internalError(message = '服务器内部错误') {
121
+ return new ApiResponse(50001, message);
122
+ }
123
+ }
124
+ function http_exception_filter_ts_decorate(decorators, target, key, desc) {
125
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
126
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
127
+ 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;
128
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
129
+ }
130
+ class HttpExceptionFilter {
131
+ catch(exception, host) {
132
+ const ctx = host.switchToHttp();
133
+ const response = ctx.getResponse();
134
+ const request = ctx.getRequest();
135
+ let requestId = RequestContextService.getRequestId();
136
+ if (!requestId) requestId = request.requestId;
137
+ if (!requestId) requestId = request.headers['x-request-id'];
138
+ if (!requestId) requestId = v4();
139
+ let status = HttpStatus.INTERNAL_SERVER_ERROR;
140
+ let message = '服务器内部错误';
141
+ if (exception instanceof HttpException) {
142
+ status = exception.getStatus();
143
+ const exceptionResponse = exception.getResponse();
144
+ if ('string' == typeof exceptionResponse) message = exceptionResponse;
145
+ else if ('object' == typeof exceptionResponse && null !== exceptionResponse) {
146
+ const responseObj = exceptionResponse;
147
+ message = responseObj.message || responseObj.error || message;
148
+ if (Array.isArray(responseObj.message)) message = responseObj.message.join(', ');
149
+ }
150
+ } else if (exception instanceof Error) message = exception.message;
151
+ this.logger.error(`[${request.method}] ${request.url} - ${status} - ${message} - RequestId: ${requestId}`, exception instanceof Error ? exception.stack : void 0);
152
+ let errorResponse;
153
+ switch(status){
154
+ case HttpStatus.BAD_REQUEST:
155
+ errorResponse = ApiResponse.badRequest(message);
156
+ break;
157
+ case HttpStatus.UNAUTHORIZED:
158
+ errorResponse = ApiResponse.unauthorized(message);
159
+ break;
160
+ case HttpStatus.FORBIDDEN:
161
+ errorResponse = ApiResponse.forbidden(message);
162
+ break;
163
+ case HttpStatus.NOT_FOUND:
164
+ errorResponse = ApiResponse.notFound(message);
165
+ break;
166
+ case HttpStatus.CONFLICT:
167
+ errorResponse = ApiResponse.conflict(message);
168
+ break;
169
+ case HttpStatus.UNPROCESSABLE_ENTITY:
170
+ errorResponse = ApiResponse.validationError(message);
171
+ break;
172
+ default:
173
+ errorResponse = ApiResponse.internalError(message);
174
+ break;
175
+ }
176
+ response.status(200).json(errorResponse);
177
+ }
178
+ constructor(){
179
+ this.logger = new Logger(HttpExceptionFilter.name);
180
+ }
181
+ }
182
+ HttpExceptionFilter = http_exception_filter_ts_decorate([
183
+ Catch()
184
+ ], HttpExceptionFilter);
185
+ function cors_interceptor_ts_decorate(decorators, target, key, desc) {
186
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
187
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
188
+ 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;
189
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
190
+ }
191
+ class CorsInterceptor {
192
+ intercept(context, next) {
193
+ const ctx = context.switchToHttp();
194
+ const response = ctx.getResponse();
195
+ const request = ctx.getRequest();
196
+ if ('text/event-stream' === request.headers.accept) return next.handle();
197
+ response.header('Access-Control-Allow-Origin', '*');
198
+ response.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,UPDATE,OPTIONS');
199
+ response.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Authorization');
200
+ return next.handle().pipe(tap(()=>{}));
201
+ }
202
+ }
203
+ CorsInterceptor = cors_interceptor_ts_decorate([
204
+ Injectable()
205
+ ], CorsInterceptor);
206
+ function logging_interceptor_ts_decorate(decorators, target, key, desc) {
207
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
208
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
209
+ 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;
210
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
211
+ }
212
+ class LoggingInterceptor {
213
+ intercept(context, next) {
214
+ const ctx = context.switchToHttp();
215
+ const request = ctx.getRequest();
216
+ const response = ctx.getResponse();
217
+ const { method, url, ip, headers } = request;
218
+ const userAgent = headers['user-agent'] || '';
219
+ const startTime = Date.now();
220
+ const requestId = RequestContextService.getRequestId() || 'unknown';
221
+ this.logger.log(`[${method}] ${url} - ${ip} - ${userAgent} - RequestId: ${requestId}`);
222
+ return next.handle().pipe(tap({
223
+ next: (data)=>{
224
+ const duration = Date.now() - startTime;
225
+ const { statusCode } = response;
226
+ this.logger.log(`[${method}] ${url} - ${statusCode} - ${duration}ms - ${ip} - RequestId: ${requestId}`);
227
+ },
228
+ error: (error)=>{
229
+ const duration = Date.now() - startTime;
230
+ this.logger.error(`[${method}] ${url} - ERROR - ${duration}ms - ${ip} - RequestId: ${requestId} - ${error.message}`);
231
+ }
232
+ }));
233
+ }
234
+ constructor(){
235
+ this.logger = new Logger(LoggingInterceptor.name);
236
+ }
237
+ }
238
+ LoggingInterceptor = logging_interceptor_ts_decorate([
239
+ Injectable()
240
+ ], LoggingInterceptor);
241
+ function response_interceptor_ts_decorate(decorators, target, key, desc) {
242
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
243
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
244
+ 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;
245
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
246
+ }
247
+ class ResponseInterceptor {
248
+ intercept(context, next) {
249
+ const request = context.switchToHttp().getRequest();
250
+ if ('text/event-stream' === request.headers.accept) return next.handle();
251
+ return next.handle().pipe(map((data)=>{
252
+ if (data && 'object' == typeof data && 'code' in data && 'message' in data) return {
253
+ ...data
254
+ };
255
+ return ApiResponse.success(data, '操作成功');
256
+ }));
257
+ }
258
+ }
259
+ ResponseInterceptor = response_interceptor_ts_decorate([
260
+ Injectable()
261
+ ], ResponseInterceptor);
262
+ function query_dto_ts_decorate(decorators, target, key, desc) {
263
+ var c = arguments.length, r = c < 3 ? target : null === desc ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
264
+ if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) r = Reflect.decorate(decorators, target, key, desc);
265
+ 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;
266
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
267
+ }
268
+ function _ts_metadata(k, v) {
269
+ if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(k, v);
270
+ }
271
+ class BaseQueryDto {
272
+ get sortField() {
273
+ return this.sort?.split(',')[0] || 'createdAt';
274
+ }
275
+ get sortOrder() {
276
+ const order = this.sort?.split(',')[1]?.toLowerCase();
277
+ return 'asc' === order ? 'asc' : 'desc';
278
+ }
279
+ get skip() {
280
+ return (this.current - 1) * this.pageSize;
281
+ }
282
+ get take() {
283
+ return this.pageSize;
284
+ }
285
+ constructor(){
286
+ this.current = 1;
287
+ this.pageSize = 10;
288
+ this.sort = 'createdAt,desc';
289
+ }
290
+ }
291
+ query_dto_ts_decorate([
292
+ IsOptional(),
293
+ Type(()=>Number),
294
+ IsInt(),
295
+ Min(1),
296
+ _ts_metadata("design:type", Number)
297
+ ], BaseQueryDto.prototype, "current", void 0);
298
+ query_dto_ts_decorate([
299
+ IsOptional(),
300
+ Type(()=>Number),
301
+ IsInt(),
302
+ Min(1),
303
+ Max(100),
304
+ _ts_metadata("design:type", Number)
305
+ ], BaseQueryDto.prototype, "pageSize", void 0);
306
+ query_dto_ts_decorate([
307
+ IsOptional(),
308
+ IsString(),
309
+ _ts_metadata("design:type", String)
310
+ ], BaseQueryDto.prototype, "sort", void 0);
311
+ function setup(app) {
312
+ app.useGlobalInterceptors(new LoggingInterceptor(), new CorsInterceptor(), new ResponseInterceptor());
313
+ console.log('✅ 全局拦截器配置完成');
314
+ app.useGlobalFilters(new HttpExceptionFilter());
315
+ console.log('✅ 全局异常过滤器配置完成');
316
+ }
317
+ export { ApiResponse, BaseQueryDto, CorsInterceptor, HttpExceptionFilter, LoggingInterceptor, RequestContextMiddleware, RequestContextService, RequestIdMiddleware, ResponseInterceptor, setup };
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "listpage-next-nest",
3
+ "version": "0.0.5",
4
+ "description": "A React component library for creating filter forms with Ant Design",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "types": "./dist/index.d.ts",
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "keywords": [
19
+ "react",
20
+ "antd",
21
+ "filter",
22
+ "form",
23
+ "component",
24
+ "typescript"
25
+ ],
26
+ "license": "MIT",
27
+ "scripts": {
28
+ "build": "rslib build",
29
+ "format": "prettier --write .",
30
+ "prepublishOnly": "npm run build"
31
+ },
32
+ "devDependencies": {
33
+ "@rsbuild/core": "^1.5.7",
34
+ "@rsbuild/plugin-react": "^1.4.0",
35
+ "@rslib/core": "^0.13.3",
36
+ "prettier": "^3.6.2",
37
+ "typescript": "^5.9.2"
38
+ },
39
+ "dependencies": {"class-transformer":"~0.5.1","class-validator":"~0.14.2","@nestjs/common":"~11.1.6","uuid":"~13.0.0","express":"~5.1.0","@types/express":"~5.0.3","rxjs":"~7.8.2"}
40
+ }