@matter/nodejs-shell 0.13.0-alpha.0-20250424-4760af1f3 → 0.13.0-alpha.0-20250425-94b33ff98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/MatterNode.js +3 -7
- package/dist/cjs/MatterNode.js.map +1 -1
- package/dist/cjs/app.js +20 -18
- package/dist/cjs/app.js.map +1 -1
- package/package.json +6 -6
- package/src/MatterNode.ts +3 -7
- package/src/app.ts +8 -5
package/dist/cjs/MatterNode.js
CHANGED
|
@@ -37,6 +37,7 @@ class MatterNode {
|
|
|
37
37
|
this.nodeNum = nodeNum;
|
|
38
38
|
this.netInterface = netInterface;
|
|
39
39
|
this.#environment = import_general.Environment.default;
|
|
40
|
+
this.#environment.runtime.add(this);
|
|
40
41
|
}
|
|
41
42
|
#storageLocation;
|
|
42
43
|
storage;
|
|
@@ -87,15 +88,10 @@ class MatterNode {
|
|
|
87
88
|
}
|
|
88
89
|
async close() {
|
|
89
90
|
await this.commissioningController?.close();
|
|
90
|
-
await this.closeStorage();
|
|
91
|
+
return await this.closeStorage();
|
|
91
92
|
}
|
|
92
93
|
async closeStorage() {
|
|
93
|
-
|
|
94
|
-
await this.storage?.close();
|
|
95
|
-
process.exit(0);
|
|
96
|
-
} catch {
|
|
97
|
-
process.exit(1);
|
|
98
|
-
}
|
|
94
|
+
await this.storage?.close();
|
|
99
95
|
}
|
|
100
96
|
async start() {
|
|
101
97
|
if (this.started) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/MatterNode.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,qBAAoE;AACpE,kBAAgC;AAGhC,mBAAuB;AACvB,oBAAwC;AAExC,uBAAqB;AAdrB;AAAA;AAAA;AAAA;AAAA;AAgBA,MAAM,SAAS,sBAAO,IAAI,MAAM;AAEzB,MAAM,WAAW;AAAA,EASpB,YACqB,SACA,cACnB;AAFmB;AACA;AAEjB,SAAK,eAAe,2BAAY;AAAA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/cjs/app.js
CHANGED
|
@@ -33,7 +33,7 @@ __export(app_exports, {
|
|
|
33
33
|
setLogLevel: () => setLogLevel
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(app_exports);
|
|
36
|
-
var
|
|
36
|
+
var import_main = require("@matter/main");
|
|
37
37
|
var import_nodejs = require("@matter/nodejs");
|
|
38
38
|
var import_nodejs_ble = require("@matter/nodejs-ble");
|
|
39
39
|
var import_protocol = require("@matter/protocol");
|
|
@@ -46,26 +46,26 @@ var import_Shell = require("./shell/Shell");
|
|
|
46
46
|
* SPDX-License-Identifier: Apache-2.0
|
|
47
47
|
*/
|
|
48
48
|
const PROMPT = "matter> ";
|
|
49
|
-
const logger =
|
|
50
|
-
if (process.stdin?.isTTY)
|
|
49
|
+
const logger = import_main.Logger.get("Shell");
|
|
50
|
+
if (process.stdin?.isTTY) import_main.Logger.format = import_main.LogFormat.ANSI;
|
|
51
51
|
let theNode;
|
|
52
52
|
function setLogLevel(identifier, level) {
|
|
53
|
-
let logLevel =
|
|
53
|
+
let logLevel = import_main.LogLevel.INFO;
|
|
54
54
|
switch (level) {
|
|
55
55
|
case "fatal":
|
|
56
|
-
logLevel =
|
|
56
|
+
logLevel = import_main.LogLevel.FATAL;
|
|
57
57
|
break;
|
|
58
58
|
case "error":
|
|
59
|
-
logLevel =
|
|
59
|
+
logLevel = import_main.LogLevel.ERROR;
|
|
60
60
|
break;
|
|
61
61
|
case "warn":
|
|
62
|
-
logLevel =
|
|
62
|
+
logLevel = import_main.LogLevel.WARN;
|
|
63
63
|
break;
|
|
64
64
|
case "debug":
|
|
65
|
-
logLevel =
|
|
65
|
+
logLevel = import_main.LogLevel.DEBUG;
|
|
66
66
|
break;
|
|
67
67
|
}
|
|
68
|
-
|
|
68
|
+
import_main.Logger.setDefaultLoglevelForLogger(identifier, logLevel);
|
|
69
69
|
}
|
|
70
70
|
async function main() {
|
|
71
71
|
const yargsInstance = (0, import_yargs.default)(process.argv.slice(2)).command(
|
|
@@ -119,10 +119,10 @@ async function main() {
|
|
|
119
119
|
if (await theNode.Store.has("LogFile")) {
|
|
120
120
|
const storedLogFileName = await theNode.Store.get("LogFile");
|
|
121
121
|
if (storedLogFileName !== void 0) {
|
|
122
|
-
|
|
122
|
+
import_main.Logger.destinations.file = (0, import_main.LogDestination)({
|
|
123
123
|
write: await (0, import_nodejs.createFileLogger)(storedLogFileName),
|
|
124
|
-
level: (0,
|
|
125
|
-
format: (0,
|
|
124
|
+
level: (0, import_main.LogLevel)(await theNode.Store.get("LoglevelFile", import_main.LogLevel.DEBUG)),
|
|
125
|
+
format: (0, import_main.LogFormat)("plain")
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -133,9 +133,9 @@ async function main() {
|
|
|
133
133
|
}
|
|
134
134
|
if (ble) {
|
|
135
135
|
const hciId = await theNode.Store.get("BleHciId", 0);
|
|
136
|
-
import_protocol.Ble.get = (0,
|
|
136
|
+
import_protocol.Ble.get = (0, import_main.singleton)(
|
|
137
137
|
() => new import_nodejs_ble.NodeJsBle({
|
|
138
|
-
environment:
|
|
138
|
+
environment: import_main.Environment.default,
|
|
139
139
|
hciId
|
|
140
140
|
})
|
|
141
141
|
);
|
|
@@ -154,11 +154,13 @@ process.on("message", function(message) {
|
|
|
154
154
|
}
|
|
155
155
|
});
|
|
156
156
|
async function exit(code = 0) {
|
|
157
|
-
|
|
157
|
+
process.off("SIGINT", sigIntHandler);
|
|
158
|
+
process.emit("SIGINT");
|
|
158
159
|
process.exit(code);
|
|
159
160
|
}
|
|
160
|
-
|
|
161
|
+
const sigIntHandler = () => {
|
|
161
162
|
exit().catch((error) => logger.error(error));
|
|
162
|
-
}
|
|
163
|
-
|
|
163
|
+
};
|
|
164
|
+
process.on("SIGINT", sigIntHandler);
|
|
165
|
+
import_main.Environment.default.runtime.add(main());
|
|
164
166
|
//# sourceMappingURL=app.js.map
|
package/dist/cjs/app.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/app.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["yargs"]
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/nodejs-shell",
|
|
3
|
-
"version": "0.13.0-alpha.0-
|
|
3
|
+
"version": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
4
4
|
"description": "Shell app for Matter controller",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"#types": "@matter/types"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@matter/general": "0.13.0-alpha.0-
|
|
40
|
-
"@matter/nodejs": "0.13.0-alpha.0-
|
|
41
|
-
"@matter/nodejs-ble": "0.13.0-alpha.0-
|
|
42
|
-
"@matter/tools": "0.13.0-alpha.0-
|
|
43
|
-
"@project-chip/matter.js": "0.13.0-alpha.0-
|
|
39
|
+
"@matter/general": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
40
|
+
"@matter/nodejs": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
41
|
+
"@matter/nodejs-ble": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
42
|
+
"@matter/tools": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
43
|
+
"@project-chip/matter.js": "0.13.0-alpha.0-20250425-94b33ff98",
|
|
44
44
|
"yargs": "^17.7.2"
|
|
45
45
|
},
|
|
46
46
|
"engines": {
|
package/src/MatterNode.ts
CHANGED
|
@@ -30,6 +30,7 @@ export class MatterNode {
|
|
|
30
30
|
private readonly netInterface?: string,
|
|
31
31
|
) {
|
|
32
32
|
this.#environment = Environment.default;
|
|
33
|
+
this.#environment.runtime.add(this);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
36
|
get storageLocation() {
|
|
@@ -88,16 +89,11 @@ export class MatterNode {
|
|
|
88
89
|
|
|
89
90
|
async close() {
|
|
90
91
|
await this.commissioningController?.close();
|
|
91
|
-
await this.closeStorage();
|
|
92
|
+
return await this.closeStorage();
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
async closeStorage() {
|
|
95
|
-
|
|
96
|
-
await this.storage?.close();
|
|
97
|
-
process.exit(0);
|
|
98
|
-
} catch {
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
96
|
+
await this.storage?.close();
|
|
101
97
|
}
|
|
102
98
|
|
|
103
99
|
async start() {
|
package/src/app.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* SPDX-License-Identifier: Apache-2.0
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { Environment, LogDestination, LogFormat,
|
|
8
|
+
import { Environment, LogDestination, LogFormat, Logger, LogLevel, singleton } from "@matter/main";
|
|
9
9
|
import { createFileLogger } from "@matter/nodejs";
|
|
10
10
|
import { NodeJsBle } from "@matter/nodejs-ble";
|
|
11
11
|
import { Ble } from "@matter/protocol";
|
|
@@ -148,13 +148,16 @@ process.on("message", function (message) {
|
|
|
148
148
|
});
|
|
149
149
|
|
|
150
150
|
export async function exit(code = 0) {
|
|
151
|
-
|
|
151
|
+
process.off("SIGINT", sigIntHandler);
|
|
152
|
+
process.emit("SIGINT");
|
|
152
153
|
process.exit(code);
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
|
|
156
|
+
const sigIntHandler = () => {
|
|
156
157
|
// Pragmatic way to make sure the storage is correctly closed before the process ends.
|
|
157
158
|
exit().catch(error => logger.error(error));
|
|
158
|
-
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
process.on("SIGINT", sigIntHandler);
|
|
159
162
|
|
|
160
|
-
|
|
163
|
+
Environment.default.runtime.add(main());
|