@iobroker/testing 2.5.4 → 2.6.0

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/CHANGELOG.md CHANGED
@@ -4,6 +4,17 @@
4
4
  PLACEHOLDER for next version:
5
5
  ## __WORK IN PROGRESS__
6
6
  -->
7
+ ## 2.6.0 (2022-04-18)
8
+ * The loglevel for the adapter and DB instances is now configurable and defaults to `"debug"` in both cases
9
+
10
+ ## 2.5.6 (2022-03-05)
11
+ * Allow immediate exit with code `0` for `once` and `subscribe` adapters too
12
+
13
+ ## 2.5.5 (2022-03-04)
14
+ * Allow immediate exit with code `0` for `schedule` adapters
15
+ * Check that `npm` is not listed as a local dependency in `package.json`
16
+ * Updated dependencies
17
+
7
18
  ## 2.5.4 (2022-02-02)
8
19
  * Modifying ioBroker databases now uses the same methods that JS-Controller uses internally. This ensures that the testing is compatible with the `jsonl` database format.
9
20
  * Testing adapters with adapter dependencies that try to access the databases during installation now works.
package/build/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -9,16 +9,7 @@ export declare function loadNpmPackage(adapterDir: string): Record<string, any>;
9
9
  * @param adapterDir The directory the adapter resides in
10
10
  */
11
11
  export declare function loadIoPackage(adapterDir: string): Record<string, any>;
12
- /**
13
- * Checks if an adapter claims that it supports compact mode
14
- * @param ioPackage The contents of io-package.json in object format
15
- */
16
- export declare function adapterShouldSupportCompactMode(ioPackage: Record<string, any>): boolean;
17
- /**
18
- * Checks if an adapter claims that it supports compact mode
19
- * @param adapterDir The directory the adapter resides in
20
- */
21
- export declare function adapterShouldSupportCompactMode(adapterDir: string): boolean;
12
+ export declare function getAdapterExecutionMode(adapterDir: string): ioBroker.AdapterCommon["mode"];
22
13
  /**
23
14
  * Locates an adapter's main file
24
15
  * @param adapterDir The directory the adapter resides in
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -22,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
22
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
23
27
  };
24
28
  Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.adapterShouldSupportCompactMode = exports.loadIoPackage = exports.loadNpmPackage = void 0;
29
+ exports.getAdapterDependencies = exports.getAdapterFullName = exports.getAdapterName = exports.getAppName = exports.loadInstanceObjects = exports.loadAdapterCommon = exports.loadAdapterConfig = exports.locateAdapterMainFile = exports.getAdapterExecutionMode = exports.loadIoPackage = exports.loadNpmPackage = void 0;
26
30
  // Add debug logging for tests
27
31
  const typeguards_1 = require("alcalzone-shared/typeguards");
28
32
  const debug_1 = __importDefault(require("debug"));
@@ -45,12 +49,11 @@ function loadIoPackage(adapterDir) {
45
49
  return require(path.join(adapterDir, "io-package.json"));
46
50
  }
47
51
  exports.loadIoPackage = loadIoPackage;
48
- function adapterShouldSupportCompactMode(dirOrIoPack) {
49
- if (typeof dirOrIoPack === "string")
50
- dirOrIoPack = loadIoPackage(dirOrIoPack);
51
- return dirOrIoPack.common.compact === true;
52
+ function getAdapterExecutionMode(adapterDir) {
53
+ const ioPackage = loadIoPackage(adapterDir);
54
+ return ioPackage.common.mode;
52
55
  }
53
- exports.adapterShouldSupportCompactMode = adapterShouldSupportCompactMode;
56
+ exports.getAdapterExecutionMode = getAdapterExecutionMode;
54
57
  /**
55
58
  * Locates an adapter's main file
56
59
  * @param adapterDir The directory the adapter resides in
@@ -1,6 +1,9 @@
1
+ /// <reference types="iobroker" />
1
2
  import { TestHarness } from "./lib/harness";
2
3
  export interface TestAdapterOptions {
3
4
  allowedExitCodes?: (number | string)[];
5
+ /** The loglevel to use for DB and adapter related logs */
6
+ loglevel?: ioBroker.LogLevel;
4
7
  /** How long to wait before the adapter startup is considered successful */
5
8
  waitBeforeStartupSuccess?: number;
6
9
  /** Allows you to define additional tests */
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -28,6 +32,7 @@ const adapterSetup_1 = require("./lib/adapterSetup");
28
32
  const controllerSetup_1 = require("./lib/controllerSetup");
29
33
  const dbConnection_1 = require("./lib/dbConnection");
30
34
  const harness_1 = require("./lib/harness");
35
+ const logger_1 = require("./lib/logger");
31
36
  function testAdapter(adapterDir, options = {}) {
32
37
  const appName = (0, adapterTools_1.getAppName)(adapterDir);
33
38
  const adapterName = (0, adapterTools_1.getAdapterName)(adapterDir);
@@ -43,6 +48,7 @@ function testAdapter(adapterDir, options = {}) {
43
48
  let objectsBackup;
44
49
  let statesBackup;
45
50
  before(async function () {
51
+ var _a;
46
52
  // Installation may take a while - especially if rsa-compat needs to be installed
47
53
  const oneMinute = 60000;
48
54
  this.timeout(30 * oneMinute);
@@ -57,7 +63,7 @@ function testAdapter(adapterDir, options = {}) {
57
63
  // Only then we can install the adapter, because some (including VIS) try to access
58
64
  // the databases if JS Controller is installed
59
65
  await adapterSetup.installAdapterInTestDir();
60
- const dbConnection = new dbConnection_1.DBConnection(appName, testDir);
66
+ const dbConnection = new dbConnection_1.DBConnection(appName, testDir, (0, logger_1.createLogger)((_a = options.loglevel) !== null && _a !== void 0 ? _a : "debug"));
61
67
  await dbConnection.start();
62
68
  controllerSetup.setupSystemConfig(dbConnection);
63
69
  await controllerSetup.disableAdminInstances(dbConnection);
@@ -69,8 +75,9 @@ function testAdapter(adapterDir, options = {}) {
69
75
  await dbConnection.backup());
70
76
  });
71
77
  beforeEach(async function () {
78
+ var _a, _b;
72
79
  this.timeout(30000);
73
- dbConnection = new dbConnection_1.DBConnection(appName, testDir);
80
+ dbConnection = new dbConnection_1.DBConnection(appName, testDir, (0, logger_1.createLogger)((_a = options.loglevel) !== null && _a !== void 0 ? _a : "debug"));
74
81
  // Clean up before every single test
75
82
  await Promise.all([
76
83
  controllerSetup.clearDBDir(),
@@ -80,11 +87,11 @@ function testAdapter(adapterDir, options = {}) {
80
87
  // Create a new test harness
81
88
  await dbConnection.start();
82
89
  harness = new harness_1.TestHarness(adapterDir, testDir, dbConnection);
83
- // Enable the adapter and set its loglevel to debug
90
+ // Enable the adapter and set its loglevel to the selected one
84
91
  await harness.changeAdapterConfig(adapterName, {
85
92
  common: {
86
93
  enabled: true,
87
- loglevel: "debug",
94
+ loglevel: (_b = options.loglevel) !== null && _b !== void 0 ? _b : "debug",
88
95
  },
89
96
  });
90
97
  // And enable the sendTo emulation
@@ -98,7 +105,16 @@ function testAdapter(adapterDir, options = {}) {
98
105
  harness.removeAllListeners();
99
106
  });
100
107
  it("The adapter starts", function () {
108
+ var _a;
101
109
  this.timeout(60000);
110
+ const allowedExitCodes = new Set((_a = options.allowedExitCodes) !== null && _a !== void 0 ? _a : []);
111
+ // Adapters with these modes are allowed to "immediately" exit with code 0
112
+ switch (harness.getAdapterExecutionMode()) {
113
+ case "schedule":
114
+ case "once":
115
+ case "subscribe":
116
+ allowedExitCodes.add(0);
117
+ }
102
118
  return new Promise((resolve, reject) => {
103
119
  // Register a handler to check the alive state and exit codes
104
120
  harness
@@ -114,8 +130,7 @@ function testAdapter(adapterDir, options = {}) {
114
130
  }
115
131
  })
116
132
  .on("failed", (code) => {
117
- if (options.allowedExitCodes == undefined ||
118
- options.allowedExitCodes.indexOf(code) === -1) {
133
+ if (!allowedExitCodes.has(code)) {
119
134
  reject(new Error(`The adapter startup was interrupted unexpectedly with ${typeof code === "number"
120
135
  ? "code"
121
136
  : "signal"} ${code}`));
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,11 +11,12 @@ export interface DBConnection {
11
11
  export declare class DBConnection extends EventEmitter {
12
12
  private appName;
13
13
  private testDir;
14
+ private logger;
14
15
  /**
15
16
  * @param appName The branded name of "iobroker"
16
17
  * @param testDir The directory the integration tests are executed in
17
18
  */
18
- constructor(appName: string, testDir: string);
19
+ constructor(appName: string, testDir: string, logger: ioBroker.Logger);
19
20
  private testDataDir;
20
21
  private testControllerDir;
21
22
  private _objectsServer;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -29,24 +33,17 @@ const fs_extra_1 = require("fs-extra");
29
33
  const path = __importStar(require("path"));
30
34
  const tools_1 = require("./tools");
31
35
  const debug = (0, debug_1.default)("testing:integration:DBConnection");
32
- /** The logger instance for the objects and states DB */
33
- const logger = {
34
- silly: console.log,
35
- debug: console.log,
36
- info: console.log,
37
- warn: console.warn,
38
- error: console.error,
39
- };
40
36
  /** The DB connection capsules access to the states and objects DB */
41
37
  class DBConnection extends events_1.default {
42
38
  /**
43
39
  * @param appName The branded name of "iobroker"
44
40
  * @param testDir The directory the integration tests are executed in
45
41
  */
46
- constructor(appName, testDir) {
42
+ constructor(appName, testDir, logger) {
47
43
  super();
48
44
  this.appName = appName;
49
45
  this.testDir = testDir;
46
+ this.logger = logger;
50
47
  this._isRunning = false;
51
48
  this.getObject = async (id) => {
52
49
  if (!this._objectsClient) {
@@ -136,7 +133,6 @@ class DBConnection extends events_1.default {
136
133
  if (wasRunning)
137
134
  await this.start();
138
135
  }
139
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
140
136
  setSystemConfig(systemConfig) {
141
137
  const systemFilename = path.join(this.testDataDir, `${this.appName}.json`);
142
138
  (0, fs_extra_1.writeJSONSync)(systemFilename, systemConfig, { spaces: 2 });
@@ -189,7 +185,7 @@ class DBConnection extends events_1.default {
189
185
  noFileCache: false,
190
186
  connectTimeout: 2000,
191
187
  },
192
- logger,
188
+ logger: this.logger,
193
189
  };
194
190
  const objectsDbPath = require.resolve(`@iobroker/db-objects-${objectsType}`, {
195
191
  paths: [
@@ -237,7 +233,7 @@ class DBConnection extends events_1.default {
237
233
  retry_max_delay: 15000,
238
234
  },
239
235
  },
240
- logger,
236
+ logger: this.logger,
241
237
  };
242
238
  const statesDbPath = require.resolve(`@iobroker/db-states-${statesType}`, {
243
239
  paths: [
@@ -276,9 +272,7 @@ class DBConnection extends events_1.default {
276
272
  }
277
273
  return this._statesClient.subscribeMessage(id);
278
274
  }
279
- pushMessage(instanceId,
280
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
281
- msg, callback) {
275
+ pushMessage(instanceId, msg, callback) {
282
276
  if (!this._statesClient) {
283
277
  throw new Error("States DB is not running");
284
278
  }
@@ -61,6 +61,7 @@ export declare class TestHarness extends EventEmitter {
61
61
  * Updates the adapter config. The changes can be a subset of the target object
62
62
  */
63
63
  changeAdapterConfig(adapterName: string, changes: Record<string, any>): Promise<void>;
64
+ getAdapterExecutionMode(): ioBroker.AdapterCommon["mode"];
64
65
  /** Enables the sendTo method */
65
66
  enableSendTo(): Promise<void>;
66
67
  private sendToID;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -222,6 +226,9 @@ class TestHarness extends events_1.EventEmitter {
222
226
  await this.dbConnection.setObject(adapterInstanceId, obj);
223
227
  }
224
228
  }
229
+ getAdapterExecutionMode() {
230
+ return (0, adapterTools_1.getAdapterExecutionMode)(this.testAdapterDir);
231
+ }
225
232
  /** Enables the sendTo method */
226
233
  async enableSendTo() {
227
234
  await this.dbConnection.setObject(fromAdapterID, {
@@ -232,9 +239,7 @@ class TestHarness extends events_1.EventEmitter {
232
239
  this.dbConnection.subscribeMessage(fromAdapterID);
233
240
  }
234
241
  /** Sends a message to an adapter instance */
235
- sendTo(target, command,
236
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
237
- message, callback) {
242
+ sendTo(target, command, message, callback) {
238
243
  const stateChangedHandler = (id, state) => {
239
244
  if (id === `messagebox.${fromAdapterID}`) {
240
245
  callback(state.message);
@@ -0,0 +1,2 @@
1
+ /// <reference types="iobroker" />
2
+ export declare function createLogger(loglevel: ioBroker.LogLevel): ioBroker.Logger;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLogger = void 0;
4
+ var LoglevelOrder;
5
+ (function (LoglevelOrder) {
6
+ LoglevelOrder[LoglevelOrder["error"] = 0] = "error";
7
+ LoglevelOrder[LoglevelOrder["warn"] = 1] = "warn";
8
+ LoglevelOrder[LoglevelOrder["info"] = 2] = "info";
9
+ LoglevelOrder[LoglevelOrder["debug"] = 3] = "debug";
10
+ LoglevelOrder[LoglevelOrder["silly"] = 4] = "silly";
11
+ })(LoglevelOrder || (LoglevelOrder = {}));
12
+ function createLogger(loglevel) {
13
+ var _a;
14
+ const loglevelNumeric = (_a = LoglevelOrder[loglevel !== null && loglevel !== void 0 ? loglevel : "debug"]) !== null && _a !== void 0 ? _a : LoglevelOrder.debug;
15
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
16
+ const ignore = () => { };
17
+ return {
18
+ error: loglevelNumeric >= LoglevelOrder.error ? console.error : ignore,
19
+ warn: loglevelNumeric >= LoglevelOrder.warn ? console.warn : ignore,
20
+ info: loglevelNumeric >= LoglevelOrder.info ? console.log : ignore,
21
+ debug: loglevelNumeric >= LoglevelOrder.debug ? console.log : ignore,
22
+ silly: loglevelNumeric >= LoglevelOrder.silly ? console.log : ignore,
23
+ level: loglevel,
24
+ };
25
+ }
26
+ exports.createLogger = createLogger;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -111,6 +115,19 @@ function validatePackageFiles(adapterDir) {
111
115
  it(`The repository type is "git"`, () => {
112
116
  (0, chai_1.expect)(packageContent.repository.type).to.equal("git");
113
117
  });
118
+ it("npm is not listed as a dependency", () => {
119
+ for (const depType of [
120
+ "dependencies",
121
+ "devDependencies",
122
+ "optionalDependencies",
123
+ "peerDependencies",
124
+ ]) {
125
+ if ((0, typeguards_1.isObject)(packageContent[depType]) &&
126
+ "npm" in packageContent[depType]) {
127
+ throw new chai_1.AssertionError(`npm must not be listed in ${depType}, found "${packageContent[depType].npm}"!`);
128
+ }
129
+ }
130
+ });
114
131
  });
115
132
  describe(`Check contents of io-package.json`, () => {
116
133
  var _a;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iobroker/testing",
3
- "version": "2.5.4",
3
+ "version": "2.6.0",
4
4
  "description": "Shared utilities for adapter and module testing in ioBroker",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -38,38 +38,38 @@
38
38
  },
39
39
  "homepage": "https://github.com/AlCalzone/testing#readme",
40
40
  "devDependencies": {
41
- "@alcalzone/release-script": "^3.5.0",
42
- "@alcalzone/release-script-plugin-license": "^3.5.0",
43
- "@iobroker/adapter-core": "^2.5.1",
41
+ "@alcalzone/release-script": "^3.5.6",
42
+ "@alcalzone/release-script-plugin-license": "^3.5.3",
43
+ "@iobroker/adapter-core": "^2.6.0",
44
44
  "@tsconfig/node12": "^1.0.9",
45
45
  "@types/chai": "^4.3.0",
46
- "@types/chai-as-promised": "^7.1.4",
46
+ "@types/chai-as-promised": "^7.1.5",
47
47
  "@types/debug": "4.1.7",
48
48
  "@types/fs-extra": "^9.0.13",
49
- "@types/iobroker": "^3.3.4",
50
- "@types/mocha": "^9.0.0",
51
- "@types/node": "^16.10.2",
52
- "@types/sinon": "^10.0.6",
49
+ "@types/iobroker": "^4.0.1",
50
+ "@types/mocha": "^9.1.0",
51
+ "@types/node": "^16.11.26",
52
+ "@types/sinon": "^10.0.11",
53
53
  "@types/sinon-chai": "^3.2.8",
54
- "@typescript-eslint/eslint-plugin": "^4.33.0",
55
- "@typescript-eslint/parser": "^4.33.0",
56
- "eslint": "^7.32.0",
57
- "eslint-config-prettier": "^8.3.0",
54
+ "@typescript-eslint/eslint-plugin": "^5.17.0",
55
+ "@typescript-eslint/parser": "^5.13.0",
56
+ "eslint": "^8.12.0",
57
+ "eslint-config-prettier": "^8.5.0",
58
58
  "eslint-plugin-prettier": "^4.0.0",
59
- "prettier": "^2.5.1",
59
+ "prettier": "^2.6.1",
60
60
  "rimraf": "^3.0.2",
61
61
  "source-map-support": "^0.5.21",
62
- "ts-node": "^10.2.1",
63
- "typescript": "~4.5.5"
62
+ "ts-node": "^10.6.0",
63
+ "typescript": "~4.6.2"
64
64
  },
65
65
  "dependencies": {
66
66
  "alcalzone-shared": "~4.0.1",
67
- "chai": "^4.3.4",
67
+ "chai": "^4.3.6",
68
68
  "chai-as-promised": "^7.1.1",
69
69
  "debug": "^4.3.3",
70
- "fs-extra": "^10.0.0",
71
- "mocha": "^9.1.3",
72
- "sinon": "^12.0.1",
70
+ "fs-extra": "^10.0.1",
71
+ "mocha": "^9.2.2",
72
+ "sinon": "^13.0.1",
73
73
  "sinon-chai": "^3.7.0"
74
74
  }
75
75
  }