jmri-client 3.5.0 → 3.5.3
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/browser/jmri-client.js +14 -8
- package/dist/cjs/client.js +0 -1
- package/dist/cjs/core/connection-state-manager.js +0 -1
- package/dist/cjs/core/heartbeat-manager.js +0 -1
- package/dist/cjs/core/index.js +0 -1
- package/dist/cjs/core/message-queue.js +0 -1
- package/dist/cjs/core/reconnection-manager.js +0 -1
- package/dist/cjs/core/websocket-adapter.js +0 -1
- package/dist/cjs/core/websocket-client.js +0 -1
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/managers/index.js +0 -1
- package/dist/cjs/managers/power-manager.js +0 -1
- package/dist/cjs/managers/roster-manager.js +16 -10
- package/dist/cjs/managers/throttle-manager.js +0 -1
- package/dist/cjs/mocks/index.js +0 -1
- package/dist/cjs/mocks/mock-data.js +0 -1
- package/dist/cjs/mocks/mock-response-manager.js +0 -1
- package/dist/cjs/types/client-options.js +0 -1
- package/dist/cjs/types/events.js +0 -1
- package/dist/cjs/types/index.js +0 -1
- package/dist/cjs/types/jmri-messages.js +0 -1
- package/dist/cjs/types/throttle.js +0 -1
- package/dist/cjs/utils/exponential-backoff.js +0 -1
- package/dist/cjs/utils/index.js +0 -1
- package/dist/cjs/utils/message-id.js +0 -1
- package/dist/esm/client.js +0 -1
- package/dist/esm/core/connection-state-manager.js +0 -1
- package/dist/esm/core/heartbeat-manager.js +0 -1
- package/dist/esm/core/index.js +0 -1
- package/dist/esm/core/message-queue.js +0 -1
- package/dist/esm/core/reconnection-manager.js +0 -1
- package/dist/esm/core/websocket-adapter.js +0 -1
- package/dist/esm/core/websocket-client.js +0 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/managers/index.js +0 -1
- package/dist/esm/managers/power-manager.js +0 -1
- package/dist/esm/managers/roster-manager.js +16 -10
- package/dist/esm/managers/throttle-manager.js +0 -1
- package/dist/esm/mocks/index.js +0 -1
- package/dist/esm/mocks/mock-data.js +0 -1
- package/dist/esm/mocks/mock-response-manager.js +0 -1
- package/dist/esm/types/client-options.js +0 -1
- package/dist/esm/types/events.js +0 -1
- package/dist/esm/types/index.js +0 -1
- package/dist/esm/types/jmri-messages.js +0 -1
- package/dist/esm/types/throttle.js +0 -1
- package/dist/esm/utils/exponential-backoff.js +0 -1
- package/dist/esm/utils/index.js +0 -1
- package/dist/esm/utils/message-id.js +0 -1
- package/dist/types/client.d.ts +5 -5
- package/dist/types/managers/roster-manager.d.ts +6 -6
- package/package.json +5 -1
- package/dist/browser/jmri-client.js.map +0 -7
- package/dist/cjs/client.js.map +0 -1
- package/dist/cjs/core/connection-state-manager.js.map +0 -1
- package/dist/cjs/core/heartbeat-manager.js.map +0 -1
- package/dist/cjs/core/index.js.map +0 -1
- package/dist/cjs/core/message-queue.js.map +0 -1
- package/dist/cjs/core/reconnection-manager.js.map +0 -1
- package/dist/cjs/core/websocket-adapter.js.map +0 -1
- package/dist/cjs/core/websocket-client.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/managers/index.js.map +0 -1
- package/dist/cjs/managers/power-manager.js.map +0 -1
- package/dist/cjs/managers/roster-manager.js.map +0 -1
- package/dist/cjs/managers/throttle-manager.js.map +0 -1
- package/dist/cjs/mocks/index.js.map +0 -1
- package/dist/cjs/mocks/mock-data.js.map +0 -1
- package/dist/cjs/mocks/mock-response-manager.js.map +0 -1
- package/dist/cjs/types/client-options.js.map +0 -1
- package/dist/cjs/types/events.js.map +0 -1
- package/dist/cjs/types/index.js.map +0 -1
- package/dist/cjs/types/jmri-messages.js.map +0 -1
- package/dist/cjs/types/throttle.js.map +0 -1
- package/dist/cjs/utils/exponential-backoff.js.map +0 -1
- package/dist/cjs/utils/index.js.map +0 -1
- package/dist/cjs/utils/message-id.js.map +0 -1
- package/dist/esm/client.js.map +0 -1
- package/dist/esm/core/connection-state-manager.js.map +0 -1
- package/dist/esm/core/heartbeat-manager.js.map +0 -1
- package/dist/esm/core/index.js.map +0 -1
- package/dist/esm/core/message-queue.js.map +0 -1
- package/dist/esm/core/reconnection-manager.js.map +0 -1
- package/dist/esm/core/websocket-adapter.js.map +0 -1
- package/dist/esm/core/websocket-client.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/managers/index.js.map +0 -1
- package/dist/esm/managers/power-manager.js.map +0 -1
- package/dist/esm/managers/roster-manager.js.map +0 -1
- package/dist/esm/managers/throttle-manager.js.map +0 -1
- package/dist/esm/mocks/index.js.map +0 -1
- package/dist/esm/mocks/mock-data.js.map +0 -1
- package/dist/esm/mocks/mock-response-manager.js.map +0 -1
- package/dist/esm/types/client-options.js.map +0 -1
- package/dist/esm/types/events.js.map +0 -1
- package/dist/esm/types/index.js.map +0 -1
- package/dist/esm/types/jmri-messages.js.map +0 -1
- package/dist/esm/types/throttle.js.map +0 -1
- package/dist/esm/utils/exponential-backoff.js.map +0 -1
- package/dist/esm/utils/index.js.map +0 -1
- package/dist/esm/utils/message-id.js.map +0 -1
|
@@ -1453,9 +1453,9 @@ var RosterManager = class {
|
|
|
1453
1453
|
await this.getRoster();
|
|
1454
1454
|
}
|
|
1455
1455
|
const addressStr = address.toString();
|
|
1456
|
-
for (const
|
|
1457
|
-
if (
|
|
1458
|
-
return
|
|
1456
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
1457
|
+
if (wrapper.data.address === addressStr) {
|
|
1458
|
+
return wrapper;
|
|
1459
1459
|
}
|
|
1460
1460
|
}
|
|
1461
1461
|
return void 0;
|
|
@@ -1469,9 +1469,10 @@ var RosterManager = class {
|
|
|
1469
1469
|
}
|
|
1470
1470
|
const lowerQuery = query.toLowerCase();
|
|
1471
1471
|
const results = [];
|
|
1472
|
-
for (const
|
|
1472
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
1473
|
+
const entry = wrapper.data;
|
|
1473
1474
|
if (entry.name.toLowerCase().includes(lowerQuery) || entry.address.includes(query) || entry.road?.toLowerCase().includes(lowerQuery) || entry.number?.includes(query)) {
|
|
1474
|
-
results.push(
|
|
1475
|
+
results.push(wrapper);
|
|
1475
1476
|
}
|
|
1476
1477
|
}
|
|
1477
1478
|
return results;
|
|
@@ -1496,12 +1497,18 @@ var RosterManager = class {
|
|
|
1496
1497
|
if (Array.isArray(rosterData)) {
|
|
1497
1498
|
for (const wrapper of rosterData) {
|
|
1498
1499
|
if (wrapper.type === "rosterEntry" && wrapper.data) {
|
|
1499
|
-
this.rosterCache.set(wrapper.data.name, wrapper
|
|
1500
|
+
this.rosterCache.set(wrapper.data.name, wrapper);
|
|
1500
1501
|
}
|
|
1501
1502
|
}
|
|
1502
1503
|
} else {
|
|
1504
|
+
let id = 1;
|
|
1503
1505
|
for (const [name, entry] of Object.entries(rosterData)) {
|
|
1504
|
-
|
|
1506
|
+
const wrapper = {
|
|
1507
|
+
type: "rosterEntry",
|
|
1508
|
+
data: entry,
|
|
1509
|
+
id: id++
|
|
1510
|
+
};
|
|
1511
|
+
this.rosterCache.set(name, wrapper);
|
|
1505
1512
|
}
|
|
1506
1513
|
}
|
|
1507
1514
|
}
|
|
@@ -2029,4 +2036,3 @@ export {
|
|
|
2029
2036
|
mockResponseManager,
|
|
2030
2037
|
powerStateToString
|
|
2031
2038
|
};
|
|
2032
|
-
//# sourceMappingURL=jmri-client.js.map
|
package/dist/cjs/client.js
CHANGED
package/dist/cjs/core/index.js
CHANGED
|
@@ -23,4 +23,3 @@ __exportStar(require("./connection-state-manager.js"), exports);
|
|
|
23
23
|
__exportStar(require("./reconnection-manager.js"), exports);
|
|
24
24
|
__exportStar(require("./heartbeat-manager.js"), exports);
|
|
25
25
|
__exportStar(require("./message-queue.js"), exports);
|
|
26
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js
CHANGED
|
@@ -24,4 +24,3 @@ var index_js_2 = require("./mocks/index.js");
|
|
|
24
24
|
Object.defineProperty(exports, "MockResponseManager", { enumerable: true, get: function () { return index_js_2.MockResponseManager; } });
|
|
25
25
|
Object.defineProperty(exports, "mockResponseManager", { enumerable: true, get: function () { return index_js_2.mockResponseManager; } });
|
|
26
26
|
Object.defineProperty(exports, "mockData", { enumerable: true, get: function () { return index_js_2.mockData; } });
|
|
27
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -20,4 +20,3 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
__exportStar(require("./power-manager.js"), exports);
|
|
21
21
|
__exportStar(require("./roster-manager.js"), exports);
|
|
22
22
|
__exportStar(require("./throttle-manager.js"), exports);
|
|
23
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -48,9 +48,9 @@ class RosterManager {
|
|
|
48
48
|
await this.getRoster();
|
|
49
49
|
}
|
|
50
50
|
const addressStr = address.toString();
|
|
51
|
-
for (const
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
51
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
52
|
+
if (wrapper.data.address === addressStr) {
|
|
53
|
+
return wrapper;
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
return undefined;
|
|
@@ -65,12 +65,13 @@ class RosterManager {
|
|
|
65
65
|
}
|
|
66
66
|
const lowerQuery = query.toLowerCase();
|
|
67
67
|
const results = [];
|
|
68
|
-
for (const
|
|
68
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
69
|
+
const entry = wrapper.data;
|
|
69
70
|
if (entry.name.toLowerCase().includes(lowerQuery) ||
|
|
70
71
|
entry.address.includes(query) ||
|
|
71
72
|
entry.road?.toLowerCase().includes(lowerQuery) ||
|
|
72
73
|
entry.number?.includes(query)) {
|
|
73
|
-
results.push(
|
|
74
|
+
results.push(wrapper);
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return results;
|
|
@@ -92,21 +93,26 @@ class RosterManager {
|
|
|
92
93
|
*/
|
|
93
94
|
updateCache(rosterData) {
|
|
94
95
|
this.rosterCache.clear();
|
|
95
|
-
// Handle array format (real JMRI server)
|
|
96
|
+
// Handle array format (real JMRI server) - store wrapped entries
|
|
96
97
|
if (Array.isArray(rosterData)) {
|
|
97
98
|
for (const wrapper of rosterData) {
|
|
98
99
|
if (wrapper.type === 'rosterEntry' && wrapper.data) {
|
|
99
|
-
this.rosterCache.set(wrapper.data.name, wrapper
|
|
100
|
+
this.rosterCache.set(wrapper.data.name, wrapper);
|
|
100
101
|
}
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
// Handle legacy keyed object format (for backward compatibility)
|
|
104
|
+
// Handle legacy keyed object format (for backward compatibility) - wrap entries
|
|
104
105
|
else {
|
|
106
|
+
let id = 1;
|
|
105
107
|
for (const [name, entry] of Object.entries(rosterData)) {
|
|
106
|
-
|
|
108
|
+
const wrapper = {
|
|
109
|
+
type: 'rosterEntry',
|
|
110
|
+
data: entry,
|
|
111
|
+
id: id++
|
|
112
|
+
};
|
|
113
|
+
this.rosterCache.set(name, wrapper);
|
|
107
114
|
}
|
|
108
115
|
}
|
|
109
116
|
}
|
|
110
117
|
}
|
|
111
118
|
exports.RosterManager = RosterManager;
|
|
112
|
-
//# sourceMappingURL=roster-manager.js.map
|
package/dist/cjs/mocks/index.js
CHANGED
|
@@ -10,4 +10,3 @@ Object.defineProperty(exports, "mockResponseManager", { enumerable: true, get: f
|
|
|
10
10
|
// Re-export mock data for direct access if needed
|
|
11
11
|
var mock_data_js_1 = require("./mock-data.js");
|
|
12
12
|
Object.defineProperty(exports, "mockData", { enumerable: true, get: function () { return mock_data_js_1.mockData; } });
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
package/dist/cjs/types/events.js
CHANGED
package/dist/cjs/types/index.js
CHANGED
package/dist/cjs/utils/index.js
CHANGED
|
@@ -19,4 +19,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
__exportStar(require("./message-id.js"), exports);
|
|
21
21
|
__exportStar(require("./exponential-backoff.js"), exports);
|
|
22
|
-
//# sourceMappingURL=index.js.map
|
package/dist/esm/client.js
CHANGED
package/dist/esm/core/index.js
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -14,4 +14,3 @@ export { isThrottleFunctionKey, isValidSpeed } from './types/throttle.js';
|
|
|
14
14
|
export { powerStateToString } from './types/jmri-messages.js';
|
|
15
15
|
// Export mock system for testing and demo purposes
|
|
16
16
|
export { MockResponseManager, mockResponseManager, mockData } from './mocks/index.js';
|
|
17
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -45,9 +45,9 @@ export class RosterManager {
|
|
|
45
45
|
await this.getRoster();
|
|
46
46
|
}
|
|
47
47
|
const addressStr = address.toString();
|
|
48
|
-
for (const
|
|
49
|
-
if (
|
|
50
|
-
return
|
|
48
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
49
|
+
if (wrapper.data.address === addressStr) {
|
|
50
|
+
return wrapper;
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
return undefined;
|
|
@@ -62,12 +62,13 @@ export class RosterManager {
|
|
|
62
62
|
}
|
|
63
63
|
const lowerQuery = query.toLowerCase();
|
|
64
64
|
const results = [];
|
|
65
|
-
for (const
|
|
65
|
+
for (const wrapper of this.rosterCache.values()) {
|
|
66
|
+
const entry = wrapper.data;
|
|
66
67
|
if (entry.name.toLowerCase().includes(lowerQuery) ||
|
|
67
68
|
entry.address.includes(query) ||
|
|
68
69
|
entry.road?.toLowerCase().includes(lowerQuery) ||
|
|
69
70
|
entry.number?.includes(query)) {
|
|
70
|
-
results.push(
|
|
71
|
+
results.push(wrapper);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
return results;
|
|
@@ -89,20 +90,25 @@ export class RosterManager {
|
|
|
89
90
|
*/
|
|
90
91
|
updateCache(rosterData) {
|
|
91
92
|
this.rosterCache.clear();
|
|
92
|
-
// Handle array format (real JMRI server)
|
|
93
|
+
// Handle array format (real JMRI server) - store wrapped entries
|
|
93
94
|
if (Array.isArray(rosterData)) {
|
|
94
95
|
for (const wrapper of rosterData) {
|
|
95
96
|
if (wrapper.type === 'rosterEntry' && wrapper.data) {
|
|
96
|
-
this.rosterCache.set(wrapper.data.name, wrapper
|
|
97
|
+
this.rosterCache.set(wrapper.data.name, wrapper);
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
|
-
// Handle legacy keyed object format (for backward compatibility)
|
|
101
|
+
// Handle legacy keyed object format (for backward compatibility) - wrap entries
|
|
101
102
|
else {
|
|
103
|
+
let id = 1;
|
|
102
104
|
for (const [name, entry] of Object.entries(rosterData)) {
|
|
103
|
-
|
|
105
|
+
const wrapper = {
|
|
106
|
+
type: 'rosterEntry',
|
|
107
|
+
data: entry,
|
|
108
|
+
id: id++
|
|
109
|
+
};
|
|
110
|
+
this.rosterCache.set(name, wrapper);
|
|
104
111
|
}
|
|
105
112
|
}
|
|
106
113
|
}
|
|
107
114
|
}
|
|
108
|
-
//# sourceMappingURL=roster-manager.js.map
|
package/dist/esm/mocks/index.js
CHANGED
package/dist/esm/types/events.js
CHANGED
package/dist/esm/types/index.js
CHANGED
package/dist/esm/utils/index.js
CHANGED
package/dist/types/client.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { EventEmitter } from 'eventemitter3';
|
|
5
5
|
import { PartialClientOptions } from './types/client-options.js';
|
|
6
|
-
import { PowerState,
|
|
6
|
+
import { PowerState, RosterEntryWrapper } from './types/jmri-messages.js';
|
|
7
7
|
import { ConnectionState } from './types/events.js';
|
|
8
8
|
import { ThrottleAcquireOptions, ThrottleFunctionKey, ThrottleState } from './types/throttle.js';
|
|
9
9
|
/**
|
|
@@ -69,19 +69,19 @@ export declare class JmriClient extends EventEmitter {
|
|
|
69
69
|
/**
|
|
70
70
|
* Get all roster entries
|
|
71
71
|
*/
|
|
72
|
-
getRoster(): Promise<
|
|
72
|
+
getRoster(): Promise<RosterEntryWrapper[]>;
|
|
73
73
|
/**
|
|
74
74
|
* Get roster entry by name
|
|
75
75
|
*/
|
|
76
|
-
getRosterEntryByName(name: string): Promise<
|
|
76
|
+
getRosterEntryByName(name: string): Promise<RosterEntryWrapper | undefined>;
|
|
77
77
|
/**
|
|
78
78
|
* Get roster entry by address
|
|
79
79
|
*/
|
|
80
|
-
getRosterEntryByAddress(address: string | number): Promise<
|
|
80
|
+
getRosterEntryByAddress(address: string | number): Promise<RosterEntryWrapper | undefined>;
|
|
81
81
|
/**
|
|
82
82
|
* Search roster by partial name match
|
|
83
83
|
*/
|
|
84
|
-
searchRoster(query: string): Promise<
|
|
84
|
+
searchRoster(query: string): Promise<RosterEntryWrapper[]>;
|
|
85
85
|
/**
|
|
86
86
|
* Acquire a throttle for a locomotive
|
|
87
87
|
*
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Roster management
|
|
3
3
|
*/
|
|
4
4
|
import { WebSocketClient } from '../core/websocket-client.js';
|
|
5
|
-
import {
|
|
5
|
+
import { RosterEntryWrapper } from '../types/jmri-messages.js';
|
|
6
6
|
/**
|
|
7
7
|
* Manages locomotive roster
|
|
8
8
|
*/
|
|
@@ -13,23 +13,23 @@ export declare class RosterManager {
|
|
|
13
13
|
/**
|
|
14
14
|
* Get all roster entries
|
|
15
15
|
*/
|
|
16
|
-
getRoster(): Promise<
|
|
16
|
+
getRoster(): Promise<RosterEntryWrapper[]>;
|
|
17
17
|
/**
|
|
18
18
|
* Get roster entry by name
|
|
19
19
|
*/
|
|
20
|
-
getRosterEntryByName(name: string): Promise<
|
|
20
|
+
getRosterEntryByName(name: string): Promise<RosterEntryWrapper | undefined>;
|
|
21
21
|
/**
|
|
22
22
|
* Get roster entry by address
|
|
23
23
|
*/
|
|
24
|
-
getRosterEntryByAddress(address: string | number): Promise<
|
|
24
|
+
getRosterEntryByAddress(address: string | number): Promise<RosterEntryWrapper | undefined>;
|
|
25
25
|
/**
|
|
26
26
|
* Search roster by partial name match
|
|
27
27
|
*/
|
|
28
|
-
searchRoster(query: string): Promise<
|
|
28
|
+
searchRoster(query: string): Promise<RosterEntryWrapper[]>;
|
|
29
29
|
/**
|
|
30
30
|
* Get cached roster (no network request)
|
|
31
31
|
*/
|
|
32
|
-
getCachedRoster():
|
|
32
|
+
getCachedRoster(): RosterEntryWrapper[];
|
|
33
33
|
/**
|
|
34
34
|
* Clear roster cache
|
|
35
35
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jmri-client",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.3",
|
|
4
4
|
"description": "WebSocket client for JMRI with real-time updates and throttle control - works in both Node.js and browsers",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
"private": false,
|
|
48
48
|
"readmeFilename": "README.md",
|
|
49
49
|
"license": "MIT",
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public",
|
|
52
|
+
"provenance": true
|
|
53
|
+
},
|
|
50
54
|
"repository": {
|
|
51
55
|
"type": "git",
|
|
52
56
|
"url": "git://github.com/yamanote1138/jmri-client.git"
|