nacos-sdk-rust-binding-node 0.5.3 → 0.6.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/AGENTS.md +148 -0
- package/Cargo.toml +4 -3
- package/README.md +1 -1
- package/index.d.ts +98 -100
- package/index.js +202 -530
- package/package.json +15 -15
- package/src/config.rs +8 -4
- package/src/lib.rs +14 -0
- package/src/naming.rs +6 -3
package/AGENTS.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to AI coding agents when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
This is a Node.js native addon providing bindings to the Nacos service discovery and configuration management system. It uses [napi-rs](https://napi.rs/) to bridge Rust (`nacos-sdk-rust`) with Node.js/TypeScript, offering better performance than the official JavaScript SDK which lacks gRPC support.
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
### Hybrid Rust/Node.js Structure
|
|
12
|
+
|
|
13
|
+
- **Rust Layer** (`src/*.rs`): Core Nacos client implementation using `nacos-sdk-rust`
|
|
14
|
+
- `lib.rs`: Entry point, `ClientOptions` struct
|
|
15
|
+
- `config.rs`: Configuration management (`NacosConfigClient`)
|
|
16
|
+
- `naming.rs`: Service discovery (`NacosNamingClient`)
|
|
17
|
+
- `plugin.rs`: Config filter plugin interface for encryption/decryption
|
|
18
|
+
|
|
19
|
+
- **TypeScript Definitions** (`index.d.ts`): Auto-generated from Rust code via `napi-rs` during build
|
|
20
|
+
|
|
21
|
+
### Key Data Flows
|
|
22
|
+
|
|
23
|
+
1. **Config Client**: `getConfig()` → Rust SDK → Nacos Server → async response
|
|
24
|
+
2. **Naming Client**: `registerInstance()` → Rust SDK → Nacos Server → async response
|
|
25
|
+
3. **Subscriptions**: Rust SDK maintains long-lived gRPC connections; pushes updates via `ThreadsafeFunction` callbacks to JS
|
|
26
|
+
|
|
27
|
+
### Type Conventions
|
|
28
|
+
|
|
29
|
+
- Rust `Option<T>` maps to TypeScript `T | undefined | null`
|
|
30
|
+
- Async Rust methods return JavaScript Promises
|
|
31
|
+
- Callbacks use `ThreadsafeFunction` for thread-safe JS invocation from Rust
|
|
32
|
+
- Nacos errors are converted to JS `Error` with reason string
|
|
33
|
+
|
|
34
|
+
## Build System
|
|
35
|
+
|
|
36
|
+
This project uses:
|
|
37
|
+
- **Cargo**: Rust dependency management and compilation
|
|
38
|
+
- **napi-rs**: Native Node.js addon framework
|
|
39
|
+
- **Yarn 3.4.1**: Package manager (specified in `packageManager` field)
|
|
40
|
+
|
|
41
|
+
### Common Commands
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Install dependencies
|
|
45
|
+
yarn install
|
|
46
|
+
|
|
47
|
+
# Build debug native addon (faster, for development)
|
|
48
|
+
yarn build:debug
|
|
49
|
+
|
|
50
|
+
# Build release native addon (optimized)
|
|
51
|
+
yarn build
|
|
52
|
+
|
|
53
|
+
# Run tests (requires compiled .node file)
|
|
54
|
+
yarn test
|
|
55
|
+
|
|
56
|
+
# Collect build artifacts for distribution
|
|
57
|
+
yarn artifacts
|
|
58
|
+
|
|
59
|
+
# Create universal macOS binary (combines x64 + arm64)
|
|
60
|
+
yarn universal
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Cross-Compilation Targets
|
|
64
|
+
|
|
65
|
+
The CI builds for multiple platforms (see `.github/workflows/CI.yml`):
|
|
66
|
+
- macOS: `x86_64-apple-darwin`, `aarch64-apple-darwin`, `universal-apple-darwin`
|
|
67
|
+
- Linux: `x86_64-unknown-linux-gnu/musl`, `aarch64-unknown-linux-gnu/musl`, `armv7-unknown-linux-gnueabihf`
|
|
68
|
+
- Windows: `x86_64-pc-windows-msvc`, `i686-pc-windows-msvc`, `aarch64-pc-windows-msvc`
|
|
69
|
+
- Android: `aarch64-linux-android`, `armv7-linux-androideabi`
|
|
70
|
+
|
|
71
|
+
Target-specific builds: `yarn build --target <target-triple>`
|
|
72
|
+
|
|
73
|
+
### Build Outputs
|
|
74
|
+
|
|
75
|
+
- Compiled native addon: `nacos-sdk-rust-binding-node.<platform>.node`
|
|
76
|
+
- TypeScript definitions: `index.d.ts` (auto-generated)
|
|
77
|
+
|
|
78
|
+
## Testing
|
|
79
|
+
|
|
80
|
+
Uses [AVA](https://github.com/avajs/ava) test framework with 3-minute timeout:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Run all tests
|
|
84
|
+
yarn test
|
|
85
|
+
|
|
86
|
+
# Run a specific test file
|
|
87
|
+
yarn test __test__/index.spec.mjs
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Note: Tests require the native addon to be built first (`index.node` must exist).
|
|
91
|
+
|
|
92
|
+
## Environment Variables
|
|
93
|
+
|
|
94
|
+
- `NACOS_CLIENT_LOGGER_LEVEL`: Log level (default: `INFO`, logs to `$HOME/logs/nacos/`)
|
|
95
|
+
- `NACOS_CLIENT_COMMON_THREAD_CORES`: Client thread pool size (default: `1`)
|
|
96
|
+
- `NACOS_CLIENT_NAMING_PUSH_EMPTY_PROTECTION`: Protect against empty service list pushes (default: `true`)
|
|
97
|
+
|
|
98
|
+
See [nacos-sdk-rust docs](https://github.com/nacos-group/nacos-sdk-rust) for more environment variables.
|
|
99
|
+
|
|
100
|
+
## API Usage Patterns
|
|
101
|
+
|
|
102
|
+
### Config Client
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
const { NacosConfigClient } = require('nacos-sdk-rust-binding-node');
|
|
106
|
+
|
|
107
|
+
const client = new NacosConfigClient({
|
|
108
|
+
serverAddr: '127.0.0.1:8848',
|
|
109
|
+
namespace: 'my-namespace',
|
|
110
|
+
// Optional auth:
|
|
111
|
+
username: 'user',
|
|
112
|
+
password: 'pass'
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const content = await client.getConfig('dataId', 'group');
|
|
116
|
+
await client.addListener('dataId', 'group', (err, config) => {
|
|
117
|
+
// Handle push updates
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Naming Client
|
|
122
|
+
|
|
123
|
+
```javascript
|
|
124
|
+
const { NacosNamingClient } = require('nacos-sdk-rust-binding-node');
|
|
125
|
+
|
|
126
|
+
const client = new NacosNamingClient({
|
|
127
|
+
serverAddr: '127.0.0.1:8848',
|
|
128
|
+
namespace: 'my-namespace'
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
await client.registerInstance('service', 'group', {
|
|
132
|
+
ip: '192.168.1.1',
|
|
133
|
+
port: 8080
|
|
134
|
+
});
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Important Implementation Notes
|
|
138
|
+
|
|
139
|
+
- **removeListener/unSubscribe**: These are NOOPs - the underlying Rust SDK doesn't implement removal, but this is typically not problematic as listeners are long-lived
|
|
140
|
+
- **Clients are stateful**: Each client maintains persistent gRPC connections; create once and reuse for the application lifecycle
|
|
141
|
+
- **Auth methods**: Supports HTTP token auth (username/password) or Alibaba Cloud RAM (access_key/access_secret)
|
|
142
|
+
- **Build dependency**: require `nacos-sdk-rust` and `napi`
|
|
143
|
+
|
|
144
|
+
## Troubleshooting
|
|
145
|
+
|
|
146
|
+
- If build fails, ensure Rust toolchain is up to date: `rustup update stable && cargo update`
|
|
147
|
+
- For cross-compilation issues, refer to the Docker images and setup in CI workflow
|
|
148
|
+
- Native addon loading errors usually indicate platform/architecture mismatch between build target and runtime
|
package/Cargo.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "nacos-sdk-rust-binding-node"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.6.0"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
publish = false
|
|
@@ -19,10 +19,11 @@ crate-type = ["cdylib"]
|
|
|
19
19
|
napi = { version = "2", default-features = false, features = ["napi4", "async"] }
|
|
20
20
|
napi-derive = "2"
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
nacos-sdk = { git = "https://github.com/nacos-group/nacos-sdk-rust.git", branch = "main", features = ["default", "auth-by-aliyun", "tracing-log"] }
|
|
22
|
+
nacos-sdk = { version = "0.6.0", features = ["default", "auth-by-aliyun", "tracing-log"] }
|
|
23
|
+
#nacos-sdk = { git = "https://github.com/nacos-group/nacos-sdk-rust.git", branch = "main", features = ["default", "auth-by-aliyun", "tracing-log"] }
|
|
24
24
|
|
|
25
25
|
async-trait = "0.1"
|
|
26
|
+
tokio = { version = "1", features = ["rt"] }
|
|
26
27
|
|
|
27
28
|
[build-dependencies]
|
|
28
29
|
napi-build = "2"
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ npm 包 -> https://www.npmjs.com/package/nacos-sdk-rust-binding-node
|
|
|
13
13
|
|
|
14
14
|
环境变量 `NACOS_CLIENT_COMMON_THREAD_CORES=4` 可设置客户端核心线程数,默认 1
|
|
15
15
|
|
|
16
|
-
环境变量 `
|
|
16
|
+
环境变量 `NACOS_CLIENT_NAMING_PUSH_EMPTY_PROTECTION=false` 可关闭 Naming 防推空保护,默认 true
|
|
17
17
|
|
|
18
18
|
更多环境变量请看 `nacos-sdk-rust` 的[文档说明](https://github.com/nacos-group/nacos-sdk-rust)
|
|
19
19
|
|
package/index.d.ts
CHANGED
|
@@ -1,9 +1,99 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* tslint:disable */
|
|
2
2
|
/* eslint-disable */
|
|
3
|
+
|
|
4
|
+
/* auto-generated by NAPI-RS */
|
|
5
|
+
|
|
6
|
+
export declare function sum(a: number, b: number): number
|
|
7
|
+
export interface ClientOptions {
|
|
8
|
+
/** Server Addr, e.g. address:port[,address:port],...] */
|
|
9
|
+
serverAddr: string
|
|
10
|
+
/** Namespace/Tenant */
|
|
11
|
+
namespace: string
|
|
12
|
+
/** AppName */
|
|
13
|
+
appName?: string
|
|
14
|
+
/** Username for Auth, Login by Http with Token */
|
|
15
|
+
username?: string
|
|
16
|
+
/** Password for Auth, Login by Http with Token */
|
|
17
|
+
password?: string
|
|
18
|
+
/** Access_Key for Auth, Login by Aliyun Ram */
|
|
19
|
+
accessKey?: string
|
|
20
|
+
/** Access_Secret for Auth, Login by Aliyun Ram */
|
|
21
|
+
accessSecret?: string
|
|
22
|
+
/** Signature_Region_Id for Auth, Login by Aliyun Ram */
|
|
23
|
+
signatureRegionId?: string
|
|
24
|
+
/** naming push_empty_protection, default true */
|
|
25
|
+
namingPushEmptyProtection?: boolean
|
|
26
|
+
/** naming load_cache_at_start, default false */
|
|
27
|
+
namingLoadCacheAtStart?: boolean
|
|
28
|
+
/** config load_cache_at_start, default false */
|
|
29
|
+
configLoadCacheAtStart?: boolean
|
|
30
|
+
}
|
|
31
|
+
export interface NacosConfigResponse {
|
|
32
|
+
/** Namespace/Tenant */
|
|
33
|
+
namespace: string
|
|
34
|
+
/** DataId */
|
|
35
|
+
dataId: string
|
|
36
|
+
/** Group */
|
|
37
|
+
group: string
|
|
38
|
+
/** Content */
|
|
39
|
+
content: string
|
|
40
|
+
/** Content's Type; e.g. json,properties,xml,html,text,yaml */
|
|
41
|
+
contentType: string
|
|
42
|
+
/** Content's md5 */
|
|
43
|
+
md5: string
|
|
44
|
+
}
|
|
45
|
+
export interface NacosServiceInstance {
|
|
46
|
+
/** Instance Id */
|
|
47
|
+
instanceId?: string
|
|
48
|
+
/** Ip */
|
|
49
|
+
ip: string
|
|
50
|
+
/** Port */
|
|
51
|
+
port: number
|
|
52
|
+
/** Weight, default 1.0 */
|
|
53
|
+
weight?: number
|
|
54
|
+
/** Healthy or not, default true */
|
|
55
|
+
healthy?: boolean
|
|
56
|
+
/** Enabled ot not, default true */
|
|
57
|
+
enabled?: boolean
|
|
58
|
+
/** Ephemeral or not, default true */
|
|
59
|
+
ephemeral?: boolean
|
|
60
|
+
/** Cluster Name, default 'DEFAULT' */
|
|
61
|
+
clusterName?: string
|
|
62
|
+
/** Service Name */
|
|
63
|
+
serviceName?: string
|
|
64
|
+
/** Metadata, default '{}' */
|
|
65
|
+
metadata?: Record<string, string>
|
|
66
|
+
}
|
|
67
|
+
/** ConfigReq for [`ConfigFilter`] */
|
|
68
|
+
export interface NacosConfigReq {
|
|
69
|
+
/** DataId */
|
|
70
|
+
dataId: string
|
|
71
|
+
/** Group */
|
|
72
|
+
group: string
|
|
73
|
+
/** Namespace/Tenant */
|
|
74
|
+
namespace: string
|
|
75
|
+
/** Content */
|
|
76
|
+
content: string
|
|
77
|
+
/** Content's Encrypted Data Key. */
|
|
78
|
+
encryptedDataKey: string
|
|
79
|
+
}
|
|
80
|
+
/** ConfigResp for [`ConfigFilter`] */
|
|
81
|
+
export interface NacosConfigResp {
|
|
82
|
+
/** DataId */
|
|
83
|
+
dataId: string
|
|
84
|
+
/** Group */
|
|
85
|
+
group: string
|
|
86
|
+
/** Namespace/Tenant */
|
|
87
|
+
namespace: string
|
|
88
|
+
/** Content */
|
|
89
|
+
content: string
|
|
90
|
+
/** Content's Encrypted Data Key. */
|
|
91
|
+
encryptedDataKey: string
|
|
92
|
+
}
|
|
3
93
|
/** Client api of Nacos Config. */
|
|
4
|
-
export
|
|
94
|
+
export class NacosConfigClient {
|
|
5
95
|
/** Build a Config Client. */
|
|
6
|
-
constructor(clientOptions: ClientOptions, configFilter?: (
|
|
96
|
+
constructor(clientOptions: ClientOptions, configFilter?: (err: Error | null, arg0?: NacosConfigReq | undefined | null, arg1?: NacosConfigResp | undefined | null) => any | undefined | null)
|
|
7
97
|
/**
|
|
8
98
|
* Get config's content.
|
|
9
99
|
* If it fails, pay attention to err
|
|
@@ -28,17 +118,16 @@ export declare class NacosConfigClient {
|
|
|
28
118
|
* Add NacosConfigChangeListener callback func, which listen the config change.
|
|
29
119
|
* If it fails, pay attention to err
|
|
30
120
|
*/
|
|
31
|
-
addListener(dataId: string, group: string, listener: (
|
|
121
|
+
addListener(dataId: string, group: string, listener: (err: Error | null, arg: NacosConfigResponse) => any): Promise<void>
|
|
32
122
|
/**
|
|
33
123
|
* Remove NacosConfigChangeListener callback func, but noop....
|
|
34
124
|
* The logic is not implemented internally, and only APIs are provided as compatibility.
|
|
35
125
|
* Users maybe do not need it? Not removing the listener is not a big problem, Sorry!
|
|
36
126
|
*/
|
|
37
|
-
removeListener(dataId: string, group: string, listener: (
|
|
127
|
+
removeListener(dataId: string, group: string, listener: (err: Error | null, arg: NacosConfigResponse) => any): Promise<void>
|
|
38
128
|
}
|
|
39
|
-
|
|
40
129
|
/** Client api of Nacos Naming. */
|
|
41
|
-
export
|
|
130
|
+
export class NacosNamingClient {
|
|
42
131
|
/** Build a Naming Client. */
|
|
43
132
|
constructor(clientOptions: ClientOptions)
|
|
44
133
|
/**
|
|
@@ -75,102 +164,11 @@ export declare class NacosNamingClient {
|
|
|
75
164
|
* Add NacosNamingEventListener callback func, which listen the instance change.
|
|
76
165
|
* If it fails, pay attention to err
|
|
77
166
|
*/
|
|
78
|
-
subscribe(serviceName: string, group: string, clusters: Array<string> | undefined | null, listener: (
|
|
167
|
+
subscribe(serviceName: string, group: string, clusters: Array<string> | undefined | null, listener: (err: Error | null, arg: Array<NacosServiceInstance>) => any): Promise<void>
|
|
79
168
|
/**
|
|
80
169
|
* Remove NacosNamingEventListener callback func, but noop....
|
|
81
170
|
* The logic is not implemented internally, and only APIs are provided as compatibility.
|
|
82
171
|
* Users maybe do not need it? Not removing the subscription is not a big problem, Sorry!
|
|
83
172
|
*/
|
|
84
|
-
unSubscribe(serviceName: string, group: string, clusters: Array<string> | undefined | null, listener: (
|
|
173
|
+
unSubscribe(serviceName: string, group: string, clusters: Array<string> | undefined | null, listener: (err: Error | null, arg: Array<NacosServiceInstance>) => any): Promise<void>
|
|
85
174
|
}
|
|
86
|
-
|
|
87
|
-
export interface ClientOptions {
|
|
88
|
-
/** Server Addr, e.g. address:port[,address:port],...] */
|
|
89
|
-
serverAddr: string
|
|
90
|
-
/** Namespace/Tenant */
|
|
91
|
-
namespace: string
|
|
92
|
-
/** AppName */
|
|
93
|
-
appName?: string
|
|
94
|
-
/** Username for Auth, Login by Http with Token */
|
|
95
|
-
username?: string
|
|
96
|
-
/** Password for Auth, Login by Http with Token */
|
|
97
|
-
password?: string
|
|
98
|
-
/** Access_Key for Auth, Login by Aliyun Ram */
|
|
99
|
-
accessKey?: string
|
|
100
|
-
/** Access_Secret for Auth, Login by Aliyun Ram */
|
|
101
|
-
accessSecret?: string
|
|
102
|
-
/** Signature_Region_Id for Auth, Login by Aliyun Ram */
|
|
103
|
-
signatureRegionId?: string
|
|
104
|
-
/** naming push_empty_protection, default true */
|
|
105
|
-
namingPushEmptyProtection?: boolean
|
|
106
|
-
/** naming load_cache_at_start, default false */
|
|
107
|
-
namingLoadCacheAtStart?: boolean
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** ConfigReq for [`ConfigFilter`] */
|
|
111
|
-
export interface NacosConfigReq {
|
|
112
|
-
/** DataId */
|
|
113
|
-
dataId: string
|
|
114
|
-
/** Group */
|
|
115
|
-
group: string
|
|
116
|
-
/** Namespace/Tenant */
|
|
117
|
-
namespace: string
|
|
118
|
-
/** Content */
|
|
119
|
-
content: string
|
|
120
|
-
/** Content's Encrypted Data Key. */
|
|
121
|
-
encryptedDataKey: string
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** ConfigResp for [`ConfigFilter`] */
|
|
125
|
-
export interface NacosConfigResp {
|
|
126
|
-
/** DataId */
|
|
127
|
-
dataId: string
|
|
128
|
-
/** Group */
|
|
129
|
-
group: string
|
|
130
|
-
/** Namespace/Tenant */
|
|
131
|
-
namespace: string
|
|
132
|
-
/** Content */
|
|
133
|
-
content: string
|
|
134
|
-
/** Content's Encrypted Data Key. */
|
|
135
|
-
encryptedDataKey: string
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export interface NacosConfigResponse {
|
|
139
|
-
/** Namespace/Tenant */
|
|
140
|
-
namespace: string
|
|
141
|
-
/** DataId */
|
|
142
|
-
dataId: string
|
|
143
|
-
/** Group */
|
|
144
|
-
group: string
|
|
145
|
-
/** Content */
|
|
146
|
-
content: string
|
|
147
|
-
/** Content's Type; e.g. json,properties,xml,html,text,yaml */
|
|
148
|
-
contentType: string
|
|
149
|
-
/** Content's md5 */
|
|
150
|
-
md5: string
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export interface NacosServiceInstance {
|
|
154
|
-
/** Instance Id */
|
|
155
|
-
instanceId?: string
|
|
156
|
-
/** Ip */
|
|
157
|
-
ip: string
|
|
158
|
-
/** Port */
|
|
159
|
-
port: number
|
|
160
|
-
/** Weight, default 1.0 */
|
|
161
|
-
weight?: number
|
|
162
|
-
/** Healthy or not, default true */
|
|
163
|
-
healthy?: boolean
|
|
164
|
-
/** Enabled ot not, default true */
|
|
165
|
-
enabled?: boolean
|
|
166
|
-
/** Ephemeral or not, default true */
|
|
167
|
-
ephemeral?: boolean
|
|
168
|
-
/** Cluster Name, default 'DEFAULT' */
|
|
169
|
-
clusterName?: string
|
|
170
|
-
/** Service Name */
|
|
171
|
-
serviceName?: string
|
|
172
|
-
/** Metadata, default '{}' */
|
|
173
|
-
metadata?: Record<string, string>
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
export declare function sum(a: number, b: number): number
|
package/index.js
CHANGED
|
@@ -1,581 +1,253 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// @ts-nocheck
|
|
4
|
-
/* auto-generated by NAPI-RS */
|
|
1
|
+
const { existsSync, readFileSync } = require('fs')
|
|
2
|
+
const { join } = require('path')
|
|
5
3
|
|
|
6
|
-
const {
|
|
7
|
-
let nativeBinding = null
|
|
8
|
-
const loadErrors = []
|
|
9
|
-
|
|
10
|
-
const isMusl = () => {
|
|
11
|
-
let musl = false
|
|
12
|
-
if (process.platform === 'linux') {
|
|
13
|
-
musl = isMuslFromFilesystem()
|
|
14
|
-
if (musl === null) {
|
|
15
|
-
musl = isMuslFromReport()
|
|
16
|
-
}
|
|
17
|
-
if (musl === null) {
|
|
18
|
-
musl = isMuslFromChildProcess()
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return musl
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const isFileMusl = (f) => f.includes('libc.musl-') || f.includes('ld-musl-')
|
|
4
|
+
const { platform, arch } = process
|
|
25
5
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} catch {
|
|
30
|
-
return null
|
|
31
|
-
}
|
|
32
|
-
}
|
|
6
|
+
let nativeBinding = null
|
|
7
|
+
let localFileExisted = false
|
|
8
|
+
let loadError = null
|
|
33
9
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (typeof process.report
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return null
|
|
42
|
-
}
|
|
43
|
-
if (report.header && report.header.glibcVersionRuntime) {
|
|
44
|
-
return false
|
|
45
|
-
}
|
|
46
|
-
if (Array.isArray(report.sharedObjects)) {
|
|
47
|
-
if (report.sharedObjects.some(isFileMusl)) {
|
|
10
|
+
function isMusl() {
|
|
11
|
+
// For Node 10
|
|
12
|
+
if (!process.report || typeof process.report.getReport !== 'function') {
|
|
13
|
+
try {
|
|
14
|
+
const lddPath = require('child_process').execSync('which ldd').toString().trim();
|
|
15
|
+
return readFileSync(lddPath, 'utf8').includes('musl')
|
|
16
|
+
} catch (e) {
|
|
48
17
|
return true
|
|
49
18
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const isMuslFromChildProcess = () => {
|
|
55
|
-
try {
|
|
56
|
-
return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl')
|
|
57
|
-
} catch (e) {
|
|
58
|
-
// If we reach this case, we don't know if the system is musl or not, so is better to just fallback to false
|
|
59
|
-
return false
|
|
19
|
+
} else {
|
|
20
|
+
const { glibcVersionRuntime } = process.report.getReport().header
|
|
21
|
+
return !glibcVersionRuntime
|
|
60
22
|
}
|
|
61
23
|
}
|
|
62
24
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return require('./nacos-sdk-rust-binding-node.android-arm64.node')
|
|
74
|
-
} catch (e) {
|
|
75
|
-
loadErrors.push(e)
|
|
76
|
-
}
|
|
77
|
-
try {
|
|
78
|
-
const binding = require('nacos-sdk-rust-binding-node-android-arm64')
|
|
79
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-android-arm64/package.json').version
|
|
80
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
81
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
82
|
-
}
|
|
83
|
-
return binding
|
|
84
|
-
} catch (e) {
|
|
85
|
-
loadErrors.push(e)
|
|
86
|
-
}
|
|
87
|
-
} else if (process.arch === 'arm') {
|
|
88
|
-
try {
|
|
89
|
-
return require('./nacos-sdk-rust-binding-node.android-arm-eabi.node')
|
|
90
|
-
} catch (e) {
|
|
91
|
-
loadErrors.push(e)
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
const binding = require('nacos-sdk-rust-binding-node-android-arm-eabi')
|
|
95
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-android-arm-eabi/package.json').version
|
|
96
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
97
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
98
|
-
}
|
|
99
|
-
return binding
|
|
100
|
-
} catch (e) {
|
|
101
|
-
loadErrors.push(e)
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
loadErrors.push(new Error(`Unsupported architecture on Android ${process.arch}`))
|
|
105
|
-
}
|
|
106
|
-
} else if (process.platform === 'win32') {
|
|
107
|
-
if (process.arch === 'x64') {
|
|
108
|
-
if (process.config?.variables?.shlib_suffix === 'dll.a' || process.config?.variables?.node_target_type === 'shared_library') {
|
|
109
|
-
try {
|
|
110
|
-
return require('./nacos-sdk-rust-binding-node.win32-x64-gnu.node')
|
|
111
|
-
} catch (e) {
|
|
112
|
-
loadErrors.push(e)
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
const binding = require('nacos-sdk-rust-binding-node-win32-x64-gnu')
|
|
116
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-win32-x64-gnu/package.json').version
|
|
117
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
118
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
119
|
-
}
|
|
120
|
-
return binding
|
|
121
|
-
} catch (e) {
|
|
122
|
-
loadErrors.push(e)
|
|
123
|
-
}
|
|
124
|
-
} else {
|
|
125
|
-
try {
|
|
126
|
-
return require('./nacos-sdk-rust-binding-node.win32-x64-msvc.node')
|
|
127
|
-
} catch (e) {
|
|
128
|
-
loadErrors.push(e)
|
|
129
|
-
}
|
|
130
|
-
try {
|
|
131
|
-
const binding = require('nacos-sdk-rust-binding-node-win32-x64-msvc')
|
|
132
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-win32-x64-msvc/package.json').version
|
|
133
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
134
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
135
|
-
}
|
|
136
|
-
return binding
|
|
137
|
-
} catch (e) {
|
|
138
|
-
loadErrors.push(e)
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
} else if (process.arch === 'ia32') {
|
|
142
|
-
try {
|
|
143
|
-
return require('./nacos-sdk-rust-binding-node.win32-ia32-msvc.node')
|
|
144
|
-
} catch (e) {
|
|
145
|
-
loadErrors.push(e)
|
|
146
|
-
}
|
|
147
|
-
try {
|
|
148
|
-
const binding = require('nacos-sdk-rust-binding-node-win32-ia32-msvc')
|
|
149
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-win32-ia32-msvc/package.json').version
|
|
150
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
151
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
152
|
-
}
|
|
153
|
-
return binding
|
|
154
|
-
} catch (e) {
|
|
155
|
-
loadErrors.push(e)
|
|
156
|
-
}
|
|
157
|
-
} else if (process.arch === 'arm64') {
|
|
158
|
-
try {
|
|
159
|
-
return require('./nacos-sdk-rust-binding-node.win32-arm64-msvc.node')
|
|
160
|
-
} catch (e) {
|
|
161
|
-
loadErrors.push(e)
|
|
162
|
-
}
|
|
163
|
-
try {
|
|
164
|
-
const binding = require('nacos-sdk-rust-binding-node-win32-arm64-msvc')
|
|
165
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-win32-arm64-msvc/package.json').version
|
|
166
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
167
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
168
|
-
}
|
|
169
|
-
return binding
|
|
170
|
-
} catch (e) {
|
|
171
|
-
loadErrors.push(e)
|
|
172
|
-
}
|
|
173
|
-
} else {
|
|
174
|
-
loadErrors.push(new Error(`Unsupported architecture on Windows: ${process.arch}`))
|
|
175
|
-
}
|
|
176
|
-
} else if (process.platform === 'darwin') {
|
|
177
|
-
try {
|
|
178
|
-
return require('./nacos-sdk-rust-binding-node.darwin-universal.node')
|
|
179
|
-
} catch (e) {
|
|
180
|
-
loadErrors.push(e)
|
|
181
|
-
}
|
|
182
|
-
try {
|
|
183
|
-
const binding = require('nacos-sdk-rust-binding-node-darwin-universal')
|
|
184
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-darwin-universal/package.json').version
|
|
185
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
186
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
187
|
-
}
|
|
188
|
-
return binding
|
|
189
|
-
} catch (e) {
|
|
190
|
-
loadErrors.push(e)
|
|
191
|
-
}
|
|
192
|
-
if (process.arch === 'x64') {
|
|
193
|
-
try {
|
|
194
|
-
return require('./nacos-sdk-rust-binding-node.darwin-x64.node')
|
|
195
|
-
} catch (e) {
|
|
196
|
-
loadErrors.push(e)
|
|
197
|
-
}
|
|
198
|
-
try {
|
|
199
|
-
const binding = require('nacos-sdk-rust-binding-node-darwin-x64')
|
|
200
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-darwin-x64/package.json').version
|
|
201
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
202
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
203
|
-
}
|
|
204
|
-
return binding
|
|
205
|
-
} catch (e) {
|
|
206
|
-
loadErrors.push(e)
|
|
207
|
-
}
|
|
208
|
-
} else if (process.arch === 'arm64') {
|
|
209
|
-
try {
|
|
210
|
-
return require('./nacos-sdk-rust-binding-node.darwin-arm64.node')
|
|
211
|
-
} catch (e) {
|
|
212
|
-
loadErrors.push(e)
|
|
213
|
-
}
|
|
214
|
-
try {
|
|
215
|
-
const binding = require('nacos-sdk-rust-binding-node-darwin-arm64')
|
|
216
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-darwin-arm64/package.json').version
|
|
217
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
218
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
219
|
-
}
|
|
220
|
-
return binding
|
|
221
|
-
} catch (e) {
|
|
222
|
-
loadErrors.push(e)
|
|
223
|
-
}
|
|
224
|
-
} else {
|
|
225
|
-
loadErrors.push(new Error(`Unsupported architecture on macOS: ${process.arch}`))
|
|
226
|
-
}
|
|
227
|
-
} else if (process.platform === 'freebsd') {
|
|
228
|
-
if (process.arch === 'x64') {
|
|
229
|
-
try {
|
|
230
|
-
return require('./nacos-sdk-rust-binding-node.freebsd-x64.node')
|
|
231
|
-
} catch (e) {
|
|
232
|
-
loadErrors.push(e)
|
|
233
|
-
}
|
|
234
|
-
try {
|
|
235
|
-
const binding = require('nacos-sdk-rust-binding-node-freebsd-x64')
|
|
236
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-freebsd-x64/package.json').version
|
|
237
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
238
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
239
|
-
}
|
|
240
|
-
return binding
|
|
241
|
-
} catch (e) {
|
|
242
|
-
loadErrors.push(e)
|
|
243
|
-
}
|
|
244
|
-
} else if (process.arch === 'arm64') {
|
|
245
|
-
try {
|
|
246
|
-
return require('./nacos-sdk-rust-binding-node.freebsd-arm64.node')
|
|
247
|
-
} catch (e) {
|
|
248
|
-
loadErrors.push(e)
|
|
249
|
-
}
|
|
250
|
-
try {
|
|
251
|
-
const binding = require('nacos-sdk-rust-binding-node-freebsd-arm64')
|
|
252
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-freebsd-arm64/package.json').version
|
|
253
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
254
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
255
|
-
}
|
|
256
|
-
return binding
|
|
257
|
-
} catch (e) {
|
|
258
|
-
loadErrors.push(e)
|
|
259
|
-
}
|
|
260
|
-
} else {
|
|
261
|
-
loadErrors.push(new Error(`Unsupported architecture on FreeBSD: ${process.arch}`))
|
|
262
|
-
}
|
|
263
|
-
} else if (process.platform === 'linux') {
|
|
264
|
-
if (process.arch === 'x64') {
|
|
265
|
-
if (isMusl()) {
|
|
266
|
-
try {
|
|
267
|
-
return require('./nacos-sdk-rust-binding-node.linux-x64-musl.node')
|
|
268
|
-
} catch (e) {
|
|
269
|
-
loadErrors.push(e)
|
|
270
|
-
}
|
|
271
|
-
try {
|
|
272
|
-
const binding = require('nacos-sdk-rust-binding-node-linux-x64-musl')
|
|
273
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-linux-x64-musl/package.json').version
|
|
274
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
275
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
25
|
+
switch (platform) {
|
|
26
|
+
case 'android':
|
|
27
|
+
switch (arch) {
|
|
28
|
+
case 'arm64':
|
|
29
|
+
localFileExisted = existsSync(join(__dirname, 'nacos-sdk-rust-binding-node.android-arm64.node'))
|
|
30
|
+
try {
|
|
31
|
+
if (localFileExisted) {
|
|
32
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.android-arm64.node')
|
|
33
|
+
} else {
|
|
34
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-android-arm64')
|
|
276
35
|
}
|
|
277
|
-
return binding
|
|
278
|
-
} catch (e) {
|
|
279
|
-
loadErrors.push(e)
|
|
280
|
-
}
|
|
281
|
-
} else {
|
|
282
|
-
try {
|
|
283
|
-
return require('./nacos-sdk-rust-binding-node.linux-x64-gnu.node')
|
|
284
36
|
} catch (e) {
|
|
285
|
-
|
|
37
|
+
loadError = e
|
|
286
38
|
}
|
|
39
|
+
break
|
|
40
|
+
case 'arm':
|
|
41
|
+
localFileExisted = existsSync(join(__dirname, 'nacos-sdk-rust-binding-node.android-arm-eabi.node'))
|
|
287
42
|
try {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
43
|
+
if (localFileExisted) {
|
|
44
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.android-arm-eabi.node')
|
|
45
|
+
} else {
|
|
46
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-android-arm-eabi')
|
|
292
47
|
}
|
|
293
|
-
return binding
|
|
294
|
-
} catch (e) {
|
|
295
|
-
loadErrors.push(e)
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
} else if (process.arch === 'arm64') {
|
|
299
|
-
if (isMusl()) {
|
|
300
|
-
try {
|
|
301
|
-
return require('./nacos-sdk-rust-binding-node.linux-arm64-musl.node')
|
|
302
48
|
} catch (e) {
|
|
303
|
-
|
|
49
|
+
loadError = e
|
|
304
50
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
51
|
+
break
|
|
52
|
+
default:
|
|
53
|
+
throw new Error(`Unsupported architecture on Android ${arch}`)
|
|
54
|
+
}
|
|
55
|
+
break
|
|
56
|
+
case 'win32':
|
|
57
|
+
switch (arch) {
|
|
58
|
+
case 'x64':
|
|
59
|
+
localFileExisted = existsSync(
|
|
60
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.win32-x64-msvc.node')
|
|
61
|
+
)
|
|
62
|
+
try {
|
|
63
|
+
if (localFileExisted) {
|
|
64
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.win32-x64-msvc.node')
|
|
65
|
+
} else {
|
|
66
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-win32-x64-msvc')
|
|
310
67
|
}
|
|
311
|
-
return binding
|
|
312
|
-
} catch (e) {
|
|
313
|
-
loadErrors.push(e)
|
|
314
|
-
}
|
|
315
|
-
} else {
|
|
316
|
-
try {
|
|
317
|
-
return require('./nacos-sdk-rust-binding-node.linux-arm64-gnu.node')
|
|
318
68
|
} catch (e) {
|
|
319
|
-
|
|
69
|
+
loadError = e
|
|
320
70
|
}
|
|
71
|
+
break
|
|
72
|
+
case 'ia32':
|
|
73
|
+
localFileExisted = existsSync(
|
|
74
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.win32-ia32-msvc.node')
|
|
75
|
+
)
|
|
321
76
|
try {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
77
|
+
if (localFileExisted) {
|
|
78
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.win32-ia32-msvc.node')
|
|
79
|
+
} else {
|
|
80
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-win32-ia32-msvc')
|
|
326
81
|
}
|
|
327
|
-
return binding
|
|
328
|
-
} catch (e) {
|
|
329
|
-
loadErrors.push(e)
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
} else if (process.arch === 'arm') {
|
|
333
|
-
if (isMusl()) {
|
|
334
|
-
try {
|
|
335
|
-
return require('./nacos-sdk-rust-binding-node.linux-arm-musleabihf.node')
|
|
336
82
|
} catch (e) {
|
|
337
|
-
|
|
83
|
+
loadError = e
|
|
338
84
|
}
|
|
85
|
+
break
|
|
86
|
+
case 'arm64':
|
|
87
|
+
localFileExisted = existsSync(
|
|
88
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.win32-arm64-msvc.node')
|
|
89
|
+
)
|
|
339
90
|
try {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
91
|
+
if (localFileExisted) {
|
|
92
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.win32-arm64-msvc.node')
|
|
93
|
+
} else {
|
|
94
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-win32-arm64-msvc')
|
|
344
95
|
}
|
|
345
|
-
return binding
|
|
346
96
|
} catch (e) {
|
|
347
|
-
|
|
97
|
+
loadError = e
|
|
348
98
|
}
|
|
99
|
+
break
|
|
100
|
+
default:
|
|
101
|
+
throw new Error(`Unsupported architecture on Windows: ${arch}`)
|
|
102
|
+
}
|
|
103
|
+
break
|
|
104
|
+
case 'darwin':
|
|
105
|
+
localFileExisted = existsSync(join(__dirname, 'nacos-sdk-rust-binding-node.darwin-universal.node'))
|
|
106
|
+
try {
|
|
107
|
+
if (localFileExisted) {
|
|
108
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.darwin-universal.node')
|
|
349
109
|
} else {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
if (
|
|
359
|
-
|
|
110
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-darwin-universal')
|
|
111
|
+
}
|
|
112
|
+
break
|
|
113
|
+
} catch {}
|
|
114
|
+
switch (arch) {
|
|
115
|
+
case 'x64':
|
|
116
|
+
localFileExisted = existsSync(join(__dirname, 'nacos-sdk-rust-binding-node.darwin-x64.node'))
|
|
117
|
+
try {
|
|
118
|
+
if (localFileExisted) {
|
|
119
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.darwin-x64.node')
|
|
120
|
+
} else {
|
|
121
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-darwin-x64')
|
|
360
122
|
}
|
|
361
|
-
return binding
|
|
362
|
-
} catch (e) {
|
|
363
|
-
loadErrors.push(e)
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
} else if (process.arch === 'loong64') {
|
|
367
|
-
if (isMusl()) {
|
|
368
|
-
try {
|
|
369
|
-
return require('./nacos-sdk-rust-binding-node.linux-loong64-musl.node')
|
|
370
123
|
} catch (e) {
|
|
371
|
-
|
|
124
|
+
loadError = e
|
|
372
125
|
}
|
|
126
|
+
break
|
|
127
|
+
case 'arm64':
|
|
128
|
+
localFileExisted = existsSync(
|
|
129
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.darwin-arm64.node')
|
|
130
|
+
)
|
|
373
131
|
try {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
132
|
+
if (localFileExisted) {
|
|
133
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.darwin-arm64.node')
|
|
134
|
+
} else {
|
|
135
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-darwin-arm64')
|
|
378
136
|
}
|
|
379
|
-
return binding
|
|
380
137
|
} catch (e) {
|
|
381
|
-
|
|
138
|
+
loadError = e
|
|
382
139
|
}
|
|
140
|
+
break
|
|
141
|
+
default:
|
|
142
|
+
throw new Error(`Unsupported architecture on macOS: ${arch}`)
|
|
143
|
+
}
|
|
144
|
+
break
|
|
145
|
+
case 'freebsd':
|
|
146
|
+
if (arch !== 'x64') {
|
|
147
|
+
throw new Error(`Unsupported architecture on FreeBSD: ${arch}`)
|
|
148
|
+
}
|
|
149
|
+
localFileExisted = existsSync(join(__dirname, 'nacos-sdk-rust-binding-node.freebsd-x64.node'))
|
|
150
|
+
try {
|
|
151
|
+
if (localFileExisted) {
|
|
152
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.freebsd-x64.node')
|
|
383
153
|
} else {
|
|
384
|
-
|
|
385
|
-
return require('./nacos-sdk-rust-binding-node.linux-loong64-gnu.node')
|
|
386
|
-
} catch (e) {
|
|
387
|
-
loadErrors.push(e)
|
|
388
|
-
}
|
|
389
|
-
try {
|
|
390
|
-
const binding = require('nacos-sdk-rust-binding-node-linux-loong64-gnu')
|
|
391
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-linux-loong64-gnu/package.json').version
|
|
392
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
393
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
394
|
-
}
|
|
395
|
-
return binding
|
|
396
|
-
} catch (e) {
|
|
397
|
-
loadErrors.push(e)
|
|
398
|
-
}
|
|
154
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-freebsd-x64')
|
|
399
155
|
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
156
|
+
} catch (e) {
|
|
157
|
+
loadError = e
|
|
158
|
+
}
|
|
159
|
+
break
|
|
160
|
+
case 'linux':
|
|
161
|
+
switch (arch) {
|
|
162
|
+
case 'x64':
|
|
163
|
+
if (isMusl()) {
|
|
164
|
+
localFileExisted = existsSync(
|
|
165
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.linux-x64-musl.node')
|
|
166
|
+
)
|
|
167
|
+
try {
|
|
168
|
+
if (localFileExisted) {
|
|
169
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.linux-x64-musl.node')
|
|
170
|
+
} else {
|
|
171
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-linux-x64-musl')
|
|
172
|
+
}
|
|
173
|
+
} catch (e) {
|
|
174
|
+
loadError = e
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
localFileExisted = existsSync(
|
|
178
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.linux-x64-gnu.node')
|
|
179
|
+
)
|
|
180
|
+
try {
|
|
181
|
+
if (localFileExisted) {
|
|
182
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.linux-x64-gnu.node')
|
|
183
|
+
} else {
|
|
184
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-linux-x64-gnu')
|
|
185
|
+
}
|
|
186
|
+
} catch (e) {
|
|
187
|
+
loadError = e
|
|
412
188
|
}
|
|
413
|
-
return binding
|
|
414
|
-
} catch (e) {
|
|
415
|
-
loadErrors.push(e)
|
|
416
189
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
190
|
+
break
|
|
191
|
+
case 'arm64':
|
|
192
|
+
if (isMusl()) {
|
|
193
|
+
localFileExisted = existsSync(
|
|
194
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.linux-arm64-musl.node')
|
|
195
|
+
)
|
|
196
|
+
try {
|
|
197
|
+
if (localFileExisted) {
|
|
198
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.linux-arm64-musl.node')
|
|
199
|
+
} else {
|
|
200
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-linux-arm64-musl')
|
|
201
|
+
}
|
|
202
|
+
} catch (e) {
|
|
203
|
+
loadError = e
|
|
204
|
+
}
|
|
205
|
+
} else {
|
|
206
|
+
localFileExisted = existsSync(
|
|
207
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.linux-arm64-gnu.node')
|
|
208
|
+
)
|
|
209
|
+
try {
|
|
210
|
+
if (localFileExisted) {
|
|
211
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.linux-arm64-gnu.node')
|
|
212
|
+
} else {
|
|
213
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-linux-arm64-gnu')
|
|
214
|
+
}
|
|
215
|
+
} catch (e) {
|
|
216
|
+
loadError = e
|
|
217
|
+
}
|
|
422
218
|
}
|
|
219
|
+
break
|
|
220
|
+
case 'arm':
|
|
221
|
+
localFileExisted = existsSync(
|
|
222
|
+
join(__dirname, 'nacos-sdk-rust-binding-node.linux-arm-gnueabihf.node')
|
|
223
|
+
)
|
|
423
224
|
try {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
225
|
+
if (localFileExisted) {
|
|
226
|
+
nativeBinding = require('./nacos-sdk-rust-binding-node.linux-arm-gnueabihf.node')
|
|
227
|
+
} else {
|
|
228
|
+
nativeBinding = require('nacos-sdk-rust-binding-node-linux-arm-gnueabihf')
|
|
428
229
|
}
|
|
429
|
-
return binding
|
|
430
230
|
} catch (e) {
|
|
431
|
-
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
} else if (process.arch === 'ppc64') {
|
|
435
|
-
try {
|
|
436
|
-
return require('./nacos-sdk-rust-binding-node.linux-ppc64-gnu.node')
|
|
437
|
-
} catch (e) {
|
|
438
|
-
loadErrors.push(e)
|
|
439
|
-
}
|
|
440
|
-
try {
|
|
441
|
-
const binding = require('nacos-sdk-rust-binding-node-linux-ppc64-gnu')
|
|
442
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-linux-ppc64-gnu/package.json').version
|
|
443
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
444
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
445
|
-
}
|
|
446
|
-
return binding
|
|
447
|
-
} catch (e) {
|
|
448
|
-
loadErrors.push(e)
|
|
449
|
-
}
|
|
450
|
-
} else if (process.arch === 's390x') {
|
|
451
|
-
try {
|
|
452
|
-
return require('./nacos-sdk-rust-binding-node.linux-s390x-gnu.node')
|
|
453
|
-
} catch (e) {
|
|
454
|
-
loadErrors.push(e)
|
|
455
|
-
}
|
|
456
|
-
try {
|
|
457
|
-
const binding = require('nacos-sdk-rust-binding-node-linux-s390x-gnu')
|
|
458
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-linux-s390x-gnu/package.json').version
|
|
459
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
460
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
461
|
-
}
|
|
462
|
-
return binding
|
|
463
|
-
} catch (e) {
|
|
464
|
-
loadErrors.push(e)
|
|
465
|
-
}
|
|
466
|
-
} else {
|
|
467
|
-
loadErrors.push(new Error(`Unsupported architecture on Linux: ${process.arch}`))
|
|
468
|
-
}
|
|
469
|
-
} else if (process.platform === 'openharmony') {
|
|
470
|
-
if (process.arch === 'arm64') {
|
|
471
|
-
try {
|
|
472
|
-
return require('./nacos-sdk-rust-binding-node.openharmony-arm64.node')
|
|
473
|
-
} catch (e) {
|
|
474
|
-
loadErrors.push(e)
|
|
475
|
-
}
|
|
476
|
-
try {
|
|
477
|
-
const binding = require('nacos-sdk-rust-binding-node-openharmony-arm64')
|
|
478
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-openharmony-arm64/package.json').version
|
|
479
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
480
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
481
|
-
}
|
|
482
|
-
return binding
|
|
483
|
-
} catch (e) {
|
|
484
|
-
loadErrors.push(e)
|
|
485
|
-
}
|
|
486
|
-
} else if (process.arch === 'x64') {
|
|
487
|
-
try {
|
|
488
|
-
return require('./nacos-sdk-rust-binding-node.openharmony-x64.node')
|
|
489
|
-
} catch (e) {
|
|
490
|
-
loadErrors.push(e)
|
|
491
|
-
}
|
|
492
|
-
try {
|
|
493
|
-
const binding = require('nacos-sdk-rust-binding-node-openharmony-x64')
|
|
494
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-openharmony-x64/package.json').version
|
|
495
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
496
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
231
|
+
loadError = e
|
|
497
232
|
}
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
}
|
|
502
|
-
} else if (process.arch === 'arm') {
|
|
503
|
-
try {
|
|
504
|
-
return require('./nacos-sdk-rust-binding-node.openharmony-arm.node')
|
|
505
|
-
} catch (e) {
|
|
506
|
-
loadErrors.push(e)
|
|
507
|
-
}
|
|
508
|
-
try {
|
|
509
|
-
const binding = require('nacos-sdk-rust-binding-node-openharmony-arm')
|
|
510
|
-
const bindingPackageVersion = require('nacos-sdk-rust-binding-node-openharmony-arm/package.json').version
|
|
511
|
-
if (bindingPackageVersion !== '0.5.3' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
512
|
-
throw new Error(`Native binding package version mismatch, expected 0.5.3 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
513
|
-
}
|
|
514
|
-
return binding
|
|
515
|
-
} catch (e) {
|
|
516
|
-
loadErrors.push(e)
|
|
517
|
-
}
|
|
518
|
-
} else {
|
|
519
|
-
loadErrors.push(new Error(`Unsupported architecture on OpenHarmony: ${process.arch}`))
|
|
233
|
+
break
|
|
234
|
+
default:
|
|
235
|
+
throw new Error(`Unsupported architecture on Linux: ${arch}`)
|
|
520
236
|
}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
nativeBinding = requireNative()
|
|
527
|
-
|
|
528
|
-
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
529
|
-
let wasiBinding = null
|
|
530
|
-
let wasiBindingError = null
|
|
531
|
-
try {
|
|
532
|
-
wasiBinding = require('./nacos-sdk-rust-binding-node.wasi.cjs')
|
|
533
|
-
nativeBinding = wasiBinding
|
|
534
|
-
} catch (err) {
|
|
535
|
-
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
536
|
-
wasiBindingError = err
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) {
|
|
540
|
-
try {
|
|
541
|
-
wasiBinding = require('nacos-sdk-rust-binding-node-wasm32-wasi')
|
|
542
|
-
nativeBinding = wasiBinding
|
|
543
|
-
} catch (err) {
|
|
544
|
-
if (process.env.NAPI_RS_FORCE_WASI) {
|
|
545
|
-
if (!wasiBindingError) {
|
|
546
|
-
wasiBindingError = err
|
|
547
|
-
} else {
|
|
548
|
-
wasiBindingError.cause = err
|
|
549
|
-
}
|
|
550
|
-
loadErrors.push(err)
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
}
|
|
554
|
-
if (process.env.NAPI_RS_FORCE_WASI === 'error' && !wasiBinding) {
|
|
555
|
-
const error = new Error('WASI binding not found and NAPI_RS_FORCE_WASI is set to error')
|
|
556
|
-
error.cause = wasiBindingError
|
|
557
|
-
throw error
|
|
558
|
-
}
|
|
237
|
+
break
|
|
238
|
+
default:
|
|
239
|
+
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`)
|
|
559
240
|
}
|
|
560
241
|
|
|
561
242
|
if (!nativeBinding) {
|
|
562
|
-
if (
|
|
563
|
-
throw
|
|
564
|
-
`Cannot find native binding. ` +
|
|
565
|
-
`npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828). ` +
|
|
566
|
-
'Please try `npm i` again after removing both package-lock.json and node_modules directory.',
|
|
567
|
-
{
|
|
568
|
-
cause: loadErrors.reduce((err, cur) => {
|
|
569
|
-
cur.cause = err
|
|
570
|
-
return cur
|
|
571
|
-
}),
|
|
572
|
-
},
|
|
573
|
-
)
|
|
243
|
+
if (loadError) {
|
|
244
|
+
throw loadError
|
|
574
245
|
}
|
|
575
246
|
throw new Error(`Failed to load native binding`)
|
|
576
247
|
}
|
|
577
248
|
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
module.exports.
|
|
581
|
-
module.exports.
|
|
249
|
+
const { sum, NacosConfigClient, NacosNamingClient } = nativeBinding
|
|
250
|
+
|
|
251
|
+
module.exports.sum = sum
|
|
252
|
+
module.exports.NacosConfigClient = NacosConfigClient
|
|
253
|
+
module.exports.NacosNamingClient = NacosNamingClient
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"binding",
|
|
8
8
|
"ffi"
|
|
9
9
|
],
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.6.0",
|
|
11
11
|
"bugs": "https://github.com/opc-source/nacos-sdk-rust-binding-node/issues",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"repository": {
|
|
@@ -55,19 +55,19 @@
|
|
|
55
55
|
},
|
|
56
56
|
"packageManager": "yarn@3.4.1",
|
|
57
57
|
"optionalDependencies": {
|
|
58
|
-
"nacos-sdk-rust-binding-node-win32-x64-msvc": "0.
|
|
59
|
-
"nacos-sdk-rust-binding-node-darwin-x64": "0.
|
|
60
|
-
"nacos-sdk-rust-binding-node-linux-x64-gnu": "0.
|
|
61
|
-
"nacos-sdk-rust-binding-node-darwin-arm64": "0.
|
|
62
|
-
"nacos-sdk-rust-binding-node-android-arm64": "0.
|
|
63
|
-
"nacos-sdk-rust-binding-node-linux-arm64-gnu": "0.
|
|
64
|
-
"nacos-sdk-rust-binding-node-linux-arm64-musl": "0.
|
|
65
|
-
"nacos-sdk-rust-binding-node-win32-arm64-msvc": "0.
|
|
66
|
-
"nacos-sdk-rust-binding-node-linux-arm-gnueabihf": "0.
|
|
67
|
-
"nacos-sdk-rust-binding-node-linux-x64-musl": "0.
|
|
68
|
-
"nacos-sdk-rust-binding-node-freebsd-x64": "0.
|
|
69
|
-
"nacos-sdk-rust-binding-node-win32-ia32-msvc": "0.
|
|
70
|
-
"nacos-sdk-rust-binding-node-android-arm-eabi": "0.
|
|
71
|
-
"nacos-sdk-rust-binding-node-darwin-universal": "0.
|
|
58
|
+
"nacos-sdk-rust-binding-node-win32-x64-msvc": "0.6.0",
|
|
59
|
+
"nacos-sdk-rust-binding-node-darwin-x64": "0.6.0",
|
|
60
|
+
"nacos-sdk-rust-binding-node-linux-x64-gnu": "0.6.0",
|
|
61
|
+
"nacos-sdk-rust-binding-node-darwin-arm64": "0.6.0",
|
|
62
|
+
"nacos-sdk-rust-binding-node-android-arm64": "0.6.0",
|
|
63
|
+
"nacos-sdk-rust-binding-node-linux-arm64-gnu": "0.6.0",
|
|
64
|
+
"nacos-sdk-rust-binding-node-linux-arm64-musl": "0.6.0",
|
|
65
|
+
"nacos-sdk-rust-binding-node-win32-arm64-msvc": "0.6.0",
|
|
66
|
+
"nacos-sdk-rust-binding-node-linux-arm-gnueabihf": "0.6.0",
|
|
67
|
+
"nacos-sdk-rust-binding-node-linux-x64-musl": "0.6.0",
|
|
68
|
+
"nacos-sdk-rust-binding-node-freebsd-x64": "0.6.0",
|
|
69
|
+
"nacos-sdk-rust-binding-node-win32-ia32-msvc": "0.6.0",
|
|
70
|
+
"nacos-sdk-rust-binding-node-android-arm-eabi": "0.6.0",
|
|
71
|
+
"nacos-sdk-rust-binding-node-darwin-universal": "0.6.0"
|
|
72
72
|
}
|
|
73
73
|
}
|
package/src/config.rs
CHANGED
|
@@ -29,7 +29,8 @@ impl NacosConfigClient {
|
|
|
29
29
|
client_options
|
|
30
30
|
.app_name
|
|
31
31
|
.unwrap_or(nacos_sdk::api::constants::UNKNOWN.to_string()),
|
|
32
|
-
)
|
|
32
|
+
)
|
|
33
|
+
.config_load_cache_at_start(client_options.config_load_cache_at_start.unwrap_or(false));
|
|
33
34
|
|
|
34
35
|
// need enable_auth_plugin_http with username & password
|
|
35
36
|
let is_enable_auth_http =
|
|
@@ -67,9 +68,12 @@ impl NacosConfigClient {
|
|
|
67
68
|
config_service_builder
|
|
68
69
|
};
|
|
69
70
|
|
|
70
|
-
let config_service =
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
let config_service = crate::get_runtime().block_on(async {
|
|
72
|
+
config_service_builder
|
|
73
|
+
.build()
|
|
74
|
+
.await
|
|
75
|
+
.map_err(|nacos_err| Error::from_reason(nacos_err.to_string()))
|
|
76
|
+
})?;
|
|
73
77
|
|
|
74
78
|
Ok(NacosConfigClient {
|
|
75
79
|
inner: config_service,
|
package/src/lib.rs
CHANGED
|
@@ -8,6 +8,18 @@ pub fn sum(a: i32, b: i32) -> i32 {
|
|
|
8
8
|
a + b
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
/// Global Tokio runtime for async operations in constructors
|
|
12
|
+
static RT: std::sync::OnceLock<tokio::runtime::Runtime> = std::sync::OnceLock::new();
|
|
13
|
+
|
|
14
|
+
pub fn get_runtime() -> &'static tokio::runtime::Runtime {
|
|
15
|
+
RT.get_or_init(|| {
|
|
16
|
+
tokio::runtime::Builder::new_current_thread()
|
|
17
|
+
.enable_all()
|
|
18
|
+
.build()
|
|
19
|
+
.expect("Failed to create Tokio runtime")
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
11
23
|
#[napi(object)]
|
|
12
24
|
pub struct ClientOptions {
|
|
13
25
|
/// Server Addr, e.g. address:port[,address:port],...]
|
|
@@ -30,6 +42,8 @@ pub struct ClientOptions {
|
|
|
30
42
|
pub naming_push_empty_protection: Option<bool>,
|
|
31
43
|
/// naming load_cache_at_start, default false
|
|
32
44
|
pub naming_load_cache_at_start: Option<bool>,
|
|
45
|
+
/// config load_cache_at_start, default false
|
|
46
|
+
pub config_load_cache_at_start: Option<bool>,
|
|
33
47
|
}
|
|
34
48
|
|
|
35
49
|
mod config;
|
package/src/naming.rs
CHANGED
|
@@ -53,9 +53,12 @@ impl NacosNamingClient {
|
|
|
53
53
|
nacos_sdk::api::naming::NamingServiceBuilder::new(props)
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
let naming_service =
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
let naming_service = crate::get_runtime().block_on(async {
|
|
57
|
+
naming_service_builder
|
|
58
|
+
.build()
|
|
59
|
+
.await
|
|
60
|
+
.map_err(|nacos_err| Error::from_reason(nacos_err.to_string()))
|
|
61
|
+
})?;
|
|
59
62
|
|
|
60
63
|
Ok(NacosNamingClient {
|
|
61
64
|
inner: naming_service,
|