@incoqnito.io/bajadab 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/basics.js CHANGED
@@ -1,6 +1,7 @@
1
+ import logger from "winston";
1
2
  import { uuidv7, } from "uuidv7";
2
3
  import { runMultiReentrantProtected, runReentrantProtected } from "@incoqnito.io/ts-iq-core";
3
- import { EBArrayDeletionStrategy, EBAutoFlushStrategy, EBAutoIDStrategy, EBDirtyUnloadStrategy, EBDuplicateIDStrategy, EBMemStorageStrategy, } from "./base.js";
4
+ import { EBArrayDeletionStrategy, EBAutoFlushStrategy, EBAutoIDStrategy, EBDirtyUnloadStrategy, EBDuplicateIDStrategy, EBHandlerMode, EBMemStorageStrategy, EBModificationType, } from "./base.js";
4
5
  import { canonicalName } from "./utils.js";
5
6
  /** Default {@link TGetIDFunction}: reads `v.id`, `undefined` if absent. */
6
7
  export const DEFAULT_GET_ID = (v) => ("id" in v) ? v.id : undefined;
@@ -78,6 +79,15 @@ export class BDatabase {
78
79
  }
79
80
  });
80
81
  }
82
+ async snapshot(targetDir, options) {
83
+ const collectionNames = Array.from(this.collections.keys());
84
+ return runMultiReentrantProtected([MutexKeys.DATABASE, ...collectionNames], async () => {
85
+ for (const collection of this.collections.values()) {
86
+ await collection.flush();
87
+ }
88
+ return this.io.snapshot(targetDir, options);
89
+ });
90
+ }
81
91
  }
82
92
  export class BCollection {
83
93
  database;
@@ -89,6 +99,11 @@ export class BCollection {
89
99
  loaded = false;
90
100
  dirty = false;
91
101
  dropped = false;
102
+ addHandlers = [];
103
+ updateHandlers = [];
104
+ deleteHandlers = [];
105
+ indexDefinitions = new Map();
106
+ indexRuntime = new Map();
92
107
  constructor(database, collectionID, collectionName, collectionConfig) {
93
108
  this.database = database;
94
109
  this.collectionID = collectionID;
@@ -110,8 +125,11 @@ export class BCollection {
110
125
  await this.reload();
111
126
  }
112
127
  }
128
+ async runExclusive(fn) {
129
+ return runReentrantProtected(this.collectionName, fn);
130
+ }
113
131
  async runProtected(fn) {
114
- return runReentrantProtected(this.collectionName, async () => {
132
+ return this.runExclusive(async () => {
115
133
  if (this.dropped) {
116
134
  throw new Error(`collection "${this.collectionName}" has been dropped`);
117
135
  }
@@ -119,7 +137,7 @@ export class BCollection {
119
137
  });
120
138
  }
121
139
  /**
122
- * call this only within the proteing mutex
140
+ * call this only within the protecting mutex
123
141
  */
124
142
  markDropped() {
125
143
  this.dropped = true;
@@ -135,22 +153,117 @@ export class BCollection {
135
153
  default:
136
154
  case EBMemStorageStrategy.ARRAY:
137
155
  return !predicate ?
138
- // MARK this may be a bit slow for bigger collections
139
- [...this.arrayData] :
156
+ this.arrayData.slice() :
140
157
  this.arrayData.filter(predicate);
141
158
  }
142
159
  });
143
160
  }
161
+ async count(predicate) {
162
+ return this.runProtected(async () => {
163
+ await this.checkLoaded();
164
+ switch (this.collectionConfig.memStorageStrategy) {
165
+ case EBMemStorageStrategy.MAP:
166
+ return !predicate ?
167
+ this.mapData.size :
168
+ this.mapData.values().filter(predicate).reduce((n) => n + 1, 0);
169
+ default:
170
+ case EBMemStorageStrategy.ARRAY:
171
+ return !predicate ?
172
+ this.arrayData.length :
173
+ this.arrayData.filter(predicate).length;
174
+ }
175
+ });
176
+ }
177
+ async getByIndex(indexKey, key) {
178
+ return this.runProtected(async () => {
179
+ await this.checkLoaded();
180
+ const byKey = this.indexRuntime.get(indexKey);
181
+ if (!byKey) {
182
+ throw new Error(`index "${indexKey}" is not configured`);
183
+ }
184
+ return byKey.get(key)?.slice() ?? [];
185
+ });
186
+ }
187
+ async invokeHandler(fn, modificationType) {
188
+ try {
189
+ await fn();
190
+ }
191
+ catch (error) {
192
+ logger.error(`bajadab: collection "${this.collectionName}" ${modificationType} handler failed`, error);
193
+ }
194
+ }
195
+ async fireAdd(added) {
196
+ for (const v of added) {
197
+ for (const { handler, mode } of this.addHandlers) {
198
+ const call = this.invokeHandler(() => handler(v), EBModificationType.ADD);
199
+ if (mode === EBHandlerMode.SYNC) {
200
+ await call;
201
+ }
202
+ }
203
+ }
204
+ }
205
+ async fireUpdate(pairs) {
206
+ for (const [previous, updated] of pairs) {
207
+ for (const { handler, mode } of this.updateHandlers) {
208
+ const call = this.invokeHandler(() => handler(previous, updated), EBModificationType.UPDATE);
209
+ if (mode === EBHandlerMode.SYNC) {
210
+ await call;
211
+ }
212
+ }
213
+ }
214
+ }
215
+ async fireDelete(deleted) {
216
+ for (const v of deleted) {
217
+ for (const { handler, mode } of this.deleteHandlers) {
218
+ const call = this.invokeHandler(() => handler(v), EBModificationType.DELETE);
219
+ if (mode === EBHandlerMode.SYNC) {
220
+ await call;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ async on(modificationType, handler, mode = EBHandlerMode.SYNC) {
226
+ return this.runProtected(async () => {
227
+ switch (modificationType) {
228
+ case EBModificationType.ADD: {
229
+ const h = handler;
230
+ this.addHandlers.push({ handler: h, mode });
231
+ return { cancel: async () => this.runExclusive(async () => { this.addHandlers = this.addHandlers.filter(x => x.handler !== h); }) };
232
+ }
233
+ case EBModificationType.UPDATE: {
234
+ const h = handler;
235
+ this.updateHandlers.push({ handler: h, mode });
236
+ return { cancel: async () => this.runExclusive(async () => { this.updateHandlers = this.updateHandlers.filter(x => x.handler !== h); }) };
237
+ }
238
+ case EBModificationType.DELETE: {
239
+ const h = handler;
240
+ this.deleteHandlers.push({ handler: h, mode });
241
+ return { cancel: async () => this.runExclusive(async () => { this.deleteHandlers = this.deleteHandlers.filter(x => x.handler !== h); }) };
242
+ }
243
+ default:
244
+ throw new Error(`unknown modification type ${modificationType}`);
245
+ }
246
+ });
247
+ }
144
248
  async delete(predicate) {
145
249
  return this.runProtected(async () => {
146
250
  await this.checkLoaded();
147
251
  let ret = 0;
252
+ const trackDeletes = this.deleteHandlers.length > 0;
253
+ const indexDeletes = this.indexDefinitions.size > 0;
254
+ const deleted = [];
148
255
  switch (this.collectionConfig.memStorageStrategy) {
149
256
  case EBMemStorageStrategy.MAP:
150
257
  for (const [key, value] of this.mapData) {
151
258
  if (predicate(value)) {
152
259
  ret++;
260
+ if (indexDeletes) {
261
+ await this.removeFromIndexes(value);
262
+ }
153
263
  this.mapData.delete(key);
264
+ if (trackDeletes) {
265
+ deleted.push(value);
266
+ }
154
267
  }
155
268
  }
156
269
  break;
@@ -167,6 +280,12 @@ export class BCollection {
167
280
  }
168
281
  else {
169
282
  ret++;
283
+ if (indexDeletes) {
284
+ await this.removeFromIndexes(item);
285
+ }
286
+ if (trackDeletes) {
287
+ deleted.push(item);
288
+ }
170
289
  }
171
290
  }
172
291
  this.arrayData.length = writeIndex;
@@ -174,6 +293,17 @@ export class BCollection {
174
293
  default:
175
294
  case EBArrayDeletionStrategy.NEW_ARRAY:
176
295
  const ol = this.arrayData.length;
296
+ if (trackDeletes || indexDeletes) {
297
+ const removed = this.arrayData.filter(predicate);
298
+ if (trackDeletes) {
299
+ deleted.push(...removed);
300
+ }
301
+ if (indexDeletes) {
302
+ for (const v of removed) {
303
+ await this.removeFromIndexes(v);
304
+ }
305
+ }
306
+ }
177
307
  this.arrayData = this.arrayData.filter(v => !predicate(v));
178
308
  ret += (ol - this.arrayData.length);
179
309
  break;
@@ -183,6 +313,9 @@ export class BCollection {
183
313
  if (ret > 0) {
184
314
  await this.doOnDirty();
185
315
  }
316
+ if (deleted.length > 0) {
317
+ await this.fireDelete(deleted);
318
+ }
186
319
  return ret;
187
320
  });
188
321
  }
@@ -198,6 +331,78 @@ export class BCollection {
198
331
  }
199
332
  });
200
333
  }
334
+ resolveIndexDefinitions() {
335
+ this.indexDefinitions = new Map();
336
+ if (!this.collectionConfig.indexes) {
337
+ return;
338
+ }
339
+ for (const [indexKey, registryKey] of Object.entries(this.collectionConfig.indexes)) {
340
+ const extractor = this.database.functionRegistry?.fetch(registryKey);
341
+ if (!extractor) {
342
+ throw new Error(`index key function "${registryKey}" is not registered`);
343
+ }
344
+ this.indexDefinitions.set(indexKey, extractor);
345
+ }
346
+ }
347
+ async indexKeysFor(v) {
348
+ const result = [];
349
+ for (const [indexKey, extractor] of this.indexDefinitions) {
350
+ const extracted = await extractor(v);
351
+ if (extracted === undefined) {
352
+ continue;
353
+ }
354
+ result.push([indexKey, Array.isArray(extracted) ? extracted : [extracted]]);
355
+ }
356
+ return result;
357
+ }
358
+ async addToIndexes(v) {
359
+ for (const [indexKey, keys] of await this.indexKeysFor(v)) {
360
+ const byKey = this.indexRuntime.get(indexKey);
361
+ for (const key of keys) {
362
+ let bucket = byKey.get(key);
363
+ if (!bucket) {
364
+ bucket = [];
365
+ byKey.set(key, bucket);
366
+ }
367
+ bucket.push(v);
368
+ }
369
+ }
370
+ }
371
+ async removeFromIndexes(v) {
372
+ for (const [indexKey, keys] of await this.indexKeysFor(v)) {
373
+ const byKey = this.indexRuntime.get(indexKey);
374
+ for (const key of keys) {
375
+ const bucket = byKey.get(key);
376
+ if (!bucket) {
377
+ continue;
378
+ }
379
+ const at = bucket.indexOf(v);
380
+ if (at !== -1) {
381
+ bucket.splice(at, 1);
382
+ }
383
+ if (bucket.length === 0) {
384
+ byKey.delete(key);
385
+ }
386
+ }
387
+ }
388
+ }
389
+ /**
390
+ * full rebuild from currently loaded data; only needed right after (re)load, since every
391
+ * value then is a freshly deserialized object the incremental add/update/delete hooks never saw
392
+ */
393
+ async rebuildIndexRuntime() {
394
+ // every configured index gets an entry up front, even if empty, so getByIndex()/
395
+ // addToIndexes()/removeFromIndexes() can assume it's there instead of checking twice
396
+ this.indexRuntime = new Map(Array.from(this.indexDefinitions.keys(), (indexKey) => [indexKey, new Map()]));
397
+ if (this.indexDefinitions.size === 0) {
398
+ return;
399
+ }
400
+ const values = this.collectionConfig.memStorageStrategy === EBMemStorageStrategy.MAP ?
401
+ [...this.mapData.values()] : this.arrayData;
402
+ for (const v of values) {
403
+ await this.addToIndexes(v);
404
+ }
405
+ }
201
406
  async getID(v) {
202
407
  let getter;
203
408
  if (this.collectionConfig.getID) {
@@ -241,6 +446,9 @@ export class BCollection {
241
446
  switch (this.collectionConfig.memStorageStrategy) {
242
447
  case EBMemStorageStrategy.MAP:
243
448
  let ret = 0;
449
+ const trackAddsMap = this.addHandlers.length > 0;
450
+ const indexAddsMap = this.indexDefinitions.size > 0;
451
+ const addedMap = [];
244
452
  for (const v of vs) {
245
453
  const id = await this.getID(v);
246
454
  if (this.mapData.has(id)) {
@@ -254,21 +462,42 @@ export class BCollection {
254
462
  case EBDuplicateIDStrategy.OVERWRITE:
255
463
  // replace the new value
256
464
  ret++;
465
+ if (indexAddsMap) {
466
+ await this.removeFromIndexes(this.mapData.get(id));
467
+ }
257
468
  this.mapData.set(id, v);
469
+ if (indexAddsMap) {
470
+ await this.addToIndexes(v);
471
+ }
472
+ if (trackAddsMap) {
473
+ addedMap.push(v);
474
+ }
258
475
  break;
259
476
  }
260
477
  }
261
478
  else {
262
479
  ret++;
263
480
  this.mapData.set(id, v);
481
+ if (indexAddsMap) {
482
+ await this.addToIndexes(v);
483
+ }
484
+ if (trackAddsMap) {
485
+ addedMap.push(v);
486
+ }
264
487
  }
265
488
  }
266
489
  if (ret > 0) {
267
490
  await this.doOnDirty();
268
491
  }
492
+ if (addedMap.length > 0) {
493
+ await this.fireAdd(addedMap);
494
+ }
269
495
  return ret;
270
496
  default:
271
497
  case EBMemStorageStrategy.ARRAY:
498
+ const trackAddsArray = this.addHandlers.length > 0;
499
+ const indexAddsArray = this.indexDefinitions.size > 0;
500
+ const addedArray = [];
272
501
  switch (this.collectionConfig.duplicateIDStrategy) {
273
502
  case EBDuplicateIDStrategy.ERROR:
274
503
  const haveIDs = new Set();
@@ -282,6 +511,12 @@ export class BCollection {
282
511
  }
283
512
  haveIDs.add(id);
284
513
  this.arrayData.push(v);
514
+ if (indexAddsArray) {
515
+ await this.addToIndexes(v);
516
+ }
517
+ if (trackAddsArray) {
518
+ addedArray.push(v);
519
+ }
285
520
  }
286
521
  break;
287
522
  case EBDuplicateIDStrategy.IGNORE:
@@ -294,6 +529,12 @@ export class BCollection {
294
529
  if (!seenIDs.has(id)) {
295
530
  seenIDs.add(id);
296
531
  this.arrayData.push(v);
532
+ if (indexAddsArray) {
533
+ await this.addToIndexes(v);
534
+ }
535
+ if (trackAddsArray) {
536
+ addedArray.push(v);
537
+ }
297
538
  }
298
539
  }
299
540
  break;
@@ -307,6 +548,9 @@ export class BCollection {
307
548
  const id = await this.getID(v);
308
549
  const existingIndex = indexMap.get(id);
309
550
  if (existingIndex !== undefined) {
551
+ if (indexAddsArray) {
552
+ await this.removeFromIndexes(this.arrayData[existingIndex]);
553
+ }
310
554
  this.arrayData[existingIndex] = v;
311
555
  }
312
556
  else {
@@ -314,12 +558,21 @@ export class BCollection {
314
558
  indexMap.set(id, this.arrayData.length);
315
559
  this.arrayData.push(v);
316
560
  }
561
+ if (indexAddsArray) {
562
+ await this.addToIndexes(v);
563
+ }
564
+ if (trackAddsArray) {
565
+ addedArray.push(v);
566
+ }
317
567
  }
318
568
  break;
319
569
  }
320
570
  if (vs.length > 0) {
321
571
  await this.doOnDirty();
322
572
  }
573
+ if (addedArray.length > 0) {
574
+ await this.fireAdd(addedArray);
575
+ }
323
576
  return vs.length;
324
577
  }
325
578
  });
@@ -328,6 +581,9 @@ export class BCollection {
328
581
  return this.runProtected(async () => {
329
582
  await this.checkLoaded();
330
583
  let ret = 0;
584
+ const trackUpdates = this.updateHandlers.length > 0;
585
+ const indexUpdates = this.indexDefinitions.size > 0;
586
+ const updated = [];
331
587
  switch (this.collectionConfig.memStorageStrategy) {
332
588
  case EBMemStorageStrategy.MAP:
333
589
  for (const [key, value] of this.mapData) {
@@ -335,7 +591,16 @@ export class BCollection {
335
591
  const replacement = await updater(value);
336
592
  if (replacement !== undefined) {
337
593
  ret++;
594
+ if (indexUpdates) {
595
+ await this.removeFromIndexes(value);
596
+ }
338
597
  this.mapData.set(key, replacement);
598
+ if (indexUpdates) {
599
+ await this.addToIndexes(replacement);
600
+ }
601
+ if (trackUpdates) {
602
+ updated.push([value, replacement]);
603
+ }
339
604
  }
340
605
  else {
341
606
  throw new Error("updater gave undefined");
@@ -347,10 +612,20 @@ export class BCollection {
347
612
  case EBMemStorageStrategy.ARRAY:
348
613
  for (let i = 0; i < this.arrayData.length; i++) {
349
614
  if (predicate(this.arrayData[i])) {
350
- const replacement = await updater(this.arrayData[i]);
615
+ const previous = this.arrayData[i];
616
+ const replacement = await updater(previous);
351
617
  if (replacement !== undefined) {
352
618
  ret++;
619
+ if (indexUpdates) {
620
+ await this.removeFromIndexes(previous);
621
+ }
353
622
  this.arrayData[i] = replacement;
623
+ if (indexUpdates) {
624
+ await this.addToIndexes(replacement);
625
+ }
626
+ if (trackUpdates) {
627
+ updated.push([previous, replacement]);
628
+ }
354
629
  }
355
630
  else {
356
631
  throw new Error("updater gave undefined");
@@ -362,6 +637,9 @@ export class BCollection {
362
637
  if (ret > 0) {
363
638
  await this.doOnDirty();
364
639
  }
640
+ if (updated.length > 0) {
641
+ await this.fireUpdate(updated);
642
+ }
365
643
  return ret;
366
644
  });
367
645
  }
@@ -400,6 +678,8 @@ export class BCollection {
400
678
  }
401
679
  this.loaded = true;
402
680
  this.dirty = false;
681
+ this.resolveIndexDefinitions();
682
+ await this.rebuildIndexRuntime();
403
683
  });
404
684
  }
405
685
  async unload() {
@@ -1 +1 @@
1
- {"version":3,"file":"basics.js","sourceRoot":"","sources":["../src/main/basics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,GAAG,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAI7F,OAAO,EACH,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GAQvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAmB,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzF,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAmB,KAAK,EAAE,CAAM,EAAE,EAAU,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3F,IAAW,SAGV;AAHD,WAAW,SAAS;IAChB,uGAAuG;IACvG,oCAAuB,CAAA;AAC3B,CAAC,EAHU,SAAS,KAAT,SAAS,QAGnB;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,yBAAyB,GAAuB;IACzD,qBAAqB,EAAE,uBAAuB,CAAC,QAAQ;IACvD,cAAc,EAAE,gBAAgB,CAAC,YAAY;IAC7C,mBAAmB,EAAE,qBAAqB,CAAC,SAAS;IACpD,kBAAkB,EAAE,oBAAoB,CAAC,GAAG;IAC5C,mBAAmB,EAAE,qBAAqB,CAAC,KAAK;IAChD,iBAAiB,EAAE,mBAAmB,CAAC,iBAAiB;CAC3D,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACrD,uBAAuB,EAAE,yBAAyB;CACrD,CAAC;AAEF,MAAM,OAAO,SAAS;IACF,MAAM,CAAmB;IACjC,WAAW,GAA6B,IAAI,GAAG,EAAE,CAAC;IACjD,EAAE,CAAa;IACf,gBAAgB,CAAsB;IAE/C,YAAmB,EAAc,EAAE,MAAyB,EAAE,gBAAqC;QAC/F,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,uBAAuB,CAAC;QAChD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC7C,CAAC;IAEM,aAAa,CAAC,UAAuB;QACxC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAEM,KAAK,CAAC,aAAa,CAAI,cAAsB,EAAE,gBAAqC;QACvF,OAAO,qBAAqB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,GAAG,GAA+B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,GAAG,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACxE,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAU,cAAsB,EAAE,gBAAqC;QAChG,OAAO,qBAAqB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CAAC,6CAA6C,cAAc,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,MAAM,GAAG,GAAmB,IAAI,WAAW,CAAI,IAAI,EAAE,EAAE,EAAE,cAAc,EAAE,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAClI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAI,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,cAAsB;QAC7C,OAAO,qBAAqB,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACxD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,cAAsB;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;QAC5C,OAAO,0BAA0B,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,IAAI,GAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAgB,CAAC;YACrE,IAAI,IAAI,EAAE,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC3C,CAAC;iBACI,CAAC;gBACF,MAAM,IAAI,KAAK,CAAC,sBAAsB,cAAc,EAAE,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CAEJ;AAED,MAAM,OAAO,WAAW;IACX,QAAQ,CAAY;IACpB,gBAAgB,CAAqB;IACrC,cAAc,CAAS;IACvB,YAAY,CAAS;IAEtB,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IACpC,SAAS,GAAa,EAAE,CAAC;IACzB,MAAM,GAAY,KAAK,CAAC;IACxB,KAAK,GAAY,KAAK,CAAC;IACvB,OAAO,GAAY,KAAK,CAAC;IAEjC,YAAmB,QAAmB,EAAE,YAAoB,EAAE,cAAsB,EAAE,gBAAoC;QACtH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,QAAQ,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;YAC1C,KAAK,oBAAoB,CAAC,GAAG;gBACzB,4DAA4D;gBAC5D,kFAAkF;gBAClF,IAAI;gBACJ,MAAM;YACV,QAAQ;YACR,KAAK,oBAAoB,CAAC,KAAK;gBAC3B,MAAM;QACd,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CAAI,EAAoB;QAC9C,OAAO,qBAAqB,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YACzD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,cAAc,oBAAoB,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,EAAE,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,WAAW;QACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,SAA6B;QAC1C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,OAAO,CAAC,SAAS,CAAC,CAAC;wBACf,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1D,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,OAAO,CAAC,SAAS,CAAC,CAAC;wBACf,yDAAyD;wBACzD,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;wBACrB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAA4B;QAC5C,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACtC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;4BACnB,GAAG,EAAE,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC7B,CAAC;oBACL,CAAC;oBACD,MAAM;gBACV,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;wBAClD,KAAK,uBAAuB,CAAC,QAAQ;4BACjC,IAAI,UAAU,GAAG,CAAC,CAAC;4BACnB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;gCACrE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gCACvC,IAAI,CAAC,SAAS,CAAC,IAAK,CAAC,EAAE,CAAC;oCACpB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,IAAK,CAAC;oCACnC,UAAU,EAAE,CAAC;gCACjB,CAAC;qCACI,CAAC;oCACF,GAAG,EAAE,CAAC;gCACV,CAAC;4BACL,CAAC;4BACD,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC;4BACnC,MAAM;wBACV,QAAQ;wBACR,KAAK,uBAAuB,CAAC,SAAS;4BAClC,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;4BACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC3D,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;4BACpC,MAAM;oBACd,CAAC;oBACD,MAAM;YACd,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,SAA4B;QACzC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;gBAC/D,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;YAC5D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,CAAI;QACpB,IAAI,MAAsB,CAAC;QAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAA+B,CAAC;YAC/G,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,gBAAgB,CAAC,KAAK,qBAAqB,CAAC,CAAC;YACzF,CAAC;YACD,MAAM,GAAG,KAAK,CAAC;QACnB,CAAC;aACI,CAAC;YACF,MAAM,GAAG,cAAc,CAAC;QAC5B,CAAC;QACD,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,QAAQ,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;gBAC3C,KAAK,gBAAgB,CAAC,UAAU;oBAC5B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;gBACzF,QAAQ;gBACR,KAAK,gBAAgB,CAAC,YAAY;oBAC9B,EAAE,GAAG,MAAM,EAAE,CAAC;oBACd,IAAI,MAAsB,CAAC;oBAC3B,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAA+B,CAAC;wBAC/G,IAAI,CAAC,KAAK,EAAE,CAAC;4BACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,gBAAgB,CAAC,KAAK,qBAAqB,CAAC,CAAC;wBACzF,CAAC;wBACD,MAAM,GAAG,KAAK,CAAC;oBACnB,CAAC;yBACI,CAAC;wBACF,MAAM,GAAG,cAAc,CAAC;oBAC5B,CAAC;oBACD,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACpB,MAAM;YACd,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAO;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;wBACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;4BACvB,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;gCAChD,KAAK,qBAAqB,CAAC,KAAK;oCAC5B,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gCAC1C,KAAK,qBAAqB,CAAC,MAAM;oCAC7B,uBAAuB;oCACvB,MAAM;gCACV,QAAQ;gCACR,KAAK,qBAAqB,CAAC,SAAS;oCAChC,wBAAwB;oCACxB,GAAG,EAAE,CAAC;oCACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oCACxB,MAAM;4BACd,CAAC;wBACL,CAAC;6BACI,CAAC;4BACF,GAAG,EAAE,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC5B,CAAC;oBACL,CAAC;oBACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;wBACV,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3B,CAAC;oBACD,OAAO,GAAG,CAAC;gBACf,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;wBAChD,KAAK,qBAAqB,CAAC,KAAK;4BAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;4BAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gCAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrC,CAAC;4BACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gCACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oCAClB,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;gCAC1C,CAAC;gCACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gCAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC3B,CAAC;4BACD,MAAM;wBACV,KAAK,qBAAqB,CAAC,MAAM;4BAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;4BAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gCAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;4BACrC,CAAC;4BACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gCACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;oCACnB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oCAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAC3B,CAAC;4BACL,CAAC;4BACD,MAAM;wBACV,QAAQ;wBACR,KAAK,qBAAqB,CAAC,SAAS;4BAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;4BACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gCAC7C,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC1D,CAAC;4BACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gCACjB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gCAEvC,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oCAC9B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gCACtC,CAAC;qCACI,CAAC;oCACF,kEAAkE;oCAClE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oCACxC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAC3B,CAAC;4BACL,CAAC;4BACD,MAAM;oBACd,CAAC;oBACD,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC3B,CAAC;oBACD,OAAO,EAAE,CAAC,MAAM,CAAC;YACzB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAA4B,EAAE,OAA6B;QAC3E,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBACtC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;4BACnB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;4BACzC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gCAC5B,GAAG,EAAE,CAAC;gCACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;4BACvC,CAAC;iCACI,CAAC;gCACF,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;4BAC9C,CAAC;wBACL,CAAC;oBACL,CAAC;oBACD,MAAM;gBACV,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7C,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;4BAChC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,CAAC;4BACtD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gCAC5B,GAAG,EAAE,CAAC;gCACN,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;4BACpC,CAAC;iCACI,CAAC;gCACF,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;4BAC9C,CAAC;wBACL,CAAC;oBACL,CAAC;oBACD,MAAM;YACd,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,SAAS;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,IAAI,mBAAmB,CAAC,iBAAiB,EAAE,CAAC;YACnF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;oBAC/C,KAAK,oBAAoB,CAAC,GAAG;wBACzB,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;wBACrE,MAAM;oBACV,QAAQ;oBACR,KAAK,oBAAoB,CAAC,KAAK;wBAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBACzE,MAAM;gBACd,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACvB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,MAAM;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAI,IAAI,CAAC,YAAY,CAAC,CAAC;oBACxE,MAAM;gBACV,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAI,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC5E,MAAM;YACd,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,MAAM;QACf,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,QAAQ,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;oBAChD,KAAK,qBAAqB,CAAC,KAAK;wBAC5B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;wBACnB,MAAM;oBACV,KAAK,qBAAqB,CAAC,KAAK;wBAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;oBAC1D,QAAQ;oBACR,KAAK,qBAAqB,CAAC,MAAM;wBAC7B,aAAa;wBACb,MAAM;gBAEd,CAAC;YACL,CAAC;YACD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,GAAG;oBACzB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;oBACzB,MAAM;gBACV,QAAQ;gBACR,KAAK,oBAAoB,CAAC,KAAK;oBAC3B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;oBACpB,MAAM;YACd,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;CAEJ"}
1
+ {"version":3,"file":"basics.js","sourceRoot":"","sources":["../src/main/basics.ts"],"names":[],"mappings":"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"}
package/dist/fileio.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IBDatabase, IBDatabaseConfig, IBFunctionRegistry } from "./base.js";
1
+ import { IBDatabase, IBDatabaseConfig, IBFunctionRegistry, IBSnapshotOptions } from "./base.js";
2
2
  import { BCollection, BDatabase } from "./basics.js";
3
3
  export declare class IODatabase {
4
4
  readonly basePath: string;
@@ -16,6 +16,8 @@ export declare class IODatabase {
16
16
  private writeData;
17
17
  writeArrayData<T = any>(collectionID: string, arrayData: T[]): Promise<void>;
18
18
  writeMapData<T = any>(collectionID: string, mapData: Map<string, T>): Promise<void>;
19
+ snapshot(targetDir: string, options?: IBSnapshotOptions): Promise<string>;
20
+ private pruneSnapshots;
19
21
  }
20
22
  /**
21
23
  * Opens the database at `basePath`, creating it if it doesn't exist yet.
package/dist/fileio.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { BCollection, BDatabase, DEFAULT_DATABASE_CONFIG, } from "./basics.js";
2
2
  import { uuidv7 } from "uuidv7";
3
- import { access, constants, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
3
+ import { access, chmod, constants, cp, mkdir, readdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
5
  const DB_META_FILE_NAME = "dbmeta.json";
6
6
  const DB_COLLECTION_FOLDER_SUFFIX = "_data";
@@ -8,6 +8,23 @@ const DB_COLLECTION_META_FILE_SUFFIX = ".json";
8
8
  const DB_COLLECTION_DATA_FILE = "data.json";
9
9
  const RESTRICTED_FILE_MODE = 0o600;
10
10
  const RESTRICTED_DIR_MODE = 0o700;
11
+ const SNAPSHOT_VERSION_PATTERN = /^\d{8}T\d{9}Z(_[A-Za-z0-9_-]+)?$/;
12
+ const SNAPSHOT_LABEL_PATTERN = /^[A-Za-z0-9_-]+$/;
13
+ function snapshotVersionName(label) {
14
+ const timestamp = new Date().toISOString().replace(/[-:.]/g, "");
15
+ return label ? `${timestamp}_${label}` : timestamp;
16
+ }
17
+ // re-applies the restricted mode explicitly rather than relying on fs.cp() to have preserved it
18
+ async function restrictPermissions(path) {
19
+ const info = await stat(path);
20
+ if (info.isDirectory()) {
21
+ await chmod(path, RESTRICTED_DIR_MODE);
22
+ await Promise.all((await readdir(path)).map(entry => restrictPermissions(join(path, entry))));
23
+ }
24
+ else {
25
+ await chmod(path, RESTRICTED_FILE_MODE);
26
+ }
27
+ }
11
28
  async function atomicWriteFile(targetPath, data) {
12
29
  const tempPath = `${targetPath}.${uuidv7()}.tmp`;
13
30
  await writeFile(tempPath, data, { encoding: "utf-8", mode: RESTRICTED_FILE_MODE });
@@ -114,6 +131,38 @@ export class IODatabase {
114
131
  async writeMapData(collectionID, mapData) {
115
132
  return this.writeData(collectionID, Object.fromEntries(mapData));
116
133
  }
134
+ async snapshot(targetDir, options) {
135
+ if (options?.keepLast !== undefined && options.keepLast < 0) {
136
+ throw new Error(`keepLast must not be negative, got ${options.keepLast}`);
137
+ }
138
+ if (options?.label !== undefined && !SNAPSHOT_LABEL_PATTERN.test(options.label)) {
139
+ throw new Error(`snapshot label "${options.label}" must only contain letters, digits, "-" or "_"`);
140
+ }
141
+ await mkdir(targetDir, { recursive: true, mode: RESTRICTED_DIR_MODE });
142
+ const versionPath = join(targetDir, snapshotVersionName(options?.label));
143
+ try {
144
+ await cp(this.basePath, versionPath, { recursive: true });
145
+ await restrictPermissions(versionPath);
146
+ }
147
+ catch (err) {
148
+ await rm(versionPath, { recursive: true, force: true });
149
+ throw err;
150
+ }
151
+ if (options?.keepLast !== undefined) {
152
+ await this.pruneSnapshots(targetDir, options.keepLast);
153
+ }
154
+ return versionPath;
155
+ }
156
+ // only ever deletes folders matching our own naming scheme, never anything else the caller keeps in targetDir
157
+ async pruneSnapshots(targetDir, keepLast) {
158
+ const entries = await readdir(targetDir, { withFileTypes: true });
159
+ const versions = entries
160
+ .filter(e => e.isDirectory() && SNAPSHOT_VERSION_PATTERN.test(e.name))
161
+ .map(e => e.name)
162
+ .sort();
163
+ const toDelete = versions.slice(0, Math.max(0, versions.length - (keepLast + 1)));
164
+ await Promise.all(toDelete.map(name => rm(join(targetDir, name), { recursive: true, force: true })));
165
+ }
117
166
  }
118
167
  /**
119
168
  * Opens the database at `basePath`, creating it if it doesn't exist yet.