nesties 1.1.2 → 1.1.4

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/dist/index.cjs ADDED
@@ -0,0 +1,486 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var __decorateClass = (decorators, target, key, kind) => {
19
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
20
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
21
+ if (decorator = decorators[i])
22
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
23
+ if (kind && result) __defProp(target, key, result);
24
+ return result;
25
+ };
26
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
27
+
28
+ // index.ts
29
+ var index_exports = {};
30
+ __export(index_exports, {
31
+ ABORT_SIGNAL: () => ABORT_SIGNAL,
32
+ AbortSignalProvider: () => AbortSignalProvider,
33
+ AbortableModule: () => AbortableModule,
34
+ ApiBlankResponse: () => ApiBlankResponse,
35
+ ApiError: () => ApiError,
36
+ ApiErrorTyped: () => ApiErrorTyped,
37
+ ApiTypeResponse: () => ApiTypeResponse,
38
+ As: () => As,
39
+ BlankPaginatedReturnMessageDto: () => BlankPaginatedReturnMessageDto,
40
+ BlankReturnMessageDto: () => BlankReturnMessageDto,
41
+ DataBody: () => DataBody,
42
+ DataPipe: () => DataPipe,
43
+ DataQuery: () => DataQuery,
44
+ GenericPaginatedReturnMessageDto: () => GenericPaginatedReturnMessageDto,
45
+ GenericReturnMessageDto: () => GenericReturnMessageDto,
46
+ InjectAbortSignal: () => InjectAbortSignal,
47
+ InjectAbortable: () => InjectAbortable,
48
+ InsertField: () => InsertField,
49
+ MergeClassDecorators: () => MergeClassDecorators,
50
+ MergeClassOrMethodDecorators: () => MergeClassOrMethodDecorators,
51
+ MergeMethodDecorators: () => MergeMethodDecorators,
52
+ MergeParameterDecorators: () => MergeParameterDecorators,
53
+ MergePropertyDecorators: () => MergePropertyDecorators,
54
+ PaginatedReturnMessageDto: () => PaginatedReturnMessageDto,
55
+ RequireToken: () => RequireToken,
56
+ ReturnMessageDto: () => ReturnMessageDto,
57
+ StringReturnMessageDto: () => StringReturnMessageDto,
58
+ TokenGuard: () => TokenGuard,
59
+ abortableToken: () => abortableToken,
60
+ createAbortableProvider: () => createAbortableProvider,
61
+ fromAbortable: () => fromAbortable,
62
+ getClassFromClassOrArray: () => getClassFromClassOrArray,
63
+ takeUntilAbort: () => takeUntilAbort
64
+ });
65
+ module.exports = __toCommonJS(index_exports);
66
+
67
+ // src/insert-field.ts
68
+ var import_swagger = require("@nestjs/swagger");
69
+ function getClassFromClassOrArray(o) {
70
+ return o instanceof Array ? o[0] : o;
71
+ }
72
+ function InsertField(cl, map, newName) {
73
+ const extendedCl = class extends cl {
74
+ };
75
+ for (const key in map) {
76
+ (0, import_swagger.ApiProperty)({
77
+ type: map[key].type,
78
+ ...map[key].options || {}
79
+ })(extendedCl.prototype, key);
80
+ }
81
+ Object.defineProperty(extendedCl, "name", {
82
+ value: newName || cl.name
83
+ });
84
+ return extendedCl;
85
+ }
86
+
87
+ // src/merge.ts
88
+ function MergePropertyDecorators(decs) {
89
+ return (obj, key) => {
90
+ for (const dec of decs) {
91
+ dec(obj, key);
92
+ }
93
+ };
94
+ }
95
+ function MergeMethodDecorators(decs) {
96
+ return (obj, key, descriptor) => {
97
+ for (const dec of decs) {
98
+ dec(obj, key, descriptor);
99
+ }
100
+ };
101
+ }
102
+ function MergeClassDecorators(decs) {
103
+ return (obj) => {
104
+ for (const dec of decs) {
105
+ dec(obj);
106
+ }
107
+ };
108
+ }
109
+ function MergeParameterDecorators(decs) {
110
+ return (obj, key, index) => {
111
+ for (const dec of decs) {
112
+ dec(obj, key, index);
113
+ }
114
+ };
115
+ }
116
+ function MergeClassOrMethodDecorators(decs) {
117
+ return (obj, key, descriptor) => {
118
+ if (descriptor) {
119
+ for (const dec of decs) {
120
+ dec(obj, key, descriptor);
121
+ }
122
+ } else {
123
+ for (const dec of decs) {
124
+ dec(obj);
125
+ }
126
+ }
127
+ };
128
+ }
129
+
130
+ // src/return-message.ts
131
+ var import_swagger2 = require("@nestjs/swagger");
132
+ var import_common = require("@nestjs/common");
133
+ var BlankReturnMessageDto = class {
134
+ constructor(statusCode, message) {
135
+ this.statusCode = statusCode;
136
+ this.message = message || "success";
137
+ this.success = statusCode < 400;
138
+ this.timestamp = /* @__PURE__ */ new Date();
139
+ }
140
+ toException() {
141
+ return new import_common.HttpException(this, this.statusCode);
142
+ }
143
+ };
144
+ __decorateClass([
145
+ (0, import_swagger2.ApiProperty)({ description: "Return code", type: Number })
146
+ ], BlankReturnMessageDto.prototype, "statusCode", 2);
147
+ __decorateClass([
148
+ (0, import_swagger2.ApiProperty)({ description: "Return message", type: String })
149
+ ], BlankReturnMessageDto.prototype, "message", 2);
150
+ __decorateClass([
151
+ (0, import_swagger2.ApiProperty)({ description: "Whether success.", type: Boolean })
152
+ ], BlankReturnMessageDto.prototype, "success", 2);
153
+ __decorateClass([
154
+ (0, import_swagger2.ApiProperty)({ description: "Return timestamp", type: Date })
155
+ ], BlankReturnMessageDto.prototype, "timestamp", 2);
156
+ var BlankPaginatedReturnMessageDto = class extends BlankReturnMessageDto {
157
+ constructor(statusCode, message, total, pageSettings) {
158
+ super(statusCode, message);
159
+ this.total = total;
160
+ this.pageCount = pageSettings.pageCount;
161
+ this.recordsPerPage = pageSettings.recordsPerPage;
162
+ this.totalPages = Math.ceil(total / pageSettings.recordsPerPage);
163
+ }
164
+ };
165
+ __decorateClass([
166
+ (0, import_swagger2.ApiProperty)({ description: "Total record count.", type: Number })
167
+ ], BlankPaginatedReturnMessageDto.prototype, "total", 2);
168
+ __decorateClass([
169
+ (0, import_swagger2.ApiProperty)({ description: "Total page count.", type: Number })
170
+ ], BlankPaginatedReturnMessageDto.prototype, "totalPages", 2);
171
+ __decorateClass([
172
+ (0, import_swagger2.ApiProperty)({ description: "Current page.", type: Number })
173
+ ], BlankPaginatedReturnMessageDto.prototype, "pageCount", 2);
174
+ __decorateClass([
175
+ (0, import_swagger2.ApiProperty)({ description: "Records per page.", type: Number })
176
+ ], BlankPaginatedReturnMessageDto.prototype, "recordsPerPage", 2);
177
+ var GenericReturnMessageDto = class extends BlankReturnMessageDto {
178
+ constructor(statusCode, message, data) {
179
+ super(statusCode, message);
180
+ this.data = data;
181
+ }
182
+ };
183
+ function ReturnMessageDto(type) {
184
+ return InsertField(
185
+ GenericReturnMessageDto,
186
+ {
187
+ data: {
188
+ type,
189
+ options: {
190
+ required: false,
191
+ description: "Return data."
192
+ }
193
+ }
194
+ },
195
+ `${getClassFromClassOrArray(type).name}${Array.isArray(type) ? "Array" : ""}ReturnMessageDto`
196
+ );
197
+ }
198
+ var GenericPaginatedReturnMessageDto = class extends BlankPaginatedReturnMessageDto {
199
+ constructor(statusCode, message, data, total, pageSettings) {
200
+ super(statusCode, message, total, pageSettings);
201
+ this.data = data;
202
+ }
203
+ };
204
+ function PaginatedReturnMessageDto(type) {
205
+ return InsertField(
206
+ GenericPaginatedReturnMessageDto,
207
+ {
208
+ data: {
209
+ type: [type],
210
+ options: {
211
+ required: false,
212
+ description: "Return data."
213
+ }
214
+ }
215
+ },
216
+ `${getClassFromClassOrArray(type).name}PaginatedReturnMessageDto`
217
+ );
218
+ }
219
+ var StringReturnMessageDto = class extends GenericReturnMessageDto {
220
+ };
221
+ __decorateClass([
222
+ (0, import_swagger2.ApiProperty)({ description: "Return data.", type: String, required: false })
223
+ ], StringReturnMessageDto.prototype, "data", 2);
224
+
225
+ // src/openapi.ts
226
+ var import_swagger3 = require("@nestjs/swagger");
227
+ var ApiTypeResponse = (type, options = {}) => (0, import_swagger3.ApiResponse)({
228
+ status: 200,
229
+ type: ReturnMessageDto(type),
230
+ ...options
231
+ });
232
+ var ApiBlankResponse = (options = {}) => (0, import_swagger3.ApiResponse)({
233
+ status: 200,
234
+ type: BlankReturnMessageDto,
235
+ ...options
236
+ });
237
+ var ApiError = (status, description) => ApiBlankResponse({ status, description });
238
+ var ApiErrorTyped = (status, description, type) => ApiTypeResponse(type, {
239
+ status,
240
+ description
241
+ });
242
+
243
+ // src/pipe.ts
244
+ var import_common2 = require("@nestjs/common");
245
+ var DataPipe = () => new import_common2.ValidationPipe({
246
+ transform: true,
247
+ transformOptions: { enableImplicitConversion: true }
248
+ });
249
+ var createDataPipeDec = (nestFieldDec) => (...extraPipes) => nestFieldDec(DataPipe(), ...extraPipes);
250
+ var DataQuery = createDataPipeDec(import_common2.Query);
251
+ var DataBody = createDataPipeDec(import_common2.Body);
252
+
253
+ // src/token.guard.ts
254
+ var import_common3 = require("@nestjs/common");
255
+ var import_config = require("@nestjs/config");
256
+ var import_swagger4 = require("@nestjs/swagger");
257
+ var TokenGuard = class {
258
+ constructor(config) {
259
+ this.config = config;
260
+ this.token = this.config.get("SERVER_TOKEN");
261
+ }
262
+ async canActivate(context) {
263
+ const request = context.switchToHttp().getRequest();
264
+ const token = request.headers["x-server-token"];
265
+ if (this.token && token !== this.token) {
266
+ throw new BlankReturnMessageDto(401, "Unauthorized").toException();
267
+ }
268
+ return true;
269
+ }
270
+ };
271
+ TokenGuard = __decorateClass([
272
+ (0, import_common3.Injectable)(),
273
+ __decorateParam(0, (0, import_common3.Inject)(import_config.ConfigService))
274
+ ], TokenGuard);
275
+ var RequireToken = () => MergeClassOrMethodDecorators([
276
+ (0, import_common3.UseGuards)(TokenGuard),
277
+ (0, import_swagger4.ApiHeader)({
278
+ name: "x-server-token",
279
+ description: "Server token",
280
+ required: false
281
+ }),
282
+ ApiError(401, "Incorrect server token provided")
283
+ ]);
284
+
285
+ // src/abort-utils.ts
286
+ var import_rxjs = require("rxjs");
287
+ var import_common4 = require("@nestjs/common");
288
+
289
+ // src/abort-http-signal.ts
290
+ function toRawReq(req) {
291
+ if (req?.raw?.socket) return req.raw;
292
+ return req;
293
+ }
294
+ function createAbortSignalFromHttp(req) {
295
+ const rawReq = toRawReq(req);
296
+ const ac = new AbortController();
297
+ const makeReason = () => new BlankReturnMessageDto(499, "Request aborted").toException();
298
+ const abortOnce = () => {
299
+ if (!ac.signal.aborted) ac.abort(makeReason());
300
+ cleanup();
301
+ };
302
+ const onClose = () => {
303
+ abortOnce();
304
+ };
305
+ const cleanup = () => {
306
+ rawReq.off?.("close", onClose);
307
+ };
308
+ rawReq.once?.("close", onClose);
309
+ return ac.signal;
310
+ }
311
+
312
+ // src/abort-utils.ts
313
+ var fromAbortable = (fn) => {
314
+ return new import_rxjs.Observable((subscriber) => {
315
+ const ac = new AbortController();
316
+ fn(ac).then(
317
+ (value) => {
318
+ if (!ac.signal.aborted && !subscriber.closed) {
319
+ subscriber.next(value);
320
+ subscriber.complete();
321
+ }
322
+ },
323
+ (err) => {
324
+ if (ac.signal.aborted) {
325
+ if (!subscriber.closed) subscriber.complete();
326
+ return;
327
+ }
328
+ if (!subscriber.closed) subscriber.error(err);
329
+ }
330
+ );
331
+ return () => {
332
+ if (!ac.signal.aborted) ac.abort();
333
+ };
334
+ });
335
+ };
336
+ var takeUntilAbort = (signal) => {
337
+ return (source) => {
338
+ return source.pipe(
339
+ (0, import_rxjs.takeUntil)(
340
+ new import_rxjs.Observable((subscriber) => {
341
+ const onAbort = () => subscriber.next();
342
+ if (signal.aborted) {
343
+ subscriber.next();
344
+ } else {
345
+ signal.addEventListener("abort", onAbort, { once: true });
346
+ }
347
+ return () => signal.removeEventListener("abort", onAbort);
348
+ })
349
+ )
350
+ );
351
+ };
352
+ };
353
+ var As = (0, import_common4.createParamDecorator)(
354
+ (_data, ctx) => {
355
+ const req = ctx.switchToHttp().getRequest();
356
+ return createAbortSignalFromHttp(req);
357
+ }
358
+ );
359
+
360
+ // src/abortable-module/abortable.token.ts
361
+ var import_common6 = require("@nestjs/common");
362
+ var import_nfkit = require("nfkit");
363
+
364
+ // src/abortable-module/abort-signal.provider.ts
365
+ var import_common5 = require("@nestjs/common");
366
+ var import_core = require("@nestjs/core");
367
+ var ABORT_SIGNAL = Symbol("ABORT_SIGNAL");
368
+ var AbortSignalProvider = {
369
+ provide: ABORT_SIGNAL,
370
+ scope: import_common5.Scope.REQUEST,
371
+ inject: [import_core.REQUEST],
372
+ useFactory: (req) => {
373
+ return createAbortSignalFromHttp(req);
374
+ }
375
+ };
376
+ var InjectAbortSignal = () => (0, import_common5.Inject)(ABORT_SIGNAL);
377
+
378
+ // src/abortable-module/abortable.token.ts
379
+ var import_core2 = require("@nestjs/core");
380
+ var tokenMemo = /* @__PURE__ */ new Map();
381
+ var abortableToken = (token) => {
382
+ if (tokenMemo.has(token)) return tokenMemo.get(token);
383
+ const name = typeof token === "function" ? token.name : String(token);
384
+ const sym = Symbol.for(`Abortable(${name})`);
385
+ tokenMemo.set(token, sym);
386
+ return sym;
387
+ };
388
+ function InjectAbortable(token) {
389
+ return (target, propertyKey, parameterIndex) => {
390
+ let actualToken = token;
391
+ if (!actualToken) {
392
+ const paramTypes = Reflect.getMetadata("design:paramtypes", target, propertyKey) || [];
393
+ actualToken = paramTypes[parameterIndex];
394
+ if (!actualToken) {
395
+ throw new Error(
396
+ `@InjectAbortable() cannot infer type from metadata: ${target.constructor?.name}[${parameterIndex}]`
397
+ );
398
+ }
399
+ }
400
+ (0, import_common6.Inject)(abortableToken(actualToken))(target, propertyKey, parameterIndex);
401
+ };
402
+ }
403
+ function createAbortableProvider(token, opts) {
404
+ const provide = abortableToken(token);
405
+ return {
406
+ provide,
407
+ scope: import_common6.Scope.REQUEST,
408
+ inject: [import_core2.ModuleRef, import_core2.REQUEST, ABORT_SIGNAL],
409
+ // ⚠️ 注意:用 async + resolve + contextId + strict:false
410
+ useFactory: async (moduleRef, req, signal) => {
411
+ const ctxId = import_core2.ContextIdFactory.getByRequest(req);
412
+ const svc = await moduleRef.resolve(token, ctxId, { strict: false });
413
+ if (svc == null) {
414
+ throw new Error(
415
+ `Abortable: provider "${String(
416
+ token.name ?? token
417
+ )}" not found in container (even with strict:false)`
418
+ );
419
+ }
420
+ return (0, import_nfkit.abortable)(svc, signal, opts);
421
+ }
422
+ };
423
+ }
424
+
425
+ // src/abortable-module/abortable.module.ts
426
+ var import_common7 = require("@nestjs/common");
427
+ var AbortableModule = class {
428
+ static forRoot() {
429
+ return {
430
+ module: AbortableModule,
431
+ providers: [AbortSignalProvider],
432
+ exports: [AbortSignalProvider],
433
+ global: true
434
+ };
435
+ }
436
+ static forFeature(tokens, options) {
437
+ const providers = tokens.map(
438
+ (token) => createAbortableProvider(token, options?.abortableOptions)
439
+ );
440
+ return {
441
+ module: AbortableModule,
442
+ providers: [...providers],
443
+ exports: [...providers]
444
+ };
445
+ }
446
+ };
447
+ AbortableModule = __decorateClass([
448
+ (0, import_common7.Module)({})
449
+ ], AbortableModule);
450
+ // Annotate the CommonJS export names for ESM import in node:
451
+ 0 && (module.exports = {
452
+ ABORT_SIGNAL,
453
+ AbortSignalProvider,
454
+ AbortableModule,
455
+ ApiBlankResponse,
456
+ ApiError,
457
+ ApiErrorTyped,
458
+ ApiTypeResponse,
459
+ As,
460
+ BlankPaginatedReturnMessageDto,
461
+ BlankReturnMessageDto,
462
+ DataBody,
463
+ DataPipe,
464
+ DataQuery,
465
+ GenericPaginatedReturnMessageDto,
466
+ GenericReturnMessageDto,
467
+ InjectAbortSignal,
468
+ InjectAbortable,
469
+ InsertField,
470
+ MergeClassDecorators,
471
+ MergeClassOrMethodDecorators,
472
+ MergeMethodDecorators,
473
+ MergeParameterDecorators,
474
+ MergePropertyDecorators,
475
+ PaginatedReturnMessageDto,
476
+ RequireToken,
477
+ ReturnMessageDto,
478
+ StringReturnMessageDto,
479
+ TokenGuard,
480
+ abortableToken,
481
+ createAbortableProvider,
482
+ fromAbortable,
483
+ getClassFromClassOrArray,
484
+ takeUntilAbort
485
+ });
486
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../index.ts", "../src/insert-field.ts", "../src/merge.ts", "../src/return-message.ts", "../src/openapi.ts", "../src/pipe.ts", "../src/token.guard.ts", "../src/abort-utils.ts", "../src/abort-http-signal.ts", "../src/abortable-module/abortable.token.ts", "../src/abortable-module/abort-signal.provider.ts", "../src/abortable-module/abortable.module.ts"],
4
+ "sourcesContent": ["export * from './src/insert-field';\nexport * from './src/merge';\nexport * from './src/return-message';\nexport * from './src/openapi';\nexport * from './src/pipe';\nexport * from './src/token.guard';\nexport * from './src/abort-utils';\nexport * from './src/abortable-module';\n", "import { ApiProperty, ApiPropertyOptions } from '@nestjs/swagger';\n\nexport type AnyClass = new (...args: any[]) => any;\nexport type ClassOrArray = AnyClass | [AnyClass];\nexport type ClassType<T> = new (...args: any[]) => T;\nexport type TypeFromClass<T> = T extends new (...args: any[]) => infer U\n ? U\n : never;\nexport type ParamsFromClass<T> = T extends new (...args: infer U) => any\n ? U\n : never;\nexport type ParseType<IC extends ClassOrArray> = IC extends [infer U]\n ? TypeFromClass<U>[]\n : TypeFromClass<IC>;\n\nexport function getClassFromClassOrArray(o: ClassOrArray) {\n return o instanceof Array ? o[0] : o;\n}\n\nexport interface InsertOptions<C extends ClassOrArray = ClassOrArray> {\n type: C;\n options?: ApiPropertyOptions;\n}\n\ntype TypeFromInsertOptions<O extends InsertOptions> =\n O extends InsertOptions<infer C>\n ?\n | ParseType<C>\n | (O extends { options: { required: true } } ? never : undefined)\n : never;\n\ntype Merge<T, U> = {\n [K in keyof T | keyof U]: K extends keyof T\n ? T[K]\n : K extends keyof U\n ? U[K]\n : never;\n};\n\nexport function InsertField<\n C extends AnyClass,\n M extends Record<string, InsertOptions>,\n>(\n cl: C,\n map: M,\n newName?: string,\n): new (...args: ParamsFromClass<C>) => Merge<\n {\n [F in keyof M]: TypeFromInsertOptions<M[F]>;\n },\n TypeFromClass<C>\n> {\n const extendedCl = class extends cl {};\n for (const key in map) {\n ApiProperty({\n type: map[key].type,\n ...(map[key].options || {}),\n })(extendedCl.prototype, key);\n }\n Object.defineProperty(extendedCl, 'name', {\n value: newName || cl.name,\n });\n return extendedCl;\n}\n", "export function MergePropertyDecorators(\n decs: PropertyDecorator[],\n): PropertyDecorator {\n return (obj, key) => {\n for (const dec of decs) {\n dec(obj, key);\n }\n };\n}\n\nexport function MergeMethodDecorators(\n decs: MethodDecorator[],\n): MethodDecorator {\n return (obj, key, descriptor) => {\n for (const dec of decs) {\n dec(obj, key, descriptor);\n }\n };\n}\n\nexport function MergeClassDecorators(decs: ClassDecorator[]): ClassDecorator {\n return (obj) => {\n for (const dec of decs) {\n dec(obj);\n }\n };\n}\n\nexport function MergeParameterDecorators(\n decs: ParameterDecorator[],\n): ParameterDecorator {\n return (obj, key, index) => {\n for (const dec of decs) {\n dec(obj, key, index);\n }\n };\n}\n\nexport function MergeClassOrMethodDecorators(\n decs: (ClassDecorator & MethodDecorator)[],\n): ClassDecorator & MethodDecorator {\n return (obj, key?, descriptor?) => {\n if (descriptor) {\n for (const dec of decs) {\n dec(obj, key, descriptor);\n }\n } else {\n for (const dec of decs) {\n dec(obj);\n }\n }\n };\n}\n", "import { ApiProperty } from '@nestjs/swagger';\nimport { HttpException } from '@nestjs/common';\nimport {\n AnyClass,\n ClassOrArray,\n getClassFromClassOrArray,\n InsertField,\n ParseType,\n} from './insert-field';\n\nexport interface PageSettingsWise {\n pageCount: number;\n recordsPerPage: number;\n}\n\nexport interface BlankReturnMessage {\n statusCode: number;\n message: string;\n success: boolean;\n timestamp: Date;\n}\n\nexport interface ReturnMessage<T> extends BlankReturnMessage {\n data?: T;\n}\n\nexport class BlankReturnMessageDto implements BlankReturnMessage {\n @ApiProperty({ description: 'Return code', type: Number })\n statusCode: number;\n @ApiProperty({ description: 'Return message', type: String })\n message: string;\n @ApiProperty({ description: 'Whether success.', type: Boolean })\n success: boolean;\n @ApiProperty({ description: 'Return timestamp', type: Date })\n timestamp: Date;\n constructor(statusCode: number, message?: string) {\n this.statusCode = statusCode;\n this.message = message || 'success';\n this.success = statusCode < 400;\n this.timestamp = new Date();\n }\n\n toException() {\n return new HttpException(this, this.statusCode);\n }\n}\n\nexport class BlankPaginatedReturnMessageDto\n extends BlankReturnMessageDto\n implements PageSettingsWise\n{\n @ApiProperty({ description: 'Total record count.', type: Number })\n total: number;\n @ApiProperty({ description: 'Total page count.', type: Number })\n totalPages: number;\n @ApiProperty({ description: 'Current page.', type: Number })\n pageCount: number;\n @ApiProperty({ description: 'Records per page.', type: Number })\n recordsPerPage: number;\n constructor(\n statusCode: number,\n message: string,\n total: number,\n pageSettings: PageSettingsWise,\n ) {\n super(statusCode, message);\n this.total = total;\n this.pageCount = pageSettings.pageCount;\n this.recordsPerPage = pageSettings.recordsPerPage;\n this.totalPages = Math.ceil(total / pageSettings.recordsPerPage);\n }\n}\n\nexport class GenericReturnMessageDto<T>\n extends BlankReturnMessageDto\n implements ReturnMessage<T>\n{\n data?: T;\n constructor(statusCode: number, message?: string, data?: T) {\n super(statusCode, message);\n this.data = data;\n }\n}\n\nexport function ReturnMessageDto<T extends ClassOrArray>(\n type: T,\n): new (\n statusCode: number,\n message: string,\n data: ParseType<T>,\n) => GenericReturnMessageDto<ParseType<T>> {\n return InsertField(\n GenericReturnMessageDto,\n {\n data: {\n type,\n options: {\n required: false,\n description: 'Return data.',\n },\n },\n },\n `${getClassFromClassOrArray(type).name}${Array.isArray(type) ? 'Array' : ''}ReturnMessageDto`,\n );\n}\n\nexport class GenericPaginatedReturnMessageDto<T>\n extends BlankPaginatedReturnMessageDto\n implements PageSettingsWise, ReturnMessage<T[]>\n{\n data: T[];\n constructor(\n statusCode: number,\n message: string,\n data: T[],\n total: number,\n pageSettings: PageSettingsWise,\n ) {\n super(statusCode, message, total, pageSettings);\n this.data = data;\n }\n}\n\nexport function PaginatedReturnMessageDto<T extends AnyClass>(\n type: T,\n): new (\n statusCode: number,\n message: string,\n data: InstanceType<T>[],\n total: number,\n pageSettings: PageSettingsWise,\n) => GenericPaginatedReturnMessageDto<InstanceType<T>> {\n return InsertField(\n GenericPaginatedReturnMessageDto,\n {\n data: {\n type: [type],\n options: {\n required: false,\n description: 'Return data.',\n },\n },\n },\n `${getClassFromClassOrArray(type).name}PaginatedReturnMessageDto`,\n );\n}\n\nexport class StringReturnMessageDto extends GenericReturnMessageDto<string> {\n @ApiProperty({ description: 'Return data.', type: String, required: false })\n data: string;\n}\n", "import { BlankReturnMessageDto, ReturnMessageDto } from './return-message';\nimport { ApiResponse, ApiResponseOptions } from '@nestjs/swagger';\nimport { ClassOrArray } from './insert-field';\n\nexport const ApiTypeResponse = (\n // eslint-disable-next-line @typescript-eslint/ban-types\n type: ClassOrArray,\n options: ApiResponseOptions = {},\n) =>\n ApiResponse({\n status: 200,\n type: ReturnMessageDto(type),\n ...options,\n });\n\nexport const ApiBlankResponse = (options: ApiResponseOptions = {}) =>\n ApiResponse({\n status: 200,\n type: BlankReturnMessageDto,\n ...options,\n });\n\nexport const ApiError = (status: number, description: string) =>\n ApiBlankResponse({ status, description });\n\nexport const ApiErrorTyped = (\n status: number,\n description: string,\n type: ClassOrArray,\n) =>\n ApiTypeResponse(type, {\n status,\n description,\n });\n", "import {\n Body,\n PipeTransform,\n Query,\n Type,\n ValidationPipe,\n} from '@nestjs/common';\n\nexport const DataPipe = () =>\n new ValidationPipe({\n transform: true,\n transformOptions: { enableImplicitConversion: true },\n });\n\nconst createDataPipeDec =\n (\n nestFieldDec: (\n ...pipes: (Type<PipeTransform> | PipeTransform)[]\n ) => ParameterDecorator,\n ) =>\n (...extraPipes: (Type<PipeTransform> | PipeTransform)[]) =>\n nestFieldDec(DataPipe(), ...extraPipes);\n\nexport const DataQuery = createDataPipeDec(Query);\nexport const DataBody = createDataPipeDec(Body);\n", "import {\n CanActivate,\n ExecutionContext,\n Inject,\n Injectable,\n UseGuards,\n} from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport { ApiHeader } from '@nestjs/swagger';\nimport { BlankReturnMessageDto } from './return-message';\nimport { MergeClassOrMethodDecorators } from './merge';\nimport { ApiError } from './openapi';\n\n@Injectable()\nexport class TokenGuard implements CanActivate {\n private token = this.config.get<string>('SERVER_TOKEN');\n constructor(@Inject(ConfigService) private config: ConfigService) {}\n\n async canActivate(context: ExecutionContext) {\n const request = context.switchToHttp().getRequest();\n const token = request.headers['x-server-token'];\n if (this.token && token !== this.token) {\n throw new BlankReturnMessageDto(401, 'Unauthorized').toException();\n }\n return true;\n }\n}\n\nexport const RequireToken = () =>\n MergeClassOrMethodDecorators([\n UseGuards(TokenGuard),\n ApiHeader({\n name: 'x-server-token',\n description: 'Server token',\n required: false,\n }),\n ApiError(401, 'Incorrect server token provided'),\n ]);\n", "import { Observable, takeUntil } from 'rxjs';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\nimport { IncomingMessage } from 'node:http';\nimport { BlankReturnMessageDto } from './return-message';\nimport type { Request, Response } from 'express';\nimport { createAbortSignalFromHttp } from './abort-http-signal';\n\nexport type AbortableFn<T> = (ac: AbortController) => Promise<T>;\n\nexport const fromAbortable = <T>(fn: AbortableFn<T>): Observable<T> => {\n return new Observable<T>((subscriber) => {\n const ac = new AbortController();\n\n fn(ac).then(\n (value) => {\n if (!ac.signal.aborted && !subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n },\n (err) => {\n if (ac.signal.aborted) {\n if (!subscriber.closed) subscriber.complete();\n return;\n }\n if (!subscriber.closed) subscriber.error(err);\n },\n );\n\n return () => {\n if (!ac.signal.aborted) ac.abort();\n };\n });\n};\n\nexport const takeUntilAbort = <T>(signal: AbortSignal) => {\n return (source: Observable<T>) => {\n return source.pipe(\n takeUntil(\n new Observable<void>((subscriber) => {\n const onAbort = () => subscriber.next();\n if (signal.aborted) {\n subscriber.next();\n } else {\n signal.addEventListener('abort', onAbort, { once: true });\n }\n return () => signal.removeEventListener('abort', onAbort);\n }),\n ),\n );\n };\n};\n\nexport const As = createParamDecorator(\n (_data: unknown, ctx: ExecutionContext) => {\n const req = ctx.switchToHttp().getRequest<Request>();\n return createAbortSignalFromHttp(req);\n },\n);\n", "// abort-http-signal.ts\nimport type { IncomingMessage } from 'http';\nimport type { Request as ExpressReq } from 'express';\nimport type { FastifyRequest } from 'fastify';\nimport { BlankReturnMessageDto } from './return-message';\n\ntype AnyReq = ExpressReq | FastifyRequest | IncomingMessage;\n\nfunction toRawReq(req: AnyReq): IncomingMessage {\n // Fastify: req.raw \u662F IncomingMessage\uFF1BExpress: req \u672C\u8EAB\u5C31\u662F IncomingMessage\n if ((req as any)?.raw?.socket) return (req as any).raw as IncomingMessage;\n return req as IncomingMessage;\n}\n\n/**\n * \u4EC5\u901A\u8FC7 req \u81EA\u52A8\u9002\u914D Express/Fastify\uFF0C\u7ED1\u5B9A HTTP \u53D6\u6D88\u5230 AbortSignal\u3002\n * - \u4F18\u5148\u76D1\u542C 'aborted'\uFF08\u5BA2\u6237\u7AEF\u4E2D\u65AD\u6700\u53EF\u9760\u7684\u4FE1\u53F7\uFF09\n * - \u53EF\u9009\u515C\u5E95\uFF1A\u5728 socket 'close' \u65F6\uFF0C\u4EC5\u5F53\u8BF7\u6C42\u672A\u5B8C\u6574\u63A5\u6536/\u6216\u5DF2\u6807\u8BB0 aborted \u65F6\uFF0C\u624D\u89E6\u53D1 abort\uFF0C\u907F\u514D\u6B63\u5E38\u5B8C\u6210\u7684\u8BEF\u4F24\n * - reason \u56FA\u5B9A\u4E3A 499 HttpException\n *\n * \u6CE8\u610F\uFF1A\u82E5\u4F60\u7684 abortable() \u5728 signal.reason \u662F Error \u65F6\u4F1A\u201C\u539F\u6837 throw reason\u201D\uFF0C\n * \u90A3\u4E48\u4E0A\u5C42\u4F1A\u6536\u5230 HttpException(499)\u3002\u82E5\u4ECD\u60F3\u7EDF\u4E00\u629B AbortedError\uFF0C\u53EF\u6539\u4E3A\uFF1A\n * const reason = new AbortedError('Request aborted', httpErr);\n * \u5E76\u8BA9 throwIfAborted \u5148\u629B AbortedError\uFF08\u4FDD\u7559 cause\uFF09\u3002\n */\nexport function createAbortSignalFromHttp(req: AnyReq): AbortSignal {\n const rawReq = toRawReq(req);\n const ac = new AbortController();\n\n const makeReason = () =>\n new BlankReturnMessageDto(499, 'Request aborted').toException();\n\n const abortOnce = () => {\n if (!ac.signal.aborted) ac.abort(makeReason());\n cleanup();\n };\n\n const onClose = () => {\n abortOnce();\n };\n\n const cleanup = () => {\n rawReq.off?.('close', onClose);\n };\n\n rawReq.once?.('close', onClose);\n\n return ac.signal;\n}\n", "import { Inject, Provider, Scope } from '@nestjs/common';\nimport { abortable, AbortableOpts } from 'nfkit';\nimport { ABORT_SIGNAL } from './abort-signal.provider';\nimport { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';\n\nexport type ProviderToken<T = any> =\n | string\n | symbol\n | (new (...args: any[]) => T);\n\nconst tokenMemo = new Map<any, symbol>();\nexport const abortableToken = (token: ProviderToken) => {\n if (tokenMemo.has(token)) return tokenMemo.get(token)!;\n const name = typeof token === 'function' ? token.name : String(token);\n const sym = Symbol.for(`Abortable(${name})`);\n tokenMemo.set(token, sym);\n return sym;\n};\n\n/**\n * \u652F\u6301\u4E24\u79CD\u7528\u6CD5\uFF1A\n * @InjectAbortable(SomeService)\n * @InjectAbortable() // \u81EA\u52A8\u63A8\u65AD\u7C7B\u578B\n */\nexport function InjectAbortable(token?: ProviderToken): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n let actualToken = token;\n\n if (!actualToken) {\n // \u5229\u7528 reflect-metadata \u83B7\u53D6\u53C2\u6570\u7C7B\u578B\n const paramTypes: any[] =\n Reflect.getMetadata('design:paramtypes', target, propertyKey) || [];\n actualToken = paramTypes[parameterIndex];\n if (!actualToken) {\n throw new Error(\n `@InjectAbortable() cannot infer type from metadata: ${target.constructor?.name}[${parameterIndex}]`,\n );\n }\n }\n\n Inject(abortableToken(actualToken))(target, propertyKey, parameterIndex);\n };\n}\n\nexport function createAbortableProvider<T>(\n token: ProviderToken<T>,\n opts?: AbortableOpts,\n): Provider {\n const provide = abortableToken(token);\n\n return {\n provide,\n scope: Scope.REQUEST,\n inject: [ModuleRef, REQUEST, ABORT_SIGNAL],\n // \u26A0\uFE0F \u6CE8\u610F\uFF1A\u7528 async + resolve + contextId + strict:false\n useFactory: async (\n moduleRef: ModuleRef,\n req: Request,\n signal: AbortSignal,\n ) => {\n // \u8BA9\u89E3\u6790\u4E0E\u5F53\u524D\u8BF7\u6C42\u4E0A\u4E0B\u6587\u7ED1\u5B9A\uFF08\u652F\u6301 request/transient \u4F5C\u7528\u57DF\uFF09\n const ctxId = ContextIdFactory.getByRequest(req);\n // \u4E25\u683C\u6A21\u5F0F\u5173\u95ED\uFF0C\u5141\u8BB8\u8DE8\u6A21\u5757\u8FB9\u754C\u89E3\u6790\uFF08\u89E3\u51B3\u6D4B\u8BD5\u91CC forFeature \u5B50\u6A21\u5757\u770B\u4E0D\u5230 DemoService \u7684\u60C5\u51B5\uFF09\n const svc = await moduleRef.resolve<T>(token, ctxId, { strict: false });\n if (svc == null) {\n throw new Error(\n `Abortable: provider \"${String(\n (token as any).name ?? token,\n )}\" not found in container (even with strict:false)`,\n );\n }\n return abortable<T>(svc, signal, opts);\n },\n };\n}\n", "import { Inject, Provider, Scope } from '@nestjs/common';\nimport { REQUEST } from '@nestjs/core';\nimport type { Request as ExpressReq } from 'express';\nimport { createAbortSignalFromHttp } from '../abort-http-signal';\n\nexport const ABORT_SIGNAL = Symbol('ABORT_SIGNAL');\nexport const AbortSignalProvider: Provider = {\n provide: ABORT_SIGNAL,\n scope: Scope.REQUEST,\n inject: [REQUEST],\n useFactory: (req: ExpressReq) => {\n return createAbortSignalFromHttp(req);\n },\n};\n\nexport const InjectAbortSignal = () => Inject(ABORT_SIGNAL);\n", "import { DynamicModule, Module, Provider } from '@nestjs/common';\nimport { ProviderToken, createAbortableProvider } from './abortable.token';\nimport { AbortableOpts } from 'nfkit';\nimport { AbortSignalProvider } from './abort-signal.provider';\n\nexport interface AbortableModuleOptions {\n abortableOptions?: AbortableOpts;\n}\n\n@Module({})\nexport class AbortableModule {\n static forRoot(): DynamicModule {\n return {\n module: AbortableModule,\n providers: [AbortSignalProvider],\n exports: [AbortSignalProvider],\n global: true,\n };\n }\n\n static forFeature(\n tokens: ProviderToken[],\n options?: AbortableModuleOptions,\n ): DynamicModule {\n const providers: Provider[] = tokens.map((token) =>\n createAbortableProvider(token, options?.abortableOptions),\n );\n\n return {\n module: AbortableModule,\n providers: [...providers],\n exports: [...providers],\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_swagger", "import_swagger", "import_common", "import_common", "import_swagger", "import_common", "import_common", "import_common", "import_core", "import_common"]
7
+ }
package/dist/index.d.ts CHANGED
@@ -4,3 +4,5 @@ export * from './src/return-message';
4
4
  export * from './src/openapi';
5
5
  export * from './src/pipe';
6
6
  export * from './src/token.guard';
7
+ export * from './src/abort-utils';
8
+ export * from './src/abortable-module';