@iobroker/db-states-jsonl 4.0.21 → 4.1.0-alpha.0-20220819-74ceeddc

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.
@@ -0,0 +1,4 @@
1
+ export const Client: typeof import("@iobroker/db-states-redis").Client;
2
+ export const Server: typeof import("./lib/states/statesInMemServerClass.js");
3
+ export function getDefaultPort(_host: any): number;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  module.exports = {
2
3
  Client: require('@iobroker/db-states-redis').Client,
3
4
  Server: require('./lib/states/statesInMemServerClass.js'),
@@ -5,3 +6,4 @@ module.exports = {
5
6
  return 9000;
6
7
  }
7
8
  };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,21 @@
1
+ export = StatesInMemoryJsonlDB;
2
+ declare const StatesInMemoryJsonlDB_base: typeof import("@iobroker/db-states-file/build/lib/states/statesInMemFileDB");
3
+ /**
4
+ * This class inherits InMemoryFileDB class and adds all relevant logic for states
5
+ * including the available methods for use by js-controller directly
6
+ **/
7
+ declare class StatesInMemoryJsonlDB extends StatesInMemoryJsonlDB_base {
8
+ constructor(settings: any);
9
+ /** @type {JsonlDB<any>} */
10
+ _db: JsonlDB<any>;
11
+ _backupInterval: NodeJS.Timer | undefined;
12
+ /**
13
+ * Checks if an existing file DB should be migrated to JSONL
14
+ * @returns {Promise<boolean>} true if the file DB was migrated. false if not.
15
+ * If this returns true, the jsonl DB was opened and doesn't need to be opened again.
16
+ */
17
+ _maybeMigrateFileDB(): Promise<boolean>;
18
+ saveBackup(): Promise<void>;
19
+ }
20
+ import { JsonlDB } from "@alcalzone/jsonl-db";
21
+ //# sourceMappingURL=statesInMemJsonlDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemJsonlDB.d.ts","sourceRoot":"","sources":["../../../src/lib/states/statesInMemJsonlDB.js"],"names":[],"mappings":";;AA0GA;;;IAGI;AACJ;IACI,2BAgBC;IAFG,2BAA2B;IAC3B,KADW,QAAQ,GAAG,CAAC,CACiE;IA6CpF,0CAE+B;IAIvC;;;;OAIG;IACH,uBAHa,QAAQ,OAAO,CAAC,CAwE5B;IAOD,4BA2BC;CAYJ"}
@@ -6,21 +6,17 @@
6
6
  * MIT License
7
7
  *
8
8
  */
9
-
10
9
  /** @module StatesInMemoryFileDB */
11
-
12
10
  /* jshint -W097 */
13
11
  /* jshint strict:false */
14
12
  /* jslint node: true */
15
13
  'use strict';
16
-
17
- const StatesInMemoryFileDB = require('@iobroker/db-states-file').StatesInMemoryFileDB;
14
+ const { StatesInMemoryFileDB } = require('@iobroker/db-states-file');
18
15
  const { JsonlDB } = require('@alcalzone/jsonl-db');
19
16
  const path = require('path');
20
17
  const fs = require('fs');
21
18
  const os = require('os');
22
19
  const { tools } = require('@iobroker/js-controller-common');
23
-
24
20
  // settings = {
25
21
  // change: function (id, state) {},
26
22
  // connected: function (nameOfServer) {},
@@ -41,7 +37,61 @@ const { tools } = require('@iobroker/js-controller-common');
41
37
  // host: localhost
42
38
  // };
43
39
  //
44
-
40
+ /**
41
+ * Normalizes options for the JsonlDB
42
+ * @param {Record<string, any> | undefined} conf The jsonlOptions options from iobroker.json
43
+ * @returns {import("@alcalzone/jsonl-db").JsonlDBOptions<any>}
44
+ */
45
+ function normalizeJsonlOptions(conf = {}) {
46
+ /** @type {import("@alcalzone/jsonl-db").JsonlDBOptions<any>} */
47
+ const ret = {
48
+ autoCompress: {
49
+ sizeFactor: 10,
50
+ sizeFactorMinimumSize: 50000
51
+ },
52
+ ignoreReadErrors: true,
53
+ throttleFS: {
54
+ intervalMs: 60000,
55
+ maxBufferedCommands: 2000
56
+ },
57
+ lockfile: {
58
+ // 5 retries starting at 250ms add up to just above 2s,
59
+ // so the DB has 3 more seconds to load all data if it wants to stay within the 5s connectionTimeout
60
+ retries: 5,
61
+ retryMinTimeoutMs: 250,
62
+ // This makes sure the DB stays locked for maximum 2s even if the process crashes
63
+ staleMs: 2000
64
+ }
65
+ };
66
+ // Be really careful what we allow here. Incorrect settings may cause problems in production.
67
+ if (tools.isObject(conf.autoCompress)) {
68
+ const ac = conf.autoCompress;
69
+ // Letting the DB grow more than 100x is risky
70
+ if (typeof ac.sizeFactor === 'number' && ac.sizeFactor >= 2 && ac.sizeFactor <= 100) {
71
+ ret.autoCompress.sizeFactor = ac.sizeFactor;
72
+ }
73
+ // Also we should definitely compress once the DB has reached 200k lines or it might grow too big
74
+ if (typeof ac.sizeFactorMinimumSize === 'number' &&
75
+ ac.sizeFactorMinimumSize >= 0 &&
76
+ ac.sizeFactorMinimumSize <= 200000) {
77
+ ret.autoCompress.sizeFactorMinimumSize = ac.sizeFactorMinimumSize;
78
+ }
79
+ }
80
+ if (tools.isObject(conf.throttleFS)) {
81
+ const thr = conf.throttleFS;
82
+ // Don't write more often than every second and write at least once every hour
83
+ if (typeof thr.intervalMs === 'number' && thr.intervalMs >= 1000 && thr.intervalMs <= 3600000) {
84
+ ret.throttleFS.intervalMs = thr.intervalMs;
85
+ }
86
+ // Don't keep too much in memory - 100k changes are more than enough
87
+ if (typeof thr.maxBufferedCommands === 'number' &&
88
+ thr.maxBufferedCommands >= 0 &&
89
+ thr.maxBufferedCommands <= 100000) {
90
+ ret.throttleFS.maxBufferedCommands = thr.maxBufferedCommands;
91
+ }
92
+ }
93
+ return ret;
94
+ }
45
95
  /**
46
96
  * This class inherits InMemoryFileDB class and adds all relevant logic for states
47
97
  * including the available methods for use by js-controller directly
@@ -54,41 +104,18 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
54
104
  fileName: 'states.json',
55
105
  backupDirName: 'backup-objects'
56
106
  };
57
-
58
- /** @type {import("@alcalzone/jsonl-db").JsonlDBOptions<any>} */
59
- const jsonlOptions = settings.connection.jsonlOptions || {
60
- autoCompress: {
61
- sizeFactor: 10,
62
- sizeFactorMinimumSize: 50000
63
- },
64
- ignoreReadErrors: true,
65
- throttleFS: {
66
- intervalMs: 60000,
67
- maxBufferedCommands: 2000
68
- },
69
- lockfile: {
70
- // 5 retries starting at 250ms add up to just above 2s,
71
- // so the DB has 3 more seconds to load all data if it wants to stay within the 5s connectionTimeout
72
- retries: 5,
73
- retryMinTimeoutMs: 250,
74
- // This makes sure the DB stays locked for maximum 2s even if the process crashes
75
- staleMs: 2000
76
- }
77
- };
107
+ const jsonlOptions = normalizeJsonlOptions(settings.connection.jsonlOptions);
78
108
  settings.jsonlDB = {
79
109
  fileName: 'states.jsonl'
80
110
  };
81
111
  super(settings);
82
-
83
112
  /** @type {JsonlDB<any>} */
84
113
  this._db = new JsonlDB(path.join(this.dataDir, settings.jsonlDB.fileName), jsonlOptions);
85
114
  }
86
-
87
115
  async open() {
88
116
  if (!(await this._maybeMigrateFileDB())) {
89
117
  await this._db.open();
90
118
  }
91
-
92
119
  // Create an object-like wrapper around the internal Map
93
120
  this.dataset = new Proxy(this._db, {
94
121
  /** @param {any} prop */
@@ -124,14 +151,12 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
124
151
  };
125
152
  }
126
153
  });
127
-
128
154
  if (this.settings.backup && this.settings.backup.period && !this.settings.backup.disabled) {
129
155
  this._backupInterval = setInterval(() => {
130
156
  this.saveBackup();
131
157
  }, this.settings.backup.period);
132
158
  }
133
159
  }
134
-
135
160
  /**
136
161
  * Checks if an existing file DB should be migrated to JSONL
137
162
  * @returns {Promise<boolean>} true if the file DB was migrated. false if not.
@@ -141,7 +166,6 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
141
166
  const jsonlFileName = path.join(this.dataDir, this.settings.jsonlDB.fileName);
142
167
  const jsonFileName = path.join(this.dataDir, this.settings.fileDB.fileName);
143
168
  const bakFileName = path.join(this.dataDir, this.settings.fileDB.fileName + '.bak');
144
-
145
169
  // Check the timestamps of each file, defaulting to 0 if they don't exist
146
170
  let jsonlTimeStamp = 0;
147
171
  let jsonTimeStamp = 0;
@@ -151,7 +175,8 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
151
175
  if (stat.isFile()) {
152
176
  jsonlTimeStamp = stat.mtime;
153
177
  }
154
- } catch {
178
+ }
179
+ catch {
155
180
  // ignore
156
181
  }
157
182
  try {
@@ -159,7 +184,8 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
159
184
  if (stat.isFile()) {
160
185
  jsonTimeStamp = stat.mtime;
161
186
  }
162
- } catch {
187
+ }
188
+ catch {
163
189
  // ignore
164
190
  }
165
191
  try {
@@ -167,84 +193,76 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
167
193
  if (stat.isFile()) {
168
194
  bakTimeStamp = stat.mtime;
169
195
  }
170
- } catch {
196
+ }
197
+ catch {
171
198
  // ignore
172
199
  }
173
-
174
200
  // Figure out which file needs to be imported
175
201
  /** @type {string} */
176
202
  let importFilename;
177
203
  if (jsonTimeStamp > 0 && jsonTimeStamp >= bakTimeStamp && jsonTimeStamp >= jsonlTimeStamp) {
178
204
  importFilename = jsonFileName;
179
- } else if (bakTimeStamp > 0 && bakTimeStamp >= jsonTimeStamp && bakTimeStamp >= jsonlTimeStamp) {
205
+ }
206
+ else if (bakTimeStamp > 0 && bakTimeStamp >= jsonTimeStamp && bakTimeStamp >= jsonlTimeStamp) {
180
207
  importFilename = bakFileName;
181
- } else {
208
+ }
209
+ else {
182
210
  // None of the File DB files are newer than the JSONL file
183
211
  // There is nothing to restore, we're done
184
212
  return false;
185
213
  }
186
-
187
214
  await this._db.open();
188
215
  this._db.clear();
189
216
  await this._db.importJson(importFilename);
190
-
191
217
  // And rename the existing files to avoid redoing the work next time
192
218
  if (fs.existsSync(jsonFileName)) {
193
219
  try {
194
220
  fs.renameSync(jsonFileName, `${jsonFileName}.migrated`);
195
- } catch {
221
+ }
222
+ catch {
196
223
  // ignore
197
224
  }
198
225
  }
199
226
  if (fs.existsSync(bakFileName)) {
200
227
  try {
201
228
  fs.renameSync(bakFileName, `${bakFileName}.migrated`);
202
- } catch {
229
+ }
230
+ catch {
203
231
  // ignore
204
232
  }
205
233
  }
206
-
207
234
  // Signal to the caller that the DB is already open
208
235
  return true;
209
236
  }
210
-
211
237
  async saveState() {
212
238
  // Nothing to do, the DB saves behind the scenes
213
239
  }
214
-
215
240
  // Is regularly called and stores a compressed backup of the DB
216
241
  async saveBackup() {
217
242
  const now = Date.now();
218
243
  const tmpBackupFileName = path.join(os.tmpdir(), `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}`);
219
- const backupFileName = path.join(
220
- this.backupDir,
221
- `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz`
222
- );
223
-
244
+ const backupFileName = path.join(this.backupDir, `${this.getTimeStr(now)}_${this.settings.jsonlDB.fileName}.gz`);
224
245
  if (!this._db.isOpen) {
225
246
  this.log.warn(`${this.namespace} Cannot save backup ${backupFileName}: DB is closed`);
226
247
  return;
227
248
  }
228
-
229
249
  try {
230
250
  if (fs.existsSync(backupFileName)) {
231
251
  return;
232
252
  }
233
-
234
253
  // Create a DB dump
235
254
  await this._db.dump(tmpBackupFileName);
236
255
  // and zip it
237
256
  await tools.compressFileGZip(tmpBackupFileName, backupFileName, { deleteInput: true });
238
257
  // figure out if older files need to be deleted
239
258
  this.deleteOldBackupFiles(this.settings.jsonlDB.fileName);
240
- } catch (e) {
259
+ }
260
+ catch (e) {
241
261
  this.log.error(`${this.namespace} Cannot save backup ${backupFileName}: ${e.message}`);
242
262
  }
243
263
  }
244
-
245
264
  async destroy() {
246
265
  await super.destroy();
247
-
248
266
  if (this._backupInterval) {
249
267
  clearInterval(this._backupInterval);
250
268
  }
@@ -253,5 +271,5 @@ class StatesInMemoryJsonlDB extends StatesInMemoryFileDB {
253
271
  }
254
272
  }
255
273
  }
256
-
257
274
  module.exports = StatesInMemoryJsonlDB;
275
+ //# sourceMappingURL=statesInMemJsonlDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemJsonlDB.js","sourceRoot":"","sources":["../../../src/lib/states/statesInMemJsonlDB.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export = StatesInMemoryServerClass;
2
+ declare class StatesInMemoryServerClass extends StatesInRedisClient {
3
+ constructor(settings: any);
4
+ statesServer: StatesInMemServer;
5
+ }
6
+ import StatesInRedisClient_1 = require("@iobroker/db-states-redis/build/lib/states/statesInRedisClient");
7
+ import StatesInRedisClient = StatesInRedisClient_1.Client;
8
+ import StatesInMemServer = require("./statesInMemServerRedis");
9
+ //# sourceMappingURL=statesInMemServerClass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemServerClass.d.ts","sourceRoot":"","sources":["../../../src/lib/states/statesInMemServerClass.js"],"names":[],"mappings":";AAmBA;IACI,2BAcC;IADG,gCAAyD;CAWhE;;mDA5BgE,MAAM"}
@@ -6,22 +6,17 @@
6
6
  * MIT License
7
7
  *
8
8
  */
9
-
10
9
  /** @module statesInMemory */
11
-
12
10
  /* jshint -W097 */
13
11
  /* jshint strict:false */
14
12
  /* jslint node: true */
15
13
  'use strict';
16
-
17
14
  const StatesInRedisClient = require('@iobroker/db-states-redis').Client;
18
15
  const StatesInMemServer = require('./statesInMemServerRedis');
19
-
20
16
  class StatesInMemoryServerClass extends StatesInRedisClient {
21
17
  constructor(settings) {
22
18
  settings.autoConnect = false; // delay Client connection to when we need it
23
19
  super(settings);
24
-
25
20
  const serverSettings = {
26
21
  namespace: settings.namespace ? `${settings.namespace}-Server` : 'Server',
27
22
  connection: settings.connection,
@@ -33,15 +28,13 @@ class StatesInMemoryServerClass extends StatesInRedisClient {
33
28
  };
34
29
  this.statesServer = new StatesInMemServer(serverSettings);
35
30
  }
36
-
37
31
  async destroy() {
38
32
  await super.destroy(); // destroy client first
39
33
  await this.statesServer.destroy(); // server afterwards too
40
34
  }
41
-
42
35
  getStatus() {
43
36
  return this.statesServer.getStatus(); // return Status as Server
44
37
  }
45
38
  }
46
-
47
39
  module.exports = StatesInMemoryServerClass;
40
+ //# sourceMappingURL=statesInMemServerClass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemServerClass.js","sourceRoot":"","sources":["../../../src/lib/states/statesInMemServerClass.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6BAA6B;AAE7B,kBAAkB;AAClB,yBAAyB;AACzB,uBAAuB;AACvB,YAAY,CAAC;AAEb,MAAM,mBAAmB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC,MAAM,CAAC;AACxE,MAAM,iBAAiB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAE9D,MAAM,yBAA0B,SAAQ,mBAAmB;IACvD,YAAY,QAAQ;QAChB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,6CAA6C;QAC3E,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,MAAM,cAAc,GAAG;YACnB,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,QAAQ;YACzE,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,SAAS,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,mDAAmD;YACzE,CAAC;SACJ,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,uBAAuB;QAC9C,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,wBAAwB;IAC/D,CAAC;IAED,SAAS;QACL,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,0BAA0B;IACpE,CAAC;CACJ;AAED,MAAM,CAAC,OAAO,GAAG,yBAAyB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /// <reference types="node" />
2
+ export = StatesInMemoryServer;
3
+ /**
4
+ * This class inherits statesInMemoryFileDB class and adds socket.io communication layer
5
+ * to access the methods via socket.io
6
+ **/
7
+ declare class StatesInMemoryServer extends StatesInMemoryJsonlDB {
8
+ /**
9
+ * Constructor
10
+ * @param settings State and InMem-DB settings
11
+ */
12
+ constructor(settings: any);
13
+ serverConnections: {};
14
+ namespaceStates: string;
15
+ namespaceMsg: string;
16
+ namespaceLog: string;
17
+ namespaceSession: string;
18
+ namespaceMsgLen: number;
19
+ namespaceLogLen: number;
20
+ metaNamespace: string;
21
+ metaNamespaceLen: number;
22
+ /**
23
+ * Separate Namespace from ID and return both
24
+ * @param idWithNamespace ID or Array of IDs containing a redis namespace and the real ID
25
+ * @returns {{namespace: (string), id: string}} Object with namespace and the
26
+ * ID/Array of IDs without the namespace
27
+ * @private
28
+ */
29
+ private _normalizeId;
30
+ /**
31
+ * Publish a subscribed value to one of the redis connections in redis format
32
+ * @param client Instance of RedisHandler
33
+ * @param type Type of subscribed key
34
+ * @param id Subscribed ID
35
+ * @param obj Object to publish
36
+ * @returns {number} Publish counter 0 or 1 depending if send out or not
37
+ */
38
+ publishToClients(client: any, type: any, id: any, obj: any): number;
39
+ /**
40
+ * Register all event listeners for Handler and implement the relevant logic
41
+ * @param handler RedisHandler instance
42
+ * @private
43
+ */
44
+ private _socketEvents;
45
+ /**
46
+ * Return connected RedisHandlers/Connections
47
+ * @returns {{}|*}
48
+ */
49
+ getClients(): {} | any;
50
+ /**
51
+ * Initialize RedisHandler for a new network connection
52
+ * @param socket Network socket
53
+ * @private
54
+ */
55
+ private _initSocket;
56
+ /**
57
+ * Initialize Redis Server
58
+ * @param settings Settings object
59
+ * @private
60
+ * @return {Promise<void>}
61
+ */
62
+ private _initRedisServer;
63
+ server: net.Server | undefined;
64
+ }
65
+ import StatesInMemoryJsonlDB = require("./statesInMemJsonlDB");
66
+ import net = require("net");
67
+ //# sourceMappingURL=statesInMemServerRedis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemServerRedis.d.ts","sourceRoot":"","sources":["../../../src/lib/states/statesInMemServerRedis.js"],"names":[],"mappings":";;AA0CA;;;IAGI;AACJ;IACI;;;OAGG;IACH,2BAoCC;IAjCG,sBAA2B;IAC3B,wBAAmE;IACnE,qBAAsE;IACtE,qBAA+D;IAC/D,yBAA2E;IAE3E,wBAA+C;IAC/C,wBAA+C;IAE/C,sBAAkE;IAClE,yBAAiD;IAyBrD;;;;;;OAMG;IACH,qBAsBC;IAED;;;;;;;OAOG;IACH,6DAFa,MAAM,CAkClB;IAED;;;;OAIG;IACH,sBA6SC;IAED;;;OAGG;IACH,cAFa,EAAE,MAAE,CAIhB;IA2BD;;;;OAIG;IACH,oBAoBC;IAED;;;;;OAKG;IACH,yBAyBC;IAnBW,+BAAgC;CAoB/C"}
@@ -6,19 +6,15 @@
6
6
  * MIT License
7
7
  *
8
8
  */
9
-
10
9
  /** @module statesInMemory */
11
-
12
10
  /* jshint -W097 */
13
11
  /* jshint strict:false */
14
12
  /* jslint node: true */
15
13
  'use strict';
16
14
  const net = require('net');
17
15
  const { inspect } = require('util');
18
-
19
- const RedisHandler = require('@iobroker/db-base').redisHandler;
16
+ const { RedisHandler } = require('@iobroker/db-base');
20
17
  const StatesInMemoryJsonlDB = require('./statesInMemJsonlDB');
21
-
22
18
  // settings = {
23
19
  // change: function (id, state) {},
24
20
  // connected: function (nameOfServer) {},
@@ -39,7 +35,6 @@ const StatesInMemoryJsonlDB = require('./statesInMemJsonlDB');
39
35
  // host: localhost
40
36
  // };
41
37
  //
42
-
43
38
  /**
44
39
  * This class inherits statesInMemoryFileDB class and adds socket.io communication layer
45
40
  * to access the methods via socket.io
@@ -51,7 +46,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
51
46
  */
52
47
  constructor(settings) {
53
48
  super(settings);
54
-
55
49
  this.serverConnections = {};
56
50
  this.namespaceStates = (this.settings.redisNamespace || 'io') + '.';
57
51
  this.namespaceMsg = (this.settings.namespaceMsg || 'messagebox') + '.';
@@ -63,30 +57,21 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
63
57
  //this.namespaceSessionlen = this.namespaceSession.length;
64
58
  this.metaNamespace = (this.settings.metaNamespace || 'meta') + '.';
65
59
  this.metaNamespaceLen = this.metaNamespace.length;
66
-
67
60
  this.open()
68
61
  .then(() => {
69
- return this._initRedisServer(this.settings.connection);
70
- })
62
+ return this._initRedisServer(this.settings.connection);
63
+ })
71
64
  .then(() => {
72
- this.log.debug(
73
- `${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-states listening on port ${
74
- this.settings.port || 9000
75
- }`
76
- );
77
-
78
- if (typeof this.settings.connected === 'function') {
79
- setImmediate(() => this.settings.connected());
80
- }
81
- })
65
+ this.log.debug(`${this.namespace} ${settings.secure ? 'Secure ' : ''} Redis inMem-states listening on port ${this.settings.port || 9000}`);
66
+ if (typeof this.settings.connected === 'function') {
67
+ setImmediate(() => this.settings.connected());
68
+ }
69
+ })
82
70
  .catch(e => {
83
- this.log.error(
84
- `${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}`
85
- );
86
- process.exit(24); // todo: replace it with exitcode
87
- });
71
+ this.log.error(`${this.namespace} Cannot start inMem-states on port ${this.settings.port || 9000}: ${e.message}`);
72
+ process.exit(24); // todo: replace it with exitcode
73
+ });
88
74
  }
89
-
90
75
  /**
91
76
  * Separate Namespace from ID and return both
92
77
  * @param idWithNamespace ID or Array of IDs containing a redis namespace and the real ID
@@ -105,7 +90,8 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
105
90
  ns = namespace; // we ignore the pot. case from arrays with different namespaces
106
91
  });
107
92
  id = ids;
108
- } else {
93
+ }
94
+ else {
109
95
  id = idWithNamespace;
110
96
  const pointIdx = idWithNamespace.indexOf('.');
111
97
  if (pointIdx !== -1) {
@@ -117,7 +103,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
117
103
  }
118
104
  return { id: id, namespace: ns };
119
105
  }
120
-
121
106
  /**
122
107
  * Publish a subscribed value to one of the redis connections in redis format
123
108
  * @param client Instance of RedisHandler
@@ -131,25 +116,24 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
131
116
  return 0;
132
117
  }
133
118
  const s = client._subscribe[type];
134
-
135
119
  const found = s.find(sub => sub.regex.test(id));
136
-
137
120
  if (found) {
138
121
  if (type === 'meta') {
139
122
  this.log.silly(`${this.namespace} Redis Publish Meta ${id}=${obj}`);
140
123
  const sendPattern = this.metaNamespace + found.pattern;
141
124
  const sendId = this.metaNamespace + id;
142
125
  client.sendArray(null, ['pmessage', sendPattern, sendId, obj]);
143
- } else {
126
+ }
127
+ else {
144
128
  let objString;
145
129
  try {
146
130
  objString = JSON.stringify(obj);
147
- } catch (e) {
131
+ }
132
+ catch (e) {
148
133
  // mainly catch circular structures - thus log object with inspect
149
134
  this.log.error(`${this.namespace} Error on publishing state: ${id}=${inspect(obj)}: ${e.message}`);
150
135
  return 0;
151
136
  }
152
-
153
137
  this.log.silly(`${this.namespace} Redis Publish State ${id}=${objString}`);
154
138
  const sendPattern = (type === 'state' ? '' : this.namespaceStates) + found.pattern;
155
139
  const sendId = (type === 'state' ? '' : this.namespaceStates) + id;
@@ -159,7 +143,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
159
143
  }
160
144
  return 0;
161
145
  }
162
-
163
146
  /**
164
147
  * Register all event listeners for Handler and implement the relevant logic
165
148
  * @param handler RedisHandler instance
@@ -168,7 +151,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
168
151
  _socketEvents(handler) {
169
152
  let connectionName = null;
170
153
  let namespaceLog = this.namespace;
171
-
172
154
  // Handle Redis "INFO" request
173
155
  handler.on('info', (_data, responseId) => {
174
156
  let infoString = '# Server\r\n';
@@ -181,19 +163,15 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
181
163
  infoString += '# CPU\r\n';
182
164
  infoString += '# Cluster\r\n';
183
165
  infoString += '# Keyspace\r\n';
184
- infoString += `db0:keys=${Object.keys(this.dataset).length},expires=${
185
- Object.keys(this.stateExpires).length + Object.keys(this.sessionExpires).length
186
- },avg_ttl=98633637897`;
166
+ infoString += `db0:keys=${Object.keys(this.dataset).length},expires=${Object.keys(this.stateExpires).length + Object.keys(this.sessionExpires).length},avg_ttl=98633637897`;
187
167
  handler.sendBulk(responseId, infoString);
188
168
  });
189
-
190
169
  // Handle Redis "QUIT" request
191
170
  handler.on('quit', (_data, responseId) => {
192
171
  this.log.silly(`${namespaceLog} Redis QUIT received, close connection`);
193
172
  handler.sendString(responseId, 'OK');
194
173
  handler.close();
195
174
  });
196
-
197
175
  // Handle Redis "PUBLISH" request
198
176
  handler.on('publish', (data, responseId) => {
199
177
  const { id, namespace } = this._normalizeId(data[0]);
@@ -204,30 +182,26 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
204
182
  const publishCount = this.publishAll(namespace.substr(0, namespace.length - 1), id, JSON.parse(data[1]));
205
183
  handler.sendInteger(responseId, publishCount);
206
184
  });
207
-
208
185
  // Handle Redis "MGET" request for state namespace
209
186
  handler.on('mget', (data, responseId) => {
210
187
  if (!data || !data[0]) {
211
188
  return void handler.sendArray(responseId, []);
212
189
  }
213
190
  const { id, namespace } = this._normalizeId(data);
214
-
215
191
  if (namespace === this.namespaceStates) {
216
192
  try {
217
193
  const states = this._getStates(id);
218
194
  const result = states.map(el => (el ? JSON.stringify(el) : null));
219
195
  handler.sendArray(responseId, result);
220
- } catch (err) {
196
+ }
197
+ catch (err) {
221
198
  handler.sendError(responseId, new Error(`ERROR _getStates: ${err.message}`));
222
199
  }
223
- } else {
224
- handler.sendError(
225
- responseId,
226
- new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
227
- );
200
+ }
201
+ else {
202
+ handler.sendError(responseId, new Error(`MGET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
228
203
  }
229
204
  });
230
-
231
205
  // Handle Redis "GET" request for state and session namespace
232
206
  handler.on('get', (data, responseId) => {
233
207
  const { id, namespace } = this._normalizeId(data[0]);
@@ -235,35 +209,38 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
235
209
  const result = this._getState(id);
236
210
  if (!result) {
237
211
  handler.sendNull(responseId);
238
- } else {
212
+ }
213
+ else {
239
214
  if (Buffer.isBuffer(result)) {
240
215
  handler.sendBufBulk(responseId, result);
241
- } else {
216
+ }
217
+ else {
242
218
  handler.sendBulk(responseId, JSON.stringify(result));
243
219
  }
244
220
  }
245
- } else if (namespace === this.namespaceSession) {
221
+ }
222
+ else if (namespace === this.namespaceSession) {
246
223
  const result = this._getSession(id);
247
224
  if (result === undefined || result === null) {
248
225
  handler.sendNull(responseId);
249
- } else {
226
+ }
227
+ else {
250
228
  handler.sendBulk(responseId, JSON.stringify(result));
251
229
  }
252
- } else if (namespace === this.metaNamespace) {
230
+ }
231
+ else if (namespace === this.metaNamespace) {
253
232
  const result = this.getMeta(id);
254
233
  if (result === undefined || result === null) {
255
234
  handler.sendNull(responseId);
256
- } else {
235
+ }
236
+ else {
257
237
  handler.sendBulk(responseId, result);
258
238
  }
259
- } else {
260
- handler.sendError(
261
- responseId,
262
- new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
263
- );
239
+ }
240
+ else {
241
+ handler.sendError(responseId, new Error(`GET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
264
242
  }
265
243
  });
266
-
267
244
  // Handle Redis "SET" request for state namespace
268
245
  handler.on('set', (data, responseId) => {
269
246
  const { id, namespace } = this._normalizeId(data[0]);
@@ -272,27 +249,27 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
272
249
  let state;
273
250
  try {
274
251
  state = JSON.parse(data[1].toString('utf-8'));
275
- } catch {
252
+ }
253
+ catch {
276
254
  // No JSON, so handle as binary data and set as Buffer
277
255
  this._setBinaryState(id, data[1]);
278
256
  return void handler.sendString(responseId, 'OK');
279
257
  }
280
258
  this._setStateDirect(id, state);
281
259
  handler.sendString(responseId, 'OK');
282
- } catch (err) {
260
+ }
261
+ catch (err) {
283
262
  handler.sendError(responseId, new Error(`ERROR setState id=${id}: ${err.message}`));
284
263
  }
285
- } else if (namespace === this.metaNamespace) {
264
+ }
265
+ else if (namespace === this.metaNamespace) {
286
266
  this.setMeta(id, data[1].toString('utf-8'));
287
267
  handler.sendString(responseId, 'OK');
288
- } else {
289
- handler.sendError(
290
- responseId,
291
- new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
292
- );
268
+ }
269
+ else {
270
+ handler.sendError(responseId, new Error(`SET-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
293
271
  }
294
272
  });
295
-
296
273
  // Handle Redis "SETEX" request for state and session namespace
297
274
  handler.on('setex', (data, responseId) => {
298
275
  const { id, namespace } = this._normalizeId(data[0]);
@@ -301,62 +278,55 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
301
278
  let state;
302
279
  try {
303
280
  state = JSON.parse(data[2].toString('utf-8'));
304
- } catch {
281
+ }
282
+ catch {
305
283
  // No JSON, so handle as binary data and set as Buffer
306
284
  state = data[2];
307
285
  }
308
286
  const expire = parseInt(data[1].toString('utf-8'), 10);
309
287
  if (isNaN(expire)) {
310
- return void handler.sendError(
311
- responseId,
312
- new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`)
313
- );
288
+ return void handler.sendError(responseId, new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`));
314
289
  }
315
290
  this._setStateDirect(id, state, expire);
316
291
  handler.sendString(responseId, 'OK');
317
- } catch (err) {
292
+ }
293
+ catch (err) {
318
294
  handler.sendError(responseId, new Error(`ERROR setStateEx id=${id}: ${err.message}`));
319
295
  }
320
- } else if (namespace === this.namespaceSession) {
296
+ }
297
+ else if (namespace === this.namespaceSession) {
321
298
  try {
322
299
  const state = JSON.parse(data[2].toString('utf-8'));
323
300
  const expire = parseInt(data[1].toString('utf-8'), 10);
324
301
  if (isNaN(expire)) {
325
- return void handler.sendError(
326
- responseId,
327
- new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`)
328
- );
302
+ return void handler.sendError(responseId, new Error(`ERROR parsing expire value ${data[1].toString('utf-8')}`));
329
303
  }
330
304
  this._setSession(id, expire, state);
331
305
  handler.sendString(responseId, 'OK');
332
- } catch (err) {
306
+ }
307
+ catch (err) {
333
308
  handler.sendError(responseId, new Error(`ERROR _setSession ${id}: ${err.message}`));
334
309
  }
335
- } else {
336
- handler.sendError(
337
- responseId,
338
- new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
339
- );
310
+ }
311
+ else {
312
+ handler.sendError(responseId, new Error(`SETEX-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
340
313
  }
341
314
  });
342
-
343
315
  // Handle Redis "DEL" request for state and session namespace
344
316
  handler.on('del', (data, responseId) => {
345
317
  const { id, namespace } = this._normalizeId(data[0]);
346
318
  if (namespace === this.namespaceStates) {
347
319
  this._delState(id);
348
320
  handler.sendInteger(responseId, 1);
349
- } else if (namespace === this.namespaceSession) {
321
+ }
322
+ else if (namespace === this.namespaceSession) {
350
323
  this._destroySession(id);
351
324
  handler.sendInteger(responseId, 1);
352
- } else {
353
- handler.sendError(
354
- responseId,
355
- new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
356
- );
325
+ }
326
+ else {
327
+ handler.sendError(responseId, new Error(`DEL-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
357
328
  }
358
329
  });
359
-
360
330
  // Handle Redis "KEYS" request for state namespace
361
331
  handler.on('keys', (data, responseId) => {
362
332
  if (!data || !data.length) {
@@ -372,98 +342,97 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
372
342
  const keys = this._getKeys(pattern);
373
343
  const result = keys.map(id => this.namespaceStates + id);
374
344
  handler.sendArray(responseId, result);
375
- } else {
376
- handler.sendError(
377
- responseId,
378
- new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
379
- );
345
+ }
346
+ else {
347
+ handler.sendError(responseId, new Error(`KEYS-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
380
348
  }
381
349
  });
382
-
383
350
  // Handle Redis "PSUBSCRIBE" request for state, log and session namespace
384
351
  handler.on('psubscribe', (data, responseId) => {
385
352
  const { id, namespace } = this._normalizeId(data[0]);
386
353
  if (namespace === this.namespaceMsg) {
387
354
  this._subscribeMessageForClient(handler, id.substr(this.namespaceMsgLen));
388
355
  handler.sendArray(responseId, ['psubscribe', data[0], 1]);
389
- } else if (namespace === this.namespaceLog) {
356
+ }
357
+ else if (namespace === this.namespaceLog) {
390
358
  this._subscribeLogForClient(handler, id.substr(this.namespaceLogLen));
391
359
  handler.sendArray(responseId, ['psubscribe', data[0], 1]);
392
- } else if (namespace === this.namespaceStates) {
360
+ }
361
+ else if (namespace === this.namespaceStates) {
393
362
  this._subscribeForClient(handler, id);
394
363
  handler.sendArray(responseId, ['psubscribe', data[0], 1]);
395
- } else if (namespace === this.metaNamespace) {
364
+ }
365
+ else if (namespace === this.metaNamespace) {
396
366
  this._subscribeMeta(handler, id);
397
367
  handler.sendArray(responseId, ['psubscribe', data[0], 1]);
398
- } else {
399
- handler.sendError(
400
- responseId,
401
- new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
402
- );
368
+ }
369
+ else {
370
+ handler.sendError(responseId, new Error(`PSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
403
371
  }
404
372
  });
405
-
406
373
  // Handle Redis "UNSUBSCRIBE" request for state, log and session namespace
407
374
  handler.on('punsubscribe', (data, responseId) => {
408
375
  const { id, namespace } = this._normalizeId(data[0]);
409
376
  if (namespace === this.namespaceMsg) {
410
377
  this._unsubscribeMessageForClient(handler, id.substr(this.namespaceMsgLen));
411
378
  handler.sendArray(responseId, ['punsubscribe', data[0], 1]);
412
- } else if (namespace === this.namespaceLog) {
379
+ }
380
+ else if (namespace === this.namespaceLog) {
413
381
  this._unsubscribeLogForClient(handler, id.substr(this.namespaceLogLen));
414
382
  handler.sendArray(responseId, ['punsubscribe', data[0], 1]);
415
- } else if (namespace === this.namespaceStates) {
383
+ }
384
+ else if (namespace === this.namespaceStates) {
416
385
  this._unsubscribeForClient(handler, id);
417
386
  handler.sendArray(responseId, ['punsubscribe', data[0], 1]);
418
- } else {
419
- handler.sendError(
420
- responseId,
421
- new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`)
422
- );
387
+ }
388
+ else {
389
+ handler.sendError(responseId, new Error(`PUNSUBSCRIBE-UNSUPPORTED for namespace ${namespace}: Data=${JSON.stringify(data)}`));
423
390
  }
424
391
  });
425
-
426
392
  // Handle Redis "SUBSCRIBE" ... currently mainly ignored
427
393
  handler.on('subscribe', (data, responseId) => {
428
394
  if (data[0].startsWith('__keyevent@')) {
429
395
  // we ignore these type of events because we publish expires anyway directly
430
396
  handler.sendArray(responseId, ['subscribe', data[0], 1]);
431
- } else {
397
+ }
398
+ else {
432
399
  handler.sendError(responseId, new Error(`SUBSCRIBE-UNSUPPORTED for ${data[0]}`));
433
400
  }
434
401
  });
435
-
436
402
  // Handle Redis "CONFIG" ... currently mainly ignored
437
403
  handler.on('config', (data, responseId) => {
438
- if (data[0] === 'set' && data[1] === 'notify-keyspace-events') {
404
+ if (typeof data[0] === 'string' &&
405
+ data[0].toLowerCase() === 'set' &&
406
+ data[1] === 'notify-keyspace-events') {
439
407
  // we ignore these type of commands for now, should only be to subscribe to keyspace events
440
408
  handler.sendString(responseId, 'OK');
441
- } else {
409
+ }
410
+ else {
442
411
  handler.sendError(responseId, new Error(`CONFIG-UNSUPPORTED for ${JSON.stringify(data)}`));
443
412
  }
444
413
  });
445
-
446
414
  // handle client SETNAME/GETNAME
447
415
  handler.on('client', (data, responseId) => {
448
416
  if (data[0] === 'setname' && typeof data[1] === 'string') {
449
417
  connectionName = data[1];
450
418
  namespaceLog = connectionName;
451
419
  handler.sendString(responseId, 'OK');
452
- } else if (data[0] === 'getname') {
420
+ }
421
+ else if (data[0] === 'getname') {
453
422
  if (connectionName && typeof connectionName === 'string') {
454
423
  handler.sendString(responseId, connectionName);
455
- } else {
424
+ }
425
+ else {
456
426
  // redis sends null if no name defined
457
427
  handler.sendNull(responseId);
458
428
  }
459
- } else {
429
+ }
430
+ else {
460
431
  handler.sendError(responseId, new Error(`CLIENT-UNSUPPORTED for ${JSON.stringify(data)}`));
461
432
  }
462
433
  });
463
-
464
434
  handler.on('error', err => this.log.warn(`${namespaceLog} Redis states: ${err}`));
465
435
  }
466
-
467
436
  /**
468
437
  * Return connected RedisHandlers/Connections
469
438
  * @returns {{}|*}
@@ -471,7 +440,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
471
440
  getClients() {
472
441
  return this.serverConnections;
473
442
  }
474
-
475
443
  /**
476
444
  * Destructor of the class. Called by shutting down.
477
445
  */
@@ -481,14 +449,14 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
481
449
  this.serverConnections[s].close();
482
450
  delete this.serverConnections[s];
483
451
  }
484
-
485
452
  await new Promise(resolve => {
486
453
  if (!this.server) {
487
454
  return void resolve();
488
455
  }
489
456
  try {
490
457
  this.server.close(() => resolve());
491
- } catch (e) {
458
+ }
459
+ catch (e) {
492
460
  console.log(e.message);
493
461
  resolve();
494
462
  }
@@ -496,7 +464,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
496
464
  }
497
465
  await super.destroy();
498
466
  }
499
-
500
467
  /**
501
468
  * Initialize RedisHandler for a new network connection
502
469
  * @param socket Network socket
@@ -505,7 +472,6 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
505
472
  _initSocket(socket) {
506
473
  this.settings.connection.enhancedLogging &&
507
474
  this.log.silly(`${this.namespace} Handling new Redis States connection`);
508
-
509
475
  const options = {
510
476
  log: this.log,
511
477
  logScope: this.namespace + ' States',
@@ -514,16 +480,13 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
514
480
  };
515
481
  const handler = new RedisHandler(socket, options);
516
482
  this._socketEvents(handler);
517
-
518
483
  this.serverConnections[socket.remoteAddress + ':' + socket.remotePort] = handler;
519
-
520
484
  socket.on('close', () => {
521
485
  if (this.serverConnections[socket.remoteAddress + ':' + socket.remotePort]) {
522
486
  delete this.serverConnections[socket.remoteAddress + ':' + socket.remotePort];
523
487
  }
524
488
  });
525
489
  }
526
-
527
490
  /**
528
491
  * Initialize Redis Server
529
492
  * @param settings Settings object
@@ -537,25 +500,15 @@ class StatesInMemoryServer extends StatesInMemoryJsonlDB {
537
500
  }
538
501
  try {
539
502
  this.server = net.createServer();
540
- this.server.on('error', err =>
541
- this.log.info(
542
- `${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${
543
- settings.port || 9001
544
- }: ${err}`
545
- )
546
- );
503
+ this.server.on('error', err => this.log.info(`${this.namespace} ${settings.secure ? 'Secure ' : ''} Error inMem-objects listening on port ${settings.port || 9001}: ${err}`));
547
504
  this.server.on('connection', socket => this._initSocket(socket));
548
-
549
- this.server.listen(
550
- settings.port || 9000,
551
- settings.host === 'localhost' ? '127.0.0.1' : settings.host ? settings.host : undefined,
552
- () => resolve()
553
- );
554
- } catch (err) {
505
+ this.server.listen(settings.port || 9000, settings.host === 'localhost' ? '127.0.0.1' : settings.host ? settings.host : undefined, () => resolve());
506
+ }
507
+ catch (err) {
555
508
  reject(err);
556
509
  }
557
510
  });
558
511
  }
559
512
  }
560
-
561
513
  module.exports = StatesInMemoryServer;
514
+ //# sourceMappingURL=statesInMemServerRedis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statesInMemServerRedis.js","sourceRoot":"","sources":["../../../src/lib/states/statesInMemServerRedis.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@iobroker/db-states-jsonl",
3
- "version": "4.0.21",
3
+ "version": "4.1.0-alpha.0-20220819-74ceeddc",
4
4
  "engines": {
5
5
  "node": ">=12.0.0"
6
6
  },
7
7
  "dependencies": {
8
8
  "@alcalzone/jsonl-db": "~2.5.1",
9
- "@iobroker/db-base": "4.0.21",
10
- "@iobroker/db-states-file": "4.0.21",
11
- "@iobroker/db-states-redis": "4.0.21"
9
+ "@iobroker/db-base": "4.1.0-alpha.0-20220819-74ceeddc",
10
+ "@iobroker/db-states-file": "4.1.0-alpha.0-20220819-74ceeddc",
11
+ "@iobroker/db-states-redis": "4.1.0-alpha.0-20220819-74ceeddc"
12
12
  },
13
13
  "keywords": [
14
14
  "ioBroker",
@@ -25,15 +25,19 @@
25
25
  "type": "git",
26
26
  "url": "https://github.com/ioBroker/ioBroker.js-controller/packages/db-states-jsonl"
27
27
  },
28
- "scripts": {},
29
- "main": "index.js",
28
+ "scripts": {
29
+ "build": "tsc -b tsconfig.build.json"
30
+ },
31
+ "main": "build/index.js",
32
+ "types": "build/index.d.ts",
30
33
  "license": "MIT",
31
34
  "publishConfig": {
32
35
  "access": "public"
33
36
  },
34
37
  "files": [
35
- "lib/",
36
- "index.js"
38
+ "build/lib/",
39
+ "build/index.js",
40
+ "build/index.d.ts"
37
41
  ],
38
- "gitHead": "4749d256d312623ae7621e7ae47d44580b3aa8c1"
42
+ "gitHead": "febfe24ecb050ec02f848cc869d84aa30d69c615"
39
43
  }