nesties 1.1.26 → 1.1.28
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 +69 -55
- package/dist/index.cjs.map +4 -4
- package/dist/index.mjs +70 -58
- package/dist/index.mjs.map +4 -4
- package/dist/src/i18n-module/i18n-factory.d.ts +1 -1
- package/dist/src/resolver/resolver.d.ts +1 -1
- package/dist/src/utility/index.d.ts +1 -0
- package/dist/src/utility/injection-token-map.d.ts +1 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -53,6 +53,7 @@ __export(index_exports, {
|
|
|
53
53
|
I18nService: () => I18nService,
|
|
54
54
|
InjectAbortSignal: () => InjectAbortSignal,
|
|
55
55
|
InjectAbortable: () => InjectAbortable,
|
|
56
|
+
InjectionTokenMap: () => InjectionTokenMap,
|
|
56
57
|
InsertField: () => InsertField,
|
|
57
58
|
LocalePipe: () => LocalePipe,
|
|
58
59
|
MergeClassDecorators: () => MergeClassDecorators,
|
|
@@ -77,6 +78,7 @@ __export(index_exports, {
|
|
|
77
78
|
TokenGuard: () => TokenGuard,
|
|
78
79
|
TransformParamResolver: () => TransformParamResolver,
|
|
79
80
|
abortableToken: () => abortableToken,
|
|
81
|
+
addInjectionTokenMapping: () => addInjectionTokenMapping,
|
|
80
82
|
createAbortableProvider: () => createAbortableProvider,
|
|
81
83
|
createI18n: () => createI18n,
|
|
82
84
|
createI18nDecorator: () => createI18nDecorator,
|
|
@@ -162,6 +164,19 @@ var parseBool = (value) => {
|
|
|
162
164
|
return void 0;
|
|
163
165
|
};
|
|
164
166
|
|
|
167
|
+
// src/utility/injection-token-map.ts
|
|
168
|
+
var InjectionTokenMap = /* @__PURE__ */ new Map();
|
|
169
|
+
var addInjectionTokenMapping = (from2, to) => {
|
|
170
|
+
if (!from2 || !to) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!InjectionTokenMap.has(from2)) {
|
|
174
|
+
InjectionTokenMap.set(from2, []);
|
|
175
|
+
}
|
|
176
|
+
const toArray = Array.isArray(to) ? to : [to];
|
|
177
|
+
InjectionTokenMap.get(from2)?.push(...toArray);
|
|
178
|
+
};
|
|
179
|
+
|
|
165
180
|
// src/insert-field.ts
|
|
166
181
|
function InsertField(cl, map, newName) {
|
|
167
182
|
const extendedCl = class extends cl {
|
|
@@ -351,13 +366,10 @@ var import_common4 = require("@nestjs/common");
|
|
|
351
366
|
var import_core = require("@nestjs/core");
|
|
352
367
|
var import_swagger4 = require("@nestjs/swagger");
|
|
353
368
|
|
|
354
|
-
// src/utility/injection-token-map.ts
|
|
355
|
-
var InjectionTokenMap = /* @__PURE__ */ new Map();
|
|
356
|
-
|
|
357
369
|
// src/create-provider.ts
|
|
358
370
|
var createProvider = (options, factory) => {
|
|
359
371
|
if (options.inject) {
|
|
360
|
-
|
|
372
|
+
addInjectionTokenMapping(options.provide, options.inject);
|
|
361
373
|
}
|
|
362
374
|
return {
|
|
363
375
|
useFactory: factory,
|
|
@@ -417,6 +429,56 @@ var ApplyDecoratorUnique = (dec, identifier) => ((...args) => {
|
|
|
417
429
|
}
|
|
418
430
|
});
|
|
419
431
|
|
|
432
|
+
// src/utility/collect-info-from-injection-token.ts
|
|
433
|
+
var import_constants2 = require("@nestjs/common/constants");
|
|
434
|
+
function asArray(v) {
|
|
435
|
+
if (v == null) return [];
|
|
436
|
+
return Array.isArray(v) ? v : [v];
|
|
437
|
+
}
|
|
438
|
+
function getCtorDepsFromClass(cls) {
|
|
439
|
+
const paramTypes = Reflect.getMetadata(import_constants2.PARAMTYPES_METADATA, cls) ?? [];
|
|
440
|
+
const selfDeclared = Reflect.getMetadata(import_constants2.SELF_DECLARED_DEPS_METADATA, cls) ?? [];
|
|
441
|
+
const overrides = new Map(
|
|
442
|
+
selfDeclared.map((d) => [d.index, d.param])
|
|
443
|
+
);
|
|
444
|
+
return paramTypes.map((t, i) => overrides.get(i) ?? t).filter((t) => t != null && t !== Object);
|
|
445
|
+
}
|
|
446
|
+
var collectInfoFromInjectionToken = (map, token) => {
|
|
447
|
+
const visited = /* @__PURE__ */ new Set();
|
|
448
|
+
const out = /* @__PURE__ */ new Set();
|
|
449
|
+
const dfs = (t) => {
|
|
450
|
+
if (t == null) return;
|
|
451
|
+
if (visited.has(t)) return;
|
|
452
|
+
visited.add(t);
|
|
453
|
+
for (const v of asArray(map.get(t))) {
|
|
454
|
+
out.add(v);
|
|
455
|
+
}
|
|
456
|
+
const deps = InjectionTokenMap.get(t);
|
|
457
|
+
if (deps?.length) {
|
|
458
|
+
for (const d of deps) dfs(d);
|
|
459
|
+
}
|
|
460
|
+
if (typeof t === "function") {
|
|
461
|
+
const ctorDeps = getCtorDepsFromClass(t);
|
|
462
|
+
for (const d of ctorDeps) dfs(d);
|
|
463
|
+
}
|
|
464
|
+
};
|
|
465
|
+
dfs(token);
|
|
466
|
+
return Array.from(out);
|
|
467
|
+
};
|
|
468
|
+
var createCollectorFromInjectionToken = (map) => (token) => collectInfoFromInjectionToken(map, token);
|
|
469
|
+
|
|
470
|
+
// src/utility/swagger-injection-collector.ts
|
|
471
|
+
var swaggerInjectionCollector = createCollectorFromInjectionToken(ResolverSwaggerMap);
|
|
472
|
+
|
|
473
|
+
// src/resolver/api-inject.ts
|
|
474
|
+
var ApiInject = createMutateInject((token, cls) => {
|
|
475
|
+
const swaggers = swaggerInjectionCollector(token);
|
|
476
|
+
for (const swagger of swaggers) {
|
|
477
|
+
ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);
|
|
478
|
+
}
|
|
479
|
+
return token;
|
|
480
|
+
});
|
|
481
|
+
|
|
420
482
|
// src/resolver/resolver.ts
|
|
421
483
|
var ParamResolverCopiedFieldsFromSwagger = [
|
|
422
484
|
"required",
|
|
@@ -545,7 +607,7 @@ var ParamResolverBase = class {
|
|
|
545
607
|
return {
|
|
546
608
|
token: useToken,
|
|
547
609
|
provider,
|
|
548
|
-
inject: () => (
|
|
610
|
+
inject: () => ApiInject(useToken)
|
|
549
611
|
};
|
|
550
612
|
}
|
|
551
613
|
};
|
|
@@ -761,56 +823,6 @@ var DefaultValueParamResolver = (r, defaultValue) => createLambdaParamResolver(
|
|
|
761
823
|
(value) => value === void 0 || value === null ? defaultValue : value
|
|
762
824
|
)(r);
|
|
763
825
|
|
|
764
|
-
// src/utility/collect-info-from-injection-token.ts
|
|
765
|
-
var import_constants2 = require("@nestjs/common/constants");
|
|
766
|
-
function asArray(v) {
|
|
767
|
-
if (v == null) return [];
|
|
768
|
-
return Array.isArray(v) ? v : [v];
|
|
769
|
-
}
|
|
770
|
-
function getCtorDepsFromClass(cls) {
|
|
771
|
-
const paramTypes = Reflect.getMetadata(import_constants2.PARAMTYPES_METADATA, cls) ?? [];
|
|
772
|
-
const selfDeclared = Reflect.getMetadata(import_constants2.SELF_DECLARED_DEPS_METADATA, cls) ?? [];
|
|
773
|
-
const overrides = new Map(
|
|
774
|
-
selfDeclared.map((d) => [d.index, d.param])
|
|
775
|
-
);
|
|
776
|
-
return paramTypes.map((t, i) => overrides.get(i) ?? t).filter((t) => t != null && t !== Object);
|
|
777
|
-
}
|
|
778
|
-
var collectInfoFromInjectionToken = (map, token) => {
|
|
779
|
-
const visited = /* @__PURE__ */ new Set();
|
|
780
|
-
const out = /* @__PURE__ */ new Set();
|
|
781
|
-
const dfs = (t) => {
|
|
782
|
-
if (t == null) return;
|
|
783
|
-
if (visited.has(t)) return;
|
|
784
|
-
visited.add(t);
|
|
785
|
-
for (const v of asArray(map.get(t))) {
|
|
786
|
-
out.add(v);
|
|
787
|
-
}
|
|
788
|
-
const deps = InjectionTokenMap.get(t);
|
|
789
|
-
if (deps?.length) {
|
|
790
|
-
for (const d of deps) dfs(d);
|
|
791
|
-
}
|
|
792
|
-
if (typeof t === "function") {
|
|
793
|
-
const ctorDeps = getCtorDepsFromClass(t);
|
|
794
|
-
for (const d of ctorDeps) dfs(d);
|
|
795
|
-
}
|
|
796
|
-
};
|
|
797
|
-
dfs(token);
|
|
798
|
-
return Array.from(out);
|
|
799
|
-
};
|
|
800
|
-
var createCollectorFromInjectionToken = (map) => (token) => collectInfoFromInjectionToken(map, token);
|
|
801
|
-
|
|
802
|
-
// src/utility/swagger-injection-collector.ts
|
|
803
|
-
var swaggerInjectionCollector = createCollectorFromInjectionToken(ResolverSwaggerMap);
|
|
804
|
-
|
|
805
|
-
// src/resolver/api-inject.ts
|
|
806
|
-
var ApiInject = createMutateInject((token, cls) => {
|
|
807
|
-
const swaggers = swaggerInjectionCollector(token);
|
|
808
|
-
for (const swagger of swaggers) {
|
|
809
|
-
ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);
|
|
810
|
-
}
|
|
811
|
-
return token;
|
|
812
|
-
});
|
|
813
|
-
|
|
814
826
|
// src/token.guard.ts
|
|
815
827
|
var import_core2 = require("@nestjs/core");
|
|
816
828
|
var defaultHeaderName = "x-server-token";
|
|
@@ -1290,6 +1302,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
|
|
|
1290
1302
|
I18nService,
|
|
1291
1303
|
InjectAbortSignal,
|
|
1292
1304
|
InjectAbortable,
|
|
1305
|
+
InjectionTokenMap,
|
|
1293
1306
|
InsertField,
|
|
1294
1307
|
LocalePipe,
|
|
1295
1308
|
MergeClassDecorators,
|
|
@@ -1314,6 +1327,7 @@ var I18nLookupMiddleware = (0, import_nfkit3.createI18nLookupMiddleware)();
|
|
|
1314
1327
|
TokenGuard,
|
|
1315
1328
|
TransformParamResolver,
|
|
1316
1329
|
abortableToken,
|
|
1330
|
+
addInjectionTokenMapping,
|
|
1317
1331
|
createAbortableProvider,
|
|
1318
1332
|
createI18n,
|
|
1319
1333
|
createI18nDecorator,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../index.ts", "../src/insert-field.ts", "../src/utility/rename-class.ts", "../src/utility/class-types.ts", "../src/utility/get-api-property.ts", "../src/utility/create-mutate-inject.ts", "../src/utility/parse-bool.ts", "../src/merge.ts", "../src/return-message.ts", "../src/openapi.ts", "../src/pipe.ts", "../src/token.guard.ts", "../src/resolver/resolver.ts", "../src/
|
|
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';\nexport * from './src/create-provider';\nexport * from './src/i18n-module';\nexport * from './src/resolver';\nexport * from './src/utility';\n", "import { ApiProperty, ApiPropertyOptions } from '@nestjs/swagger';\nimport { RenameClass } from './utility';\nimport {\n AnyClass,\n ClassOrArray,\n ParamsFromClass,\n ParseType,\n TypeFromClass,\n} from './utility';\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 return RenameClass(extendedCl, newName || cl.name);\n}\n", "export function RenameClass<T>(cls: T, name: string) {\n Object.defineProperty(cls, 'name', { value: name });\n return cls;\n}\n", "export 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", "import { DECORATORS } from '@nestjs/swagger/dist/constants';\nimport { ApiPropertyOptions } from '@nestjs/swagger';\nimport { AnyClass } from './class-types';\n\nexport const getApiProperty = (\n cls: AnyClass,\n key: string,\n): ApiPropertyOptions => {\n let proto = cls.prototype;\n\n while (proto && proto !== Object.prototype) {\n const meta = Reflect.getMetadata(\n DECORATORS.API_MODEL_PROPERTIES,\n proto,\n key,\n );\n\n if (meta) return meta;\n\n proto = Object.getPrototypeOf(proto);\n }\n\n return {};\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { Inject } from '@nestjs/common';\nimport { AnyClass } from './class-types';\n\nexport type InjectPos =\n | { type: 'param'; index: number }\n | { type: 'property'; propertyKey: string | symbol };\n\nexport const createMutateInject =\n (\n tokenResolver: (\n t: InjectionToken,\n cls: AnyClass,\n pos: InjectPos,\n ) => InjectionToken,\n ) =>\n (token?: InjectionToken): ParameterDecorator & PropertyDecorator =>\n (\n target: any,\n propertyKey: string | symbol | undefined,\n parameterIndex?: number,\n ) => {\n const cls: AnyClass =\n typeof target === 'function'\n ? (target as AnyClass)\n : (target.constructor as AnyClass);\n\n let actualToken = token;\n\n if (!actualToken) {\n if (parameterIndex != null) {\n // parameter decorator (ctor or method)\n const paramTypes: any[] =\n propertyKey == null\n ? Reflect.getMetadata('design:paramtypes', target) || []\n : Reflect.getMetadata('design:paramtypes', target, propertyKey) ||\n [];\n actualToken = paramTypes[parameterIndex];\n } else {\n // property decorator\n actualToken = Reflect.getMetadata('design:type', target, propertyKey!);\n }\n\n if (!actualToken) {\n const where =\n parameterIndex != null\n ? `${String(propertyKey ?? 'constructor')}[${parameterIndex}]`\n : String(propertyKey);\n throw new Error(\n `Cannot infer type from metadata: ${cls?.name ?? 'UnknownClass'}.${where}`,\n );\n }\n }\n\n const pos: InjectPos =\n parameterIndex != null\n ? { type: 'param', index: parameterIndex }\n : { type: 'property', propertyKey: propertyKey! };\n\n Inject(tokenResolver(actualToken, cls, pos))(\n target,\n propertyKey as any,\n parameterIndex as any,\n );\n };\n", "export const parseBool = (value: any): boolean => {\n const trueValues = ['true', '1', 'yes', 'on', true, 1];\n const falseValues = ['false', '0', 'no', 'off', false, 0];\n if (trueValues.indexOf(value) !== -1) return true;\n if (falseValues.indexOf(value) !== -1) return false;\n if (!!value) {\n return true;\n }\n return undefined;\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 { InsertField } from './insert-field';\nimport {\n AnyClass,\n ClassOrArray,\n getClassFromClassOrArray,\n ParseType,\n} from './utility';\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 './utility';\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';\nimport {\n ApiFromResolver,\n createResolver,\n ParamResolverInput,\n ParamResolverInputDynamic,\n} from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { Metadata, reflector } from './metadata';\n\nexport interface RequireTokenOptions {\n resolver?: ParamResolverInput;\n tokenSource?: string | ParamResolverInputDynamic;\n errorCode?: number;\n}\n\nconst defaultHeaderName = 'x-server-token';\nconst defaultConfigName = 'SERVER_TOKEN';\nconst defaultErrorCode = 401;\n\n@Injectable()\nexport class TokenGuard implements CanActivate {\n constructor(\n @Inject(ConfigService) private config: ConfigService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async canActivate(context: ExecutionContext) {\n const controller = context.getClass();\n const handlerName = context.getHandler()?.name;\n let config = {} as RequireTokenOptions;\n if (controller) {\n if (handlerName) {\n config =\n reflector.get('requireTokenOptions', controller, handlerName) || {};\n } else {\n config = reflector.get('requireTokenOptions', controller) || {};\n }\n }\n const resolver = createResolver(\n config.resolver || { paramType: 'header', paramName: defaultHeaderName },\n );\n const tokenSource = config.tokenSource || defaultConfigName;\n const req = context.switchToHttp().getRequest();\n const [tokenFromClient, tokenFromConfig] = await Promise.all([\n resolver(req, this.moduleRef),\n typeof tokenSource === 'function'\n ? tokenSource(req, this.moduleRef)\n : this.config.get<string>(tokenSource),\n ]);\n if (tokenFromConfig && tokenFromConfig !== tokenFromClient) {\n throw new BlankReturnMessageDto(\n config.errorCode || defaultErrorCode,\n 'Unauthorized',\n ).toException();\n }\n return true;\n }\n}\n\nexport const RequireToken = (options: RequireTokenOptions = {}) => {\n const swaggerDec = options.resolver\n ? ApiFromResolver(options.resolver, {\n description: 'Server token',\n required: false,\n })\n : ApiHeader({\n name: defaultHeaderName,\n description: 'Server token',\n required: false,\n });\n return MergeClassOrMethodDecorators([\n UseGuards(TokenGuard),\n swaggerDec,\n ApiError(\n options.errorCode || defaultErrorCode,\n 'Incorrect server token provided',\n ),\n ...(options ? [Metadata.set('requireTokenOptions', options)] : []),\n ]);\n};\n", "import type { Request } from 'express';\nimport { Awaitable } from '../utility';\nimport {\n createParamDecorator,\n Inject,\n Injectable,\n PipeTransform,\n Scope,\n} from '@nestjs/common';\nimport { ModuleRef, REQUEST } from '@nestjs/core';\nimport {\n ApiHeader,\n ApiHeaderOptions,\n ApiQuery,\n ApiQueryOptions,\n} from '@nestjs/swagger';\nimport { createProvider } from '../create-provider';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { Type } from '@nestjs/common/interfaces';\nimport { ParamResolverSwaggerInfo } from '../utility/param-resolver-swagger-info.type';\nimport { ResolverSwaggerMap } from '../utility/resolver-swagger-map';\nimport { BlankReturnMessageDto } from '../return-message';\nimport { ApiError } from '../openapi';\nimport { uniqBy } from '../utility/uniq-by';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nconst ParamResolverCopiedFieldsFromSwagger = [\n 'required',\n 'description',\n 'example',\n 'examples',\n] as const;\n\nexport interface ParamResolverInputStatic\n extends Pick<\n ApiHeaderOptions | ApiQueryOptions,\n (typeof ParamResolverCopiedFieldsFromSwagger)[number]\n > {\n paramType: 'header' | 'query';\n paramName: string;\n openapiExtras?: ApiHeaderOptions | ApiQueryOptions;\n}\n\nexport type AnyReq = Request & {\n headers?: Record<string, any>;\n query?: any;\n url?: string;\n originalUrl?: string;\n getHeader?: (name: string) => any;\n get?: (name: string) => any;\n header?: (name: string) => any;\n};\n\nexport type ParamResolverInputDynamic<R = AnyReq> = (\n req: R,\n ref: ModuleRef,\n) => Awaitable<string>;\n\nexport type ParamResolverInputDual =\n | ParamResolverInputStatic\n | ParamResolverInputDynamic;\n\nconst coerceToString = (v: any): string | undefined => {\n if (v == null) return undefined; // null / undefined\n if (v === false) return undefined; // \uD83D\uDC48 \u5173\u952E\uFF1A\u628A false \u5F53\u4F5C\u672A\u547D\u4E2D\n if (Array.isArray(v)) return v.length ? coerceToString(v[0]) : undefined;\n if (typeof v === 'string') return v;\n if (typeof v === 'number') return String(v);\n // \u5176\u4ED6\u7C7B\u578B\uFF08true / object / function / symbol / bigint\uFF09\u90FD\u4E0D\u63A5\u53D7\n return undefined;\n};\n\nconst getHeader = (req: AnyReq, name: string): string | undefined => {\n // \u5148\u8D70\u65B9\u6CD5\uFF08express/\u90E8\u5206\u9002\u914D\u5668\uFF09\n const viaMethod =\n (typeof req.getHeader === 'function' && req.getHeader(name)) ||\n (typeof (req as any).header === 'function' && (req as any).header(name)) ||\n (typeof (req as any).get === 'function' && (req as any).get(name));\n\n if (viaMethod) {\n return coerceToString(viaMethod);\n }\n\n // \u518D\u67E5 headers\uFF0C\u5927\u5C0F\u5199\u65E0\u5173\n const n = name.toLowerCase();\n const headers = req.headers ?? {};\n if (n in headers) return coerceToString((headers as any)[n]);\n\n const hit = Object.entries(headers).find(([k]) => k.toLowerCase() === n)?.[1];\n return coerceToString(hit);\n};\n\nconst pickPrimaryFromAcceptLanguage = (v?: string): string | undefined => {\n if (!v) return undefined;\n const first = v.split(',')[0]?.trim();\n return first?.split(';')[0]?.trim() || first;\n};\n\nfunction getQueryValue(req: AnyReq, key: string): string | undefined {\n // 1. \u666E\u901A\u5BF9\u8C61\u6A21\u5F0F\uFF08Express/Fastify \u5DF2\u89E3\u6790\uFF09\n const q = req.query;\n if (q && typeof q === 'object' && !('raw' in q)) {\n const v = (q as any)[key];\n if (v != null) return coerceToString(v);\n }\n\n // 2. fallback\uFF1A\u89E3\u6790 URLSearchParams\n const rawUrl = req.originalUrl ?? req.url;\n if (typeof rawUrl === 'string' && rawUrl.includes('?')) {\n try {\n // \u7528 http://localhost \u5360\u4F4D base\uFF0C\u907F\u514D\u76F8\u5BF9\u8DEF\u5F84\u9519\u8BEF\n const search = rawUrl.startsWith('http')\n ? new URL(rawUrl).search\n : new URL(rawUrl, 'http://localhost').search;\n\n if (search) {\n const params = new URLSearchParams(search);\n const val = params.get(key);\n if (val != null) return val;\n }\n } catch {\n // ignore malformed URL\n }\n }\n return undefined;\n}\n\n@Injectable()\nexport class ParamResolverPipe implements PipeTransform {\n constructor(@Inject(ModuleRef) private moduleRef: ModuleRef) {}\n\n async transform(\n params: { req: AnyReq; resolver: ParamResolverBase<any> },\n metadata: any,\n ) {\n return params.resolver.resolve(params.req, this.moduleRef);\n }\n}\n\nconst usedParamResolverTokens = new Set<string>();\n\nexport abstract class ParamResolverBase<T, R extends AnyReq = AnyReq> {\n protected extraSwagger: ParamResolverSwaggerInfo[] = [];\n\n addExtraDecorator(\n dec: (\n extras?: ApiHeaderOptions | ApiQueryOptions,\n ) => ClassDecorator & MethodDecorator,\n token = Math.random().toString(36),\n ) {\n this.extraSwagger.push({\n token,\n swagger: dec,\n });\n return this;\n }\n\n // for override\n toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n return uniqBy([...this.extraSwagger, ...extras], (info) => info.token);\n }\n\n toApiPropertyDecorator(extras: ApiHeaderOptions | ApiQueryOptions = {}) {\n const swaggerInfo = uniqBy(this.toSwaggerInfo(), (info) => info.token);\n return (extras2: ApiHeaderOptions | ApiQueryOptions = {}) =>\n MergeClassOrMethodDecorators(\n swaggerInfo.map((info) =>\n ApplyDecoratorUnique(\n info.swagger({ ...extras, ...extras2 }),\n info.token,\n ),\n ),\n );\n }\n // for override\n abstract resolve(req: R, ref: ModuleRef): Awaitable<T>;\n\n toResolverFunction() {\n return async (req: R, ref: ModuleRef) => this.resolve(req, ref);\n }\n\n toParamDecorator() {\n const dec = createParamDecorator((_, ctx) => {\n const req = ctx.switchToHttp().getRequest<R>();\n return { req, resolver: this };\n });\n\n return (...pipes: (Type<PipeTransform> | PipeTransform)[]) =>\n dec(ParamResolverPipe, ...pipes);\n }\n\n // for override\n toString() {\n return 'ParamResolverBase';\n }\n\n toRequestScopedProvider() {\n const token = `PARAM_RESOLVER_${this.toString()}`;\n let useToken = token;\n\n if (usedParamResolverTokens.has(token)) {\n // avoid token conflict\n let suffix = 0;\n while (usedParamResolverTokens.has(`${token}__${suffix}`)) {\n suffix++;\n }\n useToken = `${token}__${suffix}`;\n }\n usedParamResolverTokens.add(useToken);\n\n const provider = createProvider(\n {\n provide: useToken,\n inject: [REQUEST, ModuleRef],\n scope: Scope.REQUEST,\n },\n this.toResolverFunction(),\n );\n\n const swaggerInfos = this.toSwaggerInfo();\n ResolverSwaggerMap.set(useToken, swaggerInfos);\n\n return {\n token: useToken,\n provider,\n inject: () => Inject(useToken),\n };\n }\n}\n\nexport type TypeFromParamResolver<P> =\n P extends ParamResolverBase<infer T, any> ? T : never;\n\nexport class ParamResolver<R extends AnyReq = AnyReq> extends ParamResolverBase<\n string | undefined,\n R\n> {\n private readonly info: ParamResolverInputStatic;\n private readonly dynamic: ParamResolverInputDynamic;\n constructor(input: ParamResolverInputDual) {\n super();\n if (typeof input === 'function') {\n this.dynamic = input;\n } else {\n this.info = { ...input };\n if (this.info.paramType === 'header') {\n this.info.paramName = this.info.paramName.toLowerCase();\n }\n }\n }\n\n private handleResolveValue(v: any) {\n if (this.info?.required && v == null) {\n throw new BlankReturnMessageDto(\n 400,\n `Required parameter '${this.info.paramName}' in ${this.info.paramType} is missing`,\n ).toException();\n }\n return v;\n }\n\n override resolve(req: R, ref: ModuleRef): Awaitable<string | undefined> {\n if (this.info) {\n if (this.info.paramType === 'header') {\n const name = this.info.paramName;\n let raw = getHeader(req, name);\n if (name === 'accept-language')\n raw = pickPrimaryFromAcceptLanguage(raw);\n return this.handleResolveValue(raw);\n }\n if (this.info.paramType === 'query') {\n return this.handleResolveValue(getQueryValue(req, this.info.paramName));\n }\n throw new Error(`Unsupported paramType: ${this.info.paramType}`);\n } else if (this.dynamic) {\n return this.dynamic(req, ref);\n }\n }\n\n override toString() {\n const suffix = this.info\n ? `${this.info.paramType.toUpperCase()}_${this.info.paramName}`\n : `DYNAMIC`;\n return `ParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n const swagger = (extras2: ApiHeaderOptions | ApiQueryOptions = {}) => {\n if (this.info) {\n const paramType = this.info.paramType;\n const apiOptions: ApiHeaderOptions = {\n name: this.info.paramName,\n ...ParamResolverCopiedFieldsFromSwagger.reduce((acc, field) => {\n if (field in this.info!) {\n (acc as any)[field] = this.info[field];\n }\n return acc;\n }, {} as ApiHeaderOptions),\n ...(this.info.openapiExtras || {}),\n ...extras2,\n };\n return paramType === 'header'\n ? ApiHeader(apiOptions)\n : paramType === 'query'\n ? ApiQuery({ type: 'string', ...apiOptions })\n : () => {};\n }\n return () => {};\n };\n\n return super.toSwaggerInfo([\n {\n swagger,\n token: this.toString(),\n },\n ...(this.info?.required\n ? [\n {\n swagger: () => ApiError(400, 'Invalid request parameters'),\n token: `__missing_required_400__`,\n },\n ]\n : []),\n ...extras,\n ]);\n }\n}\n\nexport class CombinedParamResolver<\n M extends Record<any, ParamResolverBase<any, AnyReq>>,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<\n {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n },\n R\n> {\n constructor(private resolvers: M) {\n super();\n }\n\n override async resolve(\n req: R,\n ref: ModuleRef,\n ): Promise<{ [K in keyof M]: TypeFromParamResolver<M[K]> }> {\n const result = {} as {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n };\n // use Promise.all\n await Promise.all(\n Object.entries(this.resolvers).map(async ([key, resolver]) => {\n result[key as keyof M] = (await resolver.resolve(\n req,\n ref,\n )) as TypeFromParamResolver<M[typeof key]>;\n }),\n );\n return result;\n }\n\n override toString() {\n const suffix = Object.entries(this.resolvers)\n .map(([key, resolver]) => `${key.toString()}_${resolver.toString()}`)\n .join('__');\n return `CombinedParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const combined = Object.values(this.resolvers).flatMap((resolver) =>\n resolver.toSwaggerInfo(),\n );\n return super.toSwaggerInfo([...combined, ...extras]);\n }\n}\n\nexport class TransformParamResolver<\n T,\n U,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<U, R> {\n constructor(\n private baseResolver: ParamResolverBase<T, R>,\n private transformFn: (value: T, ref: ModuleRef, req: R) => Awaitable<U>,\n ) {\n super();\n }\n\n override async resolve(req: R, ref: ModuleRef): Promise<U> {\n const baseValue = await this.baseResolver.resolve(req, ref);\n return this.transformFn(baseValue, ref, req);\n }\n\n override toString() {\n return `Transform_${this.baseResolver.toString()}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const info = this.baseResolver.toSwaggerInfo(extras);\n return super.toSwaggerInfo(info);\n }\n}\n\nexport type ParamResolverInput =\n | ParamResolverInputDual\n | ParamResolverBase<string>;\n\nexport const getParamResolver = (input: ParamResolverInput) => {\n if (input instanceof ParamResolverBase) {\n return input;\n }\n return new ParamResolver(input);\n};\n\n// @deprecated use ParamResolver directly\nexport const createResolver = (\n _options: ParamResolverInput,\n): ParamResolverInputDynamic => {\n return getParamResolver(_options).toResolverFunction();\n};\n\n// @deprecated use ParamResolver directly\nexport const ApiFromResolver = (\n _options: ParamResolverInput,\n extras: ApiHeaderOptions | ApiQueryOptions = {},\n): ClassDecorator & MethodDecorator => {\n return getParamResolver(_options).toApiPropertyDecorator(extras)();\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const InjectionTokenMap = new Map<InjectionToken, InjectionToken[]>();\n", "import { FactoryProvider } from '@nestjs/common';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { InjectionTokenMap } from './utility/injection-token-map';\n\ntype TypeFromToken<T> = T extends string | symbol\n ? any\n : T extends InjectionToken<infer U>\n ? U\n : any;\n\ntype TokensToTypes<A extends InjectionToken[]> = A extends []\n ? []\n : A extends [infer F, ...infer R]\n ? [TypeFromToken<F>, ...TokensToTypes<R extends InjectionToken[] ? R : []>]\n : [];\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TypedFactoryProvider<A extends InjectionToken[], R>\n extends FactoryProvider<R> {\n inject: A;\n useFactory: (...args: TokensToTypes<A>) => Awaitable<R>;\n}\n\nexport const createProvider = <const A extends InjectionToken[], R>(\n options: { inject: A } & Omit<FactoryProvider<R>, 'inject' | 'useFactory'>,\n factory: (...args: TokensToTypes<A>) => Awaitable<R>,\n): TypedFactoryProvider<A, R> => {\n if (options.inject) {\n InjectionTokenMap.set(options.provide, options.inject);\n }\n return {\n useFactory: factory,\n ...options,\n };\n};\n", "import { ParamResolverSwaggerInfo } from './param-resolver-swagger-info.type';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const ResolverSwaggerMap = new Map<\n InjectionToken,\n ParamResolverSwaggerInfo[]\n>();\n", "export const uniqBy = <T>(arr: T[], fn: (item: T) => any): T[] => {\n const seen = new Set<any>();\n const result: T[] = [];\n\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n};\n", "import { MetadataSetter, Reflector } from 'typed-reflector';\nimport { RequireTokenOptions } from './token.guard';\n\ninterface MetadataMap {\n requireTokenOptions: RequireTokenOptions;\n}\n\ninterface MetadataArrayMap {\n usedUniqueDecoratorIdentifiers: any;\n}\n\nexport const reflector = new Reflector<MetadataMap, MetadataArrayMap>();\nexport const Metadata = new MetadataSetter<MetadataMap, MetadataArrayMap>();\n", "import { AnyClass } from './class-types';\nimport { Metadata, reflector } from '../metadata';\n\nexport const ApplyDecoratorUnique = <\n D extends\n | ClassDecorator\n | MethodDecorator\n | PropertyDecorator\n | ParameterDecorator,\n>(\n dec: D,\n identifier: any,\n): D =>\n ((...args: Parameters<D>) => {\n const isClassRelated = args.length === 1 || args[1] === undefined; // class decorator or constructor parameter decorator\n const target = args[0] as any;\n const cls: AnyClass =\n typeof target === 'function' ? target : target.constructor;\n if (isClassRelated) {\n const used = reflector.getArray('usedUniqueDecoratorIdentifiers', cls);\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(cls);\n return (dec as any)(...args) as ReturnType<D>;\n } else {\n const keyName = args[1];\n const used = reflector.getProperty(\n 'usedUniqueDecoratorIdentifiers',\n cls as any,\n keyName,\n );\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(\n cls as any,\n keyName,\n );\n return (dec as any)(...args) as ReturnType<D>;\n }\n }) as D;\n", "import { Awaitable } from 'nfkit';\nimport { AnyReq, ParamResolverBase, TransformParamResolver } from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { parseBool } from '../utility';\nimport { BlankReturnMessageDto } from '../return-message';\n\nexport const createLambdaParamResolver =\n <T, U, Req extends AnyReq = AnyReq>(\n cb: (param: T, ref: ModuleRef, req: Req) => Awaitable<U>,\n ) =>\n (resolver: ParamResolverBase<T>) =>\n new TransformParamResolver<T, U, Req>(resolver, cb);\n\nexport const ParseIntParamResolver = createLambdaParamResolver((s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseInt(s, 10);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid integer parameter',\n ).toException();\n }\n return res;\n});\nexport const ParseFloatParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseFloat(s);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid float parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBoolParamResolver = createLambdaParamResolver(parseBool);\nexport const ParseDateParamResolver = createLambdaParamResolver(\n (s: number | string | Date) => {\n if (s == null) {\n return s;\n }\n const res = new Date(s);\n // check invalid date\n if (isNaN(res.getTime())) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid date parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBase64ParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n // support base64 or base64url\n const normalized = s.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n\n // \u5B57\u7B26\u96C6\u5408\u6821\u9A8C\uFF08base64 \u7684\u5408\u6CD5\u5B57\u7B26 + padding\uFF09\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(padded)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n const buf = Buffer.from(padded, 'base64');\n\n // round-trip \u6821\u9A8C\uFF1A\u7F16\u7801\u56DE\u53BB\uFF08\u53BB padding\uFF09\u8981\u4E00\u81F4\uFF08\u5BB9\u5FCD url/base64 \u5DEE\u5F02\u7684\u8BDD\u7528 normalized \u5BF9\u6BD4\uFF09\n const re = buf.toString('base64').replace(/=+$/g, '');\n const in0 = padded.replace(/=+$/g, '');\n if (re !== in0) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n return buf;\n },\n);\nexport const DefaultValueParamResolver = <T>(\n r: ParamResolverBase<T>,\n defaultValue: T,\n) =>\n createLambdaParamResolver<T, T>((value: T) =>\n value === undefined || value === null ? defaultValue : value,\n )(r);\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport {\n PARAMTYPES_METADATA,\n SELF_DECLARED_DEPS_METADATA,\n} from '@nestjs/common/constants';\nimport { InjectionTokenMap } from './injection-token-map';\n\nfunction asArray<T>(v: T | T[] | undefined): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getCtorDepsFromClass(cls: Function): InjectionToken[] {\n const paramTypes: any[] = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];\n\n // Nest \u5728\u6709 @Inject(token) \u65F6\uFF0C\u4F1A\u5199 SELF_DECLARED_DEPS_METADATA \u8986\u76D6\u67D0\u4E9B index\n const selfDeclared: Array<{ index: number; param: any }> =\n Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];\n\n const overrides = new Map<number, any>(\n selfDeclared.map((d) => [d.index, d.param]),\n );\n\n // \u6CE8\u610F\uFF1Ainterface/any \u4F1A\u53D8\u6210 Object\uFF0C\u901A\u5E38\u6CA1\u610F\u4E49\uFF0C\u8FC7\u6EE4\u6389\n return paramTypes\n .map((t, i) => overrides.get(i) ?? t)\n .filter((t) => t != null && t !== Object);\n}\n\n/**\n * \u4ECE\u67D0\u4E2A\u5165\u53E3 token \u51FA\u53D1\uFF1A\n * - \u6536\u96C6 map.get(token) \u7684\u503C\uFF08T \u6216 T[]\uFF09\n * - \u9012\u5F52\u904D\u5386 InjectionTokenMap.get(token)\n * - \u82E5 token \u662F class\uFF0C\u518D\u8865\u5145\u904D\u5386\u5176 ctor deps\n */\nexport const collectInfoFromInjectionToken = <T>(\n map: Map<InjectionToken, T | T[]>,\n token: InjectionToken,\n): T[] => {\n const visited = new Set<InjectionToken>();\n const out = new Set<T>();\n\n const dfs = (t: InjectionToken) => {\n if (t == null) return;\n if (visited.has(t)) return;\n visited.add(t);\n\n // 1) \u6536\u96C6\u5F53\u524D token \u5BF9\u5E94\u7684\u4FE1\u606F\n for (const v of asArray(map.get(t))) {\n out.add(v);\n }\n\n // 2) \u5148\u8D70\u663E\u5F0F\u4F9D\u8D56\u56FE\uFF08\u5982\u679C\u6709\uFF09\n const deps = InjectionTokenMap.get(t);\n if (deps?.length) {\n for (const d of deps) dfs(d);\n }\n\n // 3) \u5982\u679C token \u672C\u8EAB\u662F class\uFF08\u6216\u4F60\u62FF\u5230\u7684\u5C31\u662F class token\uFF09\uFF0C\u7528\u53CD\u5C04\u8865\u4E00\u5C42 ctor deps\n // \u6CE8\u610F\uFF1A\u8FD9\u53EA\u5728\u4F60\u6CA1\u6709\u628A \"string/symbol token -> metatype\" \u6620\u5C04\u5B58\u8D77\u6765\u65F6\u624D\u662F best-effort\n if (typeof t === 'function') {\n const ctorDeps = getCtorDepsFromClass(t);\n for (const d of ctorDeps) dfs(d);\n }\n };\n\n dfs(token);\n return Array.from(out);\n};\n\nexport const createCollectorFromInjectionToken =\n <T>(map: Map<InjectionToken, T | T[]>) =>\n (token: InjectionToken): T[] =>\n collectInfoFromInjectionToken<T>(map, token);\n", "import { createCollectorFromInjectionToken } from './collect-info-from-injection-token';\nimport { ResolverSwaggerMap } from './resolver-swagger-map';\n\nexport const swaggerInjectionCollector =\n createCollectorFromInjectionToken(ResolverSwaggerMap);\n", "import { createMutateInject } from '../utility';\nimport { swaggerInjectionCollector } from '../utility/swagger-injection-collector';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nexport const ApiInject = createMutateInject((token, cls) => {\n const swaggers = swaggerInjectionCollector(token);\n\n for (const swagger of swaggers) {\n ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);\n }\n\n return token;\n});\n", "import { Observable, takeUntil } from 'rxjs';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\nimport type { Request } from 'express';\nimport { createAbortSignalFromHttp } from './utility/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, Scope } from '@nestjs/common';\nimport { abortable, AbortableOpts } from 'nfkit';\nimport { ABORT_SIGNAL } from './abort-signal.provider';\nimport { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';\nimport { createProvider } from '../create-provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { createMutateInject } from '../utility/create-mutate-inject';\n\nconst tokenMemo = new Map<any, symbol>();\nexport const abortableToken = (token: InjectionToken) => {\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 const InjectAbortable = createMutateInject(abortableToken);\n\nexport function createAbortableProvider<T>(\n token: InjectionToken<T>,\n opts?: AbortableOpts,\n) {\n const provide = abortableToken(token);\n\n return createProvider(\n {\n provide,\n scope: Scope.REQUEST,\n inject: [ModuleRef, REQUEST, ABORT_SIGNAL],\n },\n async (moduleRef, req: Request, signal) => {\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, Scope, Type } from '@nestjs/common';\nimport { REQUEST } from '@nestjs/core';\nimport { createAbortSignalFromHttp } from '../utility/abort-http-signal';\nimport { createProvider } from '../create-provider';\n\nexport const ABORT_SIGNAL = Symbol(\n 'ABORT_SIGNAL',\n) as unknown as Type<AbortSignal>;\nexport const AbortSignalProvider = createProvider(\n {\n provide: ABORT_SIGNAL,\n scope: Scope.REQUEST,\n inject: [REQUEST],\n },\n createAbortSignalFromHttp,\n);\n\nexport const InjectAbortSignal = () => Inject(ABORT_SIGNAL);\n", "import { DynamicModule, Module } from '@nestjs/common';\nimport { createAbortableProvider } from './abortable.token';\nimport { AbortableOpts } from 'nfkit';\nimport { AbortSignalProvider } from './abort-signal.provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\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: InjectionToken[],\n options?: AbortableModuleOptions,\n ): DynamicModule {\n const providers = 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", "import {\n ConsoleLogger,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n} from '@nestjs/common';\nimport { I18nModuleOptionsToken } from './i18n-token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { ModuleRef } from '@nestjs/core';\nimport { ParamResolverBase } from '../resolver';\nimport { I18n } from 'nfkit';\nimport { I18nNesties } from './i18n.types';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\n\n@Injectable()\nexport class I18nService extends I18n<I18nNesties.Ex> {\n constructor(\n @Inject(I18nModuleOptionsToken)\n private i18nServiceOptions: I18nModuleOptions,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n @Inject(I18nParamResolverToken) private resolver: ParamResolverBase<string>,\n ) {\n super(i18nServiceOptions);\n }\n\n private _shadowMiddlewareMap = new Map<\n I18nNesties.Middleware,\n I18nNesties.Middleware\n >();\n\n private logger = new ConsoleLogger('I18nService');\n\n middleware(mw: I18nNesties.Middleware, prior = false) {\n const wrappedMw: I18nNesties.Middleware = async (\n locale,\n text,\n next,\n ctx,\n ) => {\n try {\n return await mw(locale, text, next, ctx);\n } catch (e) {\n if (e instanceof HttpException) {\n throw e;\n }\n this.logger.error(`Error in i18n middleware: ${e.message}`);\n return next();\n }\n };\n this._shadowMiddlewareMap.set(mw, wrappedMw);\n return super.middleware(wrappedMw, prior);\n }\n\n removeMiddleware(mw: I18nNesties.Middleware) {\n const wrappedMw = this._shadowMiddlewareMap.get(mw);\n if (wrappedMw) {\n this._shadowMiddlewareMap.delete(mw);\n return super.removeMiddleware(wrappedMw);\n }\n return this;\n }\n\n async getExactLocaleFromRequest(ctx: ExecutionContext) {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.getExactLocale(locale);\n }\n\n async translateRequest(ctx: ExecutionContext, obj: any): Promise<any> {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.translate(locale, obj, ctx);\n }\n}\n", "import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { I18nModuleOptions } from './i18n-module.options';\n\nconst { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =\n new ConfigurableModuleBuilder<I18nModuleOptions>()\n // .setExtras({}, (def) => ({ ...def, global: true }))\n .build();\nexport const I18nModuleOptionsToken = MODULE_OPTIONS_TOKEN;\nexport { ConfigurableModuleClass as I18nModuleBase };\n", "export const I18nParamResolverToken = 'I18N_PARAM_RESOLVER';\nexport const I18nParamResolverProviderToken = 'I18N_PARAM_RESOLVER_PROVIDER';\n", "import { Global, Module } from '@nestjs/common';\nimport { I18nModuleBase, I18nModuleOptionsToken } from './i18n-token';\nimport { I18nService } from './i18n.service';\nimport { LocalePipe } from './locale.pipe';\nimport { createProvider } from '../create-provider';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { getParamResolver } from '../resolver';\n\nconst providerFromOptions = createProvider(\n {\n provide: I18nParamResolverToken,\n inject: [I18nModuleOptionsToken],\n },\n (options: I18nModuleOptions) =>\n getParamResolver(\n options.resolver || {\n paramType: 'header',\n paramName: 'x-client-language',\n },\n ),\n);\n\n@Global()\n@Module({\n providers: [I18nService, LocalePipe, providerFromOptions],\n exports: [I18nService, LocalePipe],\n})\nexport class I18nModule extends I18nModuleBase {\n static forRoot(options: I18nModuleOptions) {}\n}\n", "import {\n ArgumentMetadata,\n createParamDecorator,\n ExecutionContext,\n Inject,\n Injectable,\n PipeTransform,\n} from '@nestjs/common';\nimport { I18nService } from './i18n.service';\nimport { createResolver, ParamResolverInput } from '../resolver';\nimport { ModuleRef } from '@nestjs/core';\n\ntype LocaleContext = {\n ctx: ExecutionContext;\n resolver?: ParamResolverInput;\n};\n\n@Injectable()\nexport class LocalePipe implements PipeTransform {\n constructor(\n @Inject(I18nService) private i18nService: I18nService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async transform(ctx: LocaleContext, metadata: ArgumentMetadata) {\n const resolver = ctx.resolver;\n if (resolver) {\n const _resolver = createResolver(resolver);\n const req = ctx.ctx.switchToHttp().getRequest();\n const locale = await _resolver(req, this.moduleRef);\n return this.i18nService.getExactLocale(locale);\n } else {\n return this.i18nService.getExactLocaleFromRequest(ctx.ctx);\n }\n }\n}\n\nconst _dec = createParamDecorator(\n (resolver: ParamResolverInput | undefined, ctx) => {\n return { ctx, resolver };\n },\n);\n\nexport const PutLocale = (resolver?: ParamResolverInput) =>\n _dec(resolver, LocalePipe);\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { ApiFromResolver } from '../resolver';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { UseInterceptors } from '@nestjs/common';\nimport { I18nInterceptor } from './i18n.interceptor';\n\nexport const createI18nDecorator = (options: I18nModuleOptions) => {\n return () =>\n MergeClassOrMethodDecorators([\n UseInterceptors(I18nInterceptor),\n ApiFromResolver(options.resolver, {\n description: 'Locale for internationalization',\n required: false,\n default: options.defaultLocale ?? options.locales[0],\n enum: options.locales,\n }),\n ]);\n};\n", "import {\n CallHandler,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n NestInterceptor,\n} from '@nestjs/common';\nimport { from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { I18nService } from './i18n.service';\n\n@Injectable()\nexport class I18nInterceptor implements NestInterceptor {\n constructor(@Inject(I18nService) private readonly i18nService: I18nService) {}\n\n intercept(context: ExecutionContext, next: CallHandler) {\n return next.handle().pipe(\n // \u6210\u529F\u8DEF\u5F84\uFF1A\u628A\u54CD\u5E94\u4F53\u4EA4\u7ED9 i18n \u505A\u5F02\u6B65\u7FFB\u8BD1\n mergeMap((data) => this.i18nService.translateRequest(context, data)),\n // \u9519\u8BEF\u8DEF\u5F84\uFF1A\u82E5\u662F HttpException\uFF0C\u628A\u5176 response \u7FFB\u8BD1\u540E\u518D\u629B\n catchError((err) => {\n if (err instanceof HttpException) {\n const status = err.getStatus();\n const resp = err.getResponse();\n return from(this.i18nService.translateRequest(context, resp)).pipe(\n mergeMap((translated) =>\n throwError(\n () => new HttpException(translated, status, { cause: err }),\n ),\n ),\n );\n }\n return throwError(() => err);\n }),\n );\n }\n}\n", "import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { I18nService } from './i18n.service';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class LocaleContext {\n constructor(\n @Inject(I18nParamResolverProviderToken) private localeInput: string,\n @Inject(I18nService)\n private i18nService: I18nService,\n ) {}\n\n locale = this.i18nService.getExactLocale(this.localeInput);\n\n translate<T>(v: T) {\n return this.i18nService.translate(this.locale, v);\n }\n}\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { createI18nDecorator } from './i18n-decorator';\nimport { I18nModule } from './i18n.module';\nimport { getParamResolver, ParamResolverInput } from '../resolver';\nimport { LocaleContext } from './locale.context';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { createProvider } from '../create-provider';\n\nexport const createI18n = (\n options: Omit<I18nModuleOptions, 'resolver'> & {\n resolver?: ParamResolverInput;\n },\n) => {\n if (!options.resolver) {\n options.resolver = {\n paramType: 'header',\n paramName: 'x-client-language',\n };\n }\n const resolver = getParamResolver(options.resolver);\n const paramProvider = resolver.toRequestScopedProvider();\n const module = I18nModule.register(options as I18nModuleOptions);\n module.providers ??= [];\n module.exports ??= [];\n module.providers.push(\n paramProvider.provider,\n LocaleContext,\n // re-exports the resolved param value for LocaleContext injection\n createProvider(\n {\n provide: I18nParamResolverProviderToken,\n inject: [paramProvider.token],\n },\n (s) => s,\n ),\n );\n module.exports.push(paramProvider.provider, LocaleContext);\n return {\n UseI18n: createI18nDecorator(options as I18nModuleOptions),\n I18nModule: module,\n I18nParamResolver: resolver,\n I18nParamResolverProvider: paramProvider,\n };\n};\n", "import { createI18nLookupMiddleware } from 'nfkit';\nimport { I18nNesties } from '../i18n.types';\n\nexport const I18nLookupMiddleware =\n createI18nLookupMiddleware<I18nNesties.Ex>();\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_swagger", "import_common", "import_swagger", "import_common", "import_common", "import_swagger", "import_common", "import_swagger", "import_constants", "import_core", "import_common", "import_common", "import_common", "import_core", "import_core", "import_common", "import_common", "import_common", "import_core", "import_nfkit", "import_common", "import_common", "import_core", "import_common", "import_common", "import_rxjs", "import_common", "module", "import_nfkit"]
|
|
3
|
+
"sources": ["../index.ts", "../src/insert-field.ts", "../src/utility/rename-class.ts", "../src/utility/class-types.ts", "../src/utility/get-api-property.ts", "../src/utility/create-mutate-inject.ts", "../src/utility/parse-bool.ts", "../src/utility/injection-token-map.ts", "../src/merge.ts", "../src/return-message.ts", "../src/openapi.ts", "../src/pipe.ts", "../src/token.guard.ts", "../src/resolver/resolver.ts", "../src/create-provider.ts", "../src/utility/resolver-swagger-map.ts", "../src/utility/uniq-by.ts", "../src/metadata.ts", "../src/utility/apply-decorator-unique.ts", "../src/utility/collect-info-from-injection-token.ts", "../src/utility/swagger-injection-collector.ts", "../src/resolver/api-inject.ts", "../src/resolver/lambda.ts", "../src/abort-utils.ts", "../src/utility/abort-http-signal.ts", "../src/abortable-module/abortable.token.ts", "../src/abortable-module/abort-signal.provider.ts", "../src/abortable-module/abortable.module.ts", "../src/i18n-module/i18n.service.ts", "../src/i18n-module/i18n-token.ts", "../src/i18n-module/i18n-param-resolver.token.ts", "../src/i18n-module/i18n.module.ts", "../src/i18n-module/locale.pipe.ts", "../src/i18n-module/i18n-decorator.ts", "../src/i18n-module/i18n.interceptor.ts", "../src/i18n-module/locale.context.ts", "../src/i18n-module/i18n-factory.ts", "../src/i18n-module/middlewares/lookup.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';\nexport * from './src/create-provider';\nexport * from './src/i18n-module';\nexport * from './src/resolver';\nexport * from './src/utility';\n", "import { ApiProperty, ApiPropertyOptions } from '@nestjs/swagger';\nimport { RenameClass } from './utility';\nimport {\n AnyClass,\n ClassOrArray,\n ParamsFromClass,\n ParseType,\n TypeFromClass,\n} from './utility';\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 return RenameClass(extendedCl, newName || cl.name);\n}\n", "export function RenameClass<T>(cls: T, name: string) {\n Object.defineProperty(cls, 'name', { value: name });\n return cls;\n}\n", "export 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", "import { DECORATORS } from '@nestjs/swagger/dist/constants';\nimport { ApiPropertyOptions } from '@nestjs/swagger';\nimport { AnyClass } from './class-types';\n\nexport const getApiProperty = (\n cls: AnyClass,\n key: string,\n): ApiPropertyOptions => {\n let proto = cls.prototype;\n\n while (proto && proto !== Object.prototype) {\n const meta = Reflect.getMetadata(\n DECORATORS.API_MODEL_PROPERTIES,\n proto,\n key,\n );\n\n if (meta) return meta;\n\n proto = Object.getPrototypeOf(proto);\n }\n\n return {};\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { Inject } from '@nestjs/common';\nimport { AnyClass } from './class-types';\n\nexport type InjectPos =\n | { type: 'param'; index: number }\n | { type: 'property'; propertyKey: string | symbol };\n\nexport const createMutateInject =\n (\n tokenResolver: (\n t: InjectionToken,\n cls: AnyClass,\n pos: InjectPos,\n ) => InjectionToken,\n ) =>\n (token?: InjectionToken): ParameterDecorator & PropertyDecorator =>\n (\n target: any,\n propertyKey: string | symbol | undefined,\n parameterIndex?: number,\n ) => {\n const cls: AnyClass =\n typeof target === 'function'\n ? (target as AnyClass)\n : (target.constructor as AnyClass);\n\n let actualToken = token;\n\n if (!actualToken) {\n if (parameterIndex != null) {\n // parameter decorator (ctor or method)\n const paramTypes: any[] =\n propertyKey == null\n ? Reflect.getMetadata('design:paramtypes', target) || []\n : Reflect.getMetadata('design:paramtypes', target, propertyKey) ||\n [];\n actualToken = paramTypes[parameterIndex];\n } else {\n // property decorator\n actualToken = Reflect.getMetadata('design:type', target, propertyKey!);\n }\n\n if (!actualToken) {\n const where =\n parameterIndex != null\n ? `${String(propertyKey ?? 'constructor')}[${parameterIndex}]`\n : String(propertyKey);\n throw new Error(\n `Cannot infer type from metadata: ${cls?.name ?? 'UnknownClass'}.${where}`,\n );\n }\n }\n\n const pos: InjectPos =\n parameterIndex != null\n ? { type: 'param', index: parameterIndex }\n : { type: 'property', propertyKey: propertyKey! };\n\n Inject(tokenResolver(actualToken, cls, pos))(\n target,\n propertyKey as any,\n parameterIndex as any,\n );\n };\n", "export const parseBool = (value: any): boolean => {\n const trueValues = ['true', '1', 'yes', 'on', true, 1];\n const falseValues = ['false', '0', 'no', 'off', false, 0];\n if (trueValues.indexOf(value) !== -1) return true;\n if (falseValues.indexOf(value) !== -1) return false;\n if (!!value) {\n return true;\n }\n return undefined;\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const InjectionTokenMap = new Map<InjectionToken, InjectionToken[]>();\n\nexport const addInjectionTokenMapping = (\n from: InjectionToken,\n to: InjectionToken | InjectionToken[],\n) => {\n if (!from || !to) {\n return;\n }\n\n if (!InjectionTokenMap.has(from)) {\n InjectionTokenMap.set(from, []);\n }\n const toArray = Array.isArray(to) ? to : [to];\n InjectionTokenMap.get(from)?.push(...toArray);\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 { InsertField } from './insert-field';\nimport {\n AnyClass,\n ClassOrArray,\n getClassFromClassOrArray,\n ParseType,\n} from './utility';\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 './utility';\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';\nimport {\n ApiFromResolver,\n createResolver,\n ParamResolverInput,\n ParamResolverInputDynamic,\n} from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { Metadata, reflector } from './metadata';\n\nexport interface RequireTokenOptions {\n resolver?: ParamResolverInput;\n tokenSource?: string | ParamResolverInputDynamic;\n errorCode?: number;\n}\n\nconst defaultHeaderName = 'x-server-token';\nconst defaultConfigName = 'SERVER_TOKEN';\nconst defaultErrorCode = 401;\n\n@Injectable()\nexport class TokenGuard implements CanActivate {\n constructor(\n @Inject(ConfigService) private config: ConfigService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async canActivate(context: ExecutionContext) {\n const controller = context.getClass();\n const handlerName = context.getHandler()?.name;\n let config = {} as RequireTokenOptions;\n if (controller) {\n if (handlerName) {\n config =\n reflector.get('requireTokenOptions', controller, handlerName) || {};\n } else {\n config = reflector.get('requireTokenOptions', controller) || {};\n }\n }\n const resolver = createResolver(\n config.resolver || { paramType: 'header', paramName: defaultHeaderName },\n );\n const tokenSource = config.tokenSource || defaultConfigName;\n const req = context.switchToHttp().getRequest();\n const [tokenFromClient, tokenFromConfig] = await Promise.all([\n resolver(req, this.moduleRef),\n typeof tokenSource === 'function'\n ? tokenSource(req, this.moduleRef)\n : this.config.get<string>(tokenSource),\n ]);\n if (tokenFromConfig && tokenFromConfig !== tokenFromClient) {\n throw new BlankReturnMessageDto(\n config.errorCode || defaultErrorCode,\n 'Unauthorized',\n ).toException();\n }\n return true;\n }\n}\n\nexport const RequireToken = (options: RequireTokenOptions = {}) => {\n const swaggerDec = options.resolver\n ? ApiFromResolver(options.resolver, {\n description: 'Server token',\n required: false,\n })\n : ApiHeader({\n name: defaultHeaderName,\n description: 'Server token',\n required: false,\n });\n return MergeClassOrMethodDecorators([\n UseGuards(TokenGuard),\n swaggerDec,\n ApiError(\n options.errorCode || defaultErrorCode,\n 'Incorrect server token provided',\n ),\n ...(options ? [Metadata.set('requireTokenOptions', options)] : []),\n ]);\n};\n", "import type { Request } from 'express';\nimport { Awaitable } from '../utility';\nimport {\n createParamDecorator,\n Inject,\n Injectable,\n PipeTransform,\n Scope,\n} from '@nestjs/common';\nimport { ModuleRef, REQUEST } from '@nestjs/core';\nimport {\n ApiHeader,\n ApiHeaderOptions,\n ApiQuery,\n ApiQueryOptions,\n} from '@nestjs/swagger';\nimport { createProvider } from '../create-provider';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { Type } from '@nestjs/common/interfaces';\nimport { ParamResolverSwaggerInfo } from '../utility/param-resolver-swagger-info.type';\nimport { ResolverSwaggerMap } from '../utility/resolver-swagger-map';\nimport { BlankReturnMessageDto } from '../return-message';\nimport { ApiError } from '../openapi';\nimport { uniqBy } from '../utility/uniq-by';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\nimport { ApiInject } from './api-inject';\n\nconst ParamResolverCopiedFieldsFromSwagger = [\n 'required',\n 'description',\n 'example',\n 'examples',\n] as const;\n\nexport interface ParamResolverInputStatic\n extends Pick<\n ApiHeaderOptions | ApiQueryOptions,\n (typeof ParamResolverCopiedFieldsFromSwagger)[number]\n > {\n paramType: 'header' | 'query';\n paramName: string;\n openapiExtras?: ApiHeaderOptions | ApiQueryOptions;\n}\n\nexport type AnyReq = Request & {\n headers?: Record<string, any>;\n query?: any;\n url?: string;\n originalUrl?: string;\n getHeader?: (name: string) => any;\n get?: (name: string) => any;\n header?: (name: string) => any;\n};\n\nexport type ParamResolverInputDynamic<R = AnyReq> = (\n req: R,\n ref: ModuleRef,\n) => Awaitable<string>;\n\nexport type ParamResolverInputDual =\n | ParamResolverInputStatic\n | ParamResolverInputDynamic;\n\nconst coerceToString = (v: any): string | undefined => {\n if (v == null) return undefined; // null / undefined\n if (v === false) return undefined; // \uD83D\uDC48 \u5173\u952E\uFF1A\u628A false \u5F53\u4F5C\u672A\u547D\u4E2D\n if (Array.isArray(v)) return v.length ? coerceToString(v[0]) : undefined;\n if (typeof v === 'string') return v;\n if (typeof v === 'number') return String(v);\n // \u5176\u4ED6\u7C7B\u578B\uFF08true / object / function / symbol / bigint\uFF09\u90FD\u4E0D\u63A5\u53D7\n return undefined;\n};\n\nconst getHeader = (req: AnyReq, name: string): string | undefined => {\n // \u5148\u8D70\u65B9\u6CD5\uFF08express/\u90E8\u5206\u9002\u914D\u5668\uFF09\n const viaMethod =\n (typeof req.getHeader === 'function' && req.getHeader(name)) ||\n (typeof (req as any).header === 'function' && (req as any).header(name)) ||\n (typeof (req as any).get === 'function' && (req as any).get(name));\n\n if (viaMethod) {\n return coerceToString(viaMethod);\n }\n\n // \u518D\u67E5 headers\uFF0C\u5927\u5C0F\u5199\u65E0\u5173\n const n = name.toLowerCase();\n const headers = req.headers ?? {};\n if (n in headers) return coerceToString((headers as any)[n]);\n\n const hit = Object.entries(headers).find(([k]) => k.toLowerCase() === n)?.[1];\n return coerceToString(hit);\n};\n\nconst pickPrimaryFromAcceptLanguage = (v?: string): string | undefined => {\n if (!v) return undefined;\n const first = v.split(',')[0]?.trim();\n return first?.split(';')[0]?.trim() || first;\n};\n\nfunction getQueryValue(req: AnyReq, key: string): string | undefined {\n // 1. \u666E\u901A\u5BF9\u8C61\u6A21\u5F0F\uFF08Express/Fastify \u5DF2\u89E3\u6790\uFF09\n const q = req.query;\n if (q && typeof q === 'object' && !('raw' in q)) {\n const v = (q as any)[key];\n if (v != null) return coerceToString(v);\n }\n\n // 2. fallback\uFF1A\u89E3\u6790 URLSearchParams\n const rawUrl = req.originalUrl ?? req.url;\n if (typeof rawUrl === 'string' && rawUrl.includes('?')) {\n try {\n // \u7528 http://localhost \u5360\u4F4D base\uFF0C\u907F\u514D\u76F8\u5BF9\u8DEF\u5F84\u9519\u8BEF\n const search = rawUrl.startsWith('http')\n ? new URL(rawUrl).search\n : new URL(rawUrl, 'http://localhost').search;\n\n if (search) {\n const params = new URLSearchParams(search);\n const val = params.get(key);\n if (val != null) return val;\n }\n } catch {\n // ignore malformed URL\n }\n }\n return undefined;\n}\n\n@Injectable()\nexport class ParamResolverPipe implements PipeTransform {\n constructor(@Inject(ModuleRef) private moduleRef: ModuleRef) {}\n\n async transform(\n params: { req: AnyReq; resolver: ParamResolverBase<any> },\n metadata: any,\n ) {\n return params.resolver.resolve(params.req, this.moduleRef);\n }\n}\n\nconst usedParamResolverTokens = new Set<string>();\n\nexport abstract class ParamResolverBase<T, R extends AnyReq = AnyReq> {\n protected extraSwagger: ParamResolverSwaggerInfo[] = [];\n\n addExtraDecorator(\n dec: (\n extras?: ApiHeaderOptions | ApiQueryOptions,\n ) => ClassDecorator & MethodDecorator,\n token = Math.random().toString(36),\n ) {\n this.extraSwagger.push({\n token,\n swagger: dec,\n });\n return this;\n }\n\n // for override\n toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n return uniqBy([...this.extraSwagger, ...extras], (info) => info.token);\n }\n\n toApiPropertyDecorator(extras: ApiHeaderOptions | ApiQueryOptions = {}) {\n const swaggerInfo = uniqBy(this.toSwaggerInfo(), (info) => info.token);\n return (extras2: ApiHeaderOptions | ApiQueryOptions = {}) =>\n MergeClassOrMethodDecorators(\n swaggerInfo.map((info) =>\n ApplyDecoratorUnique(\n info.swagger({ ...extras, ...extras2 }),\n info.token,\n ),\n ),\n );\n }\n // for override\n abstract resolve(req: R, ref: ModuleRef): Awaitable<T>;\n\n toResolverFunction() {\n return async (req: R, ref: ModuleRef) => this.resolve(req, ref);\n }\n\n toParamDecorator() {\n const dec = createParamDecorator((_, ctx) => {\n const req = ctx.switchToHttp().getRequest<R>();\n return { req, resolver: this };\n });\n\n return (...pipes: (Type<PipeTransform> | PipeTransform)[]) =>\n dec(ParamResolverPipe, ...pipes);\n }\n\n // for override\n toString() {\n return 'ParamResolverBase';\n }\n\n toRequestScopedProvider() {\n const token = `PARAM_RESOLVER_${this.toString()}`;\n let useToken = token;\n\n if (usedParamResolverTokens.has(token)) {\n // avoid token conflict\n let suffix = 0;\n while (usedParamResolverTokens.has(`${token}__${suffix}`)) {\n suffix++;\n }\n useToken = `${token}__${suffix}`;\n }\n usedParamResolverTokens.add(useToken);\n\n const provider = createProvider(\n {\n provide: useToken,\n inject: [REQUEST, ModuleRef],\n scope: Scope.REQUEST,\n },\n this.toResolverFunction(),\n );\n\n const swaggerInfos = this.toSwaggerInfo();\n ResolverSwaggerMap.set(useToken, swaggerInfos);\n\n return {\n token: useToken,\n provider,\n inject: () => ApiInject(useToken),\n };\n }\n}\n\nexport type TypeFromParamResolver<P> =\n P extends ParamResolverBase<infer T, any> ? T : never;\n\nexport class ParamResolver<R extends AnyReq = AnyReq> extends ParamResolverBase<\n string | undefined,\n R\n> {\n private readonly info: ParamResolverInputStatic;\n private readonly dynamic: ParamResolverInputDynamic;\n constructor(input: ParamResolverInputDual) {\n super();\n if (typeof input === 'function') {\n this.dynamic = input;\n } else {\n this.info = { ...input };\n if (this.info.paramType === 'header') {\n this.info.paramName = this.info.paramName.toLowerCase();\n }\n }\n }\n\n private handleResolveValue(v: any) {\n if (this.info?.required && v == null) {\n throw new BlankReturnMessageDto(\n 400,\n `Required parameter '${this.info.paramName}' in ${this.info.paramType} is missing`,\n ).toException();\n }\n return v;\n }\n\n override resolve(req: R, ref: ModuleRef): Awaitable<string | undefined> {\n if (this.info) {\n if (this.info.paramType === 'header') {\n const name = this.info.paramName;\n let raw = getHeader(req, name);\n if (name === 'accept-language')\n raw = pickPrimaryFromAcceptLanguage(raw);\n return this.handleResolveValue(raw);\n }\n if (this.info.paramType === 'query') {\n return this.handleResolveValue(getQueryValue(req, this.info.paramName));\n }\n throw new Error(`Unsupported paramType: ${this.info.paramType}`);\n } else if (this.dynamic) {\n return this.dynamic(req, ref);\n }\n }\n\n override toString() {\n const suffix = this.info\n ? `${this.info.paramType.toUpperCase()}_${this.info.paramName}`\n : `DYNAMIC`;\n return `ParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n const swagger = (extras2: ApiHeaderOptions | ApiQueryOptions = {}) => {\n if (this.info) {\n const paramType = this.info.paramType;\n const apiOptions: ApiHeaderOptions = {\n name: this.info.paramName,\n ...ParamResolverCopiedFieldsFromSwagger.reduce((acc, field) => {\n if (field in this.info!) {\n (acc as any)[field] = this.info[field];\n }\n return acc;\n }, {} as ApiHeaderOptions),\n ...(this.info.openapiExtras || {}),\n ...extras2,\n };\n return paramType === 'header'\n ? ApiHeader(apiOptions)\n : paramType === 'query'\n ? ApiQuery({ type: 'string', ...apiOptions })\n : () => {};\n }\n return () => {};\n };\n\n return super.toSwaggerInfo([\n {\n swagger,\n token: this.toString(),\n },\n ...(this.info?.required\n ? [\n {\n swagger: () => ApiError(400, 'Invalid request parameters'),\n token: `__missing_required_400__`,\n },\n ]\n : []),\n ...extras,\n ]);\n }\n}\n\nexport class CombinedParamResolver<\n M extends Record<any, ParamResolverBase<any, AnyReq>>,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<\n {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n },\n R\n> {\n constructor(private resolvers: M) {\n super();\n }\n\n override async resolve(\n req: R,\n ref: ModuleRef,\n ): Promise<{ [K in keyof M]: TypeFromParamResolver<M[K]> }> {\n const result = {} as {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n };\n // use Promise.all\n await Promise.all(\n Object.entries(this.resolvers).map(async ([key, resolver]) => {\n result[key as keyof M] = (await resolver.resolve(\n req,\n ref,\n )) as TypeFromParamResolver<M[typeof key]>;\n }),\n );\n return result;\n }\n\n override toString() {\n const suffix = Object.entries(this.resolvers)\n .map(([key, resolver]) => `${key.toString()}_${resolver.toString()}`)\n .join('__');\n return `CombinedParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const combined = Object.values(this.resolvers).flatMap((resolver) =>\n resolver.toSwaggerInfo(),\n );\n return super.toSwaggerInfo([...combined, ...extras]);\n }\n}\n\nexport class TransformParamResolver<\n T,\n U,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<U, R> {\n constructor(\n private baseResolver: ParamResolverBase<T, R>,\n private transformFn: (value: T, ref: ModuleRef, req: R) => Awaitable<U>,\n ) {\n super();\n }\n\n override async resolve(req: R, ref: ModuleRef): Promise<U> {\n const baseValue = await this.baseResolver.resolve(req, ref);\n return this.transformFn(baseValue, ref, req);\n }\n\n override toString() {\n return `Transform_${this.baseResolver.toString()}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const info = this.baseResolver.toSwaggerInfo(extras);\n return super.toSwaggerInfo(info);\n }\n}\n\nexport type ParamResolverInput =\n | ParamResolverInputDual\n | ParamResolverBase<string>;\n\nexport const getParamResolver = (input: ParamResolverInput) => {\n if (input instanceof ParamResolverBase) {\n return input;\n }\n return new ParamResolver(input);\n};\n\n// @deprecated use ParamResolver directly\nexport const createResolver = (\n _options: ParamResolverInput,\n): ParamResolverInputDynamic => {\n return getParamResolver(_options).toResolverFunction();\n};\n\n// @deprecated use ParamResolver directly\nexport const ApiFromResolver = (\n _options: ParamResolverInput,\n extras: ApiHeaderOptions | ApiQueryOptions = {},\n): ClassDecorator & MethodDecorator => {\n return getParamResolver(_options).toApiPropertyDecorator(extras)();\n};\n", "import { FactoryProvider } from '@nestjs/common';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { addInjectionTokenMapping } from './utility/injection-token-map';\n\ntype TypeFromToken<T> = T extends string | symbol\n ? any\n : T extends InjectionToken<infer U>\n ? U\n : any;\n\ntype TokensToTypes<A extends InjectionToken[]> = A extends []\n ? []\n : A extends [infer F, ...infer R]\n ? [TypeFromToken<F>, ...TokensToTypes<R extends InjectionToken[] ? R : []>]\n : [];\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TypedFactoryProvider<A extends InjectionToken[], R>\n extends FactoryProvider<R> {\n inject: A;\n useFactory: (...args: TokensToTypes<A>) => Awaitable<R>;\n}\n\nexport const createProvider = <const A extends InjectionToken[], R>(\n options: { inject: A } & Omit<FactoryProvider<R>, 'inject' | 'useFactory'>,\n factory: (...args: TokensToTypes<A>) => Awaitable<R>,\n): TypedFactoryProvider<A, R> => {\n if (options.inject) {\n addInjectionTokenMapping(options.provide, options.inject);\n }\n return {\n useFactory: factory,\n ...options,\n };\n};\n", "import { ParamResolverSwaggerInfo } from './param-resolver-swagger-info.type';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const ResolverSwaggerMap = new Map<\n InjectionToken,\n ParamResolverSwaggerInfo[]\n>();\n", "export const uniqBy = <T>(arr: T[], fn: (item: T) => any): T[] => {\n const seen = new Set<any>();\n const result: T[] = [];\n\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n};\n", "import { MetadataSetter, Reflector } from 'typed-reflector';\nimport { RequireTokenOptions } from './token.guard';\n\ninterface MetadataMap {\n requireTokenOptions: RequireTokenOptions;\n}\n\ninterface MetadataArrayMap {\n usedUniqueDecoratorIdentifiers: any;\n}\n\nexport const reflector = new Reflector<MetadataMap, MetadataArrayMap>();\nexport const Metadata = new MetadataSetter<MetadataMap, MetadataArrayMap>();\n", "import { AnyClass } from './class-types';\nimport { Metadata, reflector } from '../metadata';\n\nexport const ApplyDecoratorUnique = <\n D extends\n | ClassDecorator\n | MethodDecorator\n | PropertyDecorator\n | ParameterDecorator,\n>(\n dec: D,\n identifier: any,\n): D =>\n ((...args: Parameters<D>) => {\n const isClassRelated = args.length === 1 || args[1] === undefined; // class decorator or constructor parameter decorator\n const target = args[0] as any;\n const cls: AnyClass =\n typeof target === 'function' ? target : target.constructor;\n if (isClassRelated) {\n const used = reflector.getArray('usedUniqueDecoratorIdentifiers', cls);\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(cls);\n return (dec as any)(...args) as ReturnType<D>;\n } else {\n const keyName = args[1];\n const used = reflector.getProperty(\n 'usedUniqueDecoratorIdentifiers',\n cls as any,\n keyName,\n );\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(\n cls as any,\n keyName,\n );\n return (dec as any)(...args) as ReturnType<D>;\n }\n }) as D;\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport {\n PARAMTYPES_METADATA,\n SELF_DECLARED_DEPS_METADATA,\n} from '@nestjs/common/constants';\nimport { InjectionTokenMap } from './injection-token-map';\n\nfunction asArray<T>(v: T | T[] | undefined): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getCtorDepsFromClass(cls: Function): InjectionToken[] {\n const paramTypes: any[] = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];\n\n // Nest \u5728\u6709 @Inject(token) \u65F6\uFF0C\u4F1A\u5199 SELF_DECLARED_DEPS_METADATA \u8986\u76D6\u67D0\u4E9B index\n const selfDeclared: Array<{ index: number; param: any }> =\n Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];\n\n const overrides = new Map<number, any>(\n selfDeclared.map((d) => [d.index, d.param]),\n );\n\n // \u6CE8\u610F\uFF1Ainterface/any \u4F1A\u53D8\u6210 Object\uFF0C\u901A\u5E38\u6CA1\u610F\u4E49\uFF0C\u8FC7\u6EE4\u6389\n return paramTypes\n .map((t, i) => overrides.get(i) ?? t)\n .filter((t) => t != null && t !== Object);\n}\n\n/**\n * \u4ECE\u67D0\u4E2A\u5165\u53E3 token \u51FA\u53D1\uFF1A\n * - \u6536\u96C6 map.get(token) \u7684\u503C\uFF08T \u6216 T[]\uFF09\n * - \u9012\u5F52\u904D\u5386 InjectionTokenMap.get(token)\n * - \u82E5 token \u662F class\uFF0C\u518D\u8865\u5145\u904D\u5386\u5176 ctor deps\n */\nexport const collectInfoFromInjectionToken = <T>(\n map: Map<InjectionToken, T | T[]>,\n token: InjectionToken,\n): T[] => {\n const visited = new Set<InjectionToken>();\n const out = new Set<T>();\n\n const dfs = (t: InjectionToken) => {\n if (t == null) return;\n if (visited.has(t)) return;\n visited.add(t);\n\n // 1) \u6536\u96C6\u5F53\u524D token \u5BF9\u5E94\u7684\u4FE1\u606F\n for (const v of asArray(map.get(t))) {\n out.add(v);\n }\n\n // 2) \u5148\u8D70\u663E\u5F0F\u4F9D\u8D56\u56FE\uFF08\u5982\u679C\u6709\uFF09\n const deps = InjectionTokenMap.get(t);\n if (deps?.length) {\n for (const d of deps) dfs(d);\n }\n\n // 3) \u5982\u679C token \u672C\u8EAB\u662F class\uFF08\u6216\u4F60\u62FF\u5230\u7684\u5C31\u662F class token\uFF09\uFF0C\u7528\u53CD\u5C04\u8865\u4E00\u5C42 ctor deps\n // \u6CE8\u610F\uFF1A\u8FD9\u53EA\u5728\u4F60\u6CA1\u6709\u628A \"string/symbol token -> metatype\" \u6620\u5C04\u5B58\u8D77\u6765\u65F6\u624D\u662F best-effort\n if (typeof t === 'function') {\n const ctorDeps = getCtorDepsFromClass(t);\n for (const d of ctorDeps) dfs(d);\n }\n };\n\n dfs(token);\n return Array.from(out);\n};\n\nexport const createCollectorFromInjectionToken =\n <T>(map: Map<InjectionToken, T | T[]>) =>\n (token: InjectionToken): T[] =>\n collectInfoFromInjectionToken<T>(map, token);\n", "import { createCollectorFromInjectionToken } from './collect-info-from-injection-token';\nimport { ResolverSwaggerMap } from './resolver-swagger-map';\n\nexport const swaggerInjectionCollector =\n createCollectorFromInjectionToken(ResolverSwaggerMap);\n", "import { createMutateInject } from '../utility';\nimport { swaggerInjectionCollector } from '../utility/swagger-injection-collector';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nexport const ApiInject = createMutateInject((token, cls) => {\n const swaggers = swaggerInjectionCollector(token);\n\n for (const swagger of swaggers) {\n ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);\n }\n\n return token;\n});\n", "import { Awaitable } from 'nfkit';\nimport { AnyReq, ParamResolverBase, TransformParamResolver } from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { parseBool } from '../utility';\nimport { BlankReturnMessageDto } from '../return-message';\n\nexport const createLambdaParamResolver =\n <T, U, Req extends AnyReq = AnyReq>(\n cb: (param: T, ref: ModuleRef, req: Req) => Awaitable<U>,\n ) =>\n (resolver: ParamResolverBase<T>) =>\n new TransformParamResolver<T, U, Req>(resolver, cb);\n\nexport const ParseIntParamResolver = createLambdaParamResolver((s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseInt(s, 10);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid integer parameter',\n ).toException();\n }\n return res;\n});\nexport const ParseFloatParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseFloat(s);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid float parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBoolParamResolver = createLambdaParamResolver(parseBool);\nexport const ParseDateParamResolver = createLambdaParamResolver(\n (s: number | string | Date) => {\n if (s == null) {\n return s;\n }\n const res = new Date(s);\n // check invalid date\n if (isNaN(res.getTime())) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid date parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBase64ParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n // support base64 or base64url\n const normalized = s.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n\n // \u5B57\u7B26\u96C6\u5408\u6821\u9A8C\uFF08base64 \u7684\u5408\u6CD5\u5B57\u7B26 + padding\uFF09\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(padded)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n const buf = Buffer.from(padded, 'base64');\n\n // round-trip \u6821\u9A8C\uFF1A\u7F16\u7801\u56DE\u53BB\uFF08\u53BB padding\uFF09\u8981\u4E00\u81F4\uFF08\u5BB9\u5FCD url/base64 \u5DEE\u5F02\u7684\u8BDD\u7528 normalized \u5BF9\u6BD4\uFF09\n const re = buf.toString('base64').replace(/=+$/g, '');\n const in0 = padded.replace(/=+$/g, '');\n if (re !== in0) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n return buf;\n },\n);\nexport const DefaultValueParamResolver = <T>(\n r: ParamResolverBase<T>,\n defaultValue: T,\n) =>\n createLambdaParamResolver<T, T>((value: T) =>\n value === undefined || value === null ? defaultValue : value,\n )(r);\n", "import { Observable, takeUntil } from 'rxjs';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\nimport type { Request } from 'express';\nimport { createAbortSignalFromHttp } from './utility/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, Scope } from '@nestjs/common';\nimport { abortable, AbortableOpts } from 'nfkit';\nimport { ABORT_SIGNAL } from './abort-signal.provider';\nimport { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';\nimport { createProvider } from '../create-provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { createMutateInject } from '../utility/create-mutate-inject';\n\nconst tokenMemo = new Map<any, symbol>();\nexport const abortableToken = (token: InjectionToken) => {\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 const InjectAbortable = createMutateInject(abortableToken);\n\nexport function createAbortableProvider<T>(\n token: InjectionToken<T>,\n opts?: AbortableOpts,\n) {\n const provide = abortableToken(token);\n\n return createProvider(\n {\n provide,\n scope: Scope.REQUEST,\n inject: [ModuleRef, REQUEST, ABORT_SIGNAL],\n },\n async (moduleRef, req: Request, signal) => {\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, Scope, Type } from '@nestjs/common';\nimport { REQUEST } from '@nestjs/core';\nimport { createAbortSignalFromHttp } from '../utility/abort-http-signal';\nimport { createProvider } from '../create-provider';\n\nexport const ABORT_SIGNAL = Symbol(\n 'ABORT_SIGNAL',\n) as unknown as Type<AbortSignal>;\nexport const AbortSignalProvider = createProvider(\n {\n provide: ABORT_SIGNAL,\n scope: Scope.REQUEST,\n inject: [REQUEST],\n },\n createAbortSignalFromHttp,\n);\n\nexport const InjectAbortSignal = () => Inject(ABORT_SIGNAL);\n", "import { DynamicModule, Module } from '@nestjs/common';\nimport { createAbortableProvider } from './abortable.token';\nimport { AbortableOpts } from 'nfkit';\nimport { AbortSignalProvider } from './abort-signal.provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\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: InjectionToken[],\n options?: AbortableModuleOptions,\n ): DynamicModule {\n const providers = 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", "import {\n ConsoleLogger,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n} from '@nestjs/common';\nimport { I18nModuleOptionsToken } from './i18n-token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { ModuleRef } from '@nestjs/core';\nimport { ParamResolverBase } from '../resolver';\nimport { I18n } from 'nfkit';\nimport { I18nNesties } from './i18n.types';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\n\n@Injectable()\nexport class I18nService extends I18n<I18nNesties.Ex> {\n constructor(\n @Inject(I18nModuleOptionsToken)\n private i18nServiceOptions: I18nModuleOptions,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n @Inject(I18nParamResolverToken) private resolver: ParamResolverBase<string>,\n ) {\n super(i18nServiceOptions);\n }\n\n private _shadowMiddlewareMap = new Map<\n I18nNesties.Middleware,\n I18nNesties.Middleware\n >();\n\n private logger = new ConsoleLogger('I18nService');\n\n middleware(mw: I18nNesties.Middleware, prior = false) {\n const wrappedMw: I18nNesties.Middleware = async (\n locale,\n text,\n next,\n ctx,\n ) => {\n try {\n return await mw(locale, text, next, ctx);\n } catch (e) {\n if (e instanceof HttpException) {\n throw e;\n }\n this.logger.error(`Error in i18n middleware: ${e.message}`);\n return next();\n }\n };\n this._shadowMiddlewareMap.set(mw, wrappedMw);\n return super.middleware(wrappedMw, prior);\n }\n\n removeMiddleware(mw: I18nNesties.Middleware) {\n const wrappedMw = this._shadowMiddlewareMap.get(mw);\n if (wrappedMw) {\n this._shadowMiddlewareMap.delete(mw);\n return super.removeMiddleware(wrappedMw);\n }\n return this;\n }\n\n async getExactLocaleFromRequest(ctx: ExecutionContext) {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.getExactLocale(locale);\n }\n\n async translateRequest(ctx: ExecutionContext, obj: any): Promise<any> {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.translate(locale, obj, ctx);\n }\n}\n", "import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { I18nModuleOptions } from './i18n-module.options';\n\nconst { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =\n new ConfigurableModuleBuilder<I18nModuleOptions>()\n // .setExtras({}, (def) => ({ ...def, global: true }))\n .build();\nexport const I18nModuleOptionsToken = MODULE_OPTIONS_TOKEN;\nexport { ConfigurableModuleClass as I18nModuleBase };\n", "export const I18nParamResolverToken = 'I18N_PARAM_RESOLVER';\nexport const I18nParamResolverProviderToken = 'I18N_PARAM_RESOLVER_PROVIDER';\n", "import { Global, Module } from '@nestjs/common';\nimport { I18nModuleBase, I18nModuleOptionsToken } from './i18n-token';\nimport { I18nService } from './i18n.service';\nimport { LocalePipe } from './locale.pipe';\nimport { createProvider } from '../create-provider';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { getParamResolver } from '../resolver';\n\nconst providerFromOptions = createProvider(\n {\n provide: I18nParamResolverToken,\n inject: [I18nModuleOptionsToken],\n },\n (options: I18nModuleOptions) =>\n getParamResolver(\n options.resolver || {\n paramType: 'header',\n paramName: 'x-client-language',\n },\n ),\n);\n\n@Global()\n@Module({\n providers: [I18nService, LocalePipe, providerFromOptions],\n exports: [I18nService, LocalePipe],\n})\nexport class I18nModule extends I18nModuleBase {\n static forRoot(options: I18nModuleOptions) {}\n}\n", "import {\n ArgumentMetadata,\n createParamDecorator,\n ExecutionContext,\n Inject,\n Injectable,\n PipeTransform,\n} from '@nestjs/common';\nimport { I18nService } from './i18n.service';\nimport { createResolver, ParamResolverInput } from '../resolver';\nimport { ModuleRef } from '@nestjs/core';\n\ntype LocaleContext = {\n ctx: ExecutionContext;\n resolver?: ParamResolverInput;\n};\n\n@Injectable()\nexport class LocalePipe implements PipeTransform {\n constructor(\n @Inject(I18nService) private i18nService: I18nService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async transform(ctx: LocaleContext, metadata: ArgumentMetadata) {\n const resolver = ctx.resolver;\n if (resolver) {\n const _resolver = createResolver(resolver);\n const req = ctx.ctx.switchToHttp().getRequest();\n const locale = await _resolver(req, this.moduleRef);\n return this.i18nService.getExactLocale(locale);\n } else {\n return this.i18nService.getExactLocaleFromRequest(ctx.ctx);\n }\n }\n}\n\nconst _dec = createParamDecorator(\n (resolver: ParamResolverInput | undefined, ctx) => {\n return { ctx, resolver };\n },\n);\n\nexport const PutLocale = (resolver?: ParamResolverInput) =>\n _dec(resolver, LocalePipe);\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { ApiFromResolver } from '../resolver';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { UseInterceptors } from '@nestjs/common';\nimport { I18nInterceptor } from './i18n.interceptor';\n\nexport const createI18nDecorator = (options: I18nModuleOptions) => {\n return () =>\n MergeClassOrMethodDecorators([\n UseInterceptors(I18nInterceptor),\n ApiFromResolver(options.resolver, {\n description: 'Locale for internationalization',\n required: false,\n default: options.defaultLocale ?? options.locales[0],\n enum: options.locales,\n }),\n ]);\n};\n", "import {\n CallHandler,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n NestInterceptor,\n} from '@nestjs/common';\nimport { from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { I18nService } from './i18n.service';\n\n@Injectable()\nexport class I18nInterceptor implements NestInterceptor {\n constructor(@Inject(I18nService) private readonly i18nService: I18nService) {}\n\n intercept(context: ExecutionContext, next: CallHandler) {\n return next.handle().pipe(\n // \u6210\u529F\u8DEF\u5F84\uFF1A\u628A\u54CD\u5E94\u4F53\u4EA4\u7ED9 i18n \u505A\u5F02\u6B65\u7FFB\u8BD1\n mergeMap((data) => this.i18nService.translateRequest(context, data)),\n // \u9519\u8BEF\u8DEF\u5F84\uFF1A\u82E5\u662F HttpException\uFF0C\u628A\u5176 response \u7FFB\u8BD1\u540E\u518D\u629B\n catchError((err) => {\n if (err instanceof HttpException) {\n const status = err.getStatus();\n const resp = err.getResponse();\n return from(this.i18nService.translateRequest(context, resp)).pipe(\n mergeMap((translated) =>\n throwError(\n () => new HttpException(translated, status, { cause: err }),\n ),\n ),\n );\n }\n return throwError(() => err);\n }),\n );\n }\n}\n", "import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { I18nService } from './i18n.service';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class LocaleContext {\n constructor(\n @Inject(I18nParamResolverProviderToken) private localeInput: string,\n @Inject(I18nService)\n private i18nService: I18nService,\n ) {}\n\n locale = this.i18nService.getExactLocale(this.localeInput);\n\n translate<T>(v: T) {\n return this.i18nService.translate(this.locale, v);\n }\n}\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { createI18nDecorator } from './i18n-decorator';\nimport { I18nModule } from './i18n.module';\nimport { getParamResolver, ParamResolverInput } from '../resolver';\nimport { LocaleContext } from './locale.context';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { createProvider } from '../create-provider';\n\nexport const createI18n = (\n options: Omit<I18nModuleOptions, 'resolver'> & {\n resolver?: ParamResolverInput;\n },\n) => {\n if (!options.resolver) {\n options.resolver = {\n paramType: 'header',\n paramName: 'x-client-language',\n };\n }\n const resolver = getParamResolver(options.resolver);\n const paramProvider = resolver.toRequestScopedProvider();\n const module = I18nModule.register(options as I18nModuleOptions);\n module.providers ??= [];\n module.exports ??= [];\n module.providers.push(\n paramProvider.provider,\n LocaleContext,\n // re-exports the resolved param value for LocaleContext injection\n createProvider(\n {\n provide: I18nParamResolverProviderToken,\n inject: [paramProvider.token],\n },\n (s) => s,\n ),\n );\n module.exports.push(paramProvider.provider, LocaleContext);\n return {\n UseI18n: createI18nDecorator(options as I18nModuleOptions),\n I18nModule: module,\n I18nParamResolver: resolver,\n I18nParamResolverProvider: paramProvider,\n };\n};\n", "import { createI18nLookupMiddleware } from 'nfkit';\nimport { I18nNesties } from '../i18n.types';\n\nexport const I18nLookupMiddleware =\n createI18nLookupMiddleware<I18nNesties.Ex>();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["from", "import_swagger", "import_common", "import_swagger", "import_common", "import_common", "import_swagger", "import_common", "import_swagger", "import_constants", "import_core", "import_common", "import_common", "import_common", "import_core", "import_core", "import_common", "import_common", "import_common", "import_core", "import_nfkit", "import_common", "import_common", "import_core", "import_common", "import_common", "import_rxjs", "import_common", "module", "import_nfkit"]
|
|
7
7
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -79,6 +79,19 @@ var parseBool = (value) => {
|
|
|
79
79
|
return void 0;
|
|
80
80
|
};
|
|
81
81
|
|
|
82
|
+
// src/utility/injection-token-map.ts
|
|
83
|
+
var InjectionTokenMap = /* @__PURE__ */ new Map();
|
|
84
|
+
var addInjectionTokenMapping = (from2, to) => {
|
|
85
|
+
if (!from2 || !to) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!InjectionTokenMap.has(from2)) {
|
|
89
|
+
InjectionTokenMap.set(from2, []);
|
|
90
|
+
}
|
|
91
|
+
const toArray = Array.isArray(to) ? to : [to];
|
|
92
|
+
InjectionTokenMap.get(from2)?.push(...toArray);
|
|
93
|
+
};
|
|
94
|
+
|
|
82
95
|
// src/insert-field.ts
|
|
83
96
|
function InsertField(cl, map, newName) {
|
|
84
97
|
const extendedCl = class extends cl {
|
|
@@ -284,13 +297,10 @@ import {
|
|
|
284
297
|
ApiQuery
|
|
285
298
|
} from "@nestjs/swagger";
|
|
286
299
|
|
|
287
|
-
// src/utility/injection-token-map.ts
|
|
288
|
-
var InjectionTokenMap = /* @__PURE__ */ new Map();
|
|
289
|
-
|
|
290
300
|
// src/create-provider.ts
|
|
291
301
|
var createProvider = (options, factory) => {
|
|
292
302
|
if (options.inject) {
|
|
293
|
-
|
|
303
|
+
addInjectionTokenMapping(options.provide, options.inject);
|
|
294
304
|
}
|
|
295
305
|
return {
|
|
296
306
|
useFactory: factory,
|
|
@@ -350,6 +360,59 @@ var ApplyDecoratorUnique = (dec, identifier) => ((...args) => {
|
|
|
350
360
|
}
|
|
351
361
|
});
|
|
352
362
|
|
|
363
|
+
// src/utility/collect-info-from-injection-token.ts
|
|
364
|
+
import {
|
|
365
|
+
PARAMTYPES_METADATA,
|
|
366
|
+
SELF_DECLARED_DEPS_METADATA
|
|
367
|
+
} from "@nestjs/common/constants";
|
|
368
|
+
function asArray(v) {
|
|
369
|
+
if (v == null) return [];
|
|
370
|
+
return Array.isArray(v) ? v : [v];
|
|
371
|
+
}
|
|
372
|
+
function getCtorDepsFromClass(cls) {
|
|
373
|
+
const paramTypes = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];
|
|
374
|
+
const selfDeclared = Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];
|
|
375
|
+
const overrides = new Map(
|
|
376
|
+
selfDeclared.map((d) => [d.index, d.param])
|
|
377
|
+
);
|
|
378
|
+
return paramTypes.map((t, i) => overrides.get(i) ?? t).filter((t) => t != null && t !== Object);
|
|
379
|
+
}
|
|
380
|
+
var collectInfoFromInjectionToken = (map, token) => {
|
|
381
|
+
const visited = /* @__PURE__ */ new Set();
|
|
382
|
+
const out = /* @__PURE__ */ new Set();
|
|
383
|
+
const dfs = (t) => {
|
|
384
|
+
if (t == null) return;
|
|
385
|
+
if (visited.has(t)) return;
|
|
386
|
+
visited.add(t);
|
|
387
|
+
for (const v of asArray(map.get(t))) {
|
|
388
|
+
out.add(v);
|
|
389
|
+
}
|
|
390
|
+
const deps = InjectionTokenMap.get(t);
|
|
391
|
+
if (deps?.length) {
|
|
392
|
+
for (const d of deps) dfs(d);
|
|
393
|
+
}
|
|
394
|
+
if (typeof t === "function") {
|
|
395
|
+
const ctorDeps = getCtorDepsFromClass(t);
|
|
396
|
+
for (const d of ctorDeps) dfs(d);
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
dfs(token);
|
|
400
|
+
return Array.from(out);
|
|
401
|
+
};
|
|
402
|
+
var createCollectorFromInjectionToken = (map) => (token) => collectInfoFromInjectionToken(map, token);
|
|
403
|
+
|
|
404
|
+
// src/utility/swagger-injection-collector.ts
|
|
405
|
+
var swaggerInjectionCollector = createCollectorFromInjectionToken(ResolverSwaggerMap);
|
|
406
|
+
|
|
407
|
+
// src/resolver/api-inject.ts
|
|
408
|
+
var ApiInject = createMutateInject((token, cls) => {
|
|
409
|
+
const swaggers = swaggerInjectionCollector(token);
|
|
410
|
+
for (const swagger of swaggers) {
|
|
411
|
+
ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);
|
|
412
|
+
}
|
|
413
|
+
return token;
|
|
414
|
+
});
|
|
415
|
+
|
|
353
416
|
// src/resolver/resolver.ts
|
|
354
417
|
var ParamResolverCopiedFieldsFromSwagger = [
|
|
355
418
|
"required",
|
|
@@ -478,7 +541,7 @@ var ParamResolverBase = class {
|
|
|
478
541
|
return {
|
|
479
542
|
token: useToken,
|
|
480
543
|
provider,
|
|
481
|
-
inject: () =>
|
|
544
|
+
inject: () => ApiInject(useToken)
|
|
482
545
|
};
|
|
483
546
|
}
|
|
484
547
|
};
|
|
@@ -694,59 +757,6 @@ var DefaultValueParamResolver = (r, defaultValue) => createLambdaParamResolver(
|
|
|
694
757
|
(value) => value === void 0 || value === null ? defaultValue : value
|
|
695
758
|
)(r);
|
|
696
759
|
|
|
697
|
-
// src/utility/collect-info-from-injection-token.ts
|
|
698
|
-
import {
|
|
699
|
-
PARAMTYPES_METADATA,
|
|
700
|
-
SELF_DECLARED_DEPS_METADATA
|
|
701
|
-
} from "@nestjs/common/constants";
|
|
702
|
-
function asArray(v) {
|
|
703
|
-
if (v == null) return [];
|
|
704
|
-
return Array.isArray(v) ? v : [v];
|
|
705
|
-
}
|
|
706
|
-
function getCtorDepsFromClass(cls) {
|
|
707
|
-
const paramTypes = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];
|
|
708
|
-
const selfDeclared = Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];
|
|
709
|
-
const overrides = new Map(
|
|
710
|
-
selfDeclared.map((d) => [d.index, d.param])
|
|
711
|
-
);
|
|
712
|
-
return paramTypes.map((t, i) => overrides.get(i) ?? t).filter((t) => t != null && t !== Object);
|
|
713
|
-
}
|
|
714
|
-
var collectInfoFromInjectionToken = (map, token) => {
|
|
715
|
-
const visited = /* @__PURE__ */ new Set();
|
|
716
|
-
const out = /* @__PURE__ */ new Set();
|
|
717
|
-
const dfs = (t) => {
|
|
718
|
-
if (t == null) return;
|
|
719
|
-
if (visited.has(t)) return;
|
|
720
|
-
visited.add(t);
|
|
721
|
-
for (const v of asArray(map.get(t))) {
|
|
722
|
-
out.add(v);
|
|
723
|
-
}
|
|
724
|
-
const deps = InjectionTokenMap.get(t);
|
|
725
|
-
if (deps?.length) {
|
|
726
|
-
for (const d of deps) dfs(d);
|
|
727
|
-
}
|
|
728
|
-
if (typeof t === "function") {
|
|
729
|
-
const ctorDeps = getCtorDepsFromClass(t);
|
|
730
|
-
for (const d of ctorDeps) dfs(d);
|
|
731
|
-
}
|
|
732
|
-
};
|
|
733
|
-
dfs(token);
|
|
734
|
-
return Array.from(out);
|
|
735
|
-
};
|
|
736
|
-
var createCollectorFromInjectionToken = (map) => (token) => collectInfoFromInjectionToken(map, token);
|
|
737
|
-
|
|
738
|
-
// src/utility/swagger-injection-collector.ts
|
|
739
|
-
var swaggerInjectionCollector = createCollectorFromInjectionToken(ResolverSwaggerMap);
|
|
740
|
-
|
|
741
|
-
// src/resolver/api-inject.ts
|
|
742
|
-
var ApiInject = createMutateInject((token, cls) => {
|
|
743
|
-
const swaggers = swaggerInjectionCollector(token);
|
|
744
|
-
for (const swagger of swaggers) {
|
|
745
|
-
ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);
|
|
746
|
-
}
|
|
747
|
-
return token;
|
|
748
|
-
});
|
|
749
|
-
|
|
750
760
|
// src/token.guard.ts
|
|
751
761
|
import { ModuleRef as ModuleRef2 } from "@nestjs/core";
|
|
752
762
|
var defaultHeaderName = "x-server-token";
|
|
@@ -1238,6 +1248,7 @@ export {
|
|
|
1238
1248
|
I18nService,
|
|
1239
1249
|
InjectAbortSignal,
|
|
1240
1250
|
InjectAbortable,
|
|
1251
|
+
InjectionTokenMap,
|
|
1241
1252
|
InsertField,
|
|
1242
1253
|
LocalePipe,
|
|
1243
1254
|
MergeClassDecorators,
|
|
@@ -1262,6 +1273,7 @@ export {
|
|
|
1262
1273
|
TokenGuard,
|
|
1263
1274
|
TransformParamResolver,
|
|
1264
1275
|
abortableToken,
|
|
1276
|
+
addInjectionTokenMapping,
|
|
1265
1277
|
createAbortableProvider,
|
|
1266
1278
|
createI18n,
|
|
1267
1279
|
createI18nDecorator,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/insert-field.ts", "../src/utility/rename-class.ts", "../src/utility/class-types.ts", "../src/utility/get-api-property.ts", "../src/utility/create-mutate-inject.ts", "../src/utility/parse-bool.ts", "../src/merge.ts", "../src/return-message.ts", "../src/openapi.ts", "../src/pipe.ts", "../src/token.guard.ts", "../src/resolver/resolver.ts", "../src/
|
|
4
|
-
"sourcesContent": ["import { ApiProperty, ApiPropertyOptions } from '@nestjs/swagger';\nimport { RenameClass } from './utility';\nimport {\n AnyClass,\n ClassOrArray,\n ParamsFromClass,\n ParseType,\n TypeFromClass,\n} from './utility';\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 return RenameClass(extendedCl, newName || cl.name);\n}\n", "export function RenameClass<T>(cls: T, name: string) {\n Object.defineProperty(cls, 'name', { value: name });\n return cls;\n}\n", "export 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", "import { DECORATORS } from '@nestjs/swagger/dist/constants';\nimport { ApiPropertyOptions } from '@nestjs/swagger';\nimport { AnyClass } from './class-types';\n\nexport const getApiProperty = (\n cls: AnyClass,\n key: string,\n): ApiPropertyOptions => {\n let proto = cls.prototype;\n\n while (proto && proto !== Object.prototype) {\n const meta = Reflect.getMetadata(\n DECORATORS.API_MODEL_PROPERTIES,\n proto,\n key,\n );\n\n if (meta) return meta;\n\n proto = Object.getPrototypeOf(proto);\n }\n\n return {};\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { Inject } from '@nestjs/common';\nimport { AnyClass } from './class-types';\n\nexport type InjectPos =\n | { type: 'param'; index: number }\n | { type: 'property'; propertyKey: string | symbol };\n\nexport const createMutateInject =\n (\n tokenResolver: (\n t: InjectionToken,\n cls: AnyClass,\n pos: InjectPos,\n ) => InjectionToken,\n ) =>\n (token?: InjectionToken): ParameterDecorator & PropertyDecorator =>\n (\n target: any,\n propertyKey: string | symbol | undefined,\n parameterIndex?: number,\n ) => {\n const cls: AnyClass =\n typeof target === 'function'\n ? (target as AnyClass)\n : (target.constructor as AnyClass);\n\n let actualToken = token;\n\n if (!actualToken) {\n if (parameterIndex != null) {\n // parameter decorator (ctor or method)\n const paramTypes: any[] =\n propertyKey == null\n ? Reflect.getMetadata('design:paramtypes', target) || []\n : Reflect.getMetadata('design:paramtypes', target, propertyKey) ||\n [];\n actualToken = paramTypes[parameterIndex];\n } else {\n // property decorator\n actualToken = Reflect.getMetadata('design:type', target, propertyKey!);\n }\n\n if (!actualToken) {\n const where =\n parameterIndex != null\n ? `${String(propertyKey ?? 'constructor')}[${parameterIndex}]`\n : String(propertyKey);\n throw new Error(\n `Cannot infer type from metadata: ${cls?.name ?? 'UnknownClass'}.${where}`,\n );\n }\n }\n\n const pos: InjectPos =\n parameterIndex != null\n ? { type: 'param', index: parameterIndex }\n : { type: 'property', propertyKey: propertyKey! };\n\n Inject(tokenResolver(actualToken, cls, pos))(\n target,\n propertyKey as any,\n parameterIndex as any,\n );\n };\n", "export const parseBool = (value: any): boolean => {\n const trueValues = ['true', '1', 'yes', 'on', true, 1];\n const falseValues = ['false', '0', 'no', 'off', false, 0];\n if (trueValues.indexOf(value) !== -1) return true;\n if (falseValues.indexOf(value) !== -1) return false;\n if (!!value) {\n return true;\n }\n return undefined;\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 { InsertField } from './insert-field';\nimport {\n AnyClass,\n ClassOrArray,\n getClassFromClassOrArray,\n ParseType,\n} from './utility';\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 './utility';\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';\nimport {\n ApiFromResolver,\n createResolver,\n ParamResolverInput,\n ParamResolverInputDynamic,\n} from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { Metadata, reflector } from './metadata';\n\nexport interface RequireTokenOptions {\n resolver?: ParamResolverInput;\n tokenSource?: string | ParamResolverInputDynamic;\n errorCode?: number;\n}\n\nconst defaultHeaderName = 'x-server-token';\nconst defaultConfigName = 'SERVER_TOKEN';\nconst defaultErrorCode = 401;\n\n@Injectable()\nexport class TokenGuard implements CanActivate {\n constructor(\n @Inject(ConfigService) private config: ConfigService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async canActivate(context: ExecutionContext) {\n const controller = context.getClass();\n const handlerName = context.getHandler()?.name;\n let config = {} as RequireTokenOptions;\n if (controller) {\n if (handlerName) {\n config =\n reflector.get('requireTokenOptions', controller, handlerName) || {};\n } else {\n config = reflector.get('requireTokenOptions', controller) || {};\n }\n }\n const resolver = createResolver(\n config.resolver || { paramType: 'header', paramName: defaultHeaderName },\n );\n const tokenSource = config.tokenSource || defaultConfigName;\n const req = context.switchToHttp().getRequest();\n const [tokenFromClient, tokenFromConfig] = await Promise.all([\n resolver(req, this.moduleRef),\n typeof tokenSource === 'function'\n ? tokenSource(req, this.moduleRef)\n : this.config.get<string>(tokenSource),\n ]);\n if (tokenFromConfig && tokenFromConfig !== tokenFromClient) {\n throw new BlankReturnMessageDto(\n config.errorCode || defaultErrorCode,\n 'Unauthorized',\n ).toException();\n }\n return true;\n }\n}\n\nexport const RequireToken = (options: RequireTokenOptions = {}) => {\n const swaggerDec = options.resolver\n ? ApiFromResolver(options.resolver, {\n description: 'Server token',\n required: false,\n })\n : ApiHeader({\n name: defaultHeaderName,\n description: 'Server token',\n required: false,\n });\n return MergeClassOrMethodDecorators([\n UseGuards(TokenGuard),\n swaggerDec,\n ApiError(\n options.errorCode || defaultErrorCode,\n 'Incorrect server token provided',\n ),\n ...(options ? [Metadata.set('requireTokenOptions', options)] : []),\n ]);\n};\n", "import type { Request } from 'express';\nimport { Awaitable } from '../utility';\nimport {\n createParamDecorator,\n Inject,\n Injectable,\n PipeTransform,\n Scope,\n} from '@nestjs/common';\nimport { ModuleRef, REQUEST } from '@nestjs/core';\nimport {\n ApiHeader,\n ApiHeaderOptions,\n ApiQuery,\n ApiQueryOptions,\n} from '@nestjs/swagger';\nimport { createProvider } from '../create-provider';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { Type } from '@nestjs/common/interfaces';\nimport { ParamResolverSwaggerInfo } from '../utility/param-resolver-swagger-info.type';\nimport { ResolverSwaggerMap } from '../utility/resolver-swagger-map';\nimport { BlankReturnMessageDto } from '../return-message';\nimport { ApiError } from '../openapi';\nimport { uniqBy } from '../utility/uniq-by';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nconst ParamResolverCopiedFieldsFromSwagger = [\n 'required',\n 'description',\n 'example',\n 'examples',\n] as const;\n\nexport interface ParamResolverInputStatic\n extends Pick<\n ApiHeaderOptions | ApiQueryOptions,\n (typeof ParamResolverCopiedFieldsFromSwagger)[number]\n > {\n paramType: 'header' | 'query';\n paramName: string;\n openapiExtras?: ApiHeaderOptions | ApiQueryOptions;\n}\n\nexport type AnyReq = Request & {\n headers?: Record<string, any>;\n query?: any;\n url?: string;\n originalUrl?: string;\n getHeader?: (name: string) => any;\n get?: (name: string) => any;\n header?: (name: string) => any;\n};\n\nexport type ParamResolverInputDynamic<R = AnyReq> = (\n req: R,\n ref: ModuleRef,\n) => Awaitable<string>;\n\nexport type ParamResolverInputDual =\n | ParamResolverInputStatic\n | ParamResolverInputDynamic;\n\nconst coerceToString = (v: any): string | undefined => {\n if (v == null) return undefined; // null / undefined\n if (v === false) return undefined; // \uD83D\uDC48 \u5173\u952E\uFF1A\u628A false \u5F53\u4F5C\u672A\u547D\u4E2D\n if (Array.isArray(v)) return v.length ? coerceToString(v[0]) : undefined;\n if (typeof v === 'string') return v;\n if (typeof v === 'number') return String(v);\n // \u5176\u4ED6\u7C7B\u578B\uFF08true / object / function / symbol / bigint\uFF09\u90FD\u4E0D\u63A5\u53D7\n return undefined;\n};\n\nconst getHeader = (req: AnyReq, name: string): string | undefined => {\n // \u5148\u8D70\u65B9\u6CD5\uFF08express/\u90E8\u5206\u9002\u914D\u5668\uFF09\n const viaMethod =\n (typeof req.getHeader === 'function' && req.getHeader(name)) ||\n (typeof (req as any).header === 'function' && (req as any).header(name)) ||\n (typeof (req as any).get === 'function' && (req as any).get(name));\n\n if (viaMethod) {\n return coerceToString(viaMethod);\n }\n\n // \u518D\u67E5 headers\uFF0C\u5927\u5C0F\u5199\u65E0\u5173\n const n = name.toLowerCase();\n const headers = req.headers ?? {};\n if (n in headers) return coerceToString((headers as any)[n]);\n\n const hit = Object.entries(headers).find(([k]) => k.toLowerCase() === n)?.[1];\n return coerceToString(hit);\n};\n\nconst pickPrimaryFromAcceptLanguage = (v?: string): string | undefined => {\n if (!v) return undefined;\n const first = v.split(',')[0]?.trim();\n return first?.split(';')[0]?.trim() || first;\n};\n\nfunction getQueryValue(req: AnyReq, key: string): string | undefined {\n // 1. \u666E\u901A\u5BF9\u8C61\u6A21\u5F0F\uFF08Express/Fastify \u5DF2\u89E3\u6790\uFF09\n const q = req.query;\n if (q && typeof q === 'object' && !('raw' in q)) {\n const v = (q as any)[key];\n if (v != null) return coerceToString(v);\n }\n\n // 2. fallback\uFF1A\u89E3\u6790 URLSearchParams\n const rawUrl = req.originalUrl ?? req.url;\n if (typeof rawUrl === 'string' && rawUrl.includes('?')) {\n try {\n // \u7528 http://localhost \u5360\u4F4D base\uFF0C\u907F\u514D\u76F8\u5BF9\u8DEF\u5F84\u9519\u8BEF\n const search = rawUrl.startsWith('http')\n ? new URL(rawUrl).search\n : new URL(rawUrl, 'http://localhost').search;\n\n if (search) {\n const params = new URLSearchParams(search);\n const val = params.get(key);\n if (val != null) return val;\n }\n } catch {\n // ignore malformed URL\n }\n }\n return undefined;\n}\n\n@Injectable()\nexport class ParamResolverPipe implements PipeTransform {\n constructor(@Inject(ModuleRef) private moduleRef: ModuleRef) {}\n\n async transform(\n params: { req: AnyReq; resolver: ParamResolverBase<any> },\n metadata: any,\n ) {\n return params.resolver.resolve(params.req, this.moduleRef);\n }\n}\n\nconst usedParamResolverTokens = new Set<string>();\n\nexport abstract class ParamResolverBase<T, R extends AnyReq = AnyReq> {\n protected extraSwagger: ParamResolverSwaggerInfo[] = [];\n\n addExtraDecorator(\n dec: (\n extras?: ApiHeaderOptions | ApiQueryOptions,\n ) => ClassDecorator & MethodDecorator,\n token = Math.random().toString(36),\n ) {\n this.extraSwagger.push({\n token,\n swagger: dec,\n });\n return this;\n }\n\n // for override\n toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n return uniqBy([...this.extraSwagger, ...extras], (info) => info.token);\n }\n\n toApiPropertyDecorator(extras: ApiHeaderOptions | ApiQueryOptions = {}) {\n const swaggerInfo = uniqBy(this.toSwaggerInfo(), (info) => info.token);\n return (extras2: ApiHeaderOptions | ApiQueryOptions = {}) =>\n MergeClassOrMethodDecorators(\n swaggerInfo.map((info) =>\n ApplyDecoratorUnique(\n info.swagger({ ...extras, ...extras2 }),\n info.token,\n ),\n ),\n );\n }\n // for override\n abstract resolve(req: R, ref: ModuleRef): Awaitable<T>;\n\n toResolverFunction() {\n return async (req: R, ref: ModuleRef) => this.resolve(req, ref);\n }\n\n toParamDecorator() {\n const dec = createParamDecorator((_, ctx) => {\n const req = ctx.switchToHttp().getRequest<R>();\n return { req, resolver: this };\n });\n\n return (...pipes: (Type<PipeTransform> | PipeTransform)[]) =>\n dec(ParamResolverPipe, ...pipes);\n }\n\n // for override\n toString() {\n return 'ParamResolverBase';\n }\n\n toRequestScopedProvider() {\n const token = `PARAM_RESOLVER_${this.toString()}`;\n let useToken = token;\n\n if (usedParamResolverTokens.has(token)) {\n // avoid token conflict\n let suffix = 0;\n while (usedParamResolverTokens.has(`${token}__${suffix}`)) {\n suffix++;\n }\n useToken = `${token}__${suffix}`;\n }\n usedParamResolverTokens.add(useToken);\n\n const provider = createProvider(\n {\n provide: useToken,\n inject: [REQUEST, ModuleRef],\n scope: Scope.REQUEST,\n },\n this.toResolverFunction(),\n );\n\n const swaggerInfos = this.toSwaggerInfo();\n ResolverSwaggerMap.set(useToken, swaggerInfos);\n\n return {\n token: useToken,\n provider,\n inject: () => Inject(useToken),\n };\n }\n}\n\nexport type TypeFromParamResolver<P> =\n P extends ParamResolverBase<infer T, any> ? T : never;\n\nexport class ParamResolver<R extends AnyReq = AnyReq> extends ParamResolverBase<\n string | undefined,\n R\n> {\n private readonly info: ParamResolverInputStatic;\n private readonly dynamic: ParamResolverInputDynamic;\n constructor(input: ParamResolverInputDual) {\n super();\n if (typeof input === 'function') {\n this.dynamic = input;\n } else {\n this.info = { ...input };\n if (this.info.paramType === 'header') {\n this.info.paramName = this.info.paramName.toLowerCase();\n }\n }\n }\n\n private handleResolveValue(v: any) {\n if (this.info?.required && v == null) {\n throw new BlankReturnMessageDto(\n 400,\n `Required parameter '${this.info.paramName}' in ${this.info.paramType} is missing`,\n ).toException();\n }\n return v;\n }\n\n override resolve(req: R, ref: ModuleRef): Awaitable<string | undefined> {\n if (this.info) {\n if (this.info.paramType === 'header') {\n const name = this.info.paramName;\n let raw = getHeader(req, name);\n if (name === 'accept-language')\n raw = pickPrimaryFromAcceptLanguage(raw);\n return this.handleResolveValue(raw);\n }\n if (this.info.paramType === 'query') {\n return this.handleResolveValue(getQueryValue(req, this.info.paramName));\n }\n throw new Error(`Unsupported paramType: ${this.info.paramType}`);\n } else if (this.dynamic) {\n return this.dynamic(req, ref);\n }\n }\n\n override toString() {\n const suffix = this.info\n ? `${this.info.paramType.toUpperCase()}_${this.info.paramName}`\n : `DYNAMIC`;\n return `ParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n const swagger = (extras2: ApiHeaderOptions | ApiQueryOptions = {}) => {\n if (this.info) {\n const paramType = this.info.paramType;\n const apiOptions: ApiHeaderOptions = {\n name: this.info.paramName,\n ...ParamResolverCopiedFieldsFromSwagger.reduce((acc, field) => {\n if (field in this.info!) {\n (acc as any)[field] = this.info[field];\n }\n return acc;\n }, {} as ApiHeaderOptions),\n ...(this.info.openapiExtras || {}),\n ...extras2,\n };\n return paramType === 'header'\n ? ApiHeader(apiOptions)\n : paramType === 'query'\n ? ApiQuery({ type: 'string', ...apiOptions })\n : () => {};\n }\n return () => {};\n };\n\n return super.toSwaggerInfo([\n {\n swagger,\n token: this.toString(),\n },\n ...(this.info?.required\n ? [\n {\n swagger: () => ApiError(400, 'Invalid request parameters'),\n token: `__missing_required_400__`,\n },\n ]\n : []),\n ...extras,\n ]);\n }\n}\n\nexport class CombinedParamResolver<\n M extends Record<any, ParamResolverBase<any, AnyReq>>,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<\n {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n },\n R\n> {\n constructor(private resolvers: M) {\n super();\n }\n\n override async resolve(\n req: R,\n ref: ModuleRef,\n ): Promise<{ [K in keyof M]: TypeFromParamResolver<M[K]> }> {\n const result = {} as {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n };\n // use Promise.all\n await Promise.all(\n Object.entries(this.resolvers).map(async ([key, resolver]) => {\n result[key as keyof M] = (await resolver.resolve(\n req,\n ref,\n )) as TypeFromParamResolver<M[typeof key]>;\n }),\n );\n return result;\n }\n\n override toString() {\n const suffix = Object.entries(this.resolvers)\n .map(([key, resolver]) => `${key.toString()}_${resolver.toString()}`)\n .join('__');\n return `CombinedParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const combined = Object.values(this.resolvers).flatMap((resolver) =>\n resolver.toSwaggerInfo(),\n );\n return super.toSwaggerInfo([...combined, ...extras]);\n }\n}\n\nexport class TransformParamResolver<\n T,\n U,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<U, R> {\n constructor(\n private baseResolver: ParamResolverBase<T, R>,\n private transformFn: (value: T, ref: ModuleRef, req: R) => Awaitable<U>,\n ) {\n super();\n }\n\n override async resolve(req: R, ref: ModuleRef): Promise<U> {\n const baseValue = await this.baseResolver.resolve(req, ref);\n return this.transformFn(baseValue, ref, req);\n }\n\n override toString() {\n return `Transform_${this.baseResolver.toString()}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const info = this.baseResolver.toSwaggerInfo(extras);\n return super.toSwaggerInfo(info);\n }\n}\n\nexport type ParamResolverInput =\n | ParamResolverInputDual\n | ParamResolverBase<string>;\n\nexport const getParamResolver = (input: ParamResolverInput) => {\n if (input instanceof ParamResolverBase) {\n return input;\n }\n return new ParamResolver(input);\n};\n\n// @deprecated use ParamResolver directly\nexport const createResolver = (\n _options: ParamResolverInput,\n): ParamResolverInputDynamic => {\n return getParamResolver(_options).toResolverFunction();\n};\n\n// @deprecated use ParamResolver directly\nexport const ApiFromResolver = (\n _options: ParamResolverInput,\n extras: ApiHeaderOptions | ApiQueryOptions = {},\n): ClassDecorator & MethodDecorator => {\n return getParamResolver(_options).toApiPropertyDecorator(extras)();\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const InjectionTokenMap = new Map<InjectionToken, InjectionToken[]>();\n", "import { FactoryProvider } from '@nestjs/common';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { InjectionTokenMap } from './utility/injection-token-map';\n\ntype TypeFromToken<T> = T extends string | symbol\n ? any\n : T extends InjectionToken<infer U>\n ? U\n : any;\n\ntype TokensToTypes<A extends InjectionToken[]> = A extends []\n ? []\n : A extends [infer F, ...infer R]\n ? [TypeFromToken<F>, ...TokensToTypes<R extends InjectionToken[] ? R : []>]\n : [];\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TypedFactoryProvider<A extends InjectionToken[], R>\n extends FactoryProvider<R> {\n inject: A;\n useFactory: (...args: TokensToTypes<A>) => Awaitable<R>;\n}\n\nexport const createProvider = <const A extends InjectionToken[], R>(\n options: { inject: A } & Omit<FactoryProvider<R>, 'inject' | 'useFactory'>,\n factory: (...args: TokensToTypes<A>) => Awaitable<R>,\n): TypedFactoryProvider<A, R> => {\n if (options.inject) {\n InjectionTokenMap.set(options.provide, options.inject);\n }\n return {\n useFactory: factory,\n ...options,\n };\n};\n", "import { ParamResolverSwaggerInfo } from './param-resolver-swagger-info.type';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const ResolverSwaggerMap = new Map<\n InjectionToken,\n ParamResolverSwaggerInfo[]\n>();\n", "export const uniqBy = <T>(arr: T[], fn: (item: T) => any): T[] => {\n const seen = new Set<any>();\n const result: T[] = [];\n\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n};\n", "import { MetadataSetter, Reflector } from 'typed-reflector';\nimport { RequireTokenOptions } from './token.guard';\n\ninterface MetadataMap {\n requireTokenOptions: RequireTokenOptions;\n}\n\ninterface MetadataArrayMap {\n usedUniqueDecoratorIdentifiers: any;\n}\n\nexport const reflector = new Reflector<MetadataMap, MetadataArrayMap>();\nexport const Metadata = new MetadataSetter<MetadataMap, MetadataArrayMap>();\n", "import { AnyClass } from './class-types';\nimport { Metadata, reflector } from '../metadata';\n\nexport const ApplyDecoratorUnique = <\n D extends\n | ClassDecorator\n | MethodDecorator\n | PropertyDecorator\n | ParameterDecorator,\n>(\n dec: D,\n identifier: any,\n): D =>\n ((...args: Parameters<D>) => {\n const isClassRelated = args.length === 1 || args[1] === undefined; // class decorator or constructor parameter decorator\n const target = args[0] as any;\n const cls: AnyClass =\n typeof target === 'function' ? target : target.constructor;\n if (isClassRelated) {\n const used = reflector.getArray('usedUniqueDecoratorIdentifiers', cls);\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(cls);\n return (dec as any)(...args) as ReturnType<D>;\n } else {\n const keyName = args[1];\n const used = reflector.getProperty(\n 'usedUniqueDecoratorIdentifiers',\n cls as any,\n keyName,\n );\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(\n cls as any,\n keyName,\n );\n return (dec as any)(...args) as ReturnType<D>;\n }\n }) as D;\n", "import { Awaitable } from 'nfkit';\nimport { AnyReq, ParamResolverBase, TransformParamResolver } from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { parseBool } from '../utility';\nimport { BlankReturnMessageDto } from '../return-message';\n\nexport const createLambdaParamResolver =\n <T, U, Req extends AnyReq = AnyReq>(\n cb: (param: T, ref: ModuleRef, req: Req) => Awaitable<U>,\n ) =>\n (resolver: ParamResolverBase<T>) =>\n new TransformParamResolver<T, U, Req>(resolver, cb);\n\nexport const ParseIntParamResolver = createLambdaParamResolver((s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseInt(s, 10);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid integer parameter',\n ).toException();\n }\n return res;\n});\nexport const ParseFloatParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseFloat(s);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid float parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBoolParamResolver = createLambdaParamResolver(parseBool);\nexport const ParseDateParamResolver = createLambdaParamResolver(\n (s: number | string | Date) => {\n if (s == null) {\n return s;\n }\n const res = new Date(s);\n // check invalid date\n if (isNaN(res.getTime())) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid date parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBase64ParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n // support base64 or base64url\n const normalized = s.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n\n // \u5B57\u7B26\u96C6\u5408\u6821\u9A8C\uFF08base64 \u7684\u5408\u6CD5\u5B57\u7B26 + padding\uFF09\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(padded)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n const buf = Buffer.from(padded, 'base64');\n\n // round-trip \u6821\u9A8C\uFF1A\u7F16\u7801\u56DE\u53BB\uFF08\u53BB padding\uFF09\u8981\u4E00\u81F4\uFF08\u5BB9\u5FCD url/base64 \u5DEE\u5F02\u7684\u8BDD\u7528 normalized \u5BF9\u6BD4\uFF09\n const re = buf.toString('base64').replace(/=+$/g, '');\n const in0 = padded.replace(/=+$/g, '');\n if (re !== in0) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n return buf;\n },\n);\nexport const DefaultValueParamResolver = <T>(\n r: ParamResolverBase<T>,\n defaultValue: T,\n) =>\n createLambdaParamResolver<T, T>((value: T) =>\n value === undefined || value === null ? defaultValue : value,\n )(r);\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport {\n PARAMTYPES_METADATA,\n SELF_DECLARED_DEPS_METADATA,\n} from '@nestjs/common/constants';\nimport { InjectionTokenMap } from './injection-token-map';\n\nfunction asArray<T>(v: T | T[] | undefined): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getCtorDepsFromClass(cls: Function): InjectionToken[] {\n const paramTypes: any[] = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];\n\n // Nest \u5728\u6709 @Inject(token) \u65F6\uFF0C\u4F1A\u5199 SELF_DECLARED_DEPS_METADATA \u8986\u76D6\u67D0\u4E9B index\n const selfDeclared: Array<{ index: number; param: any }> =\n Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];\n\n const overrides = new Map<number, any>(\n selfDeclared.map((d) => [d.index, d.param]),\n );\n\n // \u6CE8\u610F\uFF1Ainterface/any \u4F1A\u53D8\u6210 Object\uFF0C\u901A\u5E38\u6CA1\u610F\u4E49\uFF0C\u8FC7\u6EE4\u6389\n return paramTypes\n .map((t, i) => overrides.get(i) ?? t)\n .filter((t) => t != null && t !== Object);\n}\n\n/**\n * \u4ECE\u67D0\u4E2A\u5165\u53E3 token \u51FA\u53D1\uFF1A\n * - \u6536\u96C6 map.get(token) \u7684\u503C\uFF08T \u6216 T[]\uFF09\n * - \u9012\u5F52\u904D\u5386 InjectionTokenMap.get(token)\n * - \u82E5 token \u662F class\uFF0C\u518D\u8865\u5145\u904D\u5386\u5176 ctor deps\n */\nexport const collectInfoFromInjectionToken = <T>(\n map: Map<InjectionToken, T | T[]>,\n token: InjectionToken,\n): T[] => {\n const visited = new Set<InjectionToken>();\n const out = new Set<T>();\n\n const dfs = (t: InjectionToken) => {\n if (t == null) return;\n if (visited.has(t)) return;\n visited.add(t);\n\n // 1) \u6536\u96C6\u5F53\u524D token \u5BF9\u5E94\u7684\u4FE1\u606F\n for (const v of asArray(map.get(t))) {\n out.add(v);\n }\n\n // 2) \u5148\u8D70\u663E\u5F0F\u4F9D\u8D56\u56FE\uFF08\u5982\u679C\u6709\uFF09\n const deps = InjectionTokenMap.get(t);\n if (deps?.length) {\n for (const d of deps) dfs(d);\n }\n\n // 3) \u5982\u679C token \u672C\u8EAB\u662F class\uFF08\u6216\u4F60\u62FF\u5230\u7684\u5C31\u662F class token\uFF09\uFF0C\u7528\u53CD\u5C04\u8865\u4E00\u5C42 ctor deps\n // \u6CE8\u610F\uFF1A\u8FD9\u53EA\u5728\u4F60\u6CA1\u6709\u628A \"string/symbol token -> metatype\" \u6620\u5C04\u5B58\u8D77\u6765\u65F6\u624D\u662F best-effort\n if (typeof t === 'function') {\n const ctorDeps = getCtorDepsFromClass(t);\n for (const d of ctorDeps) dfs(d);\n }\n };\n\n dfs(token);\n return Array.from(out);\n};\n\nexport const createCollectorFromInjectionToken =\n <T>(map: Map<InjectionToken, T | T[]>) =>\n (token: InjectionToken): T[] =>\n collectInfoFromInjectionToken<T>(map, token);\n", "import { createCollectorFromInjectionToken } from './collect-info-from-injection-token';\nimport { ResolverSwaggerMap } from './resolver-swagger-map';\n\nexport const swaggerInjectionCollector =\n createCollectorFromInjectionToken(ResolverSwaggerMap);\n", "import { createMutateInject } from '../utility';\nimport { swaggerInjectionCollector } from '../utility/swagger-injection-collector';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nexport const ApiInject = createMutateInject((token, cls) => {\n const swaggers = swaggerInjectionCollector(token);\n\n for (const swagger of swaggers) {\n ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);\n }\n\n return token;\n});\n", "import { Observable, takeUntil } from 'rxjs';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\nimport type { Request } from 'express';\nimport { createAbortSignalFromHttp } from './utility/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, Scope } from '@nestjs/common';\nimport { abortable, AbortableOpts } from 'nfkit';\nimport { ABORT_SIGNAL } from './abort-signal.provider';\nimport { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';\nimport { createProvider } from '../create-provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { createMutateInject } from '../utility/create-mutate-inject';\n\nconst tokenMemo = new Map<any, symbol>();\nexport const abortableToken = (token: InjectionToken) => {\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 const InjectAbortable = createMutateInject(abortableToken);\n\nexport function createAbortableProvider<T>(\n token: InjectionToken<T>,\n opts?: AbortableOpts,\n) {\n const provide = abortableToken(token);\n\n return createProvider(\n {\n provide,\n scope: Scope.REQUEST,\n inject: [ModuleRef, REQUEST, ABORT_SIGNAL],\n },\n async (moduleRef, req: Request, signal) => {\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, Scope, Type } from '@nestjs/common';\nimport { REQUEST } from '@nestjs/core';\nimport { createAbortSignalFromHttp } from '../utility/abort-http-signal';\nimport { createProvider } from '../create-provider';\n\nexport const ABORT_SIGNAL = Symbol(\n 'ABORT_SIGNAL',\n) as unknown as Type<AbortSignal>;\nexport const AbortSignalProvider = createProvider(\n {\n provide: ABORT_SIGNAL,\n scope: Scope.REQUEST,\n inject: [REQUEST],\n },\n createAbortSignalFromHttp,\n);\n\nexport const InjectAbortSignal = () => Inject(ABORT_SIGNAL);\n", "import { DynamicModule, Module } from '@nestjs/common';\nimport { createAbortableProvider } from './abortable.token';\nimport { AbortableOpts } from 'nfkit';\nimport { AbortSignalProvider } from './abort-signal.provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\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: InjectionToken[],\n options?: AbortableModuleOptions,\n ): DynamicModule {\n const providers = 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", "import {\n ConsoleLogger,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n} from '@nestjs/common';\nimport { I18nModuleOptionsToken } from './i18n-token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { ModuleRef } from '@nestjs/core';\nimport { ParamResolverBase } from '../resolver';\nimport { I18n } from 'nfkit';\nimport { I18nNesties } from './i18n.types';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\n\n@Injectable()\nexport class I18nService extends I18n<I18nNesties.Ex> {\n constructor(\n @Inject(I18nModuleOptionsToken)\n private i18nServiceOptions: I18nModuleOptions,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n @Inject(I18nParamResolverToken) private resolver: ParamResolverBase<string>,\n ) {\n super(i18nServiceOptions);\n }\n\n private _shadowMiddlewareMap = new Map<\n I18nNesties.Middleware,\n I18nNesties.Middleware\n >();\n\n private logger = new ConsoleLogger('I18nService');\n\n middleware(mw: I18nNesties.Middleware, prior = false) {\n const wrappedMw: I18nNesties.Middleware = async (\n locale,\n text,\n next,\n ctx,\n ) => {\n try {\n return await mw(locale, text, next, ctx);\n } catch (e) {\n if (e instanceof HttpException) {\n throw e;\n }\n this.logger.error(`Error in i18n middleware: ${e.message}`);\n return next();\n }\n };\n this._shadowMiddlewareMap.set(mw, wrappedMw);\n return super.middleware(wrappedMw, prior);\n }\n\n removeMiddleware(mw: I18nNesties.Middleware) {\n const wrappedMw = this._shadowMiddlewareMap.get(mw);\n if (wrappedMw) {\n this._shadowMiddlewareMap.delete(mw);\n return super.removeMiddleware(wrappedMw);\n }\n return this;\n }\n\n async getExactLocaleFromRequest(ctx: ExecutionContext) {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.getExactLocale(locale);\n }\n\n async translateRequest(ctx: ExecutionContext, obj: any): Promise<any> {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.translate(locale, obj, ctx);\n }\n}\n", "import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { I18nModuleOptions } from './i18n-module.options';\n\nconst { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =\n new ConfigurableModuleBuilder<I18nModuleOptions>()\n // .setExtras({}, (def) => ({ ...def, global: true }))\n .build();\nexport const I18nModuleOptionsToken = MODULE_OPTIONS_TOKEN;\nexport { ConfigurableModuleClass as I18nModuleBase };\n", "export const I18nParamResolverToken = 'I18N_PARAM_RESOLVER';\nexport const I18nParamResolverProviderToken = 'I18N_PARAM_RESOLVER_PROVIDER';\n", "import { Global, Module } from '@nestjs/common';\nimport { I18nModuleBase, I18nModuleOptionsToken } from './i18n-token';\nimport { I18nService } from './i18n.service';\nimport { LocalePipe } from './locale.pipe';\nimport { createProvider } from '../create-provider';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { getParamResolver } from '../resolver';\n\nconst providerFromOptions = createProvider(\n {\n provide: I18nParamResolverToken,\n inject: [I18nModuleOptionsToken],\n },\n (options: I18nModuleOptions) =>\n getParamResolver(\n options.resolver || {\n paramType: 'header',\n paramName: 'x-client-language',\n },\n ),\n);\n\n@Global()\n@Module({\n providers: [I18nService, LocalePipe, providerFromOptions],\n exports: [I18nService, LocalePipe],\n})\nexport class I18nModule extends I18nModuleBase {\n static forRoot(options: I18nModuleOptions) {}\n}\n", "import {\n ArgumentMetadata,\n createParamDecorator,\n ExecutionContext,\n Inject,\n Injectable,\n PipeTransform,\n} from '@nestjs/common';\nimport { I18nService } from './i18n.service';\nimport { createResolver, ParamResolverInput } from '../resolver';\nimport { ModuleRef } from '@nestjs/core';\n\ntype LocaleContext = {\n ctx: ExecutionContext;\n resolver?: ParamResolverInput;\n};\n\n@Injectable()\nexport class LocalePipe implements PipeTransform {\n constructor(\n @Inject(I18nService) private i18nService: I18nService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async transform(ctx: LocaleContext, metadata: ArgumentMetadata) {\n const resolver = ctx.resolver;\n if (resolver) {\n const _resolver = createResolver(resolver);\n const req = ctx.ctx.switchToHttp().getRequest();\n const locale = await _resolver(req, this.moduleRef);\n return this.i18nService.getExactLocale(locale);\n } else {\n return this.i18nService.getExactLocaleFromRequest(ctx.ctx);\n }\n }\n}\n\nconst _dec = createParamDecorator(\n (resolver: ParamResolverInput | undefined, ctx) => {\n return { ctx, resolver };\n },\n);\n\nexport const PutLocale = (resolver?: ParamResolverInput) =>\n _dec(resolver, LocalePipe);\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { ApiFromResolver } from '../resolver';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { UseInterceptors } from '@nestjs/common';\nimport { I18nInterceptor } from './i18n.interceptor';\n\nexport const createI18nDecorator = (options: I18nModuleOptions) => {\n return () =>\n MergeClassOrMethodDecorators([\n UseInterceptors(I18nInterceptor),\n ApiFromResolver(options.resolver, {\n description: 'Locale for internationalization',\n required: false,\n default: options.defaultLocale ?? options.locales[0],\n enum: options.locales,\n }),\n ]);\n};\n", "import {\n CallHandler,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n NestInterceptor,\n} from '@nestjs/common';\nimport { from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { I18nService } from './i18n.service';\n\n@Injectable()\nexport class I18nInterceptor implements NestInterceptor {\n constructor(@Inject(I18nService) private readonly i18nService: I18nService) {}\n\n intercept(context: ExecutionContext, next: CallHandler) {\n return next.handle().pipe(\n // \u6210\u529F\u8DEF\u5F84\uFF1A\u628A\u54CD\u5E94\u4F53\u4EA4\u7ED9 i18n \u505A\u5F02\u6B65\u7FFB\u8BD1\n mergeMap((data) => this.i18nService.translateRequest(context, data)),\n // \u9519\u8BEF\u8DEF\u5F84\uFF1A\u82E5\u662F HttpException\uFF0C\u628A\u5176 response \u7FFB\u8BD1\u540E\u518D\u629B\n catchError((err) => {\n if (err instanceof HttpException) {\n const status = err.getStatus();\n const resp = err.getResponse();\n return from(this.i18nService.translateRequest(context, resp)).pipe(\n mergeMap((translated) =>\n throwError(\n () => new HttpException(translated, status, { cause: err }),\n ),\n ),\n );\n }\n return throwError(() => err);\n }),\n );\n }\n}\n", "import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { I18nService } from './i18n.service';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class LocaleContext {\n constructor(\n @Inject(I18nParamResolverProviderToken) private localeInput: string,\n @Inject(I18nService)\n private i18nService: I18nService,\n ) {}\n\n locale = this.i18nService.getExactLocale(this.localeInput);\n\n translate<T>(v: T) {\n return this.i18nService.translate(this.locale, v);\n }\n}\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { createI18nDecorator } from './i18n-decorator';\nimport { I18nModule } from './i18n.module';\nimport { getParamResolver, ParamResolverInput } from '../resolver';\nimport { LocaleContext } from './locale.context';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { createProvider } from '../create-provider';\n\nexport const createI18n = (\n options: Omit<I18nModuleOptions, 'resolver'> & {\n resolver?: ParamResolverInput;\n },\n) => {\n if (!options.resolver) {\n options.resolver = {\n paramType: 'header',\n paramName: 'x-client-language',\n };\n }\n const resolver = getParamResolver(options.resolver);\n const paramProvider = resolver.toRequestScopedProvider();\n const module = I18nModule.register(options as I18nModuleOptions);\n module.providers ??= [];\n module.exports ??= [];\n module.providers.push(\n paramProvider.provider,\n LocaleContext,\n // re-exports the resolved param value for LocaleContext injection\n createProvider(\n {\n provide: I18nParamResolverProviderToken,\n inject: [paramProvider.token],\n },\n (s) => s,\n ),\n );\n module.exports.push(paramProvider.provider, LocaleContext);\n return {\n UseI18n: createI18nDecorator(options as I18nModuleOptions),\n I18nModule: module,\n I18nParamResolver: resolver,\n I18nParamResolverProvider: paramProvider,\n };\n};\n", "import { createI18nLookupMiddleware } from 'nfkit';\nimport { I18nNesties } from '../i18n.types';\n\nexport const I18nLookupMiddleware =\n createI18nLookupMiddleware<I18nNesties.Ex>();\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ApiProperty", "ApiProperty", "Inject", "Injectable", "ApiHeader", "Inject", "Inject", "ModuleRef", "Injectable", "Inject", "ModuleRef", "ApiHeader", "createParamDecorator", "createParamDecorator", "Scope", "Inject", "Scope", "REQUEST", "Scope", "REQUEST", "Inject", "ModuleRef", "REQUEST", "Scope", "ModuleRef", "REQUEST", "HttpException", "Inject", "Injectable", "ModuleRef", "HttpException", "Injectable", "Inject", "ModuleRef", "Module", "createParamDecorator", "Inject", "Injectable", "ModuleRef", "Injectable", "Inject", "ModuleRef", "createParamDecorator", "Module", "HttpException", "Inject", "Injectable", "HttpException", "Injectable", "Inject", "Inject", "Injectable", "Scope", "Injectable", "Scope", "Inject"]
|
|
3
|
+
"sources": ["../src/insert-field.ts", "../src/utility/rename-class.ts", "../src/utility/class-types.ts", "../src/utility/get-api-property.ts", "../src/utility/create-mutate-inject.ts", "../src/utility/parse-bool.ts", "../src/utility/injection-token-map.ts", "../src/merge.ts", "../src/return-message.ts", "../src/openapi.ts", "../src/pipe.ts", "../src/token.guard.ts", "../src/resolver/resolver.ts", "../src/create-provider.ts", "../src/utility/resolver-swagger-map.ts", "../src/utility/uniq-by.ts", "../src/metadata.ts", "../src/utility/apply-decorator-unique.ts", "../src/utility/collect-info-from-injection-token.ts", "../src/utility/swagger-injection-collector.ts", "../src/resolver/api-inject.ts", "../src/resolver/lambda.ts", "../src/abort-utils.ts", "../src/utility/abort-http-signal.ts", "../src/abortable-module/abortable.token.ts", "../src/abortable-module/abort-signal.provider.ts", "../src/abortable-module/abortable.module.ts", "../src/i18n-module/i18n.service.ts", "../src/i18n-module/i18n-token.ts", "../src/i18n-module/i18n-param-resolver.token.ts", "../src/i18n-module/i18n.module.ts", "../src/i18n-module/locale.pipe.ts", "../src/i18n-module/i18n-decorator.ts", "../src/i18n-module/i18n.interceptor.ts", "../src/i18n-module/locale.context.ts", "../src/i18n-module/i18n-factory.ts", "../src/i18n-module/middlewares/lookup.ts"],
|
|
4
|
+
"sourcesContent": ["import { ApiProperty, ApiPropertyOptions } from '@nestjs/swagger';\nimport { RenameClass } from './utility';\nimport {\n AnyClass,\n ClassOrArray,\n ParamsFromClass,\n ParseType,\n TypeFromClass,\n} from './utility';\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 return RenameClass(extendedCl, newName || cl.name);\n}\n", "export function RenameClass<T>(cls: T, name: string) {\n Object.defineProperty(cls, 'name', { value: name });\n return cls;\n}\n", "export 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", "import { DECORATORS } from '@nestjs/swagger/dist/constants';\nimport { ApiPropertyOptions } from '@nestjs/swagger';\nimport { AnyClass } from './class-types';\n\nexport const getApiProperty = (\n cls: AnyClass,\n key: string,\n): ApiPropertyOptions => {\n let proto = cls.prototype;\n\n while (proto && proto !== Object.prototype) {\n const meta = Reflect.getMetadata(\n DECORATORS.API_MODEL_PROPERTIES,\n proto,\n key,\n );\n\n if (meta) return meta;\n\n proto = Object.getPrototypeOf(proto);\n }\n\n return {};\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { Inject } from '@nestjs/common';\nimport { AnyClass } from './class-types';\n\nexport type InjectPos =\n | { type: 'param'; index: number }\n | { type: 'property'; propertyKey: string | symbol };\n\nexport const createMutateInject =\n (\n tokenResolver: (\n t: InjectionToken,\n cls: AnyClass,\n pos: InjectPos,\n ) => InjectionToken,\n ) =>\n (token?: InjectionToken): ParameterDecorator & PropertyDecorator =>\n (\n target: any,\n propertyKey: string | symbol | undefined,\n parameterIndex?: number,\n ) => {\n const cls: AnyClass =\n typeof target === 'function'\n ? (target as AnyClass)\n : (target.constructor as AnyClass);\n\n let actualToken = token;\n\n if (!actualToken) {\n if (parameterIndex != null) {\n // parameter decorator (ctor or method)\n const paramTypes: any[] =\n propertyKey == null\n ? Reflect.getMetadata('design:paramtypes', target) || []\n : Reflect.getMetadata('design:paramtypes', target, propertyKey) ||\n [];\n actualToken = paramTypes[parameterIndex];\n } else {\n // property decorator\n actualToken = Reflect.getMetadata('design:type', target, propertyKey!);\n }\n\n if (!actualToken) {\n const where =\n parameterIndex != null\n ? `${String(propertyKey ?? 'constructor')}[${parameterIndex}]`\n : String(propertyKey);\n throw new Error(\n `Cannot infer type from metadata: ${cls?.name ?? 'UnknownClass'}.${where}`,\n );\n }\n }\n\n const pos: InjectPos =\n parameterIndex != null\n ? { type: 'param', index: parameterIndex }\n : { type: 'property', propertyKey: propertyKey! };\n\n Inject(tokenResolver(actualToken, cls, pos))(\n target,\n propertyKey as any,\n parameterIndex as any,\n );\n };\n", "export const parseBool = (value: any): boolean => {\n const trueValues = ['true', '1', 'yes', 'on', true, 1];\n const falseValues = ['false', '0', 'no', 'off', false, 0];\n if (trueValues.indexOf(value) !== -1) return true;\n if (falseValues.indexOf(value) !== -1) return false;\n if (!!value) {\n return true;\n }\n return undefined;\n};\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const InjectionTokenMap = new Map<InjectionToken, InjectionToken[]>();\n\nexport const addInjectionTokenMapping = (\n from: InjectionToken,\n to: InjectionToken | InjectionToken[],\n) => {\n if (!from || !to) {\n return;\n }\n\n if (!InjectionTokenMap.has(from)) {\n InjectionTokenMap.set(from, []);\n }\n const toArray = Array.isArray(to) ? to : [to];\n InjectionTokenMap.get(from)?.push(...toArray);\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 { InsertField } from './insert-field';\nimport {\n AnyClass,\n ClassOrArray,\n getClassFromClassOrArray,\n ParseType,\n} from './utility';\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 './utility';\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';\nimport {\n ApiFromResolver,\n createResolver,\n ParamResolverInput,\n ParamResolverInputDynamic,\n} from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { Metadata, reflector } from './metadata';\n\nexport interface RequireTokenOptions {\n resolver?: ParamResolverInput;\n tokenSource?: string | ParamResolverInputDynamic;\n errorCode?: number;\n}\n\nconst defaultHeaderName = 'x-server-token';\nconst defaultConfigName = 'SERVER_TOKEN';\nconst defaultErrorCode = 401;\n\n@Injectable()\nexport class TokenGuard implements CanActivate {\n constructor(\n @Inject(ConfigService) private config: ConfigService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async canActivate(context: ExecutionContext) {\n const controller = context.getClass();\n const handlerName = context.getHandler()?.name;\n let config = {} as RequireTokenOptions;\n if (controller) {\n if (handlerName) {\n config =\n reflector.get('requireTokenOptions', controller, handlerName) || {};\n } else {\n config = reflector.get('requireTokenOptions', controller) || {};\n }\n }\n const resolver = createResolver(\n config.resolver || { paramType: 'header', paramName: defaultHeaderName },\n );\n const tokenSource = config.tokenSource || defaultConfigName;\n const req = context.switchToHttp().getRequest();\n const [tokenFromClient, tokenFromConfig] = await Promise.all([\n resolver(req, this.moduleRef),\n typeof tokenSource === 'function'\n ? tokenSource(req, this.moduleRef)\n : this.config.get<string>(tokenSource),\n ]);\n if (tokenFromConfig && tokenFromConfig !== tokenFromClient) {\n throw new BlankReturnMessageDto(\n config.errorCode || defaultErrorCode,\n 'Unauthorized',\n ).toException();\n }\n return true;\n }\n}\n\nexport const RequireToken = (options: RequireTokenOptions = {}) => {\n const swaggerDec = options.resolver\n ? ApiFromResolver(options.resolver, {\n description: 'Server token',\n required: false,\n })\n : ApiHeader({\n name: defaultHeaderName,\n description: 'Server token',\n required: false,\n });\n return MergeClassOrMethodDecorators([\n UseGuards(TokenGuard),\n swaggerDec,\n ApiError(\n options.errorCode || defaultErrorCode,\n 'Incorrect server token provided',\n ),\n ...(options ? [Metadata.set('requireTokenOptions', options)] : []),\n ]);\n};\n", "import type { Request } from 'express';\nimport { Awaitable } from '../utility';\nimport {\n createParamDecorator,\n Inject,\n Injectable,\n PipeTransform,\n Scope,\n} from '@nestjs/common';\nimport { ModuleRef, REQUEST } from '@nestjs/core';\nimport {\n ApiHeader,\n ApiHeaderOptions,\n ApiQuery,\n ApiQueryOptions,\n} from '@nestjs/swagger';\nimport { createProvider } from '../create-provider';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { Type } from '@nestjs/common/interfaces';\nimport { ParamResolverSwaggerInfo } from '../utility/param-resolver-swagger-info.type';\nimport { ResolverSwaggerMap } from '../utility/resolver-swagger-map';\nimport { BlankReturnMessageDto } from '../return-message';\nimport { ApiError } from '../openapi';\nimport { uniqBy } from '../utility/uniq-by';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\nimport { ApiInject } from './api-inject';\n\nconst ParamResolverCopiedFieldsFromSwagger = [\n 'required',\n 'description',\n 'example',\n 'examples',\n] as const;\n\nexport interface ParamResolverInputStatic\n extends Pick<\n ApiHeaderOptions | ApiQueryOptions,\n (typeof ParamResolverCopiedFieldsFromSwagger)[number]\n > {\n paramType: 'header' | 'query';\n paramName: string;\n openapiExtras?: ApiHeaderOptions | ApiQueryOptions;\n}\n\nexport type AnyReq = Request & {\n headers?: Record<string, any>;\n query?: any;\n url?: string;\n originalUrl?: string;\n getHeader?: (name: string) => any;\n get?: (name: string) => any;\n header?: (name: string) => any;\n};\n\nexport type ParamResolverInputDynamic<R = AnyReq> = (\n req: R,\n ref: ModuleRef,\n) => Awaitable<string>;\n\nexport type ParamResolverInputDual =\n | ParamResolverInputStatic\n | ParamResolverInputDynamic;\n\nconst coerceToString = (v: any): string | undefined => {\n if (v == null) return undefined; // null / undefined\n if (v === false) return undefined; // \uD83D\uDC48 \u5173\u952E\uFF1A\u628A false \u5F53\u4F5C\u672A\u547D\u4E2D\n if (Array.isArray(v)) return v.length ? coerceToString(v[0]) : undefined;\n if (typeof v === 'string') return v;\n if (typeof v === 'number') return String(v);\n // \u5176\u4ED6\u7C7B\u578B\uFF08true / object / function / symbol / bigint\uFF09\u90FD\u4E0D\u63A5\u53D7\n return undefined;\n};\n\nconst getHeader = (req: AnyReq, name: string): string | undefined => {\n // \u5148\u8D70\u65B9\u6CD5\uFF08express/\u90E8\u5206\u9002\u914D\u5668\uFF09\n const viaMethod =\n (typeof req.getHeader === 'function' && req.getHeader(name)) ||\n (typeof (req as any).header === 'function' && (req as any).header(name)) ||\n (typeof (req as any).get === 'function' && (req as any).get(name));\n\n if (viaMethod) {\n return coerceToString(viaMethod);\n }\n\n // \u518D\u67E5 headers\uFF0C\u5927\u5C0F\u5199\u65E0\u5173\n const n = name.toLowerCase();\n const headers = req.headers ?? {};\n if (n in headers) return coerceToString((headers as any)[n]);\n\n const hit = Object.entries(headers).find(([k]) => k.toLowerCase() === n)?.[1];\n return coerceToString(hit);\n};\n\nconst pickPrimaryFromAcceptLanguage = (v?: string): string | undefined => {\n if (!v) return undefined;\n const first = v.split(',')[0]?.trim();\n return first?.split(';')[0]?.trim() || first;\n};\n\nfunction getQueryValue(req: AnyReq, key: string): string | undefined {\n // 1. \u666E\u901A\u5BF9\u8C61\u6A21\u5F0F\uFF08Express/Fastify \u5DF2\u89E3\u6790\uFF09\n const q = req.query;\n if (q && typeof q === 'object' && !('raw' in q)) {\n const v = (q as any)[key];\n if (v != null) return coerceToString(v);\n }\n\n // 2. fallback\uFF1A\u89E3\u6790 URLSearchParams\n const rawUrl = req.originalUrl ?? req.url;\n if (typeof rawUrl === 'string' && rawUrl.includes('?')) {\n try {\n // \u7528 http://localhost \u5360\u4F4D base\uFF0C\u907F\u514D\u76F8\u5BF9\u8DEF\u5F84\u9519\u8BEF\n const search = rawUrl.startsWith('http')\n ? new URL(rawUrl).search\n : new URL(rawUrl, 'http://localhost').search;\n\n if (search) {\n const params = new URLSearchParams(search);\n const val = params.get(key);\n if (val != null) return val;\n }\n } catch {\n // ignore malformed URL\n }\n }\n return undefined;\n}\n\n@Injectable()\nexport class ParamResolverPipe implements PipeTransform {\n constructor(@Inject(ModuleRef) private moduleRef: ModuleRef) {}\n\n async transform(\n params: { req: AnyReq; resolver: ParamResolverBase<any> },\n metadata: any,\n ) {\n return params.resolver.resolve(params.req, this.moduleRef);\n }\n}\n\nconst usedParamResolverTokens = new Set<string>();\n\nexport abstract class ParamResolverBase<T, R extends AnyReq = AnyReq> {\n protected extraSwagger: ParamResolverSwaggerInfo[] = [];\n\n addExtraDecorator(\n dec: (\n extras?: ApiHeaderOptions | ApiQueryOptions,\n ) => ClassDecorator & MethodDecorator,\n token = Math.random().toString(36),\n ) {\n this.extraSwagger.push({\n token,\n swagger: dec,\n });\n return this;\n }\n\n // for override\n toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n return uniqBy([...this.extraSwagger, ...extras], (info) => info.token);\n }\n\n toApiPropertyDecorator(extras: ApiHeaderOptions | ApiQueryOptions = {}) {\n const swaggerInfo = uniqBy(this.toSwaggerInfo(), (info) => info.token);\n return (extras2: ApiHeaderOptions | ApiQueryOptions = {}) =>\n MergeClassOrMethodDecorators(\n swaggerInfo.map((info) =>\n ApplyDecoratorUnique(\n info.swagger({ ...extras, ...extras2 }),\n info.token,\n ),\n ),\n );\n }\n // for override\n abstract resolve(req: R, ref: ModuleRef): Awaitable<T>;\n\n toResolverFunction() {\n return async (req: R, ref: ModuleRef) => this.resolve(req, ref);\n }\n\n toParamDecorator() {\n const dec = createParamDecorator((_, ctx) => {\n const req = ctx.switchToHttp().getRequest<R>();\n return { req, resolver: this };\n });\n\n return (...pipes: (Type<PipeTransform> | PipeTransform)[]) =>\n dec(ParamResolverPipe, ...pipes);\n }\n\n // for override\n toString() {\n return 'ParamResolverBase';\n }\n\n toRequestScopedProvider() {\n const token = `PARAM_RESOLVER_${this.toString()}`;\n let useToken = token;\n\n if (usedParamResolverTokens.has(token)) {\n // avoid token conflict\n let suffix = 0;\n while (usedParamResolverTokens.has(`${token}__${suffix}`)) {\n suffix++;\n }\n useToken = `${token}__${suffix}`;\n }\n usedParamResolverTokens.add(useToken);\n\n const provider = createProvider(\n {\n provide: useToken,\n inject: [REQUEST, ModuleRef],\n scope: Scope.REQUEST,\n },\n this.toResolverFunction(),\n );\n\n const swaggerInfos = this.toSwaggerInfo();\n ResolverSwaggerMap.set(useToken, swaggerInfos);\n\n return {\n token: useToken,\n provider,\n inject: () => ApiInject(useToken),\n };\n }\n}\n\nexport type TypeFromParamResolver<P> =\n P extends ParamResolverBase<infer T, any> ? T : never;\n\nexport class ParamResolver<R extends AnyReq = AnyReq> extends ParamResolverBase<\n string | undefined,\n R\n> {\n private readonly info: ParamResolverInputStatic;\n private readonly dynamic: ParamResolverInputDynamic;\n constructor(input: ParamResolverInputDual) {\n super();\n if (typeof input === 'function') {\n this.dynamic = input;\n } else {\n this.info = { ...input };\n if (this.info.paramType === 'header') {\n this.info.paramName = this.info.paramName.toLowerCase();\n }\n }\n }\n\n private handleResolveValue(v: any) {\n if (this.info?.required && v == null) {\n throw new BlankReturnMessageDto(\n 400,\n `Required parameter '${this.info.paramName}' in ${this.info.paramType} is missing`,\n ).toException();\n }\n return v;\n }\n\n override resolve(req: R, ref: ModuleRef): Awaitable<string | undefined> {\n if (this.info) {\n if (this.info.paramType === 'header') {\n const name = this.info.paramName;\n let raw = getHeader(req, name);\n if (name === 'accept-language')\n raw = pickPrimaryFromAcceptLanguage(raw);\n return this.handleResolveValue(raw);\n }\n if (this.info.paramType === 'query') {\n return this.handleResolveValue(getQueryValue(req, this.info.paramName));\n }\n throw new Error(`Unsupported paramType: ${this.info.paramType}`);\n } else if (this.dynamic) {\n return this.dynamic(req, ref);\n }\n }\n\n override toString() {\n const suffix = this.info\n ? `${this.info.paramType.toUpperCase()}_${this.info.paramName}`\n : `DYNAMIC`;\n return `ParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(\n extras: ParamResolverSwaggerInfo[] = [],\n ): ParamResolverSwaggerInfo[] {\n const swagger = (extras2: ApiHeaderOptions | ApiQueryOptions = {}) => {\n if (this.info) {\n const paramType = this.info.paramType;\n const apiOptions: ApiHeaderOptions = {\n name: this.info.paramName,\n ...ParamResolverCopiedFieldsFromSwagger.reduce((acc, field) => {\n if (field in this.info!) {\n (acc as any)[field] = this.info[field];\n }\n return acc;\n }, {} as ApiHeaderOptions),\n ...(this.info.openapiExtras || {}),\n ...extras2,\n };\n return paramType === 'header'\n ? ApiHeader(apiOptions)\n : paramType === 'query'\n ? ApiQuery({ type: 'string', ...apiOptions })\n : () => {};\n }\n return () => {};\n };\n\n return super.toSwaggerInfo([\n {\n swagger,\n token: this.toString(),\n },\n ...(this.info?.required\n ? [\n {\n swagger: () => ApiError(400, 'Invalid request parameters'),\n token: `__missing_required_400__`,\n },\n ]\n : []),\n ...extras,\n ]);\n }\n}\n\nexport class CombinedParamResolver<\n M extends Record<any, ParamResolverBase<any, AnyReq>>,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<\n {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n },\n R\n> {\n constructor(private resolvers: M) {\n super();\n }\n\n override async resolve(\n req: R,\n ref: ModuleRef,\n ): Promise<{ [K in keyof M]: TypeFromParamResolver<M[K]> }> {\n const result = {} as {\n [K in keyof M]: TypeFromParamResolver<M[K]>;\n };\n // use Promise.all\n await Promise.all(\n Object.entries(this.resolvers).map(async ([key, resolver]) => {\n result[key as keyof M] = (await resolver.resolve(\n req,\n ref,\n )) as TypeFromParamResolver<M[typeof key]>;\n }),\n );\n return result;\n }\n\n override toString() {\n const suffix = Object.entries(this.resolvers)\n .map(([key, resolver]) => `${key.toString()}_${resolver.toString()}`)\n .join('__');\n return `CombinedParamResolver_${suffix}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const combined = Object.values(this.resolvers).flatMap((resolver) =>\n resolver.toSwaggerInfo(),\n );\n return super.toSwaggerInfo([...combined, ...extras]);\n }\n}\n\nexport class TransformParamResolver<\n T,\n U,\n R extends AnyReq = AnyReq,\n> extends ParamResolverBase<U, R> {\n constructor(\n private baseResolver: ParamResolverBase<T, R>,\n private transformFn: (value: T, ref: ModuleRef, req: R) => Awaitable<U>,\n ) {\n super();\n }\n\n override async resolve(req: R, ref: ModuleRef): Promise<U> {\n const baseValue = await this.baseResolver.resolve(req, ref);\n return this.transformFn(baseValue, ref, req);\n }\n\n override toString() {\n return `Transform_${this.baseResolver.toString()}`;\n }\n\n override toSwaggerInfo(extras: ParamResolverSwaggerInfo[] = []) {\n const info = this.baseResolver.toSwaggerInfo(extras);\n return super.toSwaggerInfo(info);\n }\n}\n\nexport type ParamResolverInput =\n | ParamResolverInputDual\n | ParamResolverBase<string>;\n\nexport const getParamResolver = (input: ParamResolverInput) => {\n if (input instanceof ParamResolverBase) {\n return input;\n }\n return new ParamResolver(input);\n};\n\n// @deprecated use ParamResolver directly\nexport const createResolver = (\n _options: ParamResolverInput,\n): ParamResolverInputDynamic => {\n return getParamResolver(_options).toResolverFunction();\n};\n\n// @deprecated use ParamResolver directly\nexport const ApiFromResolver = (\n _options: ParamResolverInput,\n extras: ApiHeaderOptions | ApiQueryOptions = {},\n): ClassDecorator & MethodDecorator => {\n return getParamResolver(_options).toApiPropertyDecorator(extras)();\n};\n", "import { FactoryProvider } from '@nestjs/common';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { addInjectionTokenMapping } from './utility/injection-token-map';\n\ntype TypeFromToken<T> = T extends string | symbol\n ? any\n : T extends InjectionToken<infer U>\n ? U\n : any;\n\ntype TokensToTypes<A extends InjectionToken[]> = A extends []\n ? []\n : A extends [infer F, ...infer R]\n ? [TypeFromToken<F>, ...TokensToTypes<R extends InjectionToken[] ? R : []>]\n : [];\n\ntype Awaitable<T> = T | Promise<T>;\n\nexport interface TypedFactoryProvider<A extends InjectionToken[], R>\n extends FactoryProvider<R> {\n inject: A;\n useFactory: (...args: TokensToTypes<A>) => Awaitable<R>;\n}\n\nexport const createProvider = <const A extends InjectionToken[], R>(\n options: { inject: A } & Omit<FactoryProvider<R>, 'inject' | 'useFactory'>,\n factory: (...args: TokensToTypes<A>) => Awaitable<R>,\n): TypedFactoryProvider<A, R> => {\n if (options.inject) {\n addInjectionTokenMapping(options.provide, options.inject);\n }\n return {\n useFactory: factory,\n ...options,\n };\n};\n", "import { ParamResolverSwaggerInfo } from './param-resolver-swagger-info.type';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\n\nexport const ResolverSwaggerMap = new Map<\n InjectionToken,\n ParamResolverSwaggerInfo[]\n>();\n", "export const uniqBy = <T>(arr: T[], fn: (item: T) => any): T[] => {\n const seen = new Set<any>();\n const result: T[] = [];\n\n for (const item of arr) {\n const key = fn(item);\n if (!seen.has(key)) {\n seen.add(key);\n result.push(item);\n }\n }\n\n return result;\n};\n", "import { MetadataSetter, Reflector } from 'typed-reflector';\nimport { RequireTokenOptions } from './token.guard';\n\ninterface MetadataMap {\n requireTokenOptions: RequireTokenOptions;\n}\n\ninterface MetadataArrayMap {\n usedUniqueDecoratorIdentifiers: any;\n}\n\nexport const reflector = new Reflector<MetadataMap, MetadataArrayMap>();\nexport const Metadata = new MetadataSetter<MetadataMap, MetadataArrayMap>();\n", "import { AnyClass } from './class-types';\nimport { Metadata, reflector } from '../metadata';\n\nexport const ApplyDecoratorUnique = <\n D extends\n | ClassDecorator\n | MethodDecorator\n | PropertyDecorator\n | ParameterDecorator,\n>(\n dec: D,\n identifier: any,\n): D =>\n ((...args: Parameters<D>) => {\n const isClassRelated = args.length === 1 || args[1] === undefined; // class decorator or constructor parameter decorator\n const target = args[0] as any;\n const cls: AnyClass =\n typeof target === 'function' ? target : target.constructor;\n if (isClassRelated) {\n const used = reflector.getArray('usedUniqueDecoratorIdentifiers', cls);\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(cls);\n return (dec as any)(...args) as ReturnType<D>;\n } else {\n const keyName = args[1];\n const used = reflector.getProperty(\n 'usedUniqueDecoratorIdentifiers',\n cls as any,\n keyName,\n );\n if (used.includes(identifier)) {\n return;\n }\n Metadata.appendUnique('usedUniqueDecoratorIdentifiers', identifier)(\n cls as any,\n keyName,\n );\n return (dec as any)(...args) as ReturnType<D>;\n }\n }) as D;\n", "import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport {\n PARAMTYPES_METADATA,\n SELF_DECLARED_DEPS_METADATA,\n} from '@nestjs/common/constants';\nimport { InjectionTokenMap } from './injection-token-map';\n\nfunction asArray<T>(v: T | T[] | undefined): T[] {\n if (v == null) return [];\n return Array.isArray(v) ? v : [v];\n}\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nfunction getCtorDepsFromClass(cls: Function): InjectionToken[] {\n const paramTypes: any[] = Reflect.getMetadata(PARAMTYPES_METADATA, cls) ?? [];\n\n // Nest \u5728\u6709 @Inject(token) \u65F6\uFF0C\u4F1A\u5199 SELF_DECLARED_DEPS_METADATA \u8986\u76D6\u67D0\u4E9B index\n const selfDeclared: Array<{ index: number; param: any }> =\n Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, cls) ?? [];\n\n const overrides = new Map<number, any>(\n selfDeclared.map((d) => [d.index, d.param]),\n );\n\n // \u6CE8\u610F\uFF1Ainterface/any \u4F1A\u53D8\u6210 Object\uFF0C\u901A\u5E38\u6CA1\u610F\u4E49\uFF0C\u8FC7\u6EE4\u6389\n return paramTypes\n .map((t, i) => overrides.get(i) ?? t)\n .filter((t) => t != null && t !== Object);\n}\n\n/**\n * \u4ECE\u67D0\u4E2A\u5165\u53E3 token \u51FA\u53D1\uFF1A\n * - \u6536\u96C6 map.get(token) \u7684\u503C\uFF08T \u6216 T[]\uFF09\n * - \u9012\u5F52\u904D\u5386 InjectionTokenMap.get(token)\n * - \u82E5 token \u662F class\uFF0C\u518D\u8865\u5145\u904D\u5386\u5176 ctor deps\n */\nexport const collectInfoFromInjectionToken = <T>(\n map: Map<InjectionToken, T | T[]>,\n token: InjectionToken,\n): T[] => {\n const visited = new Set<InjectionToken>();\n const out = new Set<T>();\n\n const dfs = (t: InjectionToken) => {\n if (t == null) return;\n if (visited.has(t)) return;\n visited.add(t);\n\n // 1) \u6536\u96C6\u5F53\u524D token \u5BF9\u5E94\u7684\u4FE1\u606F\n for (const v of asArray(map.get(t))) {\n out.add(v);\n }\n\n // 2) \u5148\u8D70\u663E\u5F0F\u4F9D\u8D56\u56FE\uFF08\u5982\u679C\u6709\uFF09\n const deps = InjectionTokenMap.get(t);\n if (deps?.length) {\n for (const d of deps) dfs(d);\n }\n\n // 3) \u5982\u679C token \u672C\u8EAB\u662F class\uFF08\u6216\u4F60\u62FF\u5230\u7684\u5C31\u662F class token\uFF09\uFF0C\u7528\u53CD\u5C04\u8865\u4E00\u5C42 ctor deps\n // \u6CE8\u610F\uFF1A\u8FD9\u53EA\u5728\u4F60\u6CA1\u6709\u628A \"string/symbol token -> metatype\" \u6620\u5C04\u5B58\u8D77\u6765\u65F6\u624D\u662F best-effort\n if (typeof t === 'function') {\n const ctorDeps = getCtorDepsFromClass(t);\n for (const d of ctorDeps) dfs(d);\n }\n };\n\n dfs(token);\n return Array.from(out);\n};\n\nexport const createCollectorFromInjectionToken =\n <T>(map: Map<InjectionToken, T | T[]>) =>\n (token: InjectionToken): T[] =>\n collectInfoFromInjectionToken<T>(map, token);\n", "import { createCollectorFromInjectionToken } from './collect-info-from-injection-token';\nimport { ResolverSwaggerMap } from './resolver-swagger-map';\n\nexport const swaggerInjectionCollector =\n createCollectorFromInjectionToken(ResolverSwaggerMap);\n", "import { createMutateInject } from '../utility';\nimport { swaggerInjectionCollector } from '../utility/swagger-injection-collector';\nimport { ApplyDecoratorUnique } from '../utility/apply-decorator-unique';\n\nexport const ApiInject = createMutateInject((token, cls) => {\n const swaggers = swaggerInjectionCollector(token);\n\n for (const swagger of swaggers) {\n ApplyDecoratorUnique(swagger.swagger(), swagger.token)(cls);\n }\n\n return token;\n});\n", "import { Awaitable } from 'nfkit';\nimport { AnyReq, ParamResolverBase, TransformParamResolver } from './resolver';\nimport { ModuleRef } from '@nestjs/core';\nimport { parseBool } from '../utility';\nimport { BlankReturnMessageDto } from '../return-message';\n\nexport const createLambdaParamResolver =\n <T, U, Req extends AnyReq = AnyReq>(\n cb: (param: T, ref: ModuleRef, req: Req) => Awaitable<U>,\n ) =>\n (resolver: ParamResolverBase<T>) =>\n new TransformParamResolver<T, U, Req>(resolver, cb);\n\nexport const ParseIntParamResolver = createLambdaParamResolver((s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseInt(s, 10);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid integer parameter',\n ).toException();\n }\n return res;\n});\nexport const ParseFloatParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n const res = parseFloat(s);\n if (isNaN(res)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid float parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBoolParamResolver = createLambdaParamResolver(parseBool);\nexport const ParseDateParamResolver = createLambdaParamResolver(\n (s: number | string | Date) => {\n if (s == null) {\n return s;\n }\n const res = new Date(s);\n // check invalid date\n if (isNaN(res.getTime())) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid date parameter',\n ).toException();\n }\n return res;\n },\n);\nexport const ParseBase64ParamResolver = createLambdaParamResolver(\n (s: string) => {\n if (s == null) {\n return s;\n }\n // support base64 or base64url\n const normalized = s.replace(/-/g, '+').replace(/_/g, '/');\n const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);\n\n // \u5B57\u7B26\u96C6\u5408\u6821\u9A8C\uFF08base64 \u7684\u5408\u6CD5\u5B57\u7B26 + padding\uFF09\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(padded)) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n const buf = Buffer.from(padded, 'base64');\n\n // round-trip \u6821\u9A8C\uFF1A\u7F16\u7801\u56DE\u53BB\uFF08\u53BB padding\uFF09\u8981\u4E00\u81F4\uFF08\u5BB9\u5FCD url/base64 \u5DEE\u5F02\u7684\u8BDD\u7528 normalized \u5BF9\u6BD4\uFF09\n const re = buf.toString('base64').replace(/=+$/g, '');\n const in0 = padded.replace(/=+$/g, '');\n if (re !== in0) {\n throw new BlankReturnMessageDto(\n 400,\n 'Invalid base64 parameter',\n ).toException();\n }\n\n return buf;\n },\n);\nexport const DefaultValueParamResolver = <T>(\n r: ParamResolverBase<T>,\n defaultValue: T,\n) =>\n createLambdaParamResolver<T, T>((value: T) =>\n value === undefined || value === null ? defaultValue : value,\n )(r);\n", "import { Observable, takeUntil } from 'rxjs';\nimport { createParamDecorator, ExecutionContext } from '@nestjs/common';\nimport type { Request } from 'express';\nimport { createAbortSignalFromHttp } from './utility/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, Scope } from '@nestjs/common';\nimport { abortable, AbortableOpts } from 'nfkit';\nimport { ABORT_SIGNAL } from './abort-signal.provider';\nimport { ContextIdFactory, ModuleRef, REQUEST } from '@nestjs/core';\nimport { createProvider } from '../create-provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\nimport { createMutateInject } from '../utility/create-mutate-inject';\n\nconst tokenMemo = new Map<any, symbol>();\nexport const abortableToken = (token: InjectionToken) => {\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 const InjectAbortable = createMutateInject(abortableToken);\n\nexport function createAbortableProvider<T>(\n token: InjectionToken<T>,\n opts?: AbortableOpts,\n) {\n const provide = abortableToken(token);\n\n return createProvider(\n {\n provide,\n scope: Scope.REQUEST,\n inject: [ModuleRef, REQUEST, ABORT_SIGNAL],\n },\n async (moduleRef, req: Request, signal) => {\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, Scope, Type } from '@nestjs/common';\nimport { REQUEST } from '@nestjs/core';\nimport { createAbortSignalFromHttp } from '../utility/abort-http-signal';\nimport { createProvider } from '../create-provider';\n\nexport const ABORT_SIGNAL = Symbol(\n 'ABORT_SIGNAL',\n) as unknown as Type<AbortSignal>;\nexport const AbortSignalProvider = createProvider(\n {\n provide: ABORT_SIGNAL,\n scope: Scope.REQUEST,\n inject: [REQUEST],\n },\n createAbortSignalFromHttp,\n);\n\nexport const InjectAbortSignal = () => Inject(ABORT_SIGNAL);\n", "import { DynamicModule, Module } from '@nestjs/common';\nimport { createAbortableProvider } from './abortable.token';\nimport { AbortableOpts } from 'nfkit';\nimport { AbortSignalProvider } from './abort-signal.provider';\nimport { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';\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: InjectionToken[],\n options?: AbortableModuleOptions,\n ): DynamicModule {\n const providers = 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", "import {\n ConsoleLogger,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n} from '@nestjs/common';\nimport { I18nModuleOptionsToken } from './i18n-token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { ModuleRef } from '@nestjs/core';\nimport { ParamResolverBase } from '../resolver';\nimport { I18n } from 'nfkit';\nimport { I18nNesties } from './i18n.types';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\n\n@Injectable()\nexport class I18nService extends I18n<I18nNesties.Ex> {\n constructor(\n @Inject(I18nModuleOptionsToken)\n private i18nServiceOptions: I18nModuleOptions,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n @Inject(I18nParamResolverToken) private resolver: ParamResolverBase<string>,\n ) {\n super(i18nServiceOptions);\n }\n\n private _shadowMiddlewareMap = new Map<\n I18nNesties.Middleware,\n I18nNesties.Middleware\n >();\n\n private logger = new ConsoleLogger('I18nService');\n\n middleware(mw: I18nNesties.Middleware, prior = false) {\n const wrappedMw: I18nNesties.Middleware = async (\n locale,\n text,\n next,\n ctx,\n ) => {\n try {\n return await mw(locale, text, next, ctx);\n } catch (e) {\n if (e instanceof HttpException) {\n throw e;\n }\n this.logger.error(`Error in i18n middleware: ${e.message}`);\n return next();\n }\n };\n this._shadowMiddlewareMap.set(mw, wrappedMw);\n return super.middleware(wrappedMw, prior);\n }\n\n removeMiddleware(mw: I18nNesties.Middleware) {\n const wrappedMw = this._shadowMiddlewareMap.get(mw);\n if (wrappedMw) {\n this._shadowMiddlewareMap.delete(mw);\n return super.removeMiddleware(wrappedMw);\n }\n return this;\n }\n\n async getExactLocaleFromRequest(ctx: ExecutionContext) {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.getExactLocale(locale);\n }\n\n async translateRequest(ctx: ExecutionContext, obj: any): Promise<any> {\n const req = ctx.switchToHttp().getRequest();\n const locale = await this.resolver.resolve(req, this.moduleRef);\n return this.translate(locale, obj, ctx);\n }\n}\n", "import { ConfigurableModuleBuilder } from '@nestjs/common';\nimport { I18nModuleOptions } from './i18n-module.options';\n\nconst { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } =\n new ConfigurableModuleBuilder<I18nModuleOptions>()\n // .setExtras({}, (def) => ({ ...def, global: true }))\n .build();\nexport const I18nModuleOptionsToken = MODULE_OPTIONS_TOKEN;\nexport { ConfigurableModuleClass as I18nModuleBase };\n", "export const I18nParamResolverToken = 'I18N_PARAM_RESOLVER';\nexport const I18nParamResolverProviderToken = 'I18N_PARAM_RESOLVER_PROVIDER';\n", "import { Global, Module } from '@nestjs/common';\nimport { I18nModuleBase, I18nModuleOptionsToken } from './i18n-token';\nimport { I18nService } from './i18n.service';\nimport { LocalePipe } from './locale.pipe';\nimport { createProvider } from '../create-provider';\nimport { I18nParamResolverToken } from './i18n-param-resolver.token';\nimport { I18nModuleOptions } from './i18n-module.options';\nimport { getParamResolver } from '../resolver';\n\nconst providerFromOptions = createProvider(\n {\n provide: I18nParamResolverToken,\n inject: [I18nModuleOptionsToken],\n },\n (options: I18nModuleOptions) =>\n getParamResolver(\n options.resolver || {\n paramType: 'header',\n paramName: 'x-client-language',\n },\n ),\n);\n\n@Global()\n@Module({\n providers: [I18nService, LocalePipe, providerFromOptions],\n exports: [I18nService, LocalePipe],\n})\nexport class I18nModule extends I18nModuleBase {\n static forRoot(options: I18nModuleOptions) {}\n}\n", "import {\n ArgumentMetadata,\n createParamDecorator,\n ExecutionContext,\n Inject,\n Injectable,\n PipeTransform,\n} from '@nestjs/common';\nimport { I18nService } from './i18n.service';\nimport { createResolver, ParamResolverInput } from '../resolver';\nimport { ModuleRef } from '@nestjs/core';\n\ntype LocaleContext = {\n ctx: ExecutionContext;\n resolver?: ParamResolverInput;\n};\n\n@Injectable()\nexport class LocalePipe implements PipeTransform {\n constructor(\n @Inject(I18nService) private i18nService: I18nService,\n @Inject(ModuleRef) private moduleRef: ModuleRef,\n ) {}\n\n async transform(ctx: LocaleContext, metadata: ArgumentMetadata) {\n const resolver = ctx.resolver;\n if (resolver) {\n const _resolver = createResolver(resolver);\n const req = ctx.ctx.switchToHttp().getRequest();\n const locale = await _resolver(req, this.moduleRef);\n return this.i18nService.getExactLocale(locale);\n } else {\n return this.i18nService.getExactLocaleFromRequest(ctx.ctx);\n }\n }\n}\n\nconst _dec = createParamDecorator(\n (resolver: ParamResolverInput | undefined, ctx) => {\n return { ctx, resolver };\n },\n);\n\nexport const PutLocale = (resolver?: ParamResolverInput) =>\n _dec(resolver, LocalePipe);\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { ApiFromResolver } from '../resolver';\nimport { MergeClassOrMethodDecorators } from '../merge';\nimport { UseInterceptors } from '@nestjs/common';\nimport { I18nInterceptor } from './i18n.interceptor';\n\nexport const createI18nDecorator = (options: I18nModuleOptions) => {\n return () =>\n MergeClassOrMethodDecorators([\n UseInterceptors(I18nInterceptor),\n ApiFromResolver(options.resolver, {\n description: 'Locale for internationalization',\n required: false,\n default: options.defaultLocale ?? options.locales[0],\n enum: options.locales,\n }),\n ]);\n};\n", "import {\n CallHandler,\n ExecutionContext,\n HttpException,\n Inject,\n Injectable,\n NestInterceptor,\n} from '@nestjs/common';\nimport { from, throwError } from 'rxjs';\nimport { catchError, mergeMap } from 'rxjs/operators';\nimport { I18nService } from './i18n.service';\n\n@Injectable()\nexport class I18nInterceptor implements NestInterceptor {\n constructor(@Inject(I18nService) private readonly i18nService: I18nService) {}\n\n intercept(context: ExecutionContext, next: CallHandler) {\n return next.handle().pipe(\n // \u6210\u529F\u8DEF\u5F84\uFF1A\u628A\u54CD\u5E94\u4F53\u4EA4\u7ED9 i18n \u505A\u5F02\u6B65\u7FFB\u8BD1\n mergeMap((data) => this.i18nService.translateRequest(context, data)),\n // \u9519\u8BEF\u8DEF\u5F84\uFF1A\u82E5\u662F HttpException\uFF0C\u628A\u5176 response \u7FFB\u8BD1\u540E\u518D\u629B\n catchError((err) => {\n if (err instanceof HttpException) {\n const status = err.getStatus();\n const resp = err.getResponse();\n return from(this.i18nService.translateRequest(context, resp)).pipe(\n mergeMap((translated) =>\n throwError(\n () => new HttpException(translated, status, { cause: err }),\n ),\n ),\n );\n }\n return throwError(() => err);\n }),\n );\n }\n}\n", "import { Inject, Injectable, Scope } from '@nestjs/common';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { I18nService } from './i18n.service';\n\n@Injectable({ scope: Scope.REQUEST })\nexport class LocaleContext {\n constructor(\n @Inject(I18nParamResolverProviderToken) private localeInput: string,\n @Inject(I18nService)\n private i18nService: I18nService,\n ) {}\n\n locale = this.i18nService.getExactLocale(this.localeInput);\n\n translate<T>(v: T) {\n return this.i18nService.translate(this.locale, v);\n }\n}\n", "import { I18nModuleOptions } from './i18n-module.options';\nimport { createI18nDecorator } from './i18n-decorator';\nimport { I18nModule } from './i18n.module';\nimport { getParamResolver, ParamResolverInput } from '../resolver';\nimport { LocaleContext } from './locale.context';\nimport { I18nParamResolverProviderToken } from './i18n-param-resolver.token';\nimport { createProvider } from '../create-provider';\n\nexport const createI18n = (\n options: Omit<I18nModuleOptions, 'resolver'> & {\n resolver?: ParamResolverInput;\n },\n) => {\n if (!options.resolver) {\n options.resolver = {\n paramType: 'header',\n paramName: 'x-client-language',\n };\n }\n const resolver = getParamResolver(options.resolver);\n const paramProvider = resolver.toRequestScopedProvider();\n const module = I18nModule.register(options as I18nModuleOptions);\n module.providers ??= [];\n module.exports ??= [];\n module.providers.push(\n paramProvider.provider,\n LocaleContext,\n // re-exports the resolved param value for LocaleContext injection\n createProvider(\n {\n provide: I18nParamResolverProviderToken,\n inject: [paramProvider.token],\n },\n (s) => s,\n ),\n );\n module.exports.push(paramProvider.provider, LocaleContext);\n return {\n UseI18n: createI18nDecorator(options as I18nModuleOptions),\n I18nModule: module,\n I18nParamResolver: resolver,\n I18nParamResolverProvider: paramProvider,\n };\n};\n", "import { createI18nLookupMiddleware } from 'nfkit';\nimport { I18nNesties } from '../i18n.types';\n\nexport const I18nLookupMiddleware =\n createI18nLookupMiddleware<I18nNesties.Ex>();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["from", "ApiProperty", "ApiProperty", "Inject", "Injectable", "ApiHeader", "Inject", "Inject", "ModuleRef", "Injectable", "Inject", "ModuleRef", "ApiHeader", "createParamDecorator", "createParamDecorator", "Scope", "Inject", "Scope", "REQUEST", "Scope", "REQUEST", "Inject", "ModuleRef", "REQUEST", "Scope", "ModuleRef", "REQUEST", "HttpException", "Inject", "Injectable", "ModuleRef", "HttpException", "Injectable", "Inject", "ModuleRef", "Module", "createParamDecorator", "Inject", "Injectable", "ModuleRef", "Injectable", "Inject", "ModuleRef", "createParamDecorator", "Module", "HttpException", "Inject", "Injectable", "HttpException", "Injectable", "Inject", "Inject", "Injectable", "Scope", "Injectable", "Scope", "Inject"]
|
|
7
7
|
}
|
|
@@ -9,6 +9,6 @@ export declare const createI18n: (options: Omit<I18nModuleOptions, "resolver"> &
|
|
|
9
9
|
I18nParamResolverProvider: {
|
|
10
10
|
token: string;
|
|
11
11
|
provider: import("../create-provider").TypedFactoryProvider<["REQUEST", typeof import("@nestjs/core").ModuleRef], string>;
|
|
12
|
-
inject: () =>
|
|
12
|
+
inject: () => ParameterDecorator & PropertyDecorator;
|
|
13
13
|
};
|
|
14
14
|
};
|
|
@@ -42,7 +42,7 @@ export declare abstract class ParamResolverBase<T, R extends AnyReq = AnyReq> {
|
|
|
42
42
|
toRequestScopedProvider(): {
|
|
43
43
|
token: string;
|
|
44
44
|
provider: import("../create-provider").TypedFactoryProvider<["REQUEST", typeof ModuleRef], T>;
|
|
45
|
-
inject: () =>
|
|
45
|
+
inject: () => ParameterDecorator & PropertyDecorator;
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
48
|
export type TypeFromParamResolver<P> = P extends ParamResolverBase<infer T, any> ? T : never;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { InjectionToken } from '@nestjs/common/interfaces/modules/injection-token.interface';
|
|
2
2
|
export declare const InjectionTokenMap: Map<InjectionToken, InjectionToken[]>;
|
|
3
|
+
export declare const addInjectionTokenMapping: (from: InjectionToken, to: InjectionToken | InjectionToken[]) => void;
|