@matterbridge/jest-utils 3.9.1-dev-20260614-18d1a2e → 3.9.1-dev-20260617-b1e1b99

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 CHANGED
@@ -6,10 +6,12 @@
6
6
  [![Docker Pulls](https://img.shields.io/docker/pulls/luligu/matterbridge?label=docker%20pulls)](https://hub.docker.com/r/luligu/matterbridge)
7
7
  ![Node.js CI](https://github.com/Luligu/matterbridge/actions/workflows/build.yml/badge.svg)
8
8
  ![CodeQL](https://github.com/Luligu/matterbridge/actions/workflows/codeql.yml/badge.svg)
9
- [![codecov](https://codecov.io/gh/Luligu/matterbridge/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge)
10
- [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://prettier.io/)
11
- [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://eslint.org/)
9
+ [![Codecov](https://codecov.io/gh/Luligu/matterbridge/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge)
10
+ [![tested with Vitest](https://img.shields.io/badge/tested_with-Vitest-6E9F18.svg?logo=vitest&logoColor=white)](https://vitest.dev)
11
+ [![styled with Oxc](https://img.shields.io/badge/styled_with-Oxc-9BE4E0.svg?logo=oxc&logoColor=white)](https://oxc.rs/docs/guide/usage/formatter.html)
12
+ [![linted with Oxc](https://img.shields.io/badge/linted_with-Oxc-9BE4E0.svg?logo=oxc&logoColor=white)](https://oxc.rs/docs/guide/usage/linter.html)
12
13
  [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
14
+ [![TypeScript Native](https://img.shields.io/badge/TypeScript_Native-3178C6?logo=typescript&logoColor=white)](https://github.com/microsoft/typescript-go)
13
15
  [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
14
16
  [![matterbridge.io](https://img.shields.io/badge/matterbridge.io-online-brightgreen)](https://matterbridge.io)
15
17
 
@@ -12,7 +12,7 @@ export declare function destroyTestEnvironment(): Promise<void>;
12
12
  export declare function getMatterbridge(): PlatformMatterbridge;
13
13
  export declare const addBridgedEndpoint: (pluginName: string, device: Endpoint) => Promise<boolean>;
14
14
  export declare const removeBridgedEndpoint: (pluginName: string, device: Endpoint) => Promise<boolean>;
15
- export declare const removeAllBridgedEndpoints: (pluginName: string, _delay?: number) => Promise<boolean>;
15
+ export declare const removeAllBridgedEndpoints: (_pluginName: string, _delay?: number) => Promise<boolean>;
16
16
  export declare const addVirtualEndpoint: (pluginName: string, name: string, type: "light" | "outlet" | "switch" | "mounted_switch", callback: () => Promise<void>) => Promise<boolean>;
17
17
  export declare function addMatterbridge(platform: object): void;
18
18
  export declare function flushAllEndpointNumberPersistence(targetServer: ServerNode, rounds?: number, ticks?: number, microTurns?: number, pause?: number): Promise<void>;
@@ -1,6 +1,5 @@
1
1
  import '@matter/nodejs';
2
2
  import path from 'node:path';
3
- import { inspect } from 'node:util';
4
3
  import { Environment, Lifecycle, LogFormat as MatterLogFormat, LogLevel as MatterLogLevel } from '@matter/general';
5
4
  import { Endpoint, ServerNode, ServerNodeStore } from '@matter/node';
6
5
  import { BridgedDeviceBasicInformationServer } from '@matter/node/behaviors/bridged-device-basic-information';
@@ -10,12 +9,14 @@ import { MountedOnOffControlDevice } from '@matter/node/devices/mounted-on-off-c
10
9
  import { AggregatorEndpoint } from '@matter/node/endpoints';
11
10
  import { DeviceTypeId, VendorId } from '@matter/types/datatype';
12
11
  import { MATTER_STORAGE_DIR } from '@matterbridge/types';
12
+ import { inspectError } from '@matterbridge/utils/error';
13
13
  import { er, rs } from 'node-ansi-logger';
14
14
  import { flushAsync } from './flushAsync.js';
15
- import { HOMEDIR, NAME } from './jestSetupTest.js';
15
+ import { HOMEDIR, log, NAME } from './jestSetupTest.js';
16
16
  export let environment;
17
17
  export let server;
18
18
  export let aggregator;
19
+ const noop = () => undefined;
19
20
  export async function createTestEnvironment() {
20
21
  expect(NAME).toBeDefined();
21
22
  expect(typeof NAME).toBe('string');
@@ -93,7 +94,7 @@ export const removeBridgedEndpoint = async (pluginName, device) => {
93
94
  return Promise.reject(error);
94
95
  }
95
96
  };
96
- export const removeAllBridgedEndpoints = async (pluginName, _delay = 0) => {
97
+ export const removeAllBridgedEndpoints = async (_pluginName, _delay = 0) => {
97
98
  try {
98
99
  for (const device of aggregator.parts) {
99
100
  await device.delete();
@@ -120,8 +121,8 @@ export const addVirtualEndpoint = async (pluginName, name, type, callback) => {
120
121
  });
121
122
  device.events.onOff.onOff$Changed.on((value) => {
122
123
  if (value) {
123
- void callback().catch(() => { });
124
- void device.setStateOf(OnOffServer, { onOff: false }).catch(() => { });
124
+ void callback().catch(noop);
125
+ void device.setStateOf(OnOffServer, { onOff: false }).catch(noop);
125
126
  }
126
127
  });
127
128
  await aggregator.add(device);
@@ -158,10 +159,8 @@ function collectAllEndpoints(root) {
158
159
  const list = [];
159
160
  const walk = (ep) => {
160
161
  list.push(ep);
161
- if (ep.parts) {
162
- for (const child of ep.parts) {
163
- walk(child);
164
- }
162
+ for (const child of ep.parts) {
163
+ walk(child);
165
164
  }
166
165
  };
167
166
  walk(root);
@@ -183,9 +182,8 @@ export async function assertAllEndpointNumbersPersisted(targetServer) {
183
182
  return all.length;
184
183
  }
185
184
  export async function closeServerNodeStores(targetServer) {
186
- if (!targetServer)
187
- targetServer = server;
188
- await targetServer?.env.get(ServerNodeStore)?.endpointStores.close();
185
+ const resolvedTargetServer = targetServer ?? server;
186
+ await resolvedTargetServer?.env.get(ServerNodeStore)?.endpointStores.close();
189
187
  }
190
188
  export async function createServerNode(port, deviceType = DeviceTypeId(0x000e), ticks = 1, microTurns = 1, pause = 10) {
191
189
  const { randomBytes } = await import('node:crypto');
@@ -242,7 +240,7 @@ export async function startServerNode(ticks = 1, microTurns = 1, pause = 10) {
242
240
  throw new Error('Server node and aggregator must be created before starting the server. Call createServerNode() first.');
243
241
  }
244
242
  await new Promise((resolve, reject) => {
245
- server.lifecycle.online.on(async () => {
243
+ server.lifecycle.online.on(() => {
246
244
  resolve();
247
245
  });
248
246
  server.start().catch((err) => reject(err));
@@ -295,9 +293,8 @@ export async function addDevice(owner, device, rounds = 3, pause = 10) {
295
293
  await owner.add(device);
296
294
  }
297
295
  catch (error) {
298
- const errorMessage = error instanceof Error ? error.message : error;
299
- const errorInspect = inspect(error, { depth: 10 });
300
- process.stderr.write(`${er}Error adding device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
296
+ inspectError(log, `Error adding device ${device.maybeId}.${device.maybeNumber}`, error);
297
+ process.stderr.write(`${er}Error adding device ${device.maybeId}.${device.maybeNumber}${rs}\n`);
301
298
  return false;
302
299
  }
303
300
  await device.construction.ready;
@@ -323,9 +320,8 @@ export async function deleteDevice(owner, device, rounds = 3, pause = 10) {
323
320
  await device.delete();
324
321
  }
325
322
  catch (error) {
326
- const errorMessage = error instanceof Error ? error.message : error;
327
- const errorInspect = inspect(error, { depth: 10 });
328
- process.stderr.write(`${er}Error deleting device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
323
+ inspectError(log, `Error deleting device ${device.maybeId}.${device.maybeNumber}`, error);
324
+ process.stderr.write(`${er}Error deleting device ${device.maybeId}.${device.maybeNumber}${rs}\n`);
329
325
  return false;
330
326
  }
331
327
  expect(owner.parts.has(device)).toBeFalsy();
@@ -18,6 +18,7 @@ export let consoleErrorSpy;
18
18
  export let NAME;
19
19
  export let HOMEDIR;
20
20
  export let log;
21
+ const noop = () => undefined;
21
22
  export async function setupTest(name, debug = false, argv = [], env = {}) {
22
23
  expect(name).toBeDefined();
23
24
  expect(typeof name).toBe('string');
@@ -47,12 +48,12 @@ export async function setupTest(name, debug = false, argv = [], env = {}) {
47
48
  consoleErrorSpy = jest.spyOn(console, 'error');
48
49
  }
49
50
  else {
50
- loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
51
- consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
52
- consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(() => { });
53
- consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(() => { });
54
- consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
55
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
51
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(noop);
52
+ consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(noop);
53
+ consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(noop);
54
+ consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(noop);
55
+ consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(noop);
56
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(noop);
56
57
  }
57
58
  }
58
59
  export async function setDebug(debug) {
@@ -72,11 +73,11 @@ export async function setDebug(debug) {
72
73
  consoleErrorSpy = jest.spyOn(console, 'error');
73
74
  }
74
75
  else {
75
- loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(() => { });
76
- consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
77
- consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(() => { });
78
- consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(() => { });
79
- consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => { });
80
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
76
+ loggerLogSpy = jest.spyOn(AnsiLogger.prototype, 'log').mockImplementation(noop);
77
+ consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(noop);
78
+ consoleDebugSpy = jest.spyOn(console, 'debug').mockImplementation(noop);
79
+ consoleInfoSpy = jest.spyOn(console, 'info').mockImplementation(noop);
80
+ consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(noop);
81
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(noop);
81
82
  }
82
83
  }
@@ -1,5 +1,5 @@
1
1
  import { ColorControl } from '@matter/types/clusters/color-control';
2
- import { type LevelControl } from '@matter/types/clusters/level-control';
2
+ import type { LevelControl } from '@matter/types/clusters/level-control';
3
3
  export declare function getMoveToLevelRequest(level: number, transitionTime: number, executeIfOff: boolean): LevelControl.MoveToLevelRequest;
4
4
  export declare function getMoveToColorTemperatureRequest(colorTemperatureMireds: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToColorTemperatureRequest;
5
5
  export declare function getMoveToHueRequest(hue: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToHueRequest;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/jest-utils",
3
- "version": "3.9.1-dev-20260614-18d1a2e",
3
+ "version": "3.9.1-dev-20260617-b1e1b99",
4
4
  "description": "Matterbridge jest utility library",
5
5
  "author": "https://github.com/Luligu",
6
6
  "homepage": "https://matterbridge.io/",
@@ -65,7 +65,9 @@
65
65
  "CHANGELOG.md"
66
66
  ],
67
67
  "dependencies": {
68
- "@matterbridge/types": "3.9.1-dev-20260614-18d1a2e",
68
+ "@matter/main": "0.17.3",
69
+ "@matterbridge/types": "3.9.1-dev-20260617-b1e1b99",
70
+ "@matterbridge/utils": "3.9.1-dev-20260617-b1e1b99",
69
71
  "node-ansi-logger": "3.3.0-dev-20260607-585945a"
70
72
  }
71
73
  }