@danqiusheng/nest-nacos 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/LICENSE +21 -21
- package/README.en.md +197 -0
- package/README.md +353 -385
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/nacos-config.service.d.ts +25 -45
- package/dist/nacos-config.service.d.ts.map +1 -1
- package/dist/nacos-config.service.js +241 -102
- package/dist/nacos-config.service.js.map +1 -1
- package/dist/nacos-naming.service.d.ts +16 -46
- package/dist/nacos-naming.service.d.ts.map +1 -1
- package/dist/nacos-naming.service.js +119 -88
- package/dist/nacos-naming.service.js.map +1 -1
- package/dist/nacos.decorators.d.ts +0 -4
- package/dist/nacos.decorators.d.ts.map +1 -1
- package/dist/nacos.decorators.js +1 -12
- package/dist/nacos.decorators.js.map +1 -1
- package/dist/nacos.health.d.ts +2 -6
- package/dist/nacos.health.d.ts.map +1 -1
- package/dist/nacos.health.js +5 -25
- package/dist/nacos.health.js.map +1 -1
- package/dist/nacos.interfaces.d.ts +85 -57
- package/dist/nacos.interfaces.d.ts.map +1 -1
- package/dist/nacos.module.d.ts +2 -11
- package/dist/nacos.module.d.ts.map +1 -1
- package/dist/nacos.module.js +22 -19
- package/dist/nacos.module.js.map +1 -1
- package/dist/nacos.providers.d.ts +4 -11
- package/dist/nacos.providers.d.ts.map +1 -1
- package/dist/nacos.providers.js +37 -23
- package/dist/nacos.providers.js.map +1 -1
- package/dist/nacos.utils.d.ts +6 -0
- package/dist/nacos.utils.d.ts.map +1 -0
- package/dist/nacos.utils.js +79 -0
- package/dist/nacos.utils.js.map +1 -0
- package/package.json +19 -10
package/dist/nacos.module.d.ts
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NestJS Nacos 插件 - 动态模块定义
|
|
3
|
-
*
|
|
4
|
-
* 用法:
|
|
5
|
-
* 同步:NacosModule.forRoot({ naming: {...}, config: {...} })
|
|
6
|
-
* 异步:NacosModule.forRootAsync({ imports, useFactory, inject })
|
|
7
|
-
*/
|
|
8
1
|
import { DynamicModule } from '@nestjs/common';
|
|
9
|
-
import { NacosModuleAsyncOptions,
|
|
2
|
+
import { NacosModuleAsyncOptions, NacosModuleOptionsInput } from './nacos.interfaces';
|
|
10
3
|
export declare class NacosModule {
|
|
11
|
-
|
|
12
|
-
static forRoot(options: NacosModuleOptions): DynamicModule;
|
|
13
|
-
/** 异步注册(配合 @nestjs/config、环境变量等使用) */
|
|
4
|
+
static forRoot(options: NacosModuleOptionsInput): DynamicModule;
|
|
14
5
|
static forRootAsync(options: NacosModuleAsyncOptions): DynamicModule;
|
|
15
6
|
private static createAsyncOptionsProvider;
|
|
16
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.module.d.ts","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nacos.module.d.ts","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AAEjE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAc5B,qBACa,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAe/D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,aAAa;IAoBpE,OAAO,CAAC,MAAM,CAAC,0BAA0B;CAoB1C"}
|
package/dist/nacos.module.js
CHANGED
|
@@ -8,66 +8,69 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var NacosModule_1;
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.NacosModule = void 0;
|
|
11
|
-
/**
|
|
12
|
-
* NestJS Nacos 插件 - 动态模块定义
|
|
13
|
-
*
|
|
14
|
-
* 用法:
|
|
15
|
-
* 同步:NacosModule.forRoot({ naming: {...}, config: {...} })
|
|
16
|
-
* 异步:NacosModule.forRootAsync({ imports, useFactory, inject })
|
|
17
|
-
*/
|
|
18
11
|
const common_1 = require("@nestjs/common");
|
|
19
12
|
const nacos_constants_1 = require("./nacos.constants");
|
|
20
13
|
const nacos_providers_1 = require("./nacos.providers");
|
|
21
14
|
const nacos_naming_service_1 = require("./nacos-naming.service");
|
|
22
15
|
const nacos_config_service_1 = require("./nacos-config.service");
|
|
23
16
|
const nacos_health_1 = require("./nacos.health");
|
|
17
|
+
const exportedProviders = [
|
|
18
|
+
nacos_constants_1.NACOS_NAMING_CLIENT,
|
|
19
|
+
nacos_constants_1.NACOS_CONFIG_CLIENT,
|
|
20
|
+
nacos_naming_service_1.NacosNamingService,
|
|
21
|
+
nacos_config_service_1.NacosConfigService,
|
|
22
|
+
nacos_health_1.NacosHealthIndicator,
|
|
23
|
+
];
|
|
24
24
|
let NacosModule = NacosModule_1 = class NacosModule {
|
|
25
|
-
/** 同步注册 */
|
|
26
25
|
static forRoot(options) {
|
|
27
26
|
return {
|
|
28
27
|
module: NacosModule_1,
|
|
29
28
|
global: true,
|
|
30
29
|
providers: [
|
|
31
|
-
{ provide: nacos_constants_1.NACOS_OPTIONS, useValue: options },
|
|
30
|
+
{ provide: nacos_constants_1.NACOS_OPTIONS, useValue: (0, nacos_providers_1.normalizeNacosOptions)(options) },
|
|
32
31
|
...nacos_providers_1.nacosClientProviders,
|
|
33
32
|
nacos_naming_service_1.NacosNamingService,
|
|
34
33
|
nacos_config_service_1.NacosConfigService,
|
|
35
34
|
nacos_health_1.NacosHealthIndicator,
|
|
36
35
|
],
|
|
37
|
-
exports:
|
|
36
|
+
exports: exportedProviders,
|
|
38
37
|
};
|
|
39
38
|
}
|
|
40
|
-
/** 异步注册(配合 @nestjs/config、环境变量等使用) */
|
|
41
39
|
static forRootAsync(options) {
|
|
42
|
-
const
|
|
40
|
+
const classProviders = options.useClass
|
|
41
|
+
? [{ provide: options.useClass, useClass: options.useClass }]
|
|
42
|
+
: [];
|
|
43
43
|
return {
|
|
44
44
|
module: NacosModule_1,
|
|
45
45
|
global: true,
|
|
46
46
|
imports: options.imports,
|
|
47
47
|
providers: [
|
|
48
|
-
|
|
48
|
+
...classProviders,
|
|
49
|
+
this.createAsyncOptionsProvider(options),
|
|
49
50
|
...nacos_providers_1.nacosClientProviders,
|
|
50
51
|
nacos_naming_service_1.NacosNamingService,
|
|
51
52
|
nacos_config_service_1.NacosConfigService,
|
|
52
53
|
nacos_health_1.NacosHealthIndicator,
|
|
53
54
|
],
|
|
54
|
-
exports:
|
|
55
|
+
exports: exportedProviders,
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
58
|
static createAsyncOptionsProvider(options) {
|
|
58
|
-
// 方式一:useFactory
|
|
59
59
|
if (options.useFactory) {
|
|
60
60
|
return {
|
|
61
61
|
provide: nacos_constants_1.NACOS_OPTIONS,
|
|
62
|
-
useFactory: options.useFactory,
|
|
62
|
+
useFactory: async (...args) => (0, nacos_providers_1.normalizeNacosOptions)(await options.useFactory(...args)),
|
|
63
63
|
inject: options.inject ?? [],
|
|
64
64
|
};
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
const factoryToken = options.useExisting ?? options.useClass;
|
|
67
|
+
if (!factoryToken) {
|
|
68
|
+
throw new Error('forRootAsync requires useFactory, useClass, or useExisting');
|
|
69
|
+
}
|
|
67
70
|
return {
|
|
68
71
|
provide: nacos_constants_1.NACOS_OPTIONS,
|
|
69
|
-
useFactory: async (factory) => factory.createNacosOptions(),
|
|
70
|
-
inject: [
|
|
72
|
+
useFactory: async (factory) => (0, nacos_providers_1.normalizeNacosOptions)(await factory.createNacosOptions()),
|
|
73
|
+
inject: [factoryToken],
|
|
71
74
|
};
|
|
72
75
|
}
|
|
73
76
|
};
|
package/dist/nacos.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.module.js","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"nacos.module.js","sourceRoot":"","sources":["../src/nacos.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAiE;AACjE,uDAA4F;AAM5F,uDAAgF;AAChF,iEAA4D;AAC5D,iEAA4D;AAC5D,iDAAsD;AAEtD,MAAM,iBAAiB,GAAG;IACxB,qCAAmB;IACnB,qCAAmB;IACnB,yCAAkB;IAClB,yCAAkB;IAClB,mCAAoB;CACrB,CAAC;AAGK,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,OAAgC;QAC7C,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,+BAAa,EAAE,QAAQ,EAAE,IAAA,uCAAqB,EAAC,OAAO,CAAC,EAAE;gBACpE,GAAG,sCAAoB;gBACvB,yCAAkB;gBAClB,yCAAkB;gBAClB,mCAAoB;aACrB;YACD,OAAO,EAAE,iBAAiB;SAC3B,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAClD,MAAM,cAAc,GAAe,OAAO,CAAC,QAAQ;YACjD,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE;gBACT,GAAG,cAAc;gBACjB,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;gBACxC,GAAG,sCAAoB;gBACvB,yCAAkB;gBAClB,yCAAkB;gBAClB,mCAAoB;aACrB;YACD,OAAO,EAAE,iBAAiB;SAC3B,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,0BAA0B,CAAC,OAAgC;QACxE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,+BAAa;gBACtB,UAAU,EAAE,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE,CACnC,IAAA,uCAAqB,EAAC,MAAM,OAAO,CAAC,UAAW,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3D,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC7B,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;YACL,OAAO,EAAE,+BAAa;YACtB,UAAU,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE,CACjD,IAAA,uCAAqB,EAAC,MAAM,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3D,MAAM,EAAE,CAAC,YAAY,CAAC;SACvB,CAAC;IACJ,CAAC;CACF,CAAA;AAxDY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAwDvB"}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NestJS Nacos 插件 - Provider 工厂
|
|
3
|
-
*
|
|
4
|
-
* 负责根据模块配置创建 NacosNamingClient / NacosConfigClient 实例。
|
|
5
|
-
* 如果未配置 naming / config,则返回 null(对应服务以 @Optional 注入)。
|
|
6
|
-
*/
|
|
7
1
|
import { Provider } from '@nestjs/common';
|
|
8
|
-
import {
|
|
9
|
-
import { NacosModuleOptions } from './nacos.interfaces';
|
|
10
|
-
/** 创建 Naming 客户端 */
|
|
2
|
+
import { NacosConfigClient, NacosNamingClient } from 'nacos';
|
|
3
|
+
import { NacosModuleOptions, NacosModuleOptionsInput } from './nacos.interfaces';
|
|
11
4
|
export declare function createNamingClient(options: NacosModuleOptions['naming']): NacosNamingClient | null;
|
|
12
|
-
/** 创建 Config 客户端 */
|
|
13
5
|
export declare function createConfigClient(options: NacosModuleOptions['config']): NacosConfigClient | null;
|
|
14
|
-
/**
|
|
6
|
+
/** Expands the simple shared connection fields into SDK-specific options. */
|
|
7
|
+
export declare function normalizeNacosOptions(input: NacosModuleOptionsInput): NacosModuleOptions;
|
|
15
8
|
export declare const nacosClientProviders: Provider[];
|
|
16
9
|
//# sourceMappingURL=nacos.providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.providers.d.ts","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"nacos.providers.d.ts","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAW5B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAclG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAelG;AAED,6EAA6E;AAC7E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,GAAG,kBAAkB,CAwBxF;AAUD,eAAO,MAAM,oBAAoB,EAAE,QAAQ,EAW1C,CAAC"}
|
package/dist/nacos.providers.js
CHANGED
|
@@ -3,21 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.nacosClientProviders = void 0;
|
|
4
4
|
exports.createNamingClient = createNamingClient;
|
|
5
5
|
exports.createConfigClient = createConfigClient;
|
|
6
|
-
|
|
7
|
-
* NestJS Nacos 插件 - Provider 工厂
|
|
8
|
-
*
|
|
9
|
-
* 负责根据模块配置创建 NacosNamingClient / NacosConfigClient 实例。
|
|
10
|
-
* 如果未配置 naming / config,则返回 null(对应服务以 @Optional 注入)。
|
|
11
|
-
*/
|
|
6
|
+
exports.normalizeNacosOptions = normalizeNacosOptions;
|
|
12
7
|
const common_1 = require("@nestjs/common");
|
|
13
8
|
const nacos_1 = require("nacos");
|
|
14
9
|
const nacos_constants_1 = require("./nacos.constants");
|
|
15
10
|
const nestLogger = new common_1.Logger('Nacos');
|
|
16
|
-
/**
|
|
17
|
-
* Logger 适配器
|
|
18
|
-
* Nacos SDK 期望 logger 有 info/warn/error/debug 方法,
|
|
19
|
-
* 而 NestJS Logger 使用 log/warn/error/debug,此处做映射。
|
|
20
|
-
*/
|
|
21
11
|
const nacosLogger = {
|
|
22
12
|
info: (...args) => nestLogger.log(args.join(' ')),
|
|
23
13
|
warn: (...args) => nestLogger.warn(args.join(' ')),
|
|
@@ -25,16 +15,14 @@ const nacosLogger = {
|
|
|
25
15
|
debug: (...args) => nestLogger.debug(args.join(' ')),
|
|
26
16
|
log: (...args) => nestLogger.log(args.join(' ')),
|
|
27
17
|
};
|
|
28
|
-
/** 创建 Naming 客户端 */
|
|
29
18
|
function createNamingClient(options) {
|
|
30
19
|
if (!options)
|
|
31
20
|
return null;
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
assertSupportedTransport(options.transport);
|
|
22
|
+
return new nacos_1.NacosNamingClient({
|
|
34
23
|
logger: nacosLogger,
|
|
35
24
|
serverList: options.serverList,
|
|
36
25
|
namespace: options.namespace ?? 'public',
|
|
37
|
-
transport: options.transport ?? 'grpc',
|
|
38
26
|
username: options.username,
|
|
39
27
|
password: options.password,
|
|
40
28
|
ssl: options.ssl,
|
|
@@ -42,17 +30,16 @@ function createNamingClient(options) {
|
|
|
42
30
|
sk: options.sk,
|
|
43
31
|
appName: options.appName,
|
|
44
32
|
});
|
|
45
|
-
return client;
|
|
46
33
|
}
|
|
47
|
-
/** 创建 Config 客户端 */
|
|
48
34
|
function createConfigClient(options) {
|
|
49
35
|
if (!options)
|
|
50
36
|
return null;
|
|
51
|
-
|
|
52
|
-
|
|
37
|
+
assertSupportedTransport(options.transport);
|
|
38
|
+
return new nacos_1.NacosConfigClient({
|
|
53
39
|
serverAddr: options.serverAddr,
|
|
54
|
-
|
|
55
|
-
|
|
40
|
+
// The SDK sends an empty string as `tenant=`. Nacos 2.5.x treats that
|
|
41
|
+
// differently from an omitted tenant, so public namespace must be omitted.
|
|
42
|
+
namespace: !options.namespace || options.namespace === 'public' ? undefined : options.namespace,
|
|
56
43
|
username: options.username,
|
|
57
44
|
password: options.password,
|
|
58
45
|
ssl: options.ssl,
|
|
@@ -60,9 +47,36 @@ function createConfigClient(options) {
|
|
|
60
47
|
secretKey: options.secretKey,
|
|
61
48
|
signatureRegionId: options.signatureRegionId,
|
|
62
49
|
});
|
|
63
|
-
return client;
|
|
64
50
|
}
|
|
65
|
-
/**
|
|
51
|
+
/** Expands the simple shared connection fields into SDK-specific options. */
|
|
52
|
+
function normalizeNacosOptions(input) {
|
|
53
|
+
const options = typeof input === 'string'
|
|
54
|
+
? { serverAddr: input }
|
|
55
|
+
: input;
|
|
56
|
+
const sharedAddress = options.serverAddr;
|
|
57
|
+
const shared = {
|
|
58
|
+
namespace: options.namespace,
|
|
59
|
+
username: options.username,
|
|
60
|
+
password: options.password,
|
|
61
|
+
ssl: options.ssl,
|
|
62
|
+
};
|
|
63
|
+
const naming = options.naming
|
|
64
|
+
? { ...shared, ...options.naming }
|
|
65
|
+
: sharedAddress
|
|
66
|
+
? { ...shared, serverList: sharedAddress }
|
|
67
|
+
: undefined;
|
|
68
|
+
const config = options.config
|
|
69
|
+
? { ...shared, ...options.config }
|
|
70
|
+
: sharedAddress
|
|
71
|
+
? { ...shared, serverAddr: sharedAddress }
|
|
72
|
+
: undefined;
|
|
73
|
+
return { ...options, naming, config };
|
|
74
|
+
}
|
|
75
|
+
function assertSupportedTransport(transport) {
|
|
76
|
+
if (transport === 'grpc') {
|
|
77
|
+
throw new Error('transport "grpc" is not supported: nacos@2.6.x only implements the Nacos HTTP OpenAPI');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
66
80
|
exports.nacosClientProviders = [
|
|
67
81
|
{
|
|
68
82
|
provide: nacos_constants_1.NACOS_NAMING_CLIENT,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nacos.providers.js","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"nacos.providers.js","sourceRoot":"","sources":["../src/nacos.providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NacosConfigFormat, NacosRetryOptions } from './nacos.interfaces';
|
|
2
|
+
export declare function resolveConfigFormat(dataId: string, format?: NacosConfigFormat): NacosConfigFormat;
|
|
3
|
+
export declare function parseConfigContent<T = unknown>(content: string, format?: NacosConfigFormat, dataId?: string): T;
|
|
4
|
+
export declare function mergeConfigValues(target: unknown, source: unknown): unknown;
|
|
5
|
+
export declare function withRetry<T>(operation: () => Promise<T>, options?: NacosRetryOptions): Promise<T>;
|
|
6
|
+
//# sourceMappingURL=nacos.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nacos.utils.d.ts","sourceRoot":"","sources":["../src/nacos.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,iBAA0B,GAAG,iBAAiB,CAOzG;AAED,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAC5C,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,iBAA0B,EAClC,MAAM,SAAK,GACV,CAAC,CAgBH;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAO3E;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,CAkBvG"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveConfigFormat = resolveConfigFormat;
|
|
4
|
+
exports.parseConfigContent = parseConfigContent;
|
|
5
|
+
exports.mergeConfigValues = mergeConfigValues;
|
|
6
|
+
exports.withRetry = withRetry;
|
|
7
|
+
const js_yaml_1 = require("js-yaml");
|
|
8
|
+
function resolveConfigFormat(dataId, format = 'auto') {
|
|
9
|
+
if (format !== 'auto')
|
|
10
|
+
return format;
|
|
11
|
+
const extension = dataId.toLowerCase().split('.').pop();
|
|
12
|
+
if (extension === 'json')
|
|
13
|
+
return 'json';
|
|
14
|
+
if (extension === 'yaml' || extension === 'yml')
|
|
15
|
+
return 'yaml';
|
|
16
|
+
if (extension === 'properties' || extension === 'props')
|
|
17
|
+
return 'properties';
|
|
18
|
+
return 'txt';
|
|
19
|
+
}
|
|
20
|
+
function parseConfigContent(content, format = 'auto', dataId = '') {
|
|
21
|
+
const resolved = resolveConfigFormat(dataId, format);
|
|
22
|
+
if (resolved === 'txt')
|
|
23
|
+
return content;
|
|
24
|
+
if (resolved === 'json')
|
|
25
|
+
return JSON.parse(content);
|
|
26
|
+
if (resolved === 'yaml')
|
|
27
|
+
return (0, js_yaml_1.load)(content);
|
|
28
|
+
const result = {};
|
|
29
|
+
for (const originalLine of content.split(/\r?\n/)) {
|
|
30
|
+
const line = originalLine.trim();
|
|
31
|
+
if (!line || line.startsWith('#') || line.startsWith('!'))
|
|
32
|
+
continue;
|
|
33
|
+
const separator = line.search(/(?<!\\)[=:]/);
|
|
34
|
+
const key = (separator < 0 ? line : line.slice(0, separator)).trim();
|
|
35
|
+
const value = (separator < 0 ? '' : line.slice(separator + 1)).trim();
|
|
36
|
+
result[key.replace(/\\([:= ])/g, '$1')] = value.replace(/\\n/g, '\n').replace(/\\t/g, '\t');
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
function mergeConfigValues(target, source) {
|
|
41
|
+
if (!isPlainObject(target) || !isPlainObject(source))
|
|
42
|
+
return cloneValue(source);
|
|
43
|
+
const merged = { ...target };
|
|
44
|
+
for (const [key, value] of Object.entries(source)) {
|
|
45
|
+
merged[key] = key in merged ? mergeConfigValues(merged[key], value) : cloneValue(value);
|
|
46
|
+
}
|
|
47
|
+
return merged;
|
|
48
|
+
}
|
|
49
|
+
async function withRetry(operation, options) {
|
|
50
|
+
const attempts = Math.max(1, options?.attempts ?? 3);
|
|
51
|
+
let delay = Math.max(0, options?.delayMs ?? 300);
|
|
52
|
+
const factor = Math.max(1, options?.backoffFactor ?? 2);
|
|
53
|
+
const maxDelay = Math.max(delay, options?.maxDelayMs ?? 3000);
|
|
54
|
+
let lastError;
|
|
55
|
+
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
56
|
+
try {
|
|
57
|
+
return await operation();
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
lastError = error;
|
|
61
|
+
if (attempt < attempts && delay > 0) {
|
|
62
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
63
|
+
delay = Math.min(maxDelay, delay * factor);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
throw lastError;
|
|
68
|
+
}
|
|
69
|
+
function isPlainObject(value) {
|
|
70
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
71
|
+
}
|
|
72
|
+
function cloneValue(value) {
|
|
73
|
+
if (Array.isArray(value))
|
|
74
|
+
return value.map(cloneValue);
|
|
75
|
+
if (!isPlainObject(value))
|
|
76
|
+
return value;
|
|
77
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, cloneValue(item)]));
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=nacos.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nacos.utils.js","sourceRoot":"","sources":["../src/nacos.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danqiusheng/nest-nacos",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "NestJS Nacos
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"description": "NestJS Nacos 2.x configuration and service-discovery integration",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist",
|
|
9
9
|
"README.md",
|
|
10
|
+
"README.en.md",
|
|
11
|
+
"CHANGELOG.md",
|
|
10
12
|
"LICENSE"
|
|
11
13
|
],
|
|
12
14
|
"scripts": {
|
|
13
15
|
"build": "rimraf dist && tsc",
|
|
16
|
+
"test": "npm run test:unit",
|
|
17
|
+
"test:unit": "ts-node test/unit.ts",
|
|
18
|
+
"test:simple-e2e": "ts-node test/simple-options.e2e.ts",
|
|
19
|
+
"typecheck:example": "tsc --project tsconfig.example.json --noEmit",
|
|
14
20
|
"start:example": "ts-node example/app.module.ts",
|
|
15
|
-
"prepublishOnly": "npm run build"
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
"prepublishOnly": "npm run build && npm test && npm run typecheck:example"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"js-yaml": "^4.3.0",
|
|
25
|
+
"nacos-config": "^2.6.3"
|
|
18
26
|
},
|
|
19
27
|
"peerDependencies": {
|
|
20
28
|
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
@@ -28,6 +36,7 @@
|
|
|
28
36
|
"@nestjs/config": "^4.0.0",
|
|
29
37
|
"@nestjs/core": "^11.0.0",
|
|
30
38
|
"@nestjs/testing": "^11.1.28",
|
|
39
|
+
"@types/js-yaml": "^4.0.9",
|
|
31
40
|
"@types/node": "^26.1.2",
|
|
32
41
|
"nacos": "^2.6.3",
|
|
33
42
|
"reflect-metadata": "^0.2.2",
|
|
@@ -44,17 +53,17 @@
|
|
|
44
53
|
"config-center",
|
|
45
54
|
"configuration",
|
|
46
55
|
"microservice",
|
|
47
|
-
"
|
|
56
|
+
"load-balancing"
|
|
48
57
|
],
|
|
49
58
|
"repository": {
|
|
50
59
|
"type": "git",
|
|
51
|
-
"url": "git+https://
|
|
60
|
+
"url": "git+https://gitee.com/li-zucheng/nacos-plugin.git"
|
|
52
61
|
},
|
|
53
62
|
"bugs": {
|
|
54
|
-
"url": "https://
|
|
63
|
+
"url": "https://gitee.com/li-zucheng/nacos-plugin/issues"
|
|
55
64
|
},
|
|
56
|
-
"homepage": "https://
|
|
57
|
-
"author": "
|
|
65
|
+
"homepage": "https://gitee.com/li-zucheng/nacos-plugin",
|
|
66
|
+
"author": "danqiusheng",
|
|
58
67
|
"license": "MIT",
|
|
59
68
|
"engines": {
|
|
60
69
|
"node": ">=16"
|