homebridge 2.0.0-beta.34 → 2.0.0-beta.36
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/api.d.ts +74 -32
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +48 -46
- package/dist/api.js.map +1 -1
- package/dist/api.spec.d.ts +2 -0
- package/dist/api.spec.d.ts.map +1 -0
- package/dist/api.spec.js +413 -0
- package/dist/api.spec.js.map +1 -0
- package/dist/childBridgeFork.d.ts +1 -18
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +21 -258
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/externalPortService.d.ts +2 -9
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +20 -40
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/logger.spec.d.ts +2 -0
- package/dist/logger.spec.d.ts.map +1 -0
- package/dist/logger.spec.js +95 -0
- package/dist/logger.spec.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.js +397 -0
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
- package/dist/matter/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
- package/dist/matter/MatterAPIImpl.js +305 -0
- package/dist/matter/MatterAPIImpl.js.map +1 -0
- package/dist/matter/MatterBridgeManager.d.ts +91 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +426 -0
- package/dist/matter/MatterBridgeManager.js.map +1 -0
- package/dist/matter/MatterConfigCollector.d.ts +26 -0
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
- package/dist/matter/MatterConfigCollector.js +78 -0
- package/dist/matter/MatterConfigCollector.js.map +1 -0
- package/dist/matter/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
- package/dist/matter/accessoryCache.js.map +1 -0
- package/dist/matter/accessoryCache.spec.d.ts +2 -0
- package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
- package/dist/matter/accessoryCache.spec.js +452 -0
- package/dist/matter/accessoryCache.spec.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +64 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +160 -0
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +21 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +49 -0
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +108 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.js +45 -0
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +21 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +27 -0
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +34 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +75 -0
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +140 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +63 -0
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js +116 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +27 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +56 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js +27 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +56 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +52 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +79 -0
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +32 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/index.d.ts +20 -0
- package/dist/matter/behaviors/index.d.ts.map +1 -0
- package/dist/matter/behaviors/index.js +21 -0
- package/dist/matter/behaviors/index.js.map +1 -0
- package/dist/matter/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
- package/dist/matter/configValidator.js.map +1 -0
- package/dist/matter/configValidator.spec.d.ts +2 -0
- package/dist/matter/configValidator.spec.d.ts.map +1 -0
- package/dist/matter/configValidator.spec.js +390 -0
- package/dist/matter/configValidator.spec.js.map +1 -0
- package/dist/matter/errorHandler.d.ts +33 -0
- package/dist/matter/errorHandler.d.ts.map +1 -0
- package/dist/matter/errorHandler.js +113 -0
- package/dist/matter/errorHandler.js.map +1 -0
- package/dist/matter/errorHandler.spec.d.ts +2 -0
- package/dist/matter/errorHandler.spec.d.ts.map +1 -0
- package/dist/matter/errorHandler.spec.js +159 -0
- package/dist/matter/errorHandler.spec.js.map +1 -0
- package/dist/matter/index.d.ts +7 -4
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js +7 -4
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
- package/dist/matter/logFormatter.js.map +1 -0
- package/dist/matter/logFormatter.spec.d.ts +2 -0
- package/dist/matter/logFormatter.spec.d.ts.map +1 -0
- package/dist/matter/logFormatter.spec.js +284 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +350 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/{matterServer.js → server.js} +533 -352
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
- package/dist/matter/serverHelpers.js.map +1 -0
- package/dist/matter/serverHelpers.spec.d.ts +2 -0
- package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
- package/dist/matter/serverHelpers.spec.js +521 -0
- package/dist/matter/serverHelpers.spec.js.map +1 -0
- package/dist/matter/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/{matterStorage.js → storage.js} +14 -5
- package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
- package/dist/matter/storage.spec.d.ts +2 -0
- package/dist/matter/storage.spec.d.ts.map +1 -0
- package/dist/matter/storage.spec.js +570 -0
- package/dist/matter/storage.spec.js.map +1 -0
- package/dist/matter/typeHelpers.d.ts +45 -0
- package/dist/matter/typeHelpers.d.ts.map +1 -0
- package/dist/matter/typeHelpers.js +57 -0
- package/dist/matter/typeHelpers.js.map +1 -0
- package/dist/matter/typeHelpers.spec.d.ts +2 -0
- package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
- package/dist/matter/typeHelpers.spec.js +127 -0
- package/dist/matter/typeHelpers.spec.js.map +1 -0
- package/dist/matter/{matterTypes.d.ts → types.d.ts} +2 -2
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/{matterTypes.js → types.js} +1 -2
- package/dist/matter/types.js.map +1 -0
- package/dist/platformAccessory.spec.d.ts +2 -0
- package/dist/platformAccessory.spec.d.ts.map +1 -0
- package/dist/platformAccessory.spec.js +126 -0
- package/dist/platformAccessory.spec.js.map +1 -0
- package/dist/pluginManager.spec.d.ts +2 -0
- package/dist/pluginManager.spec.d.ts.map +1 -0
- package/dist/pluginManager.spec.js +43 -0
- package/dist/pluginManager.spec.js.map +1 -0
- package/dist/server.d.ts +4 -13
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +45 -333
- package/dist/server.js.map +1 -1
- package/dist/server.spec.d.ts +2 -0
- package/dist/server.spec.d.ts.map +1 -0
- package/dist/server.spec.js +57 -0
- package/dist/server.spec.js.map +1 -0
- package/dist/user.spec.d.ts +2 -0
- package/dist/user.spec.d.ts.map +1 -0
- package/dist/user.spec.js +31 -0
- package/dist/user.spec.js.map +1 -0
- package/dist/util/mac.spec.d.ts +2 -0
- package/dist/util/mac.spec.d.ts.map +1 -0
- package/dist/util/mac.spec.js +36 -0
- package/dist/util/mac.spec.js.map +1 -0
- package/dist/version.spec.d.ts +2 -0
- package/dist/version.spec.d.ts.map +1 -0
- package/dist/version.spec.js +20 -0
- package/dist/version.spec.js.map +1 -0
- package/package.json +4 -4
- package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
- package/dist/matter/matterAccessoryCache.js.map +0 -1
- package/dist/matter/matterBehaviors.d.ts +0 -194
- package/dist/matter/matterBehaviors.d.ts.map +0 -1
- package/dist/matter/matterBehaviors.js +0 -665
- package/dist/matter/matterBehaviors.js.map +0 -1
- package/dist/matter/matterConfigValidator.d.ts.map +0 -1
- package/dist/matter/matterConfigValidator.js.map +0 -1
- package/dist/matter/matterErrorHandler.d.ts +0 -106
- package/dist/matter/matterErrorHandler.d.ts.map +0 -1
- package/dist/matter/matterErrorHandler.js +0 -495
- package/dist/matter/matterErrorHandler.js.map +0 -1
- package/dist/matter/matterLogFormatter.d.ts.map +0 -1
- package/dist/matter/matterLogFormatter.js.map +0 -1
- package/dist/matter/matterNetworkMonitor.d.ts +0 -68
- package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
- package/dist/matter/matterNetworkMonitor.js +0 -249
- package/dist/matter/matterNetworkMonitor.js.map +0 -1
- package/dist/matter/matterServer.d.ts.map +0 -1
- package/dist/matter/matterServer.js.map +0 -1
- package/dist/matter/matterServerHelpers.d.ts.map +0 -1
- package/dist/matter/matterServerHelpers.js.map +0 -1
- package/dist/matter/matterSharedTypes.d.ts.map +0 -1
- package/dist/matter/matterSharedTypes.js.map +0 -1
- package/dist/matter/matterStorage.d.ts.map +0 -1
- package/dist/matter/matterTypes.d.ts.map +0 -1
- package/dist/matter/matterTypes.js.map +0 -1
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { errorHandler, MatterErrorHandler } from './errorHandler.js';
|
|
3
|
+
import { MatterCommissioningError, MatterDeviceError, MatterError, MatterErrorType, MatterNetworkError, MatterStorageError, } from './types.js';
|
|
4
|
+
describe('matterErrorHandler', () => {
|
|
5
|
+
let consoleErrorSpy;
|
|
6
|
+
let consoleWarnSpy;
|
|
7
|
+
let consoleInfoSpy;
|
|
8
|
+
let consoleDebugSpy;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
11
|
+
consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
12
|
+
consoleInfoSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
13
|
+
consoleDebugSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
consoleErrorSpy.mockRestore();
|
|
17
|
+
consoleWarnSpy.mockRestore();
|
|
18
|
+
consoleInfoSpy.mockRestore();
|
|
19
|
+
consoleDebugSpy.mockRestore();
|
|
20
|
+
});
|
|
21
|
+
describe('getInstance', () => {
|
|
22
|
+
it('should return a singleton instance', () => {
|
|
23
|
+
const instance1 = MatterErrorHandler.getInstance();
|
|
24
|
+
const instance2 = MatterErrorHandler.getInstance();
|
|
25
|
+
expect(instance1).toBe(instance2);
|
|
26
|
+
});
|
|
27
|
+
it('should return the exported singleton', () => {
|
|
28
|
+
expect(errorHandler).toBe(MatterErrorHandler.getInstance());
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('handleError', () => {
|
|
32
|
+
it('should handle a generic error by categorizing it', async () => {
|
|
33
|
+
const error = new Error('test error');
|
|
34
|
+
await errorHandler.handleError(error);
|
|
35
|
+
expect(consoleErrorSpy).toHaveBeenCalled();
|
|
36
|
+
});
|
|
37
|
+
it('should handle an already-typed MatterError directly', async () => {
|
|
38
|
+
const error = new MatterNetworkError('Network issue', { code: 'CONNECTION_FAILED', recoverable: true });
|
|
39
|
+
await errorHandler.handleError(error);
|
|
40
|
+
expect(consoleErrorSpy).toHaveBeenCalled(); // Logger.warn uses console.error
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('categorizeError', () => {
|
|
44
|
+
it('should categorize EADDRINUSE as port in use error', async () => {
|
|
45
|
+
const error = new Error('bind EADDRINUSE');
|
|
46
|
+
await errorHandler.handleError(error);
|
|
47
|
+
// Check that the error was logged (Logger adds timestamps and prefixes)
|
|
48
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('port is already in use'));
|
|
49
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('configure a different port'));
|
|
50
|
+
});
|
|
51
|
+
it('should categorize ECONNREFUSED as connection failed', async () => {
|
|
52
|
+
const error = new Error('connect ECONNREFUSED');
|
|
53
|
+
await errorHandler.handleError(error);
|
|
54
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('network error'));
|
|
55
|
+
});
|
|
56
|
+
it('should categorize ETIMEDOUT as connection failed', async () => {
|
|
57
|
+
const error = new Error('connect ETIMEDOUT');
|
|
58
|
+
await errorHandler.handleError(error);
|
|
59
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('network error'));
|
|
60
|
+
});
|
|
61
|
+
it('should categorize commissioning errors', async () => {
|
|
62
|
+
const error = new Error('commissioning failed');
|
|
63
|
+
await errorHandler.handleError(error);
|
|
64
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('commissioning'));
|
|
65
|
+
});
|
|
66
|
+
it('should categorize pairing errors as commissioning errors', async () => {
|
|
67
|
+
const error = new Error('pairing timeout');
|
|
68
|
+
await errorHandler.handleError(error);
|
|
69
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('commissioning'));
|
|
70
|
+
});
|
|
71
|
+
it('should categorize storage errors', async () => {
|
|
72
|
+
const error = new Error('storage read failed');
|
|
73
|
+
await errorHandler.handleError(error);
|
|
74
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('storage error'));
|
|
75
|
+
});
|
|
76
|
+
it('should categorize ENOENT as storage error', async () => {
|
|
77
|
+
const error = new Error('ENOENT: no such file or directory');
|
|
78
|
+
await errorHandler.handleError(error);
|
|
79
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('storage error'));
|
|
80
|
+
});
|
|
81
|
+
it('should categorize corrupted storage errors with helpful message', async () => {
|
|
82
|
+
const error = new Error('storage corrupted');
|
|
83
|
+
await errorHandler.handleError(error);
|
|
84
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('storage error'));
|
|
85
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('delete the Matter storage'));
|
|
86
|
+
});
|
|
87
|
+
it('should categorize configuration errors', async () => {
|
|
88
|
+
const error = new Error('invalid config');
|
|
89
|
+
await errorHandler.handleError(error);
|
|
90
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('configuration error'));
|
|
91
|
+
});
|
|
92
|
+
it('should categorize device sync errors based on context', async () => {
|
|
93
|
+
const error = new Error('update failed');
|
|
94
|
+
// Should not throw when handling device sync errors
|
|
95
|
+
await expect(errorHandler.handleError(error, 'device sync')).resolves.not.toThrow();
|
|
96
|
+
});
|
|
97
|
+
it('should categorize server errors based on context', async () => {
|
|
98
|
+
const error = new Error('initialization failed');
|
|
99
|
+
await errorHandler.handleError(error, 'server startup');
|
|
100
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('server error'));
|
|
101
|
+
});
|
|
102
|
+
it('should categorize unknown errors as default', async () => {
|
|
103
|
+
const error = new Error('something unexpected');
|
|
104
|
+
await errorHandler.handleError(error);
|
|
105
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Matter error'));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
describe('logError', () => {
|
|
109
|
+
it('should log network port conflict as error', async () => {
|
|
110
|
+
const error = new MatterNetworkError('Port conflict', { code: 'PORT_IN_USE', recoverable: false });
|
|
111
|
+
await errorHandler.handleError(error);
|
|
112
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('port is already in use'));
|
|
113
|
+
});
|
|
114
|
+
it('should log other network errors as warnings', async () => {
|
|
115
|
+
const error = new MatterNetworkError('Connection timeout', { code: 'CONNECTION_FAILED', recoverable: true });
|
|
116
|
+
await errorHandler.handleError(error);
|
|
117
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('network error'));
|
|
118
|
+
});
|
|
119
|
+
it('should log commissioning errors as info', async () => {
|
|
120
|
+
const error = new MatterCommissioningError('Pairing failed', { recoverable: false });
|
|
121
|
+
await errorHandler.handleError(error);
|
|
122
|
+
expect(consoleInfoSpy).toHaveBeenCalledWith(expect.stringContaining('commissioning'));
|
|
123
|
+
});
|
|
124
|
+
it('should log device errors as debug', async () => {
|
|
125
|
+
const error = new MatterDeviceError('Sync failed', { recoverable: true });
|
|
126
|
+
// Should not throw when handling device errors
|
|
127
|
+
await expect(errorHandler.handleError(error)).resolves.not.toThrow();
|
|
128
|
+
});
|
|
129
|
+
it('should log storage errors as warnings', async () => {
|
|
130
|
+
const error = new MatterStorageError('Read failed', { recoverable: true });
|
|
131
|
+
await errorHandler.handleError(error);
|
|
132
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('storage error'));
|
|
133
|
+
});
|
|
134
|
+
it('should log configuration errors as errors', async () => {
|
|
135
|
+
const error = new MatterError('Invalid config', 'CONFIGURATION_ERROR', { recoverable: false, type: MatterErrorType.CONFIGURATION });
|
|
136
|
+
await errorHandler.handleError(error);
|
|
137
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('configuration error'));
|
|
138
|
+
});
|
|
139
|
+
it('should log server errors as errors', async () => {
|
|
140
|
+
const error = new MatterError('Server failed', 'SERVER_ERROR', { recoverable: true, type: MatterErrorType.SERVER });
|
|
141
|
+
await errorHandler.handleError(error);
|
|
142
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('server error'));
|
|
143
|
+
});
|
|
144
|
+
it('should log stack trace for non-recoverable errors in debug mode', async () => {
|
|
145
|
+
const error = new MatterError('Fatal error', 'FATAL', { recoverable: false });
|
|
146
|
+
error.stack = 'Error: Fatal error\n at test.ts:1:1';
|
|
147
|
+
await errorHandler.handleError(error);
|
|
148
|
+
// Stack trace is logged but not with console.debug, check that error was logged
|
|
149
|
+
expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('Matter error'));
|
|
150
|
+
});
|
|
151
|
+
it('should not log stack trace for recoverable errors', async () => {
|
|
152
|
+
const error = new MatterError('Recoverable error', 'RECOVERABLE', { recoverable: true });
|
|
153
|
+
error.stack = 'Error: Recoverable error\n at test.ts:1:1';
|
|
154
|
+
await errorHandler.handleError(error);
|
|
155
|
+
expect(consoleDebugSpy).not.toHaveBeenCalledWith(expect.stringContaining('Stack trace'));
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=errorHandler.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.spec.js","sourceRoot":"","sources":["../../src/matter/errorHandler.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/matter/index.d.ts
CHANGED
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
* allowing plugin developers to explicitly register Matter accessories.
|
|
6
6
|
*/
|
|
7
7
|
import type { ColorControl, DoorLock, FanControl, Groups, Identify, LevelControl, ModeBase, OnOff, ScenesManagement, ServiceArea, Thermostat, WindowCovering } from '@matter/main/clusters';
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
8
|
+
export { ChildBridgeMatterManager } from './ChildBridgeMatterManager.js';
|
|
9
|
+
export { type MatterConfigValidationResult, MatterConfigValidator } from './configValidator.js';
|
|
10
|
+
export { MatterBridgeManager } from './MatterBridgeManager.js';
|
|
11
|
+
export { MatterConfigCollector } from './MatterConfigCollector.js';
|
|
12
|
+
export { MatterServer } from './server.js';
|
|
13
|
+
export { HomebridgeMatterStorage, MatterStorageManager } from './storage.js';
|
|
14
|
+
export { clusterNames, clusters, devices, deviceTypes, type InternalMatterAccessory, type MatterAccessory, type MatterAccessoryEventEmitter, MatterAccessoryEventTypes, type MatterClusterHandlers, type MatterClusterName, type MatterCommandHandler, MatterCommissioningError, type MatterConfig, MatterDeviceError, MatterError, type MatterErrorDetails, MatterErrorType, MatterNetworkError, MatterStorageError, } from './types.js';
|
|
12
15
|
/**
|
|
13
16
|
* Matter Cluster Command Request Types
|
|
14
17
|
* Use these types for handler arguments to get full type safety
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matter/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/matter/index.ts"],"names":[],"mappings":"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"}
|
package/dist/matter/index.js
CHANGED
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
* This module provides Matter protocol support through a Plugin API,
|
|
5
5
|
* allowing plugin developers to explicitly register Matter accessories.
|
|
6
6
|
*/
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
7
|
+
export { ChildBridgeMatterManager } from './ChildBridgeMatterManager.js';
|
|
8
|
+
export { MatterConfigValidator } from './configValidator.js';
|
|
9
|
+
export { MatterBridgeManager } from './MatterBridgeManager.js';
|
|
10
|
+
export { MatterConfigCollector } from './MatterConfigCollector.js';
|
|
11
|
+
export { MatterServer } from './server.js';
|
|
12
|
+
export { HomebridgeMatterStorage, MatterStorageManager } from './storage.js';
|
|
13
|
+
export { clusterNames, clusters, devices, deviceTypes, MatterAccessoryEventTypes, MatterCommissioningError, MatterDeviceError, MatterError, MatterErrorType, MatterNetworkError, MatterStorageError, } from './types.js';
|
|
11
14
|
/**
|
|
12
15
|
* Matter Cluster Types & Enums
|
|
13
16
|
* Import these to access type-safe enum values for cluster attributes using the original matter.js names.
|
package/dist/matter/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matter/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/matter/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAqC,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,WAAW,EAIX,yBAAyB,EAIzB,wBAAwB,EAExB,iBAAiB,EACjB,WAAW,EAEX,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AA0JnB;;;;;;GAMG;AACH,OAAO,KAAK,WAAW,MAAM,uBAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logFormatter.d.ts","sourceRoot":"","sources":["../../src/matter/logFormatter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,IAAI,CAAC,UAAU,EAAE,OAAO,KAAK,MAAM,CAiE9E"}
|
|
@@ -27,6 +27,11 @@ export function createHomebridgeLogFormatter() {
|
|
|
27
27
|
const msg = diagnostic;
|
|
28
28
|
// If it's a log message with the expected structure
|
|
29
29
|
if (msg.now && msg.facility && msg.values) {
|
|
30
|
+
// Suppress ValidatedElements logs - these are just validation warnings about
|
|
31
|
+
// optional Matter.js features that aren't implemented (and don't need to be)
|
|
32
|
+
if (msg.facility === 'ValidatedElements') {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
30
35
|
// Format facility as [Matter:FacilityName] in cyan color
|
|
31
36
|
const facility = formatCyan(`[Matter/${msg.facility}]`);
|
|
32
37
|
// Extract the message text from values
|
|
@@ -40,6 +45,7 @@ export function createHomebridgeLogFormatter() {
|
|
|
40
45
|
// Matter NOTICE → no color (Homebridge info)
|
|
41
46
|
// Matter WARN → yellow (Homebridge warn)
|
|
42
47
|
// Matter ERROR/FATAL → red (Homebridge error)
|
|
48
|
+
// For 'notice' or anything else, leave it uncolored (Homebridge info style)
|
|
43
49
|
let coloredMessage = messageText;
|
|
44
50
|
if (msg.level !== undefined) {
|
|
45
51
|
const levelStr = String(msg.level).toLowerCase();
|
|
@@ -55,7 +61,6 @@ export function createHomebridgeLogFormatter() {
|
|
|
55
61
|
// Homebridge error style
|
|
56
62
|
coloredMessage = chalk.red(messageText);
|
|
57
63
|
}
|
|
58
|
-
// For 'notice' or anything else, leave it uncolored (Homebridge info style)
|
|
59
64
|
}
|
|
60
65
|
// Check if timestamps are enabled (respects --no-timestamp flag)
|
|
61
66
|
if (timestampEnabled) {
|
|
@@ -116,20 +121,42 @@ function formatMessageValues(values) {
|
|
|
116
121
|
// Check if this is a Matter.js Diagnostic object
|
|
117
122
|
// These objects store their actual value in a symbol property
|
|
118
123
|
const diagnosticValue = Diagnostic.valueOf(value);
|
|
119
|
-
if (diagnosticValue !== undefined) {
|
|
120
|
-
//
|
|
124
|
+
if (diagnosticValue !== undefined && diagnosticValue !== value) {
|
|
125
|
+
// If diagnosticValue is an array, format each element individually
|
|
126
|
+
if (Array.isArray(diagnosticValue)) {
|
|
127
|
+
return formatMessageValues(diagnosticValue);
|
|
128
|
+
}
|
|
129
|
+
// Otherwise, recursively format the single value
|
|
121
130
|
return formatMessageValues([diagnosticValue]);
|
|
122
131
|
}
|
|
123
|
-
// Special handling for
|
|
132
|
+
// Special handling for error objects
|
|
124
133
|
if (value instanceof Error) {
|
|
125
134
|
const errorDetails = {
|
|
126
|
-
...value, //
|
|
135
|
+
...value, // include any custom properties first
|
|
127
136
|
name: value.name,
|
|
128
137
|
message: value.message,
|
|
129
138
|
stack: value.stack,
|
|
130
139
|
};
|
|
131
140
|
return JSON.stringify(errorDetails, null, 2);
|
|
132
141
|
}
|
|
142
|
+
// Check if this is an array that might contain a QR code
|
|
143
|
+
if (Array.isArray(value)) {
|
|
144
|
+
// Check if any element looks like a QR code (contains block drawing characters and newlines)
|
|
145
|
+
const hasQrCode = value.some(item => typeof item === 'string'
|
|
146
|
+
&& /[▀▄█░▒▓]/.test(item)
|
|
147
|
+
&& item.includes('\n'));
|
|
148
|
+
if (hasQrCode) {
|
|
149
|
+
// Format QR codes with indentation for better alignment
|
|
150
|
+
return value.map((item) => {
|
|
151
|
+
if (typeof item === 'string' && item.includes('\n')) {
|
|
152
|
+
// Add indentation to each line of the QR code
|
|
153
|
+
const lines = item.split('\n');
|
|
154
|
+
return `\n ${lines.join('\n ')}`;
|
|
155
|
+
}
|
|
156
|
+
return String(item);
|
|
157
|
+
}).join(' ');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
133
160
|
try {
|
|
134
161
|
return JSON.stringify(value);
|
|
135
162
|
}
|
|
@@ -141,4 +168,4 @@ function formatMessageValues(values) {
|
|
|
141
168
|
})
|
|
142
169
|
.join(' ');
|
|
143
170
|
}
|
|
144
|
-
//# sourceMappingURL=
|
|
171
|
+
//# sourceMappingURL=logFormatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logFormatter.js","sourceRoot":"","sources":["../../src/matter/logFormatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logFormatter.spec.d.ts","sourceRoot":"","sources":["../../src/matter/logFormatter.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { Logger } from '../logger.js';
|
|
3
|
+
import { createHomebridgeLogFormatter } from './logFormatter.js';
|
|
4
|
+
describe('logFormatter', () => {
|
|
5
|
+
describe('createHomebridgeLogFormatter', () => {
|
|
6
|
+
it('should return a formatter function', () => {
|
|
7
|
+
const formatter = createHomebridgeLogFormatter();
|
|
8
|
+
expect(typeof formatter).toBe('function');
|
|
9
|
+
});
|
|
10
|
+
it('should format Matter.js log messages with facility and timestamp', () => {
|
|
11
|
+
// Enable timestamps for this test
|
|
12
|
+
Logger.setTimestampEnabled(true);
|
|
13
|
+
const formatter = createHomebridgeLogFormatter();
|
|
14
|
+
const diagnostic = {
|
|
15
|
+
now: new Date('2025-01-15T10:30:00.000Z'),
|
|
16
|
+
facility: 'TestFacility',
|
|
17
|
+
values: ['Test message'],
|
|
18
|
+
level: 'notice',
|
|
19
|
+
};
|
|
20
|
+
const result = formatter(diagnostic);
|
|
21
|
+
expect(result).toContain('[Matter/TestFacility]');
|
|
22
|
+
expect(result).toContain('Test message');
|
|
23
|
+
expect(result).toMatch(/\[\d{1,2}\/\d{1,2}\/\d{4}/);
|
|
24
|
+
// Reset timestamp setting
|
|
25
|
+
Logger.setTimestampEnabled(false);
|
|
26
|
+
});
|
|
27
|
+
it('should format messages without timestamp when disabled', () => {
|
|
28
|
+
Logger.setTimestampEnabled(false);
|
|
29
|
+
const formatter = createHomebridgeLogFormatter();
|
|
30
|
+
const diagnostic = {
|
|
31
|
+
now: new Date('2025-01-15T10:30:00.000Z'),
|
|
32
|
+
facility: 'TestFacility',
|
|
33
|
+
values: ['Test message'],
|
|
34
|
+
level: 'notice',
|
|
35
|
+
};
|
|
36
|
+
const result = formatter(diagnostic);
|
|
37
|
+
expect(result).toContain('[Matter/TestFacility]');
|
|
38
|
+
expect(result).toContain('Test message');
|
|
39
|
+
expect(result).not.toMatch(/\[.*\d\/\d{1,2}\/\d{4}/);
|
|
40
|
+
});
|
|
41
|
+
it('should apply gray color for debug level messages', () => {
|
|
42
|
+
const formatter = createHomebridgeLogFormatter();
|
|
43
|
+
const diagnostic = {
|
|
44
|
+
now: new Date(),
|
|
45
|
+
facility: 'Test',
|
|
46
|
+
values: ['debug message'],
|
|
47
|
+
level: 'debug',
|
|
48
|
+
};
|
|
49
|
+
const result = formatter(diagnostic);
|
|
50
|
+
// Chalk colors may be stripped in test environment, just check the message is there
|
|
51
|
+
expect(result).toContain('debug message');
|
|
52
|
+
expect(result).toContain('[Matter/Test]');
|
|
53
|
+
});
|
|
54
|
+
it('should apply gray color for info level messages', () => {
|
|
55
|
+
const formatter = createHomebridgeLogFormatter();
|
|
56
|
+
const diagnostic = {
|
|
57
|
+
now: new Date(),
|
|
58
|
+
facility: 'Test',
|
|
59
|
+
values: ['info message'],
|
|
60
|
+
level: 'info',
|
|
61
|
+
};
|
|
62
|
+
const result = formatter(diagnostic);
|
|
63
|
+
expect(result).toContain('info message');
|
|
64
|
+
expect(result).toContain('[Matter/Test]');
|
|
65
|
+
});
|
|
66
|
+
it('should apply yellow color for warn level messages', () => {
|
|
67
|
+
const formatter = createHomebridgeLogFormatter();
|
|
68
|
+
const diagnostic = {
|
|
69
|
+
now: new Date(),
|
|
70
|
+
facility: 'Test',
|
|
71
|
+
values: ['warning message'],
|
|
72
|
+
level: 'warn',
|
|
73
|
+
};
|
|
74
|
+
const result = formatter(diagnostic);
|
|
75
|
+
// Chalk colors may be stripped in test environment, just check the message is there
|
|
76
|
+
expect(result).toContain('warning message');
|
|
77
|
+
expect(result).toContain('[Matter/Test]');
|
|
78
|
+
});
|
|
79
|
+
it('should apply red color for error level messages', () => {
|
|
80
|
+
const formatter = createHomebridgeLogFormatter();
|
|
81
|
+
const diagnostic = {
|
|
82
|
+
now: new Date(),
|
|
83
|
+
facility: 'Test',
|
|
84
|
+
values: ['error message'],
|
|
85
|
+
level: 'error',
|
|
86
|
+
};
|
|
87
|
+
const result = formatter(diagnostic);
|
|
88
|
+
// Chalk colors may be stripped in test environment, just check the message is there
|
|
89
|
+
expect(result).toContain('error message');
|
|
90
|
+
expect(result).toContain('[Matter/Test]');
|
|
91
|
+
});
|
|
92
|
+
it('should apply red color for fatal level messages', () => {
|
|
93
|
+
const formatter = createHomebridgeLogFormatter();
|
|
94
|
+
const diagnostic = {
|
|
95
|
+
now: new Date(),
|
|
96
|
+
facility: 'Test',
|
|
97
|
+
values: ['fatal message'],
|
|
98
|
+
level: 'fatal',
|
|
99
|
+
};
|
|
100
|
+
const result = formatter(diagnostic);
|
|
101
|
+
expect(result).toContain('fatal message');
|
|
102
|
+
expect(result).toContain('[Matter/Test]');
|
|
103
|
+
});
|
|
104
|
+
it('should not apply color for notice level messages', () => {
|
|
105
|
+
const formatter = createHomebridgeLogFormatter();
|
|
106
|
+
const diagnostic = {
|
|
107
|
+
now: new Date(),
|
|
108
|
+
facility: 'Test',
|
|
109
|
+
values: ['notice message'],
|
|
110
|
+
level: 'notice',
|
|
111
|
+
};
|
|
112
|
+
const result = formatter(diagnostic);
|
|
113
|
+
// Should not contain common ANSI color codes (except for cyan facility)
|
|
114
|
+
expect(result).not.toContain('\x1B[90m'); // gray
|
|
115
|
+
expect(result).not.toContain('\x1B[33m'); // yellow
|
|
116
|
+
expect(result).not.toContain('\x1B[31m'); // red
|
|
117
|
+
});
|
|
118
|
+
it('should trim long MessageChannel messages', () => {
|
|
119
|
+
const formatter = createHomebridgeLogFormatter();
|
|
120
|
+
const longMessage = 'a'.repeat(300);
|
|
121
|
+
const diagnostic = {
|
|
122
|
+
now: new Date(),
|
|
123
|
+
facility: 'MessageChannel',
|
|
124
|
+
values: [longMessage],
|
|
125
|
+
level: 'debug',
|
|
126
|
+
};
|
|
127
|
+
const result = formatter(diagnostic);
|
|
128
|
+
expect(result).toContain('[trimmed...]');
|
|
129
|
+
expect(result.length).toBeLessThan(longMessage.length + 100);
|
|
130
|
+
});
|
|
131
|
+
it('should not trim messages from other facilities', () => {
|
|
132
|
+
const formatter = createHomebridgeLogFormatter();
|
|
133
|
+
const longMessage = 'a'.repeat(300);
|
|
134
|
+
const diagnostic = {
|
|
135
|
+
now: new Date(),
|
|
136
|
+
facility: 'OtherFacility',
|
|
137
|
+
values: [longMessage],
|
|
138
|
+
level: 'debug',
|
|
139
|
+
};
|
|
140
|
+
const result = formatter(diagnostic);
|
|
141
|
+
expect(result).not.toContain('[trimmed...]');
|
|
142
|
+
expect(result).toContain(longMessage);
|
|
143
|
+
});
|
|
144
|
+
it('should format multiple message values', () => {
|
|
145
|
+
const formatter = createHomebridgeLogFormatter();
|
|
146
|
+
const diagnostic = {
|
|
147
|
+
now: new Date(),
|
|
148
|
+
facility: 'Test',
|
|
149
|
+
values: ['first', 'second', 'third'],
|
|
150
|
+
level: 'notice',
|
|
151
|
+
};
|
|
152
|
+
const result = formatter(diagnostic);
|
|
153
|
+
expect(result).toContain('first');
|
|
154
|
+
expect(result).toContain('second');
|
|
155
|
+
expect(result).toContain('third');
|
|
156
|
+
});
|
|
157
|
+
it('should call lazy logging functions', () => {
|
|
158
|
+
const formatter = createHomebridgeLogFormatter();
|
|
159
|
+
const lazyFn = vi.fn(() => 'lazy value');
|
|
160
|
+
const diagnostic = {
|
|
161
|
+
now: new Date(),
|
|
162
|
+
facility: 'Test',
|
|
163
|
+
values: [lazyFn],
|
|
164
|
+
level: 'notice',
|
|
165
|
+
};
|
|
166
|
+
const result = formatter(diagnostic);
|
|
167
|
+
expect(lazyFn).toHaveBeenCalled();
|
|
168
|
+
expect(result).toContain('lazy value');
|
|
169
|
+
});
|
|
170
|
+
it('should handle null values', () => {
|
|
171
|
+
const formatter = createHomebridgeLogFormatter();
|
|
172
|
+
const diagnostic = {
|
|
173
|
+
now: new Date(),
|
|
174
|
+
facility: 'Test',
|
|
175
|
+
values: [null],
|
|
176
|
+
level: 'notice',
|
|
177
|
+
};
|
|
178
|
+
const result = formatter(diagnostic);
|
|
179
|
+
expect(result).toContain('null');
|
|
180
|
+
});
|
|
181
|
+
it('should handle undefined values', () => {
|
|
182
|
+
const formatter = createHomebridgeLogFormatter();
|
|
183
|
+
const diagnostic = {
|
|
184
|
+
now: new Date(),
|
|
185
|
+
facility: 'Test',
|
|
186
|
+
values: [undefined],
|
|
187
|
+
level: 'notice',
|
|
188
|
+
};
|
|
189
|
+
const result = formatter(diagnostic);
|
|
190
|
+
expect(result).toContain('undefined');
|
|
191
|
+
});
|
|
192
|
+
it('should format error objects with stack traces', () => {
|
|
193
|
+
const formatter = createHomebridgeLogFormatter();
|
|
194
|
+
const error = new Error('test error');
|
|
195
|
+
const diagnostic = {
|
|
196
|
+
now: new Date(),
|
|
197
|
+
facility: 'Test',
|
|
198
|
+
values: [error],
|
|
199
|
+
level: 'error',
|
|
200
|
+
};
|
|
201
|
+
const result = formatter(diagnostic);
|
|
202
|
+
expect(result).toContain('test error');
|
|
203
|
+
expect(result).toContain('stack');
|
|
204
|
+
});
|
|
205
|
+
it('should format plain objects as JSON', () => {
|
|
206
|
+
const formatter = createHomebridgeLogFormatter();
|
|
207
|
+
const obj = { key: 'value', number: 42 };
|
|
208
|
+
const diagnostic = {
|
|
209
|
+
now: new Date(),
|
|
210
|
+
facility: 'Test',
|
|
211
|
+
values: [obj],
|
|
212
|
+
level: 'notice',
|
|
213
|
+
};
|
|
214
|
+
const result = formatter(diagnostic);
|
|
215
|
+
expect(result).toContain('key');
|
|
216
|
+
expect(result).toContain('value');
|
|
217
|
+
expect(result).toContain('42');
|
|
218
|
+
});
|
|
219
|
+
it('should detect and format QR codes with indentation', () => {
|
|
220
|
+
const formatter = createHomebridgeLogFormatter();
|
|
221
|
+
// QR code with block drawing characters
|
|
222
|
+
const qrCode = '█▀▀▀▀▀█ ▀▀ █ █▀▀▀▀▀█\n█ ███ █ ██▄▀▀ █ ███ █\n█ ▀▀▀ █ █ ▀ ▀ █ ▀▀▀ █';
|
|
223
|
+
const diagnostic = {
|
|
224
|
+
now: new Date(),
|
|
225
|
+
facility: 'Commissioning',
|
|
226
|
+
values: [['QR Code:', qrCode]],
|
|
227
|
+
level: 'notice',
|
|
228
|
+
};
|
|
229
|
+
const result = formatter(diagnostic);
|
|
230
|
+
expect(result).toContain('QR Code:');
|
|
231
|
+
// Should have newline before QR code
|
|
232
|
+
expect(result).toContain('\n █▀▀▀▀▀█');
|
|
233
|
+
// Should have indentation on each line
|
|
234
|
+
expect(result).toContain('\n █ ███ █');
|
|
235
|
+
expect(result).toContain('\n █ ▀▀▀ █');
|
|
236
|
+
});
|
|
237
|
+
it('should not apply QR formatting to regular arrays', () => {
|
|
238
|
+
const formatter = createHomebridgeLogFormatter();
|
|
239
|
+
const diagnostic = {
|
|
240
|
+
now: new Date(),
|
|
241
|
+
facility: 'Test',
|
|
242
|
+
values: [['first', 'second', 'third']],
|
|
243
|
+
level: 'notice',
|
|
244
|
+
};
|
|
245
|
+
const result = formatter(diagnostic);
|
|
246
|
+
expect(result).toContain('first');
|
|
247
|
+
expect(result).toContain('second');
|
|
248
|
+
expect(result).toContain('third');
|
|
249
|
+
expect(result).not.toContain('\n ');
|
|
250
|
+
});
|
|
251
|
+
it('should handle non-message diagnostics gracefully', () => {
|
|
252
|
+
const formatter = createHomebridgeLogFormatter();
|
|
253
|
+
const result = formatter('plain string');
|
|
254
|
+
expect(result).toBe('plain string');
|
|
255
|
+
});
|
|
256
|
+
it('should handle empty message values', () => {
|
|
257
|
+
const formatter = createHomebridgeLogFormatter();
|
|
258
|
+
const diagnostic = {
|
|
259
|
+
now: new Date(),
|
|
260
|
+
facility: 'Test',
|
|
261
|
+
values: [],
|
|
262
|
+
level: 'notice',
|
|
263
|
+
};
|
|
264
|
+
const result = formatter(diagnostic);
|
|
265
|
+
expect(result).toContain('[Matter/Test]');
|
|
266
|
+
});
|
|
267
|
+
it('should handle diagnostic with valueOf using Diagnostic API', () => {
|
|
268
|
+
const formatter = createHomebridgeLogFormatter();
|
|
269
|
+
// Create a plain object that Matter.js Diagnostic.valueOf would process
|
|
270
|
+
const objectValue = { key: 'test', value: 42 };
|
|
271
|
+
const diagnostic = {
|
|
272
|
+
now: new Date(),
|
|
273
|
+
facility: 'Test',
|
|
274
|
+
values: [objectValue],
|
|
275
|
+
level: 'notice',
|
|
276
|
+
};
|
|
277
|
+
const result = formatter(diagnostic);
|
|
278
|
+
// Should contain the JSON stringified version
|
|
279
|
+
expect(result).toContain('key');
|
|
280
|
+
expect(result).toContain('test');
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
//# sourceMappingURL=logFormatter.spec.js.map
|