yingzios-platform-backend-shared 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -0
- package/dist/apollo/apollo.config.d.ts +26 -0
- package/dist/apollo/apollo.config.d.ts.map +1 -0
- package/dist/apollo/apollo.config.js +2 -0
- package/dist/apollo/apollo.module.d.ts +13 -0
- package/dist/apollo/apollo.module.d.ts.map +1 -0
- package/dist/apollo/apollo.module.js +61 -0
- package/dist/apollo/apollo.service.d.ts +17 -0
- package/dist/apollo/apollo.service.d.ts.map +1 -0
- package/dist/apollo/apollo.service.js +35 -0
- package/dist/apollo/index.d.ts +5 -0
- package/dist/apollo/index.d.ts.map +1 -0
- package/dist/apollo/index.js +17 -0
- package/dist/cache/cache.config.d.ts +28 -0
- package/dist/cache/cache.config.d.ts.map +1 -0
- package/dist/cache/cache.config.js +2 -0
- package/dist/cache/cache.module.d.ts +39 -0
- package/dist/cache/cache.module.d.ts.map +1 -0
- package/dist/cache/cache.module.js +75 -0
- package/dist/cache/cache.service.d.ts +49 -0
- package/dist/cache/cache.service.d.ts.map +1 -0
- package/dist/cache/cache.service.js +208 -0
- package/dist/cache/index.d.ts +4 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +19 -0
- package/dist/env/env-loader.d.ts +50 -0
- package/dist/env/env-loader.d.ts.map +1 -0
- package/dist/env/env-loader.js +159 -0
- package/dist/env/env.module.d.ts +11 -0
- package/dist/env/env.module.d.ts.map +1 -0
- package/dist/env/env.module.js +47 -0
- package/dist/env/env.service.d.ts +31 -0
- package/dist/env/env.service.d.ts.map +1 -0
- package/dist/env/env.service.js +195 -0
- package/dist/env/index.d.ts +4 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +19 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/internal-auth/decorators/caller.decorator.d.ts +29 -0
- package/dist/internal-auth/decorators/caller.decorator.d.ts.map +1 -0
- package/dist/internal-auth/decorators/caller.decorator.js +37 -0
- package/dist/internal-auth/decorators/index.d.ts +3 -0
- package/dist/internal-auth/decorators/index.d.ts.map +1 -0
- package/dist/internal-auth/decorators/index.js +18 -0
- package/dist/internal-auth/decorators/use-either-guard.decorator.d.ts +31 -0
- package/dist/internal-auth/decorators/use-either-guard.decorator.d.ts.map +1 -0
- package/dist/internal-auth/decorators/use-either-guard.decorator.js +79 -0
- package/dist/internal-auth/guards/index.d.ts +2 -0
- package/dist/internal-auth/guards/index.d.ts.map +1 -0
- package/dist/internal-auth/guards/index.js +17 -0
- package/dist/internal-auth/guards/service-key.guard.d.ts +36 -0
- package/dist/internal-auth/guards/service-key.guard.d.ts.map +1 -0
- package/dist/internal-auth/guards/service-key.guard.js +86 -0
- package/dist/internal-auth/index.d.ts +43 -0
- package/dist/internal-auth/index.d.ts.map +1 -0
- package/dist/internal-auth/index.js +62 -0
- package/dist/internal-auth/internal-auth.module.d.ts +62 -0
- package/dist/internal-auth/internal-auth.module.d.ts.map +1 -0
- package/dist/internal-auth/internal-auth.module.js +118 -0
- package/dist/internal-auth/internal-http.service.d.ts +72 -0
- package/dist/internal-auth/internal-http.service.d.ts.map +1 -0
- package/dist/internal-auth/internal-http.service.js +119 -0
- package/dist/jwt/auto-fill-user.pipe.d.ts +43 -0
- package/dist/jwt/auto-fill-user.pipe.d.ts.map +1 -0
- package/dist/jwt/auto-fill-user.pipe.js +166 -0
- package/dist/jwt/decorators/current-user.decorator.d.ts +37 -0
- package/dist/jwt/decorators/current-user.decorator.d.ts.map +1 -0
- package/dist/jwt/decorators/current-user.decorator.js +29 -0
- package/dist/jwt/decorators/public.decorator.d.ts +8 -0
- package/dist/jwt/decorators/public.decorator.d.ts.map +1 -0
- package/dist/jwt/decorators/public.decorator.js +12 -0
- package/dist/jwt/guards/jwt-auth.guard.d.ts +20 -0
- package/dist/jwt/guards/jwt-auth.guard.d.ts.map +1 -0
- package/dist/jwt/guards/jwt-auth.guard.js +88 -0
- package/dist/jwt/index.d.ts +8 -0
- package/dist/jwt/index.d.ts.map +1 -0
- package/dist/jwt/index.js +26 -0
- package/dist/jwt/jwt-config.service.d.ts +10 -0
- package/dist/jwt/jwt-config.service.d.ts.map +1 -0
- package/dist/jwt/jwt-config.service.js +40 -0
- package/dist/jwt/jwt.config.d.ts +15 -0
- package/dist/jwt/jwt.config.d.ts.map +1 -0
- package/dist/jwt/jwt.config.js +2 -0
- package/dist/jwt/jwt.module.d.ts +19 -0
- package/dist/jwt/jwt.module.d.ts.map +1 -0
- package/dist/jwt/jwt.module.js +100 -0
- package/dist/jwt/jwt.service.d.ts +31 -0
- package/dist/jwt/jwt.service.d.ts.map +1 -0
- package/dist/jwt/jwt.service.js +71 -0
- package/dist/jwt/strategies/jwt.strategy.d.ts +25 -0
- package/dist/jwt/strategies/jwt.strategy.d.ts.map +1 -0
- package/dist/jwt/strategies/jwt.strategy.js +150 -0
- package/dist/jwt/user-aware-axios.service.d.ts +17 -0
- package/dist/jwt/user-aware-axios.service.d.ts.map +1 -0
- package/dist/jwt/user-aware-axios.service.js +105 -0
- package/dist/jwt/utils/jwt.utils.d.ts +24 -0
- package/dist/jwt/utils/jwt.utils.d.ts.map +1 -0
- package/dist/jwt/utils/jwt.utils.js +40 -0
- package/dist/logger/index.d.ts +4 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +19 -0
- package/dist/logger/logger.config.d.ts +41 -0
- package/dist/logger/logger.config.d.ts.map +1 -0
- package/dist/logger/logger.config.js +13 -0
- package/dist/logger/logger.module.d.ts +17 -0
- package/dist/logger/logger.module.d.ts.map +1 -0
- package/dist/logger/logger.module.js +49 -0
- package/dist/logger/logger.service.d.ts +62 -0
- package/dist/logger/logger.service.d.ts.map +1 -0
- package/dist/logger/logger.service.js +124 -0
- package/dist/logger/winston.config.d.ts +43 -0
- package/dist/logger/winston.config.d.ts.map +1 -0
- package/dist/logger/winston.config.js +183 -0
- package/dist/nacos/index.d.ts +4 -0
- package/dist/nacos/index.d.ts.map +1 -0
- package/dist/nacos/index.js +19 -0
- package/dist/nacos/nacos.config.d.ts +10 -0
- package/dist/nacos/nacos.config.d.ts.map +1 -0
- package/dist/nacos/nacos.config.js +2 -0
- package/dist/nacos/nacos.module.d.ts +9 -0
- package/dist/nacos/nacos.module.d.ts.map +1 -0
- package/dist/nacos/nacos.module.js +42 -0
- package/dist/nacos/nacos.service.d.ts +43 -0
- package/dist/nacos/nacos.service.d.ts.map +1 -0
- package/dist/nacos/nacos.service.js +212 -0
- package/dist/nacos/utils.d.ts +10 -0
- package/dist/nacos/utils.d.ts.map +1 -0
- package/dist/nacos/utils.js +65 -0
- package/dist/restful/current-request.util.d.ts +16 -0
- package/dist/restful/current-request.util.d.ts.map +1 -0
- package/dist/restful/current-request.util.js +34 -0
- package/dist/restful/http-exception.filter.d.ts +24 -0
- package/dist/restful/http-exception.filter.d.ts.map +1 -0
- package/dist/restful/http-exception.filter.js +126 -0
- package/dist/restful/index.d.ts +8 -0
- package/dist/restful/index.d.ts.map +1 -0
- package/dist/restful/index.js +23 -0
- package/dist/restful/request-context.middleware.d.ts +6 -0
- package/dist/restful/request-context.middleware.d.ts.map +1 -0
- package/dist/restful/request-context.middleware.js +25 -0
- package/dist/restful/response-codes.d.ts +104 -0
- package/dist/restful/response-codes.d.ts.map +1 -0
- package/dist/restful/response-codes.js +163 -0
- package/dist/restful/response.dto.d.ts +52 -0
- package/dist/restful/response.dto.d.ts.map +1 -0
- package/dist/restful/response.dto.js +146 -0
- package/dist/restful/response.interceptor.d.ts +17 -0
- package/dist/restful/response.interceptor.d.ts.map +1 -0
- package/dist/restful/response.interceptor.js +86 -0
- package/dist/restful/restful.module.d.ts +5 -0
- package/dist/restful/restful.module.d.ts.map +1 -0
- package/dist/restful/restful.module.js +26 -0
- package/dist/sequelize/index.d.ts +4 -0
- package/dist/sequelize/index.d.ts.map +1 -0
- package/dist/sequelize/index.js +19 -0
- package/dist/sequelize/sequelize.config.d.ts +24 -0
- package/dist/sequelize/sequelize.config.d.ts.map +1 -0
- package/dist/sequelize/sequelize.config.js +5 -0
- package/dist/sequelize/sequelize.module.d.ts +28 -0
- package/dist/sequelize/sequelize.module.d.ts.map +1 -0
- package/dist/sequelize/sequelize.module.js +50 -0
- package/dist/sequelize/sequelize.provider.d.ts +7 -0
- package/dist/sequelize/sequelize.provider.d.ts.map +1 -0
- package/dist/sequelize/sequelize.provider.js +154 -0
- package/dist/snowflake/index.d.ts +4 -0
- package/dist/snowflake/index.d.ts.map +1 -0
- package/dist/snowflake/index.js +19 -0
- package/dist/snowflake/snowflake.config.d.ts +30 -0
- package/dist/snowflake/snowflake.config.d.ts.map +1 -0
- package/dist/snowflake/snowflake.config.js +12 -0
- package/dist/snowflake/snowflake.module.d.ts +17 -0
- package/dist/snowflake/snowflake.module.d.ts.map +1 -0
- package/dist/snowflake/snowflake.module.js +58 -0
- package/dist/snowflake/snowflake.service.d.ts +21 -0
- package/dist/snowflake/snowflake.service.d.ts.map +1 -0
- package/dist/snowflake/snowflake.service.js +44 -0
- package/dist/swagger/index.d.ts +6 -0
- package/dist/swagger/index.d.ts.map +1 -0
- package/dist/swagger/index.js +19 -0
- package/dist/swagger/swagger.config.d.ts +45 -0
- package/dist/swagger/swagger.config.d.ts.map +1 -0
- package/dist/swagger/swagger.config.js +19 -0
- package/dist/swagger/swagger.decorators.d.ts +21 -0
- package/dist/swagger/swagger.decorators.d.ts.map +1 -0
- package/dist/swagger/swagger.decorators.js +112 -0
- package/dist/swagger/swagger.module.d.ts +15 -0
- package/dist/swagger/swagger.module.d.ts.map +1 -0
- package/dist/swagger/swagger.module.js +49 -0
- package/dist/swagger/swagger.service.d.ts +44 -0
- package/dist/swagger/swagger.service.d.ts.map +1 -0
- package/dist/swagger/swagger.service.js +202 -0
- package/package.json +75 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
/**
|
|
3
|
+
* 用于处理 PaginatedResponseDto<T> 泛型的 Swagger 装饰器
|
|
4
|
+
* 解决 TypeScript 泛型在运行时丢失导致 Swagger 无法正确显示泛型类型的问题
|
|
5
|
+
*
|
|
6
|
+
* @param model 泛型类型,如 Plugin
|
|
7
|
+
*/
|
|
8
|
+
export declare const ApiPaginatedResponse: <TModel extends Type<any>>(model: TModel) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
9
|
+
/**
|
|
10
|
+
* 用于处理 ApiResponseDto<T> 泛型的 Swagger 装饰器
|
|
11
|
+
*
|
|
12
|
+
* @param model 泛型类型,如 Plugin
|
|
13
|
+
*/
|
|
14
|
+
export declare const ApiDataResponse: <TModel extends Type<any>>(model: TModel) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
15
|
+
/**
|
|
16
|
+
* 用于创建操作的响应装饰器
|
|
17
|
+
*
|
|
18
|
+
* @param model 泛型类型,如 Plugin
|
|
19
|
+
*/
|
|
20
|
+
export declare const ApiCreatedDataResponse: <TModel extends Type<any>>(model: TModel) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
21
|
+
//# sourceMappingURL=swagger.decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.decorators.d.ts","sourceRoot":"","sources":["../../src/swagger/swagger.decorators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,gBAAgB,CAAC;AAIvD;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,MAAM,gJA6D3E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,MAAM,gJAgBtE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,MAAM,gJAgB7E,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiCreatedDataResponse = exports.ApiDataResponse = exports.ApiPaginatedResponse = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
6
|
+
const response_dto_1 = require("../restful/response.dto");
|
|
7
|
+
/**
|
|
8
|
+
* 用于处理 PaginatedResponseDto<T> 泛型的 Swagger 装饰器
|
|
9
|
+
* 解决 TypeScript 泛型在运行时丢失导致 Swagger 无法正确显示泛型类型的问题
|
|
10
|
+
*
|
|
11
|
+
* @param model 泛型类型,如 Plugin
|
|
12
|
+
*/
|
|
13
|
+
const ApiPaginatedResponse = (model) => {
|
|
14
|
+
return (0, common_1.applyDecorators)((0, swagger_1.ApiExtraModels)(model), (0, swagger_1.ApiOkResponse)({
|
|
15
|
+
schema: {
|
|
16
|
+
allOf: [
|
|
17
|
+
{ $ref: (0, swagger_1.getSchemaPath)(response_dto_1.PaginatedResponseDto) },
|
|
18
|
+
{
|
|
19
|
+
properties: {
|
|
20
|
+
code: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
example: '000000',
|
|
23
|
+
description: '响应码',
|
|
24
|
+
},
|
|
25
|
+
msg: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
example: 'Success',
|
|
28
|
+
description: '响应消息',
|
|
29
|
+
},
|
|
30
|
+
traceId: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
description: '追踪ID',
|
|
33
|
+
example: 'trace-id-example',
|
|
34
|
+
},
|
|
35
|
+
data: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
totalCount: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
example: '100',
|
|
41
|
+
description: '总记录数',
|
|
42
|
+
},
|
|
43
|
+
pageSize: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
example: '10',
|
|
46
|
+
description: '每页记录数',
|
|
47
|
+
},
|
|
48
|
+
totalPage: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
example: '10',
|
|
51
|
+
description: '总页数',
|
|
52
|
+
},
|
|
53
|
+
currentPage: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
example: '1',
|
|
56
|
+
description: '当前页码',
|
|
57
|
+
},
|
|
58
|
+
list: {
|
|
59
|
+
type: 'array',
|
|
60
|
+
items: { $ref: (0, swagger_1.getSchemaPath)(model) },
|
|
61
|
+
description: '数据列表',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
description: '分页数据',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
}));
|
|
71
|
+
};
|
|
72
|
+
exports.ApiPaginatedResponse = ApiPaginatedResponse;
|
|
73
|
+
/**
|
|
74
|
+
* 用于处理 ApiResponseDto<T> 泛型的 Swagger 装饰器
|
|
75
|
+
*
|
|
76
|
+
* @param model 泛型类型,如 Plugin
|
|
77
|
+
*/
|
|
78
|
+
const ApiDataResponse = (model) => {
|
|
79
|
+
return (0, common_1.applyDecorators)((0, swagger_1.ApiExtraModels)(response_dto_1.ApiResponseDto, model), (0, swagger_1.ApiOkResponse)({
|
|
80
|
+
schema: {
|
|
81
|
+
allOf: [
|
|
82
|
+
{ $ref: (0, swagger_1.getSchemaPath)(response_dto_1.ApiResponseDto) },
|
|
83
|
+
{
|
|
84
|
+
properties: {
|
|
85
|
+
data: { $ref: (0, swagger_1.getSchemaPath)(model) },
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
}));
|
|
91
|
+
};
|
|
92
|
+
exports.ApiDataResponse = ApiDataResponse;
|
|
93
|
+
/**
|
|
94
|
+
* 用于创建操作的响应装饰器
|
|
95
|
+
*
|
|
96
|
+
* @param model 泛型类型,如 Plugin
|
|
97
|
+
*/
|
|
98
|
+
const ApiCreatedDataResponse = (model) => {
|
|
99
|
+
return (0, common_1.applyDecorators)((0, swagger_1.ApiExtraModels)(response_dto_1.ApiResponseDto, model), (0, swagger_1.ApiCreatedResponse)({
|
|
100
|
+
schema: {
|
|
101
|
+
allOf: [
|
|
102
|
+
{ $ref: (0, swagger_1.getSchemaPath)(response_dto_1.ApiResponseDto) },
|
|
103
|
+
{
|
|
104
|
+
properties: {
|
|
105
|
+
data: { $ref: (0, swagger_1.getSchemaPath)(model) },
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
}));
|
|
111
|
+
};
|
|
112
|
+
exports.ApiCreatedDataResponse = ApiCreatedDataResponse;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { ISwaggerConfig } from './swagger.config';
|
|
3
|
+
/**
|
|
4
|
+
* Swagger模块
|
|
5
|
+
* 支持 forRoot() 模式进行配置
|
|
6
|
+
*/
|
|
7
|
+
export declare class SwaggerModule {
|
|
8
|
+
/**
|
|
9
|
+
* 静态方法:配置Swagger模块
|
|
10
|
+
* 用于根模块注册
|
|
11
|
+
* @param options Swagger配置选项
|
|
12
|
+
*/
|
|
13
|
+
static forRoot(options?: ISwaggerConfig): DynamicModule;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=swagger.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.module.d.ts","sourceRoot":"","sources":["../../src/swagger/swagger.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAkB,MAAM,gBAAgB,CAAC;AAE/D,OAAO,EAAkB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElE;;;GAGG;AACH,qBAEa,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,aAAa;CAoB5D"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var SwaggerModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SwaggerModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const swagger_service_1 = require("./swagger.service");
|
|
13
|
+
const swagger_config_1 = require("./swagger.config");
|
|
14
|
+
/**
|
|
15
|
+
* Swagger模块
|
|
16
|
+
* 支持 forRoot() 模式进行配置
|
|
17
|
+
*/
|
|
18
|
+
let SwaggerModule = SwaggerModule_1 = class SwaggerModule {
|
|
19
|
+
/**
|
|
20
|
+
* 静态方法:配置Swagger模块
|
|
21
|
+
* 用于根模块注册
|
|
22
|
+
* @param options Swagger配置选项
|
|
23
|
+
*/
|
|
24
|
+
static forRoot(options = {}) {
|
|
25
|
+
const mergedConfig = {
|
|
26
|
+
...swagger_config_1.SWAGGER_CONFIG,
|
|
27
|
+
...options,
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
module: SwaggerModule_1,
|
|
31
|
+
providers: [
|
|
32
|
+
{
|
|
33
|
+
provide: 'SWAGGER_OPTIONS',
|
|
34
|
+
useValue: mergedConfig,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
provide: 'SWAGGER_SERVICE',
|
|
38
|
+
useClass: swagger_service_1.SwaggerService,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
exports: ['SWAGGER_SERVICE'],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
exports.SwaggerModule = SwaggerModule;
|
|
46
|
+
exports.SwaggerModule = SwaggerModule = SwaggerModule_1 = __decorate([
|
|
47
|
+
(0, common_1.Global)(),
|
|
48
|
+
(0, common_1.Module)({})
|
|
49
|
+
], SwaggerModule);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { INestApplication } from '@nestjs/common';
|
|
2
|
+
import type { ISwaggerConfig } from './swagger.config';
|
|
3
|
+
export interface ISwaggerService {
|
|
4
|
+
configure(app: INestApplication): void;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Swagger服务
|
|
8
|
+
* 用于配置和设置Swagger文档
|
|
9
|
+
*
|
|
10
|
+
* 功能:
|
|
11
|
+
* 1. 为当前服务生成独立的 Swagger 文档
|
|
12
|
+
* 2. (可选) 启用文档聚合功能,汇总多个微服务的文档
|
|
13
|
+
*/
|
|
14
|
+
export declare class SwaggerService implements ISwaggerService {
|
|
15
|
+
private readonly logger;
|
|
16
|
+
private options;
|
|
17
|
+
constructor(options?: ISwaggerConfig);
|
|
18
|
+
/**
|
|
19
|
+
* 配置Swagger文档
|
|
20
|
+
* 执行顺序:
|
|
21
|
+
* 1. 生成当前服务的独立文档 (必选)
|
|
22
|
+
* 2. 启用文档聚合功能 (可选,基于配置)
|
|
23
|
+
*/
|
|
24
|
+
configure(app: INestApplication): void;
|
|
25
|
+
/**
|
|
26
|
+
* 设置独立的 Swagger 文档
|
|
27
|
+
* 为当前服务生成 /swagger 和 /swagger-json 端点
|
|
28
|
+
*/
|
|
29
|
+
private setupStandaloneSwagger;
|
|
30
|
+
/**
|
|
31
|
+
* 设置文档聚合功能
|
|
32
|
+
* 注册一个聚合路由,展示配置中所有服务的文档
|
|
33
|
+
*
|
|
34
|
+
* 依据: Swagger UI 官方多 URL 配置
|
|
35
|
+
* https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md
|
|
36
|
+
*/
|
|
37
|
+
private setupAggregation;
|
|
38
|
+
/**
|
|
39
|
+
* 生成聚合文档的 HTML 页面
|
|
40
|
+
* 使用 Swagger UI 原生的多 URL 配置
|
|
41
|
+
*/
|
|
42
|
+
private generateAggregationHtml;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=swagger.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.service.d.ts","sourceRoot":"","sources":["../../src/swagger/swagger.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,qBACa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D,OAAO,CAAC,OAAO,CAAiB;gBAEO,OAAO,CAAC,EAAE,cAAc;IAI/D;;;;;OAKG;IACH,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAUtC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IA6C9B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;;OAGG;IACH,OAAO,CAAC,uBAAuB;CAiEhC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var SwaggerService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.SwaggerService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
19
|
+
// 导入常用的模型
|
|
20
|
+
const response_dto_1 = require("../restful/response.dto");
|
|
21
|
+
/**
|
|
22
|
+
* Swagger服务
|
|
23
|
+
* 用于配置和设置Swagger文档
|
|
24
|
+
*
|
|
25
|
+
* 功能:
|
|
26
|
+
* 1. 为当前服务生成独立的 Swagger 文档
|
|
27
|
+
* 2. (可选) 启用文档聚合功能,汇总多个微服务的文档
|
|
28
|
+
*/
|
|
29
|
+
let SwaggerService = SwaggerService_1 = class SwaggerService {
|
|
30
|
+
logger = new common_1.Logger(SwaggerService_1.name);
|
|
31
|
+
options;
|
|
32
|
+
constructor(options) {
|
|
33
|
+
this.options = options || {};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 配置Swagger文档
|
|
37
|
+
* 执行顺序:
|
|
38
|
+
* 1. 生成当前服务的独立文档 (必选)
|
|
39
|
+
* 2. 启用文档聚合功能 (可选,基于配置)
|
|
40
|
+
*/
|
|
41
|
+
configure(app) {
|
|
42
|
+
// 1. 生成独立文档
|
|
43
|
+
this.setupStandaloneSwagger(app);
|
|
44
|
+
// 2. 如果配置了聚合功能,则注册聚合路由
|
|
45
|
+
if (this.options.aggregation?.enabled) {
|
|
46
|
+
this.setupAggregation(app);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 设置独立的 Swagger 文档
|
|
51
|
+
* 为当前服务生成 /swagger 和 /swagger-json 端点
|
|
52
|
+
*/
|
|
53
|
+
setupStandaloneSwagger(app) {
|
|
54
|
+
const config = new swagger_1.DocumentBuilder()
|
|
55
|
+
.setTitle(this.options.title || 'API文档')
|
|
56
|
+
.setDescription(this.options.description || 'API接口文档')
|
|
57
|
+
.setVersion(this.options.version || '1.0')
|
|
58
|
+
.addBearerAuth()
|
|
59
|
+
.addTag('default', '默认接口');
|
|
60
|
+
// 添加自定义标签
|
|
61
|
+
if (this.options.tags && this.options.tags.length > 0) {
|
|
62
|
+
this.options.tags.forEach((tag) => {
|
|
63
|
+
config.addTag(tag.name, tag.description);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// 构建基础文档
|
|
67
|
+
const documentBuilder = config.build();
|
|
68
|
+
// 添加额外的模型定义,确保PaginatedResponseDto等模型被正确注册
|
|
69
|
+
documentBuilder.components = documentBuilder.components || {};
|
|
70
|
+
documentBuilder.components.schemas = documentBuilder.components.schemas || {};
|
|
71
|
+
// 生成文档
|
|
72
|
+
const document = swagger_1.SwaggerModule.createDocument(app, documentBuilder, {
|
|
73
|
+
extraModels: [response_dto_1.ApiResponseDto, response_dto_1.PaginatedResponseDto], // 自动注册常用模型
|
|
74
|
+
});
|
|
75
|
+
// 修复Fastify环境下PaginatedResponseDto引用问题
|
|
76
|
+
// 确保所有额外模型都被正确添加到文档中
|
|
77
|
+
if (!document.components) {
|
|
78
|
+
document.components = {};
|
|
79
|
+
}
|
|
80
|
+
if (!document.components.schemas) {
|
|
81
|
+
document.components.schemas = {};
|
|
82
|
+
}
|
|
83
|
+
swagger_1.SwaggerModule.setup(this.options.path, app, document, {
|
|
84
|
+
customSiteTitle: this.options.customSiteTitle,
|
|
85
|
+
customfavIcon: this.options.customfavIcon,
|
|
86
|
+
customCss: this.options.customCss,
|
|
87
|
+
});
|
|
88
|
+
this.logger.log(`Swagger文档已配置,访问地址: ${this.options.path || 'api'}`);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 设置文档聚合功能
|
|
92
|
+
* 注册一个聚合路由,展示配置中所有服务的文档
|
|
93
|
+
*
|
|
94
|
+
* 依据: Swagger UI 官方多 URL 配置
|
|
95
|
+
* https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/configuration.md
|
|
96
|
+
*/
|
|
97
|
+
setupAggregation(app) {
|
|
98
|
+
const aggConfig = this.options.aggregation;
|
|
99
|
+
const aggPath = aggConfig.path || 'api-docs';
|
|
100
|
+
// 验证配置
|
|
101
|
+
if (!aggConfig.services || aggConfig.services.length === 0) {
|
|
102
|
+
this.logger.warn('文档聚合已启用,但未配置任何服务,跳过聚合路由注册');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// 生成 Swagger UI HTML
|
|
106
|
+
const html = this.generateAggregationHtml(aggConfig);
|
|
107
|
+
// 使用底层 HTTP adapter 注册路由
|
|
108
|
+
// 兼容 Express 和 Fastify
|
|
109
|
+
const httpAdapter = app.getHttpAdapter();
|
|
110
|
+
const instance = httpAdapter.getInstance();
|
|
111
|
+
// 注册聚合文档路由
|
|
112
|
+
// Express: app.get(path, handler)
|
|
113
|
+
// Fastify: app.get(path, handler)
|
|
114
|
+
instance.get(`/${aggPath}`, (_req, res) => {
|
|
115
|
+
// Express
|
|
116
|
+
if (res.setHeader && res.send) {
|
|
117
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
118
|
+
res.send(html);
|
|
119
|
+
}
|
|
120
|
+
// Fastify
|
|
121
|
+
else if (res.header && res.send) {
|
|
122
|
+
res.header('Content-Type', 'text/html; charset=utf-8');
|
|
123
|
+
res.send(html);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
this.logger.log(`文档聚合已启用,访问地址: ${aggPath} (聚合 ${aggConfig.services.length} 个服务)`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 生成聚合文档的 HTML 页面
|
|
130
|
+
* 使用 Swagger UI 原生的多 URL 配置
|
|
131
|
+
*/
|
|
132
|
+
generateAggregationHtml(aggConfig) {
|
|
133
|
+
const services = aggConfig.services;
|
|
134
|
+
const primaryName = aggConfig.primaryName || services[0]?.name;
|
|
135
|
+
return `
|
|
136
|
+
<!DOCTYPE html>
|
|
137
|
+
<html lang="zh-CN">
|
|
138
|
+
<head>
|
|
139
|
+
<meta charset="UTF-8">
|
|
140
|
+
<title>YingziOS API 文档中心</title>
|
|
141
|
+
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css">
|
|
142
|
+
<link rel="icon" type="image/png" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/favicon-32x32.png" sizes="32x32">
|
|
143
|
+
<style>
|
|
144
|
+
html {
|
|
145
|
+
box-sizing: border-box;
|
|
146
|
+
overflow: -moz-scrollbars-vertical;
|
|
147
|
+
overflow-y: scroll;
|
|
148
|
+
}
|
|
149
|
+
*, *:before, *:after {
|
|
150
|
+
box-sizing: inherit;
|
|
151
|
+
}
|
|
152
|
+
body {
|
|
153
|
+
margin: 0;
|
|
154
|
+
padding: 0;
|
|
155
|
+
}
|
|
156
|
+
.topbar {
|
|
157
|
+
background-color: #1f1f1f !important;
|
|
158
|
+
}
|
|
159
|
+
.topbar-wrapper .link {
|
|
160
|
+
color: #fff !important;
|
|
161
|
+
}
|
|
162
|
+
</style>
|
|
163
|
+
</head>
|
|
164
|
+
<body>
|
|
165
|
+
<div id="swagger-ui"></div>
|
|
166
|
+
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js" charset="UTF-8"></script>
|
|
167
|
+
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-standalone-preset.js" charset="UTF-8"></script>
|
|
168
|
+
<script>
|
|
169
|
+
window.onload = function() {
|
|
170
|
+
const ui = SwaggerUIBundle({
|
|
171
|
+
urls: ${JSON.stringify(services, null, 10)},
|
|
172
|
+
"urls.primaryName": ${JSON.stringify(primaryName)},
|
|
173
|
+
dom_id: '#swagger-ui',
|
|
174
|
+
deepLinking: true,
|
|
175
|
+
presets: [
|
|
176
|
+
SwaggerUIBundle.presets.apis,
|
|
177
|
+
SwaggerUIStandalonePreset
|
|
178
|
+
],
|
|
179
|
+
plugins: [
|
|
180
|
+
SwaggerUIBundle.plugins.DownloadUrl
|
|
181
|
+
],
|
|
182
|
+
layout: "StandaloneLayout",
|
|
183
|
+
docExpansion: "list",
|
|
184
|
+
displayRequestDuration: true,
|
|
185
|
+
filter: true,
|
|
186
|
+
tryItOutEnabled: false,
|
|
187
|
+
persistAuthorization: true
|
|
188
|
+
});
|
|
189
|
+
window.ui = ui;
|
|
190
|
+
};
|
|
191
|
+
</script>
|
|
192
|
+
</body>
|
|
193
|
+
</html>
|
|
194
|
+
`.trim();
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
exports.SwaggerService = SwaggerService;
|
|
198
|
+
exports.SwaggerService = SwaggerService = SwaggerService_1 = __decorate([
|
|
199
|
+
(0, common_1.Injectable)(),
|
|
200
|
+
__param(0, (0, common_1.Inject)('SWAGGER_OPTIONS')),
|
|
201
|
+
__metadata("design:paramtypes", [Object])
|
|
202
|
+
], SwaggerService);
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "yingzios-platform-backend-shared",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "NestJS 共享模块库",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"README.md",
|
|
10
|
+
"LICENSE"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"default": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org/"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/your-org/yingzios-platform-portal.git",
|
|
25
|
+
"directory": "libs/backend-shared"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"nestjs",
|
|
29
|
+
"nest",
|
|
30
|
+
"shared",
|
|
31
|
+
"modules",
|
|
32
|
+
"sequelize",
|
|
33
|
+
"jwt",
|
|
34
|
+
"swagger",
|
|
35
|
+
"apollo",
|
|
36
|
+
"nacos"
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@keyv/redis": "^5.1.6",
|
|
41
|
+
"@keyv/sqlite": "^4.0.8",
|
|
42
|
+
"@nestjs/common": "^11.1.17",
|
|
43
|
+
"@nestjs/core": "^11.1.17",
|
|
44
|
+
"@nestjs/jwt": "^11.0.2",
|
|
45
|
+
"@nestjs/passport": "^11.0.5",
|
|
46
|
+
"@nestjs/swagger": "^11.2.3",
|
|
47
|
+
"@sapphire/snowflake": "^3.5.5",
|
|
48
|
+
"@vodyani/apollo-client": "^1.5.0",
|
|
49
|
+
"axios": "^1.14.0",
|
|
50
|
+
"ctrip-apollo": "^4.5.1",
|
|
51
|
+
"dotenv": "^16.4.5",
|
|
52
|
+
"express": "^4.18.2",
|
|
53
|
+
"json-bigint": "^1.0.0",
|
|
54
|
+
"keyv": "^5.6.0",
|
|
55
|
+
"lodash": "^4.17.21",
|
|
56
|
+
"nacos": "^2.6.0",
|
|
57
|
+
"passport": "^0.7.0",
|
|
58
|
+
"passport-jwt": "^4.0.1",
|
|
59
|
+
"pg": "^8.16.3",
|
|
60
|
+
"rxjs": "^7.8.1",
|
|
61
|
+
"sequelize": "^6.37.8",
|
|
62
|
+
"tslib": "^2.8.1",
|
|
63
|
+
"umzug": "^3.8.2",
|
|
64
|
+
"winston": "^3.19.0",
|
|
65
|
+
"winston-daily-rotate-file": "^5.0.0"
|
|
66
|
+
},
|
|
67
|
+
"devDependencies": {
|
|
68
|
+
"@types/express": "^4.17.21",
|
|
69
|
+
"@types/json-bigint": "^1.0.4",
|
|
70
|
+
"@types/lodash": "^4.17.21",
|
|
71
|
+
"@types/node": "^24.10.2",
|
|
72
|
+
"@types/passport-jwt": "^4.0.1",
|
|
73
|
+
"@types/pg": "^8.15.6"
|
|
74
|
+
}
|
|
75
|
+
}
|