@iobroker/db-base 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.
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /**
2
3
  * States DB in memory - Server
3
4
  *
@@ -6,39 +7,15 @@
6
7
  * MIT License
7
8
  *
8
9
  */
9
-
10
- /** @module inMemoryFileDB */
11
-
12
- /* jshint -W097 */
13
- /* jshint strict:false */
14
- /* jslint node: true */
15
- 'use strict';
16
-
17
- const fs = require('fs-extra');
18
- const path = require('path');
19
- const tools = require('./tools.js');
20
-
21
- // settings = {
22
- // change: function (id, state) {},
23
- // connected: function (nameOfServer) {},
24
- // logger: {
25
- // silly: function (msg) {},
26
- // debug: function (msg) {},
27
- // info: function (msg) {},
28
- // warn: function (msg) {},
29
- // error: function (msg) {}
30
- // },
31
- // connection: {
32
- // dataDir: 'relative path'
33
- // },
34
- // auth: null, //unused
35
- // secure: true/false,
36
- // certificates: as required by createServer
37
- // port: 9000,
38
- // host: localhost
39
- // };
40
- //
41
-
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.InMemoryFileDB = void 0;
15
+ const fs_extra_1 = __importDefault(require("fs-extra"));
16
+ const path_1 = __importDefault(require("path"));
17
+ const js_controller_common_1 = require("@iobroker/js-controller-common");
18
+ const zlib_1 = require("zlib");
42
19
  /**
43
20
  * The parent of the class structure, which provides basic JSON storage
44
21
  * and general subscription and publish functionality
@@ -46,136 +23,112 @@ const tools = require('./tools.js');
46
23
  class InMemoryFileDB {
47
24
  constructor(settings) {
48
25
  this.settings = settings || {};
49
-
50
26
  this.change = this.settings.change;
51
-
52
27
  this.dataset = {};
53
-
54
28
  this.namespace = this.settings.namespace || '';
55
29
  this.lastSave = null;
56
- this.zlib = null;
57
30
  this.callbackSubscriptionClient = {};
58
-
59
31
  this.settings.backup = this.settings.connection.backup || {
60
- disabled: false, // deactivates
61
- files: 24, // minimum number of files
62
- hours: 48, // hours
63
- period: 120, // minutes
32
+ disabled: false,
33
+ files: 24,
34
+ hours: 48,
35
+ period: 120,
64
36
  path: '' // use default path
65
37
  };
66
-
67
- this.dataDir = this.settings.connection.dataDir || tools.getDefaultDataDir();
68
- if (!path.isAbsolute(this.dataDir)) {
69
- this.dataDir = path.normalize(path.join(tools.getControllerDir(), this.dataDir));
38
+ this.dataDir = this.settings.connection.dataDir || js_controller_common_1.tools.getDefaultDataDir();
39
+ if (!path_1.default.isAbsolute(this.dataDir)) {
40
+ this.dataDir = path_1.default.normalize(path_1.default.join(js_controller_common_1.tools.getControllerDir(), this.dataDir));
70
41
  }
71
42
  this.dataDir = this.dataDir.replace(/\\/g, '/');
72
-
73
43
  const fileName = this.settings.jsonlDB ? this.settings.jsonlDB.fileName : this.settings.fileDB.fileName;
74
- this.datasetName = path.join(this.dataDir, fileName);
75
- const parts = path.dirname(this.datasetName);
76
- fs.ensureDirSync(parts);
77
-
44
+ this.datasetName = path_1.default.join(this.dataDir, fileName);
45
+ const parts = path_1.default.dirname(this.datasetName);
46
+ fs_extra_1.default.ensureDirSync(parts);
78
47
  this.stateTimer = null;
79
-
80
- this.backupDir = this.settings.backup.path || path.join(this.dataDir, this.settings.fileDB.backupDirName);
81
-
82
- this.log = tools.getLogger(this.settings.logger);
83
-
48
+ this.backupDir = this.settings.backup.path || path_1.default.join(this.dataDir, this.settings.fileDB.backupDirName);
49
+ this.log = js_controller_common_1.tools.getLogger(this.settings.logger);
84
50
  if (!this.settings.backup.disabled) {
85
51
  this.initBackupDir();
86
52
  }
87
-
88
53
  this.log.debug(`${this.namespace} Data File: ${this.datasetName}`);
89
54
  }
90
-
91
- /** @returns {Promise<void>} */
92
55
  async open() {
93
56
  // load values from file
94
57
  this.dataset = await this.loadDataset(this.datasetName);
95
58
  }
96
-
97
59
  /**
98
60
  * Loads a dataset file
99
61
  *
100
- * @param datasetName {string} Filename of the file to load
101
- * @returns {Promise<Record<string, any>>} read data, normally as object
62
+ * @param datasetName Filename of the file to load
63
+ * @returns obj read data, normally as object
102
64
  */
103
65
  async loadDatasetFile(datasetName) {
104
- if (!(await fs.pathExists(datasetName))) {
66
+ if (!(await fs_extra_1.default.pathExists(datasetName))) {
105
67
  throw new Error(`Database file ${datasetName} does not exists.`);
106
68
  }
107
- return fs.readJSON(datasetName);
69
+ return fs_extra_1.default.readJSON(datasetName);
108
70
  }
109
-
110
71
  /**
111
72
  * Loads the dataset including pot. Fallback handling
112
73
  *
113
- * @param datasetName {string} Filename of the file to load
114
- * @returns {Promise<Record<string, any>>} dataset read as object
74
+ * @param datasetName Filename of the file to load
75
+ * @returns obj dataset read as object
115
76
  */
116
77
  async loadDataset(datasetName) {
117
78
  let ret = {};
118
79
  try {
119
80
  ret = await this.loadDatasetFile(datasetName);
120
-
121
81
  // loading worked, make sure that "bak" File is not broken
122
82
  try {
123
- await fs.readJSON(`${datasetName}.bak`);
124
- } catch (e) {
125
- this.log.info(
126
- `${this.namespace} Rewrite bak file, because error on verify ${datasetName}.bak: ${e.message}`
127
- );
83
+ await fs_extra_1.default.readJSON(`${datasetName}.bak`);
84
+ }
85
+ catch (e) {
86
+ this.log.info(`${this.namespace} Rewrite bak file, because error on verify ${datasetName}.bak: ${e.message}`);
128
87
  try {
129
88
  const jsonString = JSON.stringify(ret);
130
- await fs.writeFile(`${datasetName}.bak`, jsonString);
131
- } catch (e) {
89
+ await fs_extra_1.default.writeFile(`${datasetName}.bak`, jsonString);
90
+ }
91
+ catch (e) {
132
92
  this.log.error(`${this.namespace} Cannot save ${datasetName}.bak: ${e.message}`);
133
93
  }
134
94
  }
135
- } catch (err) {
95
+ }
96
+ catch (err) {
136
97
  this.log.error(`${this.namespace} Cannot load ${datasetName}: ${err.message}. We try last Backup!`);
137
-
138
98
  try {
139
99
  ret = await this.loadDatasetFile(`${datasetName}.bak`);
140
-
141
100
  // it worked, lets overwrite old file and store the broken one for pot. forensic check
142
101
  try {
143
- if (await fs.pathExists(datasetName)) {
102
+ if (await fs_extra_1.default.pathExists(datasetName)) {
144
103
  try {
145
- await fs.move(datasetName, `${datasetName}.broken`, { overwrite: true });
146
- } catch (e) {
147
- this.log.error(
148
- `${this.namespace} Cannot copy the broken file ${datasetName} to ${datasetName}.broken ${e.message}`
149
- );
104
+ await fs_extra_1.default.move(datasetName, `${datasetName}.broken`, { overwrite: true });
105
+ }
106
+ catch (e) {
107
+ this.log.error(`${this.namespace} Cannot copy the broken file ${datasetName} to ${datasetName}.broken ${e.message}`);
150
108
  }
151
109
  try {
152
- await fs.writeFile(datasetName, JSON.stringify(ret));
153
- } catch (e) {
154
- this.log.error(
155
- `${this.namespace} Cannot restore backup file as new main ${datasetName}: ${e.message}`
156
- );
110
+ await fs_extra_1.default.writeFile(datasetName, JSON.stringify(ret));
111
+ }
112
+ catch (e) {
113
+ this.log.error(`${this.namespace} Cannot restore backup file as new main ${datasetName}: ${e.message}`);
157
114
  }
158
115
  }
159
- } catch {
116
+ }
117
+ catch {
160
118
  // ignore, file does not exist
161
119
  }
162
- } catch (err) {
163
- this.log.error(
164
- `${this.namespace} Cannot load ${datasetName}.bak: ${err.message}. Continue with empty dataset!`
165
- );
166
- this.log.error(
167
- `${this.namespace} If this is no Migration or initial start please restore the last backup from ${this.backupDir}`
168
- );
120
+ }
121
+ catch (err) {
122
+ this.log.error(`${this.namespace} Cannot load ${datasetName}.bak: ${err.message}. Continue with empty dataset!`);
123
+ this.log.error(`${this.namespace} If this is no Migration or initial start please restore the last backup from ${this.backupDir}`);
169
124
  }
170
125
  }
171
126
  return ret;
172
127
  }
173
-
174
128
  initBackupDir() {
175
- this.zlib = this.zlib || require('zlib');
176
129
  // Interval in minutes => to milliseconds
177
130
  this.settings.backup.period =
178
- this.settings.backup.period === undefined ? 120 : parseInt(this.settings.backup.period);
131
+ this.settings.backup.period === undefined ? 120 : parseInt(String(this.settings.backup.period));
179
132
  if (isNaN(this.settings.backup.period)) {
180
133
  this.settings.backup.period = 120;
181
134
  }
@@ -183,28 +136,23 @@ class InMemoryFileDB {
183
136
  // If a user configured the backup this way, we use our default of 120 minutes instead.
184
137
  const maxTimeoutMinutes = Math.floor((2 ** 31 - 1) / 60000);
185
138
  if (this.settings.backup.period > maxTimeoutMinutes) {
139
+ this.log.warn(`${this.namespace} Configured backup period ${this.settings.backup.period} is larger than the supported maximum of ${maxTimeoutMinutes} minutes. Defaulting to 120 minutes.`);
186
140
  this.settings.backup.period = 120;
187
- this.log.warn(
188
- `${this.namespace} Configured backup period ${this.settings.backup.period} is larger than the supported maximum of ${maxTimeoutMinutes} minutes. Defaulting to 120 minutes.`
189
- );
190
141
  }
191
142
  this.settings.backup.period *= 60000;
192
-
193
143
  this.settings.backup.files =
194
- this.settings.backup.files === undefined ? 24 : parseInt(this.settings.backup.files);
144
+ this.settings.backup.files === undefined ? 24 : parseInt(String(this.settings.backup.files));
195
145
  if (isNaN(this.settings.backup.files)) {
196
146
  this.settings.backup.files = 24;
197
147
  }
198
-
199
148
  this.settings.backup.hours =
200
- this.settings.backup.hours === undefined ? 48 : parseInt(this.settings.backup.hours);
149
+ this.settings.backup.hours === undefined ? 48 : parseInt(String(this.settings.backup.hours));
201
150
  if (isNaN(this.settings.backup.hours)) {
202
151
  this.settings.backup.hours = 48;
203
152
  }
204
153
  // Create backup directory
205
- fs.ensureDirSync(this.backupDir);
154
+ fs_extra_1.default.ensureDirSync(this.backupDir);
206
155
  }
207
-
208
156
  handleSubscribe(client, type, pattern, options, cb) {
209
157
  if (typeof options === 'function') {
210
158
  cb = options;
@@ -212,63 +160,52 @@ class InMemoryFileDB {
212
160
  }
213
161
  client._subscribe = client._subscribe || {};
214
162
  client._subscribe[type] = client._subscribe[type] || [];
215
-
216
163
  const s = client._subscribe[type];
217
-
218
164
  if (pattern instanceof Array) {
219
165
  pattern.forEach(pattern => {
220
166
  if (s.find(sub => sub.pattern === pattern)) {
221
167
  return;
222
168
  }
223
-
224
- s.push({ pattern: pattern, regex: new RegExp(tools.pattern2RegEx(pattern)), options: options });
169
+ s.push({ pattern, regex: new RegExp(js_controller_common_1.tools.pattern2RegEx(pattern)), options });
225
170
  });
226
- } else {
171
+ }
172
+ else {
227
173
  if (!s.find(sub => sub.pattern === pattern)) {
228
- s.push({ pattern: pattern, regex: new RegExp(tools.pattern2RegEx(pattern)), options: options });
174
+ s.push({ pattern, regex: new RegExp(js_controller_common_1.tools.pattern2RegEx(pattern)), options });
229
175
  }
230
176
  }
231
177
  typeof cb === 'function' && cb();
232
178
  }
233
-
234
179
  handleUnsubscribe(client, type, pattern, cb) {
235
- if (!client._subscribe || !client._subscribe[type]) {
236
- if (typeof cb === 'function') {
237
- cb();
238
- }
239
- return;
240
- }
241
- const s = client._subscribe[type];
242
- if (pattern instanceof Array) {
243
- pattern.forEach(pattern => {
244
- const index = s.findIndex(sub => sub.pattern === pattern);
180
+ var _a;
181
+ const s = (_a = client === null || client === void 0 ? void 0 : client._subscribe) === null || _a === void 0 ? void 0 : _a[type];
182
+ if (s) {
183
+ const removeEntry = (p) => {
184
+ const index = s.findIndex(sub => sub.pattern === p);
245
185
  if (index > -1) {
246
186
  s.splice(index, 1);
247
187
  }
248
- });
249
- } else {
250
- const index = s.findIndex(sub => sub.pattern === pattern);
251
- if (index > -1) {
252
- s.splice(index, 1);
253
- return typeof cb === 'function' && cb();
188
+ };
189
+ if (pattern instanceof Array) {
190
+ pattern.forEach(p => {
191
+ removeEntry(p);
192
+ });
193
+ }
194
+ else {
195
+ removeEntry(pattern);
254
196
  }
255
197
  }
256
- typeof cb === 'function' && cb();
198
+ return js_controller_common_1.tools.maybeCallback(cb);
257
199
  }
258
-
259
- /** @returns {number} */
260
200
  publishToClients(_client, _type, _id, _obj) {
261
201
  throw new Error('no communication handling implemented');
262
202
  }
263
-
264
203
  deleteOldBackupFiles(baseFilename) {
265
204
  // delete files only if settings.backupNumber is not 0
266
- let files = fs.readdirSync(this.backupDir);
205
+ let files = fs_extra_1.default.readdirSync(this.backupDir);
267
206
  files.sort();
268
207
  const limit = Date.now() - this.settings.backup.hours * 3600000;
269
-
270
208
  files = files.filter(f => f.endsWith(baseFilename + '.gz'));
271
-
272
209
  while (files.length > this.settings.backup.files) {
273
210
  const file = files.shift();
274
211
  if (!file) {
@@ -278,196 +215,172 @@ class InMemoryFileDB {
278
215
  const ms = new Date(`${file.substring(0, 10)} ${file.substring(11, 16).replace('-', ':')}:00`).getTime();
279
216
  if (limit > ms) {
280
217
  try {
281
- fs.unlinkSync(path.join(this.backupDir, file));
282
- } catch (e) {
283
- this.log.error(
284
- `${this.namespace} Cannot delete file "${path.join(this.backupDir, file)}: ${e.message}`
285
- );
218
+ fs_extra_1.default.unlinkSync(path_1.default.join(this.backupDir, file));
219
+ }
220
+ catch (e) {
221
+ this.log.error(`${this.namespace} Cannot delete file "${path_1.default.join(this.backupDir, file)}: ${e.message}`);
286
222
  }
287
223
  }
288
224
  }
289
225
  }
290
-
291
226
  getTimeStr(date) {
292
227
  const dateObj = new Date(date);
293
-
294
228
  let text = dateObj.getFullYear().toString() + '-';
295
229
  let v = dateObj.getMonth() + 1;
296
230
  if (v < 10) {
297
231
  text += '0';
298
232
  }
299
233
  text += v.toString() + '-';
300
-
301
234
  v = dateObj.getDate();
302
235
  if (v < 10) {
303
236
  text += '0';
304
237
  }
305
238
  text += v.toString() + '_';
306
-
307
239
  v = dateObj.getHours();
308
240
  if (v < 10) {
309
241
  text += '0';
310
242
  }
311
243
  text += v.toString() + '-';
312
-
313
244
  v = dateObj.getMinutes();
314
245
  if (v < 10) {
315
246
  text += '0';
316
247
  }
317
248
  text += v.toString();
318
-
319
249
  return text;
320
250
  }
321
-
322
251
  /**
323
252
  * Handle saving the dataset incl. backups
324
253
  */
325
254
  async saveState() {
326
255
  try {
327
256
  const jsonString = await this.saveDataset();
328
-
329
257
  if (!this.settings.backup.disabled && jsonString) {
330
258
  this.saveBackup(jsonString);
331
259
  }
332
- } finally {
260
+ }
261
+ finally {
333
262
  if (this.stateTimer) {
334
263
  clearTimeout(this.stateTimer);
335
264
  this.stateTimer = null;
336
265
  }
337
266
  }
338
267
  }
339
-
340
268
  /**
341
269
  * Saves the dataset into File incl. handling of a fallback backup file
342
270
  *
343
- * @returns {Promise<string>} JSON string of the complete dataset to also be stored into a compressed backup file
271
+ * @returns dataset JSON string of the complete dataset to also be stored into a compressed backup file
344
272
  */
345
273
  async saveDataset() {
346
274
  const jsonString = JSON.stringify(this.dataset);
347
-
348
275
  try {
349
- await fs.writeFile(`${this.datasetName}.new`, jsonString);
350
- } catch (e) {
276
+ await fs_extra_1.default.writeFile(`${this.datasetName}.new`, jsonString);
277
+ }
278
+ catch (e) {
351
279
  this.log.error(`${this.namespace} Cannot save Dataset to ${this.datasetName}.new: ${e.message}`);
352
280
  return jsonString;
353
281
  }
354
-
355
282
  let bakOk = true;
356
283
  try {
357
- if (await fs.pathExists(this.datasetName)) {
284
+ if (await fs_extra_1.default.pathExists(this.datasetName)) {
358
285
  try {
359
- await fs.move(this.datasetName, `${this.datasetName}.bak`, { overwrite: true });
360
- } catch (e) {
286
+ await fs_extra_1.default.move(this.datasetName, `${this.datasetName}.bak`, { overwrite: true });
287
+ }
288
+ catch (e) {
361
289
  bakOk = false;
362
290
  this.log.error(`${this.namespace} Cannot backup file ${this.datasetName}.bak: ${e.message}`);
363
291
  }
364
- } else {
292
+ }
293
+ else {
365
294
  bakOk = false;
366
295
  }
367
- } catch {
296
+ }
297
+ catch {
368
298
  bakOk = false;
369
299
  // ignore, file does not exist
370
300
  }
371
-
372
301
  try {
373
- await fs.move(`${this.datasetName}.new`, this.datasetName, { overwrite: true });
374
- } catch (e) {
375
- this.log.error(
376
- `${this.namespace} Cannot move ${this.datasetName}.new to ${this.datasetName}: ${e.message}. Try direct write as fallback`
377
- );
302
+ await fs_extra_1.default.move(`${this.datasetName}.new`, this.datasetName, { overwrite: true });
303
+ }
304
+ catch (e) {
305
+ this.log.error(`${this.namespace} Cannot move ${this.datasetName}.new to ${this.datasetName}: ${e.message}. Try direct write as fallback`);
378
306
  try {
379
- await fs.writeFile(this.datasetName, jsonString);
380
- } catch (e) {
307
+ await fs_extra_1.default.writeFile(this.datasetName, jsonString);
308
+ }
309
+ catch (e) {
381
310
  this.log.error(`${this.namespace} Cannot directly write Dataset to ${this.datasetName}: ${e.message}`);
382
311
  return jsonString;
383
312
  }
384
313
  }
385
-
386
314
  if (!bakOk) {
387
315
  // it seems the bak File is not successfully there, write current content again
388
316
  try {
389
- await fs.writeFile(`${this.datasetName}.bak`, jsonString);
390
- } catch (e) {
317
+ await fs_extra_1.default.writeFile(`${this.datasetName}.bak`, jsonString);
318
+ }
319
+ catch (e) {
391
320
  this.log.error(`${this.namespace} Cannot save ${this.datasetName}.bak: ${e.message}`);
392
321
  }
393
322
  }
394
-
395
323
  return jsonString;
396
324
  }
397
-
398
325
  /**
399
326
  * Stores a compressed backup of the DB in definable intervals
400
327
  *
401
- * @param jsonString {string} JSON string of the complete dataset to also be stored into a compressed backup file
328
+ * @param jsonString JSON string of the complete dataset to also be stored into a compressed backup file
402
329
  */
403
330
  saveBackup(jsonString) {
404
331
  // save files for the last x hours
405
332
  const now = Date.now();
406
-
407
333
  // makes backups only if settings.backupInterval is not 0
408
334
  if (this.settings.backup.period && (!this.lastSave || now - this.lastSave > this.settings.backup.period)) {
409
335
  this.lastSave = now;
410
- const backFileName = path.join(
411
- this.backupDir,
412
- this.getTimeStr(now) + '_' + this.settings.fileDB.fileName + '.gz'
413
- );
414
-
336
+ const backFileName = path_1.default.join(this.backupDir, this.getTimeStr(now) + '_' + this.settings.fileDB.fileName + '.gz');
415
337
  try {
416
- if (!fs.existsSync(backFileName)) {
417
- this.zlib = this.zlib || require('zlib');
418
- const output = fs.createWriteStream(backFileName);
338
+ if (!fs_extra_1.default.existsSync(backFileName)) {
339
+ const output = fs_extra_1.default.createWriteStream(backFileName);
419
340
  output.on('error', err => {
420
- this.log.error(`${this.namespace} Cannot save ${this.datasetName}: ${err}`);
341
+ this.log.error(`${this.namespace} Cannot save ${this.datasetName}: ${err.stack}`);
421
342
  });
422
- const compress = this.zlib.createGzip();
343
+ const compress = (0, zlib_1.createGzip)();
423
344
  /* The following line will pipe everything written into compress to the file stream */
424
345
  compress.pipe(output);
425
346
  /* Since we're piped through the file stream, the following line will do:
426
347
  'Hello World!'->gzip compression->file which is the desired effect */
427
348
  compress.write(jsonString);
428
349
  compress.end();
429
-
430
350
  // analyse older files
431
351
  this.deleteOldBackupFiles(this.settings.fileDB.fileName);
432
352
  }
433
- } catch (e) {
353
+ }
354
+ catch (e) {
434
355
  this.log.error(`${this.namespace} Cannot save backup ${backFileName}: ${e.message}`);
435
356
  }
436
357
  }
437
358
  }
438
-
439
359
  getStatus() {
440
360
  return { type: 'file', server: true };
441
361
  }
442
-
443
- /** @returns {object} */
444
362
  getClients() {
445
363
  return {};
446
364
  }
447
-
448
365
  publishAll(type, id, obj) {
449
366
  if (id === undefined) {
450
367
  this.log.error(`${this.namespace} Can not publish empty ID`);
451
368
  return 0;
452
369
  }
453
-
454
370
  const clients = this.getClients();
455
371
  let publishCount = 0;
456
-
457
372
  if (clients && typeof clients === 'object') {
458
373
  for (const i of Object.keys(clients)) {
459
374
  publishCount += this.publishToClients(clients[i], type, id, obj);
460
375
  }
461
376
  }
462
-
463
377
  // local subscriptions
464
- if (
465
- this.change &&
378
+ if (this.change &&
466
379
  this.callbackSubscriptionClient._subscribe &&
467
- this.callbackSubscriptionClient._subscribe[type]
468
- ) {
469
- for (let j = 0; j < this.callbackSubscriptionClient._subscribe[type].length; j++) {
470
- if (this.callbackSubscriptionClient._subscribe[type][j].regex.test(id)) {
380
+ this.callbackSubscriptionClient._subscribe[type]) {
381
+ for (const entry of this.callbackSubscriptionClient._subscribe[type]) {
382
+ if (entry.regex.test(id)) {
383
+ // @ts-expect-error we have checked 3 lines above
471
384
  setImmediate(() => this.change(id, obj));
472
385
  break;
473
386
  }
@@ -475,7 +388,6 @@ class InMemoryFileDB {
475
388
  }
476
389
  return publishCount;
477
390
  }
478
-
479
391
  // Destructor of the class. Called by shutting down.
480
392
  async destroy() {
481
393
  if (this.stateTimer) {
@@ -484,5 +396,5 @@ class InMemoryFileDB {
484
396
  }
485
397
  }
486
398
  }
487
-
488
- module.exports = InMemoryFileDB;
399
+ exports.InMemoryFileDB = InMemoryFileDB;
400
+ //# sourceMappingURL=inMemFileDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inMemFileDB.js","sourceRoot":"","sources":["../../src/lib/inMemFileDB.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;AAEH,wDAA0B;AAC1B,gDAAwB;AACxB,yEAAuD;AAEvD,+BAAkC;AA0FlC;;;IAGI;AACJ,MAAa,cAAc;IAavB,YAAY,QAAwB;QAChC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEnC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAElB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;QAErC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,IAAI;YACtD,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,EAAE,CAAC,mBAAmB;SAC/B,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,IAAI,4BAAK,CAAC,iBAAiB,EAAE,CAAC;QAC7E,IAAI,CAAC,cAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAChC,IAAI,CAAC,OAAO,GAAG,cAAI,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,4BAAK,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SACpF;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxG,IAAI,CAAC,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7C,kBAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAE1G,IAAI,CAAC,GAAG,GAAG,4BAAK,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,IAAI;QACN,wBAAwB;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,WAAmB;QACrC,IAAI,CAAC,CAAC,MAAM,kBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,mBAAmB,CAAC,CAAC;SACpE;QACD,OAAO,kBAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,WAAW,CAAC,WAAmB;QACjC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI;YACA,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAE9C,0DAA0D;YAC1D,IAAI;gBACA,MAAM,kBAAE,CAAC,QAAQ,CAAC,GAAG,WAAW,MAAM,CAAC,CAAC;aAC3C;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,GAAG,CAAC,IAAI,CACT,GAAG,IAAI,CAAC,SAAS,8CAA8C,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CACjG,CAAC;gBACF,IAAI;oBACA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACvC,MAAM,kBAAE,CAAC,SAAS,CAAC,GAAG,WAAW,MAAM,EAAE,UAAU,CAAC,CAAC;iBACxD;gBAAC,OAAO,CAAC,EAAE;oBACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,gBAAgB,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;iBACpF;aACJ;SACJ;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,gBAAgB,WAAW,KAAK,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC;YAEpG,IAAI;gBACA,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,WAAW,MAAM,CAAC,CAAC;gBAEvD,sFAAsF;gBACtF,IAAI;oBACA,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;wBAClC,IAAI;4BACA,MAAM,kBAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,WAAW,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5E;wBAAC,OAAO,CAAC,EAAE;4BACR,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,gCAAgC,WAAW,OAAO,WAAW,WAAW,CAAC,CAAC,OAAO,EAAE,CACvG,CAAC;yBACL;wBACD,IAAI;4BACA,MAAM,kBAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;yBACxD;wBAAC,OAAO,CAAC,EAAE;4BACR,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,2CAA2C,WAAW,KAAK,CAAC,CAAC,OAAO,EAAE,CAC1F,CAAC;yBACL;qBACJ;iBACJ;gBAAC,MAAM;oBACJ,8BAA8B;iBACjC;aACJ;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,gBAAgB,WAAW,SAAS,GAAG,CAAC,OAAO,gCAAgC,CACnG,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,iFAAiF,IAAI,CAAC,SAAS,EAAE,CACrH,CAAC;aACL;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,aAAa;QACT,yCAAyC;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;YACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACpG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;SACrC;QACD,oGAAoG;QACpG,uFAAuF;QACvF,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE;YACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CACT,GAAG,IAAI,CAAC,SAAS,6BAA6B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,4CAA4C,iBAAiB,sCAAsC,CAC/K,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;SACrC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;QAErC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;YACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;SACnC;QAED,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;YACtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;SACnC;QACD,0BAA0B;QAC1B,kBAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAWD,eAAe,CACX,MAA0B,EAC1B,IAAY,EACZ,OAA0B,EAC1B,OAAY,EACZ,EAAe;QAEf,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YAC/B,EAAE,GAAG,OAAO,CAAC;YACb,OAAO,GAAG,SAAS,CAAC;SACvB;QACD,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAExD,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,OAAO,YAAY,KAAK,EAAE;YAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACtB,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;oBACxC,OAAO;iBACV;gBAED,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,4BAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE;gBACzC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,4BAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;aACjF;SACJ;QAED,OAAO,EAAE,KAAK,UAAU,IAAI,EAAE,EAAE,CAAC;IACrC,CAAC;IAED,iBAAiB,CACb,MAA0B,EAC1B,IAAY,EACZ,OAA0B,EAC1B,EAAe;;QAEf,MAAM,CAAC,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,UAAU,0CAAG,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE;YACH,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,EAAE;gBAC9B,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC;gBACpD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;oBACZ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACtB;YACL,CAAC,CAAC;YAEF,IAAI,OAAO,YAAY,KAAK,EAAE;gBAC1B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBAChB,WAAW,CAAC,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,WAAW,CAAC,OAAO,CAAC,CAAC;aACxB;SACJ;QAED,OAAO,4BAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,gBAAgB,CAAC,OAA2B,EAAE,KAAa,EAAE,GAAW,EAAE,IAAS;QAC/E,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,oBAAoB,CAAC,YAAoB;QACrC,sDAAsD;QACtD,IAAI,KAAK,GAAG,kBAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;QAEhE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;QAE5D,OAAO,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,EAAE;gBACP,SAAS;aACZ;YACD,eAAe;YACf,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;YACzG,IAAI,KAAK,GAAG,EAAE,EAAE;gBACZ,IAAI;oBACA,kBAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;iBAClD;gBAAC,OAAO,CAAC,EAAE;oBACR,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,wBAAwB,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAC3F,CAAC;iBACL;aACJ;SACJ;IACL,CAAC;IAED,UAAU,CAAC,IAAY;QACnB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QAClD,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,EAAE,EAAE;YACR,IAAI,IAAI,GAAG,CAAC;SACf;QACD,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QAE3B,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,EAAE,EAAE;YACR,IAAI,IAAI,GAAG,CAAC;SACf;QACD,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QAE3B,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,EAAE,EAAE;YACR,IAAI,IAAI,GAAG,CAAC;SACf;QACD,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;QAE3B,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,EAAE,EAAE;YACR,IAAI,IAAI,GAAG,CAAC;SACf;QACD,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACX,IAAI;YACA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAE5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,IAAI,UAAU,EAAE;gBAC9C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;aAC/B;SACJ;gBAAS;YACN,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;aAC1B;SACJ;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEhD,IAAI;YACA,MAAM,kBAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,MAAM,EAAE,UAAU,CAAC,CAAC;SAC7D;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,2BAA2B,IAAI,CAAC,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjG,OAAO,UAAU,CAAC;SACrB;QAED,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI;YACA,IAAI,MAAM,kBAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBACvC,IAAI;oBACA,MAAM,kBAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnF;gBAAC,OAAO,CAAC,EAAE;oBACR,KAAK,GAAG,KAAK,CAAC;oBACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,uBAAuB,IAAI,CAAC,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;iBAChG;aACJ;iBAAM;gBACH,KAAK,GAAG,KAAK,CAAC;aACjB;SACJ;QAAC,MAAM;YACJ,KAAK,GAAG,KAAK,CAAC;YACd,8BAA8B;SACjC;QAED,IAAI;YACA,MAAM,kBAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;SACnF;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,KAAK,CACV,GAAG,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,WAAW,WAAW,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,gCAAgC,CAC7H,CAAC;YACF,IAAI;gBACA,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;aACpD;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,qCAAqC,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvG,OAAO,UAAU,CAAC;aACrB;SACJ;QAED,IAAI,CAAC,KAAK,EAAE;YACR,+EAA+E;YAC/E,IAAI;gBACA,MAAM,kBAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,MAAM,EAAE,UAAU,CAAC,CAAC;aAC7D;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACzF;SACJ;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,UAAkB;QACzB,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,yDAAyD;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACtG,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;YACpB,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAC1B,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CACrE,CAAC;YAEF,IAAI;gBACA,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;oBAC9B,MAAM,MAAM,GAAG,kBAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;oBAClD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;wBACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,WAAW,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtF,CAAC,CAAC,CAAC;oBAEH,MAAM,QAAQ,GAAG,IAAA,iBAAU,GAAE,CAAC;oBAC9B,sFAAsF;oBACtF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACtB;4FACwE;oBACxE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC3B,QAAQ,CAAC,GAAG,EAAE,CAAC;oBAEf,sBAAsB;oBACtB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;iBAC5D;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,uBAAuB,YAAY,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;aACxF;SACJ;IACL,CAAC;IAED,SAAS;QACL,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,UAAU;QACN,OAAO,EAAE,CAAC;IACd,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,EAAU,EAAE,GAAQ;QACzC,IAAI,EAAE,KAAK,SAAS,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,2BAA2B,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC;SACZ;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAClC,YAAY,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;aACpE;SACJ;QAED,sBAAsB;QACtB,IACI,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,0BAA0B,CAAC,UAAU;YAC1C,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,EAClD;YACE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;gBAClE,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBACtB,iDAAiD;oBACjD,YAAY,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBACzC,MAAM;iBACT;aACJ;SACJ;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;SAC1B;IACL,CAAC;CACJ;AAndD,wCAmdC"}