@brookesia/service 0.1.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 +52 -0
- package/dist/common/brookesia-host.d.ts +19 -0
- package/dist/common/brookesia-host.d.ts.map +1 -0
- package/dist/common/brookesia-host.js +16 -0
- package/dist/common/brookesia-host.js.map +1 -0
- package/dist/common/index.d.ts +5 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +6 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/rpc-json.d.ts +5 -0
- package/dist/common/rpc-json.d.ts.map +1 -0
- package/dist/common/rpc-json.js +12 -0
- package/dist/common/rpc-json.js.map +1 -0
- package/dist/common/service-rpc.d.ts +11 -0
- package/dist/common/service-rpc.d.ts.map +1 -0
- package/dist/common/service-rpc.js +23 -0
- package/dist/common/service-rpc.js.map +1 -0
- package/dist/hosts/index.d.ts +3 -0
- package/dist/hosts/index.d.ts.map +1 -0
- package/dist/hosts/index.js +5 -0
- package/dist/hosts/index.js.map +1 -0
- package/dist/hosts/nvs-host.d.ts +9 -0
- package/dist/hosts/nvs-host.d.ts.map +1 -0
- package/dist/hosts/nvs-host.js +120 -0
- package/dist/hosts/nvs-host.js.map +1 -0
- package/dist/hosts/wifi-host.d.ts +20 -0
- package/dist/hosts/wifi-host.d.ts.map +1 -0
- package/dist/hosts/wifi-host.js +165 -0
- package/dist/hosts/wifi-host.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/nvs/index.d.ts +6 -0
- package/dist/nvs/index.d.ts.map +1 -0
- package/dist/nvs/index.js +7 -0
- package/dist/nvs/index.js.map +1 -0
- package/dist/nvs/nvs-client.d.ts +41 -0
- package/dist/nvs/nvs-client.d.ts.map +1 -0
- package/dist/nvs/nvs-client.js +64 -0
- package/dist/nvs/nvs-client.js.map +1 -0
- package/dist/nvs/nvs-types.d.ts +9 -0
- package/dist/nvs/nvs-types.d.ts.map +1 -0
- package/dist/nvs/nvs-types.js +4 -0
- package/dist/nvs/nvs-types.js.map +1 -0
- package/dist/nvs/nvs.d.ts +46 -0
- package/dist/nvs/nvs.d.ts.map +1 -0
- package/dist/nvs/nvs.js +87 -0
- package/dist/nvs/nvs.js.map +1 -0
- package/dist/wifi/index.d.ts +5 -0
- package/dist/wifi/index.d.ts.map +1 -0
- package/dist/wifi/index.js +7 -0
- package/dist/wifi/index.js.map +1 -0
- package/dist/wifi/wifi-client.d.ts +43 -0
- package/dist/wifi/wifi-client.d.ts.map +1 -0
- package/dist/wifi/wifi-client.js +81 -0
- package/dist/wifi/wifi-client.js.map +1 -0
- package/dist/wifi/wifi-types.d.ts +28 -0
- package/dist/wifi/wifi-types.d.ts.map +1 -0
- package/dist/wifi/wifi-types.js +4 -0
- package/dist/wifi/wifi-types.js.map +1 -0
- package/dist/wifi/wifi.d.ts +41 -0
- package/dist/wifi/wifi.d.ts.map +1 -0
- package/dist/wifi/wifi.js +95 -0
- package/dist/wifi/wifi.js.map +1 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @brookesia/service
|
|
2
|
+
|
|
3
|
+
JavaScript clients for ESP-Brookesia **device services**.
|
|
4
|
+
|
|
5
|
+
## Runtime (device / PC simulator)
|
|
6
|
+
|
|
7
|
+
```javascript
|
|
8
|
+
import nvs from '@brookesia/service/nvs';
|
|
9
|
+
|
|
10
|
+
if (nvs.available()) {
|
|
11
|
+
nvs.set('config', 'theme', 'dark');
|
|
12
|
+
nvs.close();
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Uses `globalThis.brookesia` injected by QuickJS runtime or a PC simulator.
|
|
17
|
+
|
|
18
|
+
- **npm `esp-brookesia-toolkit`** ships the **system** simulator (`brookesia simulate --target system` → `--bpk-path=`).
|
|
19
|
+
- **NVS / Wi-Fi PC mocks** are in **esp-brookesia** `brookesia_runtime_simulator`; configure `simulator.runtime.binary` and use `--target runtime` for lightweight service tests.
|
|
20
|
+
|
|
21
|
+
## Exports
|
|
22
|
+
|
|
23
|
+
| Subpath | Purpose |
|
|
24
|
+
|---------|---------|
|
|
25
|
+
| `@brookesia/service` | Shared RPC helpers |
|
|
26
|
+
| `@brookesia/service/nvs` | NVS app API |
|
|
27
|
+
| `@brookesia/service/wifi` | Wi-Fi app API |
|
|
28
|
+
| `@brookesia/service/hosts/nvs` | In-memory `BrookesiaHost` for NVS (Node/vitest only) |
|
|
29
|
+
| `@brookesia/service/hosts/wifi` | In-memory host for Wi-Fi (Node/vitest only) |
|
|
30
|
+
|
|
31
|
+
`hosts` = memory implementation of service RPC, **not** the PC `brookesia_simulator`.
|
|
32
|
+
|
|
33
|
+
## Node tests (apps)
|
|
34
|
+
|
|
35
|
+
App logic lives in your modules (e.g. `runNvsDemo`). Tests only inject a memory host:
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
import { runNvsDemo } from './nvs-demo.js';
|
|
39
|
+
import { createNvsHost } from '@brookesia/service/hosts/nvs';
|
|
40
|
+
|
|
41
|
+
globalThis.brookesia = { print: () => {} };
|
|
42
|
+
expect(runNvsDemo({ host: createNvsHost() })).toBe(true);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
See [esp-brookesia-apps/examples/service-tests](https://github.com/espressif/esp-brookesia-apps/tree/main/examples/service-tests).
|
|
46
|
+
|
|
47
|
+
## Development
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npm run build -w @brookesia/service
|
|
51
|
+
npm test -w @brookesia/service
|
|
52
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** JSON envelope returned by `brookesia.call_function` for service RPC. */
|
|
2
|
+
export type BrookesiaServiceResult<T = unknown> = {
|
|
3
|
+
success: boolean;
|
|
4
|
+
data?: T;
|
|
5
|
+
error?: string;
|
|
6
|
+
};
|
|
7
|
+
/** Subset of the host-injected global used by service clients. */
|
|
8
|
+
export interface BrookesiaHost {
|
|
9
|
+
service_available(name: string): boolean;
|
|
10
|
+
start_service(name: string): number;
|
|
11
|
+
stop_service(handle: number): void;
|
|
12
|
+
call_function(handle: number, functionName: string, paramsJson: string): string;
|
|
13
|
+
}
|
|
14
|
+
declare global {
|
|
15
|
+
var brookesia: BrookesiaHost | undefined;
|
|
16
|
+
}
|
|
17
|
+
export declare function getBrookesiaHost(): BrookesiaHost;
|
|
18
|
+
export declare function parseServiceResult<T>(json: string): T;
|
|
19
|
+
//# sourceMappingURL=brookesia-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brookesia-host.d.ts","sourceRoot":"","sources":["../../src/common/brookesia-host.ts"],"names":[],"mappings":"AAGA,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,OAAO,IAAI;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CACjF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,SAAS,EAAE,aAAa,GAAG,SAAS,CAAC;CAC1C;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAOhD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAMrD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
export function getBrookesiaHost() {
|
|
4
|
+
if (typeof globalThis.brookesia === 'undefined') {
|
|
5
|
+
throw new Error('global brookesia is not available — run inside ESP-Brookesia JS runtime (not Node without a mock)');
|
|
6
|
+
}
|
|
7
|
+
return globalThis.brookesia;
|
|
8
|
+
}
|
|
9
|
+
export function parseServiceResult(json) {
|
|
10
|
+
const result = JSON.parse(json);
|
|
11
|
+
if (!result.success) {
|
|
12
|
+
throw new Error(result.error ?? 'Brookesia service call failed');
|
|
13
|
+
}
|
|
14
|
+
return result.data;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=brookesia-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brookesia-host.js","sourceRoot":"","sources":["../../src/common/brookesia-host.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAqBzC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,WAAW,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC,SAAS,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,IAAY;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8B,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,+BAA+B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC,IAAS,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { BrookesiaHost, BrookesiaServiceResult } from './brookesia-host.js';
|
|
2
|
+
export { getBrookesiaHost, parseServiceResult } from './brookesia-host.js';
|
|
3
|
+
export { serializeRpcError, serializeRpcResult } from './rpc-json.js';
|
|
4
|
+
export { callServiceFunction, closeService, isServiceAvailable, openService, resolveHost, type ServiceClientOptions, type ServiceHandle, } from './service-rpc.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAGA,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,KAAK,oBAAoB,EACzB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
export { getBrookesiaHost, parseServiceResult } from './brookesia-host.js';
|
|
4
|
+
export { serializeRpcError, serializeRpcResult } from './rpc-json.js';
|
|
5
|
+
export { callServiceFunction, closeService, isServiceAvailable, openService, resolveHost, } from './service-rpc.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,WAAW,GAGZ,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Build JSON string returned by `brookesia.call_function` on success. */
|
|
2
|
+
export declare function serializeRpcResult<T>(data?: T): string;
|
|
3
|
+
/** Build JSON string returned by `brookesia.call_function` on failure. */
|
|
4
|
+
export declare function serializeRpcError(message: string): string;
|
|
5
|
+
//# sourceMappingURL=rpc-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-json.d.ts","sourceRoot":"","sources":["../../src/common/rpc-json.ts"],"names":[],"mappings":"AAKA,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAGtD;AAED,0EAA0E;AAC1E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
/** Build JSON string returned by `brookesia.call_function` on success. */
|
|
4
|
+
export function serializeRpcResult(data) {
|
|
5
|
+
const payload = { success: true, data };
|
|
6
|
+
return JSON.stringify(payload);
|
|
7
|
+
}
|
|
8
|
+
/** Build JSON string returned by `brookesia.call_function` on failure. */
|
|
9
|
+
export function serializeRpcError(message) {
|
|
10
|
+
return JSON.stringify({ success: false, error: message });
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=rpc-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-json.js","sourceRoot":"","sources":["../../src/common/rpc-json.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAIzC,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAI,IAAQ;IAC5C,MAAM,OAAO,GAA8B,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACnE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAmC,CAAC,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type BrookesiaHost } from './brookesia-host.js';
|
|
2
|
+
export type ServiceHandle = number;
|
|
3
|
+
export type ServiceClientOptions = {
|
|
4
|
+
host?: BrookesiaHost;
|
|
5
|
+
};
|
|
6
|
+
export declare function resolveHost(options?: ServiceClientOptions): BrookesiaHost;
|
|
7
|
+
export declare function isServiceAvailable(serviceName: string, options?: ServiceClientOptions): boolean;
|
|
8
|
+
export declare function openService(serviceName: string, options?: ServiceClientOptions): ServiceHandle;
|
|
9
|
+
export declare function closeService(handle: ServiceHandle, options?: ServiceClientOptions): void;
|
|
10
|
+
export declare function callServiceFunction<T>(host: BrookesiaHost, handle: ServiceHandle, functionName: string, params: Record<string, unknown>): T;
|
|
11
|
+
//# sourceMappingURL=service-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-rpc.d.ts","sourceRoot":"","sources":["../../src/common/service-rpc.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAEzE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAE/F;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAM9F;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAExF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,CAAC,CAIH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
import { getBrookesiaHost, parseServiceResult, } from './brookesia-host.js';
|
|
4
|
+
export function resolveHost(options) {
|
|
5
|
+
return options?.host ?? getBrookesiaHost();
|
|
6
|
+
}
|
|
7
|
+
export function isServiceAvailable(serviceName, options) {
|
|
8
|
+
return resolveHost(options).service_available(serviceName);
|
|
9
|
+
}
|
|
10
|
+
export function openService(serviceName, options) {
|
|
11
|
+
const host = resolveHost(options);
|
|
12
|
+
if (!host.service_available(serviceName)) {
|
|
13
|
+
throw new Error(`Service is not available (expected name "${serviceName}")`);
|
|
14
|
+
}
|
|
15
|
+
return host.start_service(serviceName);
|
|
16
|
+
}
|
|
17
|
+
export function closeService(handle, options) {
|
|
18
|
+
resolveHost(options).stop_service(handle);
|
|
19
|
+
}
|
|
20
|
+
export function callServiceFunction(host, handle, functionName, params) {
|
|
21
|
+
return parseServiceResult(host.call_function(handle, functionName, JSON.stringify(params)));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=service-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-rpc.js","sourceRoot":"","sources":["../../src/common/service-rpc.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAEzC,OAAO,EAEL,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,UAAU,WAAW,CAAC,OAA8B;IACxD,OAAO,OAAO,EAAE,IAAI,IAAI,gBAAgB,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAA8B;IACpF,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,OAA8B;IAC7E,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4CAA4C,WAAW,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAqB,EAAE,OAA8B;IAChF,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,IAAmB,EACnB,MAAqB,EACrB,YAAoB,EACpB,MAA+B;IAE/B,OAAO,kBAAkB,CACvB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hosts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
export { createNvsHost, resetNvsHostState } from './nvs-host.js';
|
|
4
|
+
export { createWifiHost, resetWifiHostState } from './wifi-host.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hosts/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAEzC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory {@link BrookesiaHost} for NVS RPC — Node/vitest only (no device runtime).
|
|
3
|
+
* Import: `@brookesia/service/hosts/nvs`
|
|
4
|
+
*/
|
|
5
|
+
import type { BrookesiaHost } from '../common/brookesia-host.js';
|
|
6
|
+
import type { NvsKeyValueMap } from '../nvs/nvs-types.js';
|
|
7
|
+
export declare function createNvsHost(initial?: Record<string, NvsKeyValueMap>): BrookesiaHost;
|
|
8
|
+
export declare function resetNvsHostState(): void;
|
|
9
|
+
//# sourceMappingURL=nvs-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nvs-host.d.ts","sourceRoot":"","sources":["../../src/hosts/nvs-host.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EAAgB,cAAc,EAA0B,MAAM,qBAAqB,CAAC;AA6BhG,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,aAAa,CAgGrF;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
import { serializeRpcError, serializeRpcResult } from '../common/rpc-json.js';
|
|
4
|
+
import { NVS_DEFAULT_NAMESPACE, NVS_FUNCTIONS, NVS_SERVICE_NAME } from '../nvs/nvs-client.js';
|
|
5
|
+
let nextHandle = 1;
|
|
6
|
+
const handles = new Map();
|
|
7
|
+
function namespaceKey(nspace) {
|
|
8
|
+
return nspace || NVS_DEFAULT_NAMESPACE;
|
|
9
|
+
}
|
|
10
|
+
function valueType(value) {
|
|
11
|
+
if (typeof value === 'boolean') {
|
|
12
|
+
return 'Bool';
|
|
13
|
+
}
|
|
14
|
+
if (typeof value === 'number') {
|
|
15
|
+
return 'Int';
|
|
16
|
+
}
|
|
17
|
+
return 'String';
|
|
18
|
+
}
|
|
19
|
+
function getStore(handle) {
|
|
20
|
+
const store = handles.get(handle);
|
|
21
|
+
if (!store) {
|
|
22
|
+
throw new Error(`NVS memory host: invalid handle ${handle}`);
|
|
23
|
+
}
|
|
24
|
+
return store;
|
|
25
|
+
}
|
|
26
|
+
export function createNvsHost(initial) {
|
|
27
|
+
const backing = new Map();
|
|
28
|
+
for (const [nspace, pairs] of Object.entries(initial ?? {})) {
|
|
29
|
+
backing.set(namespaceKey(nspace), new Map(Object.entries(pairs)));
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
service_available(name) {
|
|
33
|
+
return name === NVS_SERVICE_NAME;
|
|
34
|
+
},
|
|
35
|
+
start_service(name) {
|
|
36
|
+
if (name !== NVS_SERVICE_NAME) {
|
|
37
|
+
throw new Error(`NVS memory host: unknown service ${name}`);
|
|
38
|
+
}
|
|
39
|
+
const handle = nextHandle++;
|
|
40
|
+
const clone = new Map();
|
|
41
|
+
for (const [ns, entries] of backing) {
|
|
42
|
+
clone.set(ns, new Map(entries));
|
|
43
|
+
}
|
|
44
|
+
handles.set(handle, clone);
|
|
45
|
+
return handle;
|
|
46
|
+
},
|
|
47
|
+
stop_service(handle) {
|
|
48
|
+
handles.delete(handle);
|
|
49
|
+
},
|
|
50
|
+
call_function(handle, functionName, paramsJson) {
|
|
51
|
+
const store = getStore(handle);
|
|
52
|
+
const params = JSON.parse(paramsJson);
|
|
53
|
+
const nspace = namespaceKey(String(params.Nspace ?? NVS_DEFAULT_NAMESPACE));
|
|
54
|
+
try {
|
|
55
|
+
if (functionName === NVS_FUNCTIONS.Set) {
|
|
56
|
+
const pairs = params.KeyValuePairs;
|
|
57
|
+
if (!pairs || typeof pairs !== 'object') {
|
|
58
|
+
return serializeRpcError('KeyValuePairs required');
|
|
59
|
+
}
|
|
60
|
+
let ns = store.get(nspace);
|
|
61
|
+
if (!ns) {
|
|
62
|
+
ns = new Map();
|
|
63
|
+
store.set(nspace, ns);
|
|
64
|
+
}
|
|
65
|
+
for (const [key, value] of Object.entries(pairs)) {
|
|
66
|
+
ns.set(key, value);
|
|
67
|
+
}
|
|
68
|
+
return serializeRpcResult();
|
|
69
|
+
}
|
|
70
|
+
if (functionName === NVS_FUNCTIONS.Get) {
|
|
71
|
+
const ns = store.get(nspace) ?? new Map();
|
|
72
|
+
const keys = params.Keys;
|
|
73
|
+
const out = {};
|
|
74
|
+
const keyList = keys?.length ? keys : [...ns.keys()];
|
|
75
|
+
for (const key of keyList) {
|
|
76
|
+
const value = ns.get(key);
|
|
77
|
+
if (value !== undefined) {
|
|
78
|
+
out[key] = value;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return serializeRpcResult(out);
|
|
82
|
+
}
|
|
83
|
+
if (functionName === NVS_FUNCTIONS.List) {
|
|
84
|
+
const ns = store.get(nspace) ?? new Map();
|
|
85
|
+
const entries = [];
|
|
86
|
+
for (const [key, value] of ns) {
|
|
87
|
+
entries.push({ nspace, key, type: valueType(value) });
|
|
88
|
+
}
|
|
89
|
+
return serializeRpcResult(entries);
|
|
90
|
+
}
|
|
91
|
+
if (functionName === NVS_FUNCTIONS.Erase) {
|
|
92
|
+
const keys = params.Keys;
|
|
93
|
+
const ns = store.get(nspace);
|
|
94
|
+
if (!ns) {
|
|
95
|
+
return serializeRpcResult();
|
|
96
|
+
}
|
|
97
|
+
if (!keys?.length) {
|
|
98
|
+
store.delete(nspace);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
for (const key of keys) {
|
|
102
|
+
ns.delete(key);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return serializeRpcResult();
|
|
106
|
+
}
|
|
107
|
+
return serializeRpcError(`unknown function ${functionName}`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
111
|
+
return serializeRpcError(message);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function resetNvsHostState() {
|
|
117
|
+
handles.clear();
|
|
118
|
+
nextHandle = 1;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=nvs-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nvs-host.js","sourceRoot":"","sources":["../../src/hosts/nvs-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory BrookesiaHost for Wi-Fi — Node/vitest only, not used on device.
|
|
3
|
+
* Import: `@brookesia/service/hosts/wifi`
|
|
4
|
+
*/
|
|
5
|
+
import type { BrookesiaHost } from '../common/brookesia-host.js';
|
|
6
|
+
import type { WifiConnectApInfo, WifiGeneralState, WifiScanParams, WifiSoftApParams } from '../wifi/wifi-types.js';
|
|
7
|
+
type WifiMockState = {
|
|
8
|
+
generalState: WifiGeneralState;
|
|
9
|
+
connectAp: WifiConnectApInfo;
|
|
10
|
+
connectedAps: WifiConnectApInfo[];
|
|
11
|
+
scanParams: WifiScanParams;
|
|
12
|
+
scanRunning: boolean;
|
|
13
|
+
softApParams: WifiSoftApParams;
|
|
14
|
+
softApRunning: boolean;
|
|
15
|
+
provisionRunning: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare function createWifiHost(initial?: Partial<WifiMockState>): BrookesiaHost;
|
|
18
|
+
export declare function resetWifiHostState(): void;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=wifi-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wifi-host.d.ts","sourceRoot":"","sources":["../../src/hosts/wifi-host.ts"],"names":[],"mappings":"AAGA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAGjE,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,KAAK,aAAa,GAAG;IACnB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,gBAAgB,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAkEF,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAkH9E;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
import { serializeRpcError, serializeRpcResult } from '../common/rpc-json.js';
|
|
4
|
+
import { WIFI_FUNCTIONS, WIFI_SERVICE_NAME } from '../wifi/wifi-client.js';
|
|
5
|
+
let nextHandle = 1;
|
|
6
|
+
const handles = new Map();
|
|
7
|
+
function defaultState() {
|
|
8
|
+
return {
|
|
9
|
+
generalState: 'Idle',
|
|
10
|
+
connectAp: { ssid: '', password: '' },
|
|
11
|
+
connectedAps: [],
|
|
12
|
+
scanParams: { ap_count: 20, interval_ms: 10000, timeout_ms: 60000 },
|
|
13
|
+
scanRunning: false,
|
|
14
|
+
softApParams: { ssid: '', password: '', max_connection: 4 },
|
|
15
|
+
softApRunning: false,
|
|
16
|
+
provisionRunning: false,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function getState(handle) {
|
|
20
|
+
const state = handles.get(handle);
|
|
21
|
+
if (!state) {
|
|
22
|
+
throw new Error(`Wi-Fi memory host: invalid handle ${handle}`);
|
|
23
|
+
}
|
|
24
|
+
return state;
|
|
25
|
+
}
|
|
26
|
+
function applyGeneralAction(state, action) {
|
|
27
|
+
switch (action) {
|
|
28
|
+
case 'Init':
|
|
29
|
+
state.generalState = 'Inited';
|
|
30
|
+
break;
|
|
31
|
+
case 'Deinit':
|
|
32
|
+
state.generalState = 'Idle';
|
|
33
|
+
state.connectedAps = [];
|
|
34
|
+
state.scanRunning = false;
|
|
35
|
+
state.softApRunning = false;
|
|
36
|
+
state.provisionRunning = false;
|
|
37
|
+
break;
|
|
38
|
+
case 'Start':
|
|
39
|
+
if (state.generalState === 'Inited') {
|
|
40
|
+
state.generalState = 'Started';
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
case 'Stop':
|
|
44
|
+
if (state.generalState === 'Started' || state.generalState === 'Connected') {
|
|
45
|
+
state.generalState = 'Inited';
|
|
46
|
+
state.connectedAps = [];
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
case 'Connect':
|
|
50
|
+
if (state.generalState === 'Started' && state.connectAp.ssid) {
|
|
51
|
+
state.generalState = 'Connected';
|
|
52
|
+
state.connectedAps = [{ ...state.connectAp }];
|
|
53
|
+
}
|
|
54
|
+
break;
|
|
55
|
+
case 'Disconnect':
|
|
56
|
+
if (state.generalState === 'Connected') {
|
|
57
|
+
state.generalState = 'Started';
|
|
58
|
+
state.connectedAps = [];
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function createWifiHost(initial) {
|
|
66
|
+
const seed = { ...defaultState(), ...initial };
|
|
67
|
+
return {
|
|
68
|
+
service_available(name) {
|
|
69
|
+
return name === WIFI_SERVICE_NAME;
|
|
70
|
+
},
|
|
71
|
+
start_service(name) {
|
|
72
|
+
if (name !== WIFI_SERVICE_NAME) {
|
|
73
|
+
throw new Error(`Wi-Fi memory host: unknown service ${name}`);
|
|
74
|
+
}
|
|
75
|
+
const handle = nextHandle++;
|
|
76
|
+
handles.set(handle, {
|
|
77
|
+
...defaultState(),
|
|
78
|
+
connectAp: { ...seed.connectAp },
|
|
79
|
+
scanParams: { ...seed.scanParams },
|
|
80
|
+
softApParams: { ...seed.softApParams },
|
|
81
|
+
generalState: seed.generalState,
|
|
82
|
+
});
|
|
83
|
+
return handle;
|
|
84
|
+
},
|
|
85
|
+
stop_service(handle) {
|
|
86
|
+
handles.delete(handle);
|
|
87
|
+
},
|
|
88
|
+
call_function(handle, functionName, paramsJson) {
|
|
89
|
+
const state = getState(handle);
|
|
90
|
+
const params = JSON.parse(paramsJson);
|
|
91
|
+
try {
|
|
92
|
+
if (functionName === WIFI_FUNCTIONS.TriggerGeneralAction) {
|
|
93
|
+
applyGeneralAction(state, params.Action);
|
|
94
|
+
return serializeRpcResult();
|
|
95
|
+
}
|
|
96
|
+
if (functionName === WIFI_FUNCTIONS.GetGeneralState) {
|
|
97
|
+
return serializeRpcResult(state.generalState);
|
|
98
|
+
}
|
|
99
|
+
if (functionName === WIFI_FUNCTIONS.SetConnectAp) {
|
|
100
|
+
state.connectAp = {
|
|
101
|
+
ssid: String(params.SSID ?? ''),
|
|
102
|
+
password: String(params.Password ?? ''),
|
|
103
|
+
is_connectable: true,
|
|
104
|
+
};
|
|
105
|
+
return serializeRpcResult();
|
|
106
|
+
}
|
|
107
|
+
if (functionName === WIFI_FUNCTIONS.GetConnectAp) {
|
|
108
|
+
return serializeRpcResult({ ...state.connectAp });
|
|
109
|
+
}
|
|
110
|
+
if (functionName === WIFI_FUNCTIONS.GetConnectedAps) {
|
|
111
|
+
return serializeRpcResult([...state.connectedAps]);
|
|
112
|
+
}
|
|
113
|
+
if (functionName === WIFI_FUNCTIONS.SetScanParams) {
|
|
114
|
+
state.scanParams = { ...params.Param };
|
|
115
|
+
return serializeRpcResult();
|
|
116
|
+
}
|
|
117
|
+
if (functionName === WIFI_FUNCTIONS.TriggerScanStart) {
|
|
118
|
+
state.scanRunning = true;
|
|
119
|
+
return serializeRpcResult();
|
|
120
|
+
}
|
|
121
|
+
if (functionName === WIFI_FUNCTIONS.TriggerScanStop) {
|
|
122
|
+
state.scanRunning = false;
|
|
123
|
+
return serializeRpcResult();
|
|
124
|
+
}
|
|
125
|
+
if (functionName === WIFI_FUNCTIONS.SetSoftApParams) {
|
|
126
|
+
state.softApParams = { ...params.Param };
|
|
127
|
+
return serializeRpcResult();
|
|
128
|
+
}
|
|
129
|
+
if (functionName === WIFI_FUNCTIONS.GetSoftApParams) {
|
|
130
|
+
return serializeRpcResult({ ...state.softApParams });
|
|
131
|
+
}
|
|
132
|
+
if (functionName === WIFI_FUNCTIONS.TriggerSoftApStart) {
|
|
133
|
+
state.softApRunning = true;
|
|
134
|
+
return serializeRpcResult();
|
|
135
|
+
}
|
|
136
|
+
if (functionName === WIFI_FUNCTIONS.TriggerSoftApStop) {
|
|
137
|
+
state.softApRunning = false;
|
|
138
|
+
return serializeRpcResult();
|
|
139
|
+
}
|
|
140
|
+
if (functionName === WIFI_FUNCTIONS.TriggerSoftApProvisionStart) {
|
|
141
|
+
state.provisionRunning = true;
|
|
142
|
+
return serializeRpcResult();
|
|
143
|
+
}
|
|
144
|
+
if (functionName === WIFI_FUNCTIONS.TriggerSoftApProvisionStop) {
|
|
145
|
+
state.provisionRunning = false;
|
|
146
|
+
return serializeRpcResult();
|
|
147
|
+
}
|
|
148
|
+
if (functionName === WIFI_FUNCTIONS.ResetData) {
|
|
149
|
+
Object.assign(state, defaultState());
|
|
150
|
+
return serializeRpcResult();
|
|
151
|
+
}
|
|
152
|
+
return serializeRpcError(`unknown function ${functionName}`);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
156
|
+
return serializeRpcError(message);
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function resetWifiHostState() {
|
|
162
|
+
handles.clear();
|
|
163
|
+
nextHandle = 1;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=wifi-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wifi-host.js","sourceRoot":"","sources":["../../src/hosts/wifi-host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@brookesia/service` root — shared RPC host types only.
|
|
3
|
+
*
|
|
4
|
+
* Import device services by subpath:
|
|
5
|
+
* - `import nvs from '@brookesia/service/nvs'`
|
|
6
|
+
* - `import wifi from '@brookesia/service/wifi'`
|
|
7
|
+
*
|
|
8
|
+
* Node memory hosts: `@brookesia/service/hosts/nvs` | `.../hosts/wifi`
|
|
9
|
+
*/
|
|
10
|
+
export * from './common/index.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
/**
|
|
4
|
+
* `@brookesia/service` root — shared RPC host types only.
|
|
5
|
+
*
|
|
6
|
+
* Import device services by subpath:
|
|
7
|
+
* - `import nvs from '@brookesia/service/nvs'`
|
|
8
|
+
* - `import wifi from '@brookesia/service/wifi'`
|
|
9
|
+
*
|
|
10
|
+
* Node memory hosts: `@brookesia/service/hosts/nvs` | `.../hosts/wifi`
|
|
11
|
+
*/
|
|
12
|
+
export * from './common/index.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAEzC;;;;;;;;GAQG;AACH,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** App-facing NVS module (`import nvs from '@brookesia/service/nvs'`). */
|
|
2
|
+
export { default, configure, type NvsModuleOptions } from './nvs.js';
|
|
3
|
+
export type { NvsKeyValueMap, NvsValue, NvsEntryInfo, NvsValueType } from './nvs-types.js';
|
|
4
|
+
/** Low-level NVS service RPC helpers (advanced). */
|
|
5
|
+
export { NVS_DEFAULT_NAMESPACE, NVS_SERVICE_NAME, closeNvs, eraseNvs, getNvs, isNvsAvailable, listNvs, openNvs, setNvs, withNvs, type NvsClientOptions, type NvsHandle, } from './nvs-client.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nvs/index.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAErE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE3F,oDAAoD;AACpD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,gBAAgB,EACrB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* SPDX-FileCopyrightText: 2026 Espressif Systems (Shanghai) CO LTD */
|
|
2
|
+
/* SPDX-License-Identifier: Apache-2.0 */
|
|
3
|
+
/** App-facing NVS module (`import nvs from '@brookesia/service/nvs'`). */
|
|
4
|
+
export { default, configure } from './nvs.js';
|
|
5
|
+
/** Low-level NVS service RPC helpers (advanced). */
|
|
6
|
+
export { NVS_DEFAULT_NAMESPACE, NVS_SERVICE_NAME, closeNvs, eraseNvs, getNvs, isNvsAvailable, listNvs, openNvs, setNvs, withNvs, } from './nvs-client.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nvs/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,yCAAyC;AAEzC,0EAA0E;AAC1E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAyB,MAAM,UAAU,CAAC;AAIrE,oDAAoD;AACpD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,cAAc,EACd,OAAO,EACP,OAAO,EACP,MAAM,EACN,OAAO,GAGR,MAAM,iBAAiB,CAAC"}
|