@sv443-network/coreutils 3.5.1 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @sv443-network/coreutils
2
2
 
3
+ ## 3.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f8bfd50: Added `stringifyData` option to `DataStoreSerializer` for preventing any stringification when serializing with the `stringify` parameter set to `false` too.
8
+ - 9238110: Added optional `catchUpEvents` option to `NanoEmitter` and `NanoEmitterOptions`. When provided with a list of event names, the emitter remembers the last arguments of each listed event. Any listener attached via `on()` or `once()` after such an event has already fired will be immediately called / resolved with the cached arguments. Also added the protected `emitEvent()` method for subclasses - it behaves identically to `this.events.emit()` but additionally updates the catch-up cache and should thus be preferred over `this.events.emit()`.
9
+ - 54ad8b8: Added function `getterifyObj()` to turn all own, enumerable properties of an object into getters.
10
+ This is useful when logging large objects to the console.
11
+ - 7b8204a: Added optional `TFn` generic parameter to `ValueGen` and `StringGen` types, and a matching rest `...args` parameter to `consumeGen()` and `consumeStringGen()`, enabling parametrized function variants with full type safety.
12
+
3
13
  ## 3.5.1
4
14
 
5
15
  ### Patch Changes
package/README.md CHANGED
@@ -82,6 +82,7 @@ Intended to be used in conjunction with [`@sv443-network/userutils`](https://git
82
82
  - 🔷 [`type ListLike`](./docs.md#type-listlike) - Any value with a quantifiable `length`, `count` or `size` property
83
83
  - 🟣 [`function pauseFor()`](./docs.md#function-pausefor) - Pauses async execution for the given amount of time
84
84
  - 🟣 [`function pureObj()`](./docs.md#function-pureobj) - Applies an object's props to a null object (object without prototype chain) or just returns a new null object
85
+ - 🟣 [`function getterifyObj()`](./docs.md#function-getterifyobj) - Turns an object's props into getters
85
86
  - 🟣 [`function setImmediateInterval()`](./docs.md#function-setimmediateinterval) - Like `setInterval()`, but instantly calls the callback and supports passing an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)
86
87
  - 🟣 [`function setImmediateTimeoutLoop()`](./docs.md#function-setimmediatetimeoutloop) - Like a recursive `setTimeout()` loop, but instantly calls the callback and supports passing an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)
87
88
  - 🟣 [`function createRecurringTask()`](./docs.md#function-createrecurringtask) - Similar to `setImmediateTimeoutLoop()`, but with many more ways of controlling execution.
@@ -67,6 +67,7 @@ __export(lib_exports, {
67
67
  formatNumber: () => formatNumber,
68
68
  getCallStack: () => getCallStack,
69
69
  getListLength: () => getListLength,
70
+ getterifyObj: () => getterifyObj,
70
71
  hexToRgb: () => hexToRgb,
71
72
  insertValues: () => insertValues,
72
73
  joinArrayReadable: () => joinArrayReadable,
@@ -379,12 +380,12 @@ var NetworkError = class extends DatedError {
379
380
  };
380
381
 
381
382
  // lib/misc.ts
382
- async function consumeGen(valGen) {
383
- return await (typeof valGen === "function" ? valGen() : valGen);
383
+ async function consumeGen(valGen, ...args) {
384
+ return await (typeof valGen === "function" ? valGen(...args) : valGen);
384
385
  }
385
- async function consumeStringGen(strGen) {
386
+ async function consumeStringGen(strGen, ...args) {
386
387
  return typeof strGen === "string" ? strGen : String(
387
- typeof strGen === "function" ? await strGen() : strGen
388
+ typeof strGen === "function" ? await strGen(...args) : strGen
388
389
  );
389
390
  }
390
391
  async function fetchAdvanced(input, options = {}) {
@@ -423,6 +424,17 @@ function pauseFor(time, signal, rejectOnAbort = false) {
423
424
  function pureObj(obj) {
424
425
  return Object.assign(/* @__PURE__ */ Object.create(null), obj ?? {});
425
426
  }
427
+ function getterifyObj(obj, asCopy = false) {
428
+ const newObj = {};
429
+ for (const key in obj) {
430
+ Object.defineProperty(newObj, key, {
431
+ get: () => obj[key],
432
+ enumerable: true,
433
+ configurable: true
434
+ });
435
+ }
436
+ return asCopy ? structuredClone(newObj) : newObj;
437
+ }
426
438
  function setImmediateInterval(callback, interval, signal) {
427
439
  let intervalId;
428
440
  const cleanup = () => clearInterval(intervalId);
@@ -781,6 +793,8 @@ var NanoEmitter = class {
781
793
  events = createNanoEvents();
782
794
  eventUnsubscribes = [];
783
795
  emitterOptions;
796
+ /** Stores the last arguments for each event listed in `catchUpEvents` */
797
+ catchUpMemory = /* @__PURE__ */ new Map();
784
798
  /** Creates a new instance of NanoEmitter - a lightweight event emitter with helper methods and a strongly typed event map */
785
799
  constructor(options = {}) {
786
800
  this.emitterOptions = {
@@ -788,6 +802,18 @@ var NanoEmitter = class {
788
802
  ...options
789
803
  };
790
804
  }
805
+ //#region emitEvent
806
+ /**
807
+ * Emits an event on this instance, bypassing the `publicEmit` guard.
808
+ * Prefer this over `this.events.emit()` in subclasses — it updates catch-up memory
809
+ * for any event listed in `catchUpEvents` so late listeners can still receive the last value.
810
+ */
811
+ emitEvent(event, ...args) {
812
+ var _a;
813
+ if ((_a = this.emitterOptions.catchUpEvents) == null ? void 0 : _a.includes(event))
814
+ this.catchUpMemory.set(event, args);
815
+ this.events.emit(event, ...args);
816
+ }
791
817
  //#region on
792
818
  /**
793
819
  * Subscribes to an event and calls the callback when it's emitted.
@@ -820,6 +846,9 @@ var NanoEmitter = class {
820
846
  };
821
847
  unsub = this.events.on(event, cb);
822
848
  this.eventUnsubscribes.push(unsub);
849
+ const memory = this.catchUpMemory.get(event);
850
+ if (memory)
851
+ cb(...memory);
823
852
  return unsubProxy;
824
853
  }
825
854
  //#region once
@@ -842,6 +871,12 @@ var NanoEmitter = class {
842
871
  * ```
843
872
  */
844
873
  once(event, cb) {
874
+ const memory = this.catchUpMemory.get(event);
875
+ if (memory) {
876
+ const args = memory;
877
+ cb == null ? void 0 : cb(...args);
878
+ return Promise.resolve(args);
879
+ }
845
880
  return new Promise((resolve) => {
846
881
  let unsub;
847
882
  const onceProxy = ((...args) => {
@@ -943,7 +978,7 @@ var NanoEmitter = class {
943
978
  */
944
979
  emit(event, ...args) {
945
980
  if (this.emitterOptions.publicEmit) {
946
- this.events.emit(event, ...args);
981
+ this.emitEvent(event, ...args);
947
982
  return true;
948
983
  }
949
984
  return false;
@@ -1066,7 +1101,7 @@ var DataStore = class extends NanoEmitter {
1066
1101
  if (typeof storedDataRaw !== "string" && typeof storedDataRaw !== "object" || storedDataRaw === null || isNaN(storedFmtVer)) {
1067
1102
  await this.saveDefaultData(false);
1068
1103
  const data = this.engine.deepCopy(this.defaultData);
1069
- this.events.emit("loadData", data);
1104
+ this.emitEvent("loadData", data);
1070
1105
  return data;
1071
1106
  }
1072
1107
  const storedData = storedDataRaw ?? JSON.stringify(this.defaultData);
@@ -1076,12 +1111,12 @@ var DataStore = class extends NanoEmitter {
1076
1111
  if (storedFmtVer < this.formatVersion && this.migrations)
1077
1112
  parsed = await this.runMigrations(parsed, storedFmtVer);
1078
1113
  const result = this.memoryCache ? this.cachedData = this.engine.deepCopy(parsed) : this.engine.deepCopy(parsed);
1079
- this.events.emit("loadData", result);
1114
+ this.emitEvent("loadData", result);
1080
1115
  return result;
1081
1116
  } catch (err) {
1082
1117
  const error = err instanceof Error ? err : new Error(String(err));
1083
1118
  console.warn("Error while parsing JSON data, resetting it to the default value.", err);
1084
- this.events.emit("error", error);
1119
+ this.emitEvent("error", error);
1085
1120
  await this.saveDefaultData();
1086
1121
  return this.defaultData;
1087
1122
  }
@@ -1103,7 +1138,7 @@ var DataStore = class extends NanoEmitter {
1103
1138
  const dataCopy = this.engine.deepCopy(data);
1104
1139
  if (this.memoryCache) {
1105
1140
  this.cachedData = data;
1106
- this.events.emit("updateDataSync", dataCopy);
1141
+ this.emitEvent("updateDataSync", dataCopy);
1107
1142
  }
1108
1143
  return new Promise(async (resolve) => {
1109
1144
  const results = await Promise.allSettled([
@@ -1112,11 +1147,11 @@ var DataStore = class extends NanoEmitter {
1112
1147
  this.engine.setValue(`${this.keyPrefix}${this.id}-enf`, this.compressionFormat)
1113
1148
  ]);
1114
1149
  if (results.every((r) => r.status === "fulfilled"))
1115
- this.events.emit("updateData", dataCopy);
1150
+ this.emitEvent("updateData", dataCopy);
1116
1151
  else {
1117
1152
  const error = new Error("Error while saving data to persistent storage: " + results.map((r) => r.status === "rejected" ? r.reason : null).filter(Boolean).join("; "));
1118
1153
  console.error(error);
1119
- this.events.emit("error", error);
1154
+ this.emitEvent("error", error);
1120
1155
  }
1121
1156
  resolve();
1122
1157
  });
@@ -1135,11 +1170,11 @@ var DataStore = class extends NanoEmitter {
1135
1170
  this.engine.setValue(`${this.keyPrefix}${this.id}-enf`, this.compressionFormat)
1136
1171
  ]);
1137
1172
  if (results.every((r) => r.status === "fulfilled"))
1138
- emitEvent && this.events.emit("setDefaultData", this.defaultData);
1173
+ emitEvent && this.emitEvent("setDefaultData", this.defaultData);
1139
1174
  else {
1140
1175
  const error = new Error("Error while saving default data to persistent storage: " + results.map((r) => r.status === "rejected" ? r.reason : null).filter(Boolean).join("; "));
1141
1176
  console.error(error);
1142
- this.events.emit("error", error);
1177
+ this.emitEvent("error", error);
1143
1178
  }
1144
1179
  }
1145
1180
  //#region deleteData
@@ -1156,7 +1191,7 @@ var DataStore = class extends NanoEmitter {
1156
1191
  this.engine.deleteValue(`${this.keyPrefix}${this.id}-enf`)
1157
1192
  ]);
1158
1193
  await ((_b = (_a = this.engine).deleteStorage) == null ? void 0 : _b.call(_a));
1159
- this.events.emit("deleteData");
1194
+ this.emitEvent("deleteData");
1160
1195
  }
1161
1196
  //#region encodingEnabled
1162
1197
  /** Returns whether encoding and decoding are enabled for this DataStore instance */
@@ -1186,11 +1221,11 @@ var DataStore = class extends NanoEmitter {
1186
1221
  newData = migRes instanceof Promise ? await migRes : migRes;
1187
1222
  lastFmtVer = oldFmtVer = ver;
1188
1223
  const isFinal = ver >= this.formatVersion || i === sortedMigrations.length - 1;
1189
- this.events.emit("migrateData", ver, newData, isFinal);
1224
+ this.emitEvent("migrateData", ver, newData, isFinal);
1190
1225
  } catch (err) {
1191
1226
  const migError = new MigrationError(`Error while running migration function for format version '${fmtVer}'`, { cause: err });
1192
- this.events.emit("migrationError", ver, migError);
1193
- this.events.emit("error", migError);
1227
+ this.emitEvent("migrationError", ver, migError);
1228
+ this.emitEvent("error", migError);
1194
1229
  if (!resetOnError)
1195
1230
  throw migError;
1196
1231
  await this.saveDefaultData();
@@ -1204,7 +1239,7 @@ var DataStore = class extends NanoEmitter {
1204
1239
  this.engine.setValue(`${this.keyPrefix}${this.id}-enf`, this.compressionFormat)
1205
1240
  ]);
1206
1241
  const result = this.memoryCache ? this.cachedData = this.engine.deepCopy(newData) : this.engine.deepCopy(newData);
1207
- this.events.emit("updateData", result);
1242
+ this.emitEvent("updateData", result);
1208
1243
  return result;
1209
1244
  }
1210
1245
  //#region migrateId
@@ -1234,7 +1269,7 @@ var DataStore = class extends NanoEmitter {
1234
1269
  this.engine.deleteValue(`${this.keyPrefix}${id}-ver`),
1235
1270
  this.engine.deleteValue(`${this.keyPrefix}${id}-enf`)
1236
1271
  ]);
1237
- this.events.emit("migrateId", id, this.id);
1272
+ this.emitEvent("migrateId", id, this.id);
1238
1273
  }));
1239
1274
  }
1240
1275
  };
@@ -1477,15 +1512,20 @@ var DataStoreSerializer = class _DataStoreSerializer {
1477
1512
  addChecksum: true,
1478
1513
  ensureIntegrity: true,
1479
1514
  remapIds: {},
1515
+ stringifyData: true,
1480
1516
  ...options
1481
1517
  };
1482
1518
  }
1483
1519
  /**
1484
- * Calculates the checksum of a string. Uses {@linkcode computeHash()} with SHA-256 and digests as a hex string by default.
1520
+ * Calculates the checksum of a string or {@linkcode DataStoreData} object. Uses {@linkcode computeHash()} with SHA-256 and digests as a hex string by default.
1485
1521
  * Override this in a subclass if a custom checksum method is needed.
1486
1522
  */
1487
1523
  async calcChecksum(input) {
1488
- return computeHash(input, "SHA-256");
1524
+ try {
1525
+ return computeHash(typeof input === "string" ? input : JSON.stringify(input), "SHA-256");
1526
+ } catch (err) {
1527
+ throw new Error(`Failed to calculate checksum: ${err.message}`, { cause: err });
1528
+ }
1489
1529
  }
1490
1530
  /**
1491
1531
  * Serializes only a subset of the data stores into a string.
@@ -1500,7 +1540,7 @@ var DataStoreSerializer = class _DataStoreSerializer {
1500
1540
  for (const storeInst of filteredStores) {
1501
1541
  const encoded = Boolean(useEncoding && storeInst.encodingEnabled() && ((_a = storeInst.encodeData) == null ? void 0 : _a[1]));
1502
1542
  const rawData = storeInst.memoryCache ? storeInst.getData() : await storeInst.loadData();
1503
- const data = encoded ? await storeInst.encodeData[1](JSON.stringify(rawData)) : JSON.stringify(rawData);
1543
+ const data = encoded ? await storeInst.encodeData[1](JSON.stringify(rawData)) : this.options.stringifyData ? JSON.stringify(rawData) : rawData;
1504
1544
  serData.push({
1505
1545
  id: storeInst.id,
1506
1546
  data,
@@ -1546,11 +1586,11 @@ var DataStoreSerializer = class _DataStoreSerializer {
1546
1586
  Expected: ${storeData.checksum}
1547
1587
  Has: ${checksum}`);
1548
1588
  }
1549
- const decodedData = storeData.encoded && storeInst.encodingEnabled() ? await storeInst.decodeData[1](storeData.data) : storeData.data;
1589
+ const decodedData = storeData.encoded && storeInst.encodingEnabled() ? await storeInst.decodeData[1](typeof storeData.data === "string" ? storeData.data : JSON.stringify(storeData.data)) : storeData.data;
1550
1590
  if (storeData.formatVersion && !isNaN(Number(storeData.formatVersion)) && Number(storeData.formatVersion) < storeInst.formatVersion)
1551
- await storeInst.runMigrations(JSON.parse(decodedData), Number(storeData.formatVersion), false);
1591
+ await storeInst.runMigrations(typeof decodedData === "string" ? JSON.parse(decodedData) : decodedData, Number(storeData.formatVersion), false);
1552
1592
  else
1553
- await storeInst.setData(JSON.parse(decodedData));
1593
+ await storeInst.setData(typeof decodedData === "string" ? JSON.parse(decodedData) : decodedData);
1554
1594
  }
1555
1595
  }
1556
1596
  /**
@@ -1619,6 +1659,8 @@ var Debouncer = class extends NanoEmitter {
1619
1659
  this.timeout = timeout;
1620
1660
  this.type = type;
1621
1661
  }
1662
+ timeout;
1663
+ type;
1622
1664
  /** All registered listener functions and the time they were attached */
1623
1665
  listeners = [];
1624
1666
  /** The currently active timeout */
@@ -1646,7 +1688,7 @@ var Debouncer = class extends NanoEmitter {
1646
1688
  //#region timeout
1647
1689
  /** Sets the timeout for the debouncer */
1648
1690
  setTimeout(timeout) {
1649
- this.events.emit("change", this.timeout = timeout, this.type);
1691
+ this.emitEvent("change", this.timeout = timeout, this.type);
1650
1692
  }
1651
1693
  /** Returns the current timeout */
1652
1694
  getTimeout() {
@@ -1659,7 +1701,7 @@ var Debouncer = class extends NanoEmitter {
1659
1701
  //#region type
1660
1702
  /** Sets the edge type for the debouncer */
1661
1703
  setType(type) {
1662
- this.events.emit("change", this.timeout, this.type = type);
1704
+ this.emitEvent("change", this.timeout, this.type = type);
1663
1705
  }
1664
1706
  /** Returns the current edge type */
1665
1707
  getType() {
@@ -1670,7 +1712,7 @@ var Debouncer = class extends NanoEmitter {
1670
1712
  call(...args) {
1671
1713
  const cl = (...a) => {
1672
1714
  this.queuedCall = void 0;
1673
- this.events.emit("call", ...a);
1715
+ this.emitEvent("call", ...a);
1674
1716
  this.listeners.forEach((l) => l.call(this, ...a));
1675
1717
  };
1676
1718
  const setRepeatTimeout = () => {
@@ -1,7 +1,7 @@
1
- "use strict";var le=Object.create;var I=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var fe=(r,e)=>{for(var t in e)I(r,t,{get:e[t],enumerable:!0})},G=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of de(e))!pe.call(r,n)&&n!==t&&I(r,n,{get:()=>e[n],enumerable:!(i=ce(e,n))||i.enumerable});return r};var U=(r,e,t)=>(t=r!=null?le(me(r)):{},G(e||!r||!r.__esModule?I(t,"default",{value:r,enumerable:!0}):t,r)),he=r=>G(I({},"__esModule",{value:!0}),r);var _e={};fe(_e,{BrowserStorageEngine:()=>W,ChecksumMismatchError:()=>F,CustomError:()=>O,DataStore:()=>_,DataStoreEngine:()=>$,DataStoreSerializer:()=>Q,DatedError:()=>b,Debouncer:()=>z,FileStorageEngine:()=>H,MigrationError:()=>M,NanoEmitter:()=>E,NetworkError:()=>C,ScriptContextError:()=>x,ValidationError:()=>J,abtoa:()=>te,atoab:()=>re,autoPlural:()=>Re,bitSetHas:()=>ge,capitalize:()=>ze,clamp:()=>P,compress:()=>B,computeHash:()=>q,consumeGen:()=>Ee,consumeStringGen:()=>Oe,createProgressBar:()=>Ue,createRecurringTask:()=>Ie,createTable:()=>qe,darkenColor:()=>X,debounce:()=>Je,decompress:()=>K,defaultPbChars:()=>ie,defaultTableLineCharset:()=>ne,digitCount:()=>be,fetchAdvanced:()=>Ae,formatNumber:()=>ye,getCallStack:()=>$e,getListLength:()=>Ne,hexToRgb:()=>Y,insertValues:()=>Le,joinArrayReadable:()=>je,lightenColor:()=>xe,mapRange:()=>R,overflowVal:()=>Te,pauseFor:()=>Ve,pureObj:()=>ke,randRange:()=>k,randomId:()=>Pe,randomItem:()=>Se,randomItemIndex:()=>j,randomizeArray:()=>ve,rgbToHex:()=>ee,roundFixed:()=>L,scheduleExit:()=>Ce,secsToTimeStr:()=>Be,setImmediateInterval:()=>Fe,setImmediateTimeoutLoop:()=>Me,takeRandomItem:()=>we,takeRandomItemIndex:()=>Z,truncStr:()=>Ke,valsWithin:()=>De});module.exports=he(_e);function ge(r,e){return(r&e)===e}function P(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function be(r,e=!0){if(r=Number(["string","number"].includes(typeof r)?r:String(r)),typeof r=="number"&&isNaN(r))return NaN;let[t,i]=r.toString().split("."),n=t==="0"?1:Math.floor(Math.log10(Math.abs(Number(t)))+1),o=e&&i?i.length:0;return n+o}function ye(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function R(r,e,t,i,n){return(typeof i>"u"||typeof n>"u")&&(n=t,t=e,i=e=0),Number(e)===0&&Number(i)===0?r*(n/t):(r-e)*((n-i)/(t-e))+i}function Te(r,e,t){let i=typeof t=="number"?e:0;if(t=typeof t=="number"?t:e,i>t)throw new RangeError(`Parameter "min" can't be bigger than "max"`);if(isNaN(r)||isNaN(i)||isNaN(t)||!isFinite(r)||!isFinite(i)||!isFinite(t))return NaN;if(r>=i&&r<=t)return r;let n=t-i+1;return((r-i)%n+n)%n+i}function k(...r){let e,t,i=!1;if(typeof r[0]=="number"&&typeof r[1]=="number")[e,t]=r;else if(typeof r[0]=="number"&&typeof r[1]!="number")e=0,[t]=r;else throw new TypeError(`Wrong parameter(s) provided - expected (number, boolean|undefined) or (number, number, boolean|undefined) but got (${r.map(n=>typeof n).join(", ")}) instead`);if(typeof r[2]=="boolean"?i=r[2]:typeof r[1]=="boolean"&&(i=r[1]),e=Number(e),t=Number(t),isNaN(e)||isNaN(t))return NaN;if(e>t)throw new TypeError(`Parameter "min" can't be bigger than "max"`);if(i){let n=new Uint8Array(1);return crypto.getRandomValues(n),Number(Array.from(n,o=>Math.round(R(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function L(r,e){let t=10**e;return Math.round(r*t)/t}function De(r,e,t=1,i=.5){return Math.abs(L(r,t)-L(e,t))<=i}function Se(r){return j(r)[0]}function j(r){if(r.length===0)return[void 0,void 0];let e=k(r.length-1);return[r[e],e]}function ve(r){let e=[...r];if(r.length===0)return e;for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}return e}function we(r){var e;return(e=Z(r))==null?void 0:e[0]}function Z(r){let[e,t]=j(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function X(r,e,t=!1){var c;r=r.trim();let i=(m,p,h,l)=>(m=Math.max(0,Math.min(255,m-m*l/100)),p=Math.max(0,Math.min(255,p-p*l/100)),h=Math.max(0,Math.min(255,h-h*l/100)),[m,p,h]),n,o,a,s,u=r.match(/^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/);if(u)[n,o,a,s]=Y(r);else if(r.startsWith("rgb")){let m=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!m)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=m}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?ee(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function Y(r){r=(r.startsWith("#")?r.slice(1):r).trim();let e=r.length===8||r.length===4?parseInt(r.slice(-(r.length/4)),16)/(r.length===8?255:15):void 0;isNaN(Number(e))||(r=r.slice(0,-(r.length/4))),(r.length===3||r.length===4)&&(r=r.split("").map(a=>a+a).join(""));let t=parseInt(r,16),i=t>>16&255,n=t>>8&255,o=t&255;return[P(i,0,255),P(n,0,255),P(o,0,255),typeof e=="number"?P(e,0,1):void 0]}function xe(r,e,t=!1){return X(r,e*-1,t)}function ee(r,e,t,i,n=!0,o=!1){let a=s=>P(Math.round(s),0,255).toString(16).padStart(2,"0")[o?"toUpperCase":"toLowerCase"]();return`${n?"#":""}${a(r)}${a(e)}${a(t)}${i?a(i*255):""}`}function te(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function re(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function B(r,e,t="string"){let i=r instanceof Uint8Array?r:new TextEncoder().encode((r==null?void 0:r.toString())??String(r)),n=new CompressionStream(e),o=n.writable.getWriter();o.write(i),o.close();let a=new Uint8Array(await new Response(n.readable).arrayBuffer());return t==="arrayBuffer"?a:te(a)}async function K(r,e,t="string"){let i=r instanceof Uint8Array?r:re((r==null?void 0:r.toString())??String(r)),n=new DecompressionStream(e),o=n.writable.getWriter();o.write(i),o.close();let a=new Uint8Array(await new Response(n.readable).arrayBuffer());return t==="arrayBuffer"?a:new TextDecoder().decode(a)}async function q(r,e="SHA-256"){let t;typeof r=="string"?t=new TextEncoder().encode(r):t=r;let i=await crypto.subtle.digest(e,t);return Array.from(new Uint8Array(i)).map(a=>a.toString(16).padStart(2,"0")).join("")}function Pe(r=16,e=16,t=!1,i=!0){if(r<1)throw new RangeError("The length argument must be at least 1");if(e<2||e>36)throw new RangeError("The radix argument must be between 2 and 36");let n=[],o=i?[0,1]:[0];if(t){let a=new Uint8Array(r);crypto.getRandomValues(a),n=Array.from(a,s=>R(s,0,255,0,e).toString(e).substring(0,1))}else n=Array.from({length:r},()=>Math.floor(Math.random()*e).toString(e));return n.some(a=>/[a-zA-Z]/.test(a))?n.map(a=>o[k(0,o.length-1,t)]===1?a.toUpperCase():a).join(""):n.join("")}var b=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},F=class extends b{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},O=class extends b{constructor(e,t,i){super(t,i),this.name=e}},M=class extends b{constructor(e,t){super(e,t),this.name="MigrationError"}},J=class extends b{constructor(e,t){super(e,t),this.name="ValidationError"}},x=class extends b{constructor(e,t){super(e,t),this.name="ScriptContextError"}},C=class extends b{constructor(e,t){super(e,t),this.name="NetworkError"}};async function Ee(r){return await(typeof r=="function"?r():r)}async function Oe(r){return typeof r=="string"?r:String(typeof r=="function"?await r():r)}async function Ae(r,e={}){let{timeout:t=1e4,signal:i,...n}=e,o=new AbortController;i==null||i.addEventListener("abort",()=>o.abort());let a={},s;t>=0&&(s=setTimeout(()=>o.abort(),t),a={signal:o.signal});try{let u=await fetch(r,{...n,...a});return typeof s<"u"&&clearTimeout(s),u}catch(u){throw typeof s<"u"&&clearTimeout(s),new C("Error while calling fetch",{cause:u})}}function Ne(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function Ve(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new O("AbortError","The pause was aborted")):i()})})}function ke(r){return Object.assign(Object.create(null),r??{})}function Fe(r,e,t){let i,n=()=>clearInterval(i),o=()=>{if(t!=null&&t.aborted)return n();r()};t==null||t.addEventListener("abort",n),o(),i=setInterval(o,e)}function Me(r,e,t){let i,n=()=>clearTimeout(i),o=async()=>{if(t!=null&&t.aborted)return n();await r(),i=setTimeout(o,e)};t==null||t.addEventListener("abort",n),o()}function Ce(r=0,e=0){if(e<0)throw new TypeError("Timeout must be a non-negative number");let t;if(typeof process<"u"&&"exit"in process&&typeof process.exit=="function")t=()=>process.exit(r);else if(typeof Deno<"u"&&"exit"in Deno&&typeof Deno.exit=="function")t=()=>Deno.exit(r);else throw new x("Cannot exit the process, no exit method available");setTimeout(t,e)}function $e(r,e=1/0){if(typeof e!="number"||isNaN(e)||e<0)throw new TypeError("lines parameter must be a non-negative number");try{throw new O("GetCallStack","Capturing a stack trace with CoreUtils.getCallStack(). If you see this anywhere, you can safely ignore it.")}catch(t){let i=(t.stack??"").split(`
1
+ "use strict";var le=Object.create;var I=Object.defineProperty;var ce=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,pe=Object.prototype.hasOwnProperty;var fe=(r,e)=>{for(var t in e)I(r,t,{get:e[t],enumerable:!0})},G=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of de(e))!pe.call(r,n)&&n!==t&&I(r,n,{get:()=>e[n],enumerable:!(i=ce(e,n))||i.enumerable});return r};var U=(r,e,t)=>(t=r!=null?le(me(r)):{},G(e||!r||!r.__esModule?I(t,"default",{value:r,enumerable:!0}):t,r)),he=r=>G(I({},"__esModule",{value:!0}),r);var We={};fe(We,{BrowserStorageEngine:()=>W,ChecksumMismatchError:()=>k,CustomError:()=>O,DataStore:()=>_,DataStoreEngine:()=>$,DataStoreSerializer:()=>Q,DatedError:()=>y,Debouncer:()=>z,FileStorageEngine:()=>H,MigrationError:()=>M,NanoEmitter:()=>P,NetworkError:()=>C,ScriptContextError:()=>x,ValidationError:()=>q,abtoa:()=>te,atoab:()=>re,autoPlural:()=>ze,bitSetHas:()=>ge,capitalize:()=>Ue,clamp:()=>E,compress:()=>K,computeHash:()=>J,consumeGen:()=>Pe,consumeStringGen:()=>Oe,createProgressBar:()=>je,createRecurringTask:()=>Re,createTable:()=>qe,darkenColor:()=>X,debounce:()=>_e,decompress:()=>B,defaultPbChars:()=>ie,defaultTableLineCharset:()=>ne,digitCount:()=>ye,fetchAdvanced:()=>Ae,formatNumber:()=>be,getCallStack:()=>Ie,getListLength:()=>Fe,getterifyObj:()=>ke,hexToRgb:()=>Y,insertValues:()=>Le,joinArrayReadable:()=>Ke,lightenColor:()=>xe,mapRange:()=>R,overflowVal:()=>Te,pauseFor:()=>Ne,pureObj:()=>Ve,randRange:()=>V,randomId:()=>Ee,randomItem:()=>Se,randomItemIndex:()=>L,randomizeArray:()=>ve,rgbToHex:()=>ee,roundFixed:()=>j,scheduleExit:()=>$e,secsToTimeStr:()=>Be,setImmediateInterval:()=>Me,setImmediateTimeoutLoop:()=>Ce,takeRandomItem:()=>we,takeRandomItemIndex:()=>Z,truncStr:()=>Je,valsWithin:()=>De});module.exports=he(We);function ge(r,e){return(r&e)===e}function E(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function ye(r,e=!0){if(r=Number(["string","number"].includes(typeof r)?r:String(r)),typeof r=="number"&&isNaN(r))return NaN;let[t,i]=r.toString().split("."),n=t==="0"?1:Math.floor(Math.log10(Math.abs(Number(t)))+1),o=e&&i?i.length:0;return n+o}function be(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function R(r,e,t,i,n){return(typeof i>"u"||typeof n>"u")&&(n=t,t=e,i=e=0),Number(e)===0&&Number(i)===0?r*(n/t):(r-e)*((n-i)/(t-e))+i}function Te(r,e,t){let i=typeof t=="number"?e:0;if(t=typeof t=="number"?t:e,i>t)throw new RangeError(`Parameter "min" can't be bigger than "max"`);if(isNaN(r)||isNaN(i)||isNaN(t)||!isFinite(r)||!isFinite(i)||!isFinite(t))return NaN;if(r>=i&&r<=t)return r;let n=t-i+1;return((r-i)%n+n)%n+i}function V(...r){let e,t,i=!1;if(typeof r[0]=="number"&&typeof r[1]=="number")[e,t]=r;else if(typeof r[0]=="number"&&typeof r[1]!="number")e=0,[t]=r;else throw new TypeError(`Wrong parameter(s) provided - expected (number, boolean|undefined) or (number, number, boolean|undefined) but got (${r.map(n=>typeof n).join(", ")}) instead`);if(typeof r[2]=="boolean"?i=r[2]:typeof r[1]=="boolean"&&(i=r[1]),e=Number(e),t=Number(t),isNaN(e)||isNaN(t))return NaN;if(e>t)throw new TypeError(`Parameter "min" can't be bigger than "max"`);if(i){let n=new Uint8Array(1);return crypto.getRandomValues(n),Number(Array.from(n,o=>Math.round(R(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function j(r,e){let t=10**e;return Math.round(r*t)/t}function De(r,e,t=1,i=.5){return Math.abs(j(r,t)-j(e,t))<=i}function Se(r){return L(r)[0]}function L(r){if(r.length===0)return[void 0,void 0];let e=V(r.length-1);return[r[e],e]}function ve(r){let e=[...r];if(r.length===0)return e;for(let t=e.length-1;t>0;t--){let i=Math.floor(Math.random()*(t+1));[e[t],e[i]]=[e[i],e[t]]}return e}function we(r){var e;return(e=Z(r))==null?void 0:e[0]}function Z(r){let[e,t]=L(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function X(r,e,t=!1){var c;r=r.trim();let i=(m,p,h,l)=>(m=Math.max(0,Math.min(255,m-m*l/100)),p=Math.max(0,Math.min(255,p-p*l/100)),h=Math.max(0,Math.min(255,h-h*l/100)),[m,p,h]),n,o,a,s,u=r.match(/^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/);if(u)[n,o,a,s]=Y(r);else if(r.startsWith("rgb")){let m=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!m)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=m}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?ee(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function Y(r){r=(r.startsWith("#")?r.slice(1):r).trim();let e=r.length===8||r.length===4?parseInt(r.slice(-(r.length/4)),16)/(r.length===8?255:15):void 0;isNaN(Number(e))||(r=r.slice(0,-(r.length/4))),(r.length===3||r.length===4)&&(r=r.split("").map(a=>a+a).join(""));let t=parseInt(r,16),i=t>>16&255,n=t>>8&255,o=t&255;return[E(i,0,255),E(n,0,255),E(o,0,255),typeof e=="number"?E(e,0,1):void 0]}function xe(r,e,t=!1){return X(r,e*-1,t)}function ee(r,e,t,i,n=!0,o=!1){let a=s=>E(Math.round(s),0,255).toString(16).padStart(2,"0")[o?"toUpperCase":"toLowerCase"]();return`${n?"#":""}${a(r)}${a(e)}${a(t)}${i?a(i*255):""}`}function te(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function re(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function K(r,e,t="string"){let i=r instanceof Uint8Array?r:new TextEncoder().encode((r==null?void 0:r.toString())??String(r)),n=new CompressionStream(e),o=n.writable.getWriter();o.write(i),o.close();let a=new Uint8Array(await new Response(n.readable).arrayBuffer());return t==="arrayBuffer"?a:te(a)}async function B(r,e,t="string"){let i=r instanceof Uint8Array?r:re((r==null?void 0:r.toString())??String(r)),n=new DecompressionStream(e),o=n.writable.getWriter();o.write(i),o.close();let a=new Uint8Array(await new Response(n.readable).arrayBuffer());return t==="arrayBuffer"?a:new TextDecoder().decode(a)}async function J(r,e="SHA-256"){let t;typeof r=="string"?t=new TextEncoder().encode(r):t=r;let i=await crypto.subtle.digest(e,t);return Array.from(new Uint8Array(i)).map(a=>a.toString(16).padStart(2,"0")).join("")}function Ee(r=16,e=16,t=!1,i=!0){if(r<1)throw new RangeError("The length argument must be at least 1");if(e<2||e>36)throw new RangeError("The radix argument must be between 2 and 36");let n=[],o=i?[0,1]:[0];if(t){let a=new Uint8Array(r);crypto.getRandomValues(a),n=Array.from(a,s=>R(s,0,255,0,e).toString(e).substring(0,1))}else n=Array.from({length:r},()=>Math.floor(Math.random()*e).toString(e));return n.some(a=>/[a-zA-Z]/.test(a))?n.map(a=>o[V(0,o.length-1,t)]===1?a.toUpperCase():a).join(""):n.join("")}var y=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},k=class extends y{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},O=class extends y{constructor(e,t,i){super(t,i),this.name=e}},M=class extends y{constructor(e,t){super(e,t),this.name="MigrationError"}},q=class extends y{constructor(e,t){super(e,t),this.name="ValidationError"}},x=class extends y{constructor(e,t){super(e,t),this.name="ScriptContextError"}},C=class extends y{constructor(e,t){super(e,t),this.name="NetworkError"}};async function Pe(r,...e){return await(typeof r=="function"?r(...e):r)}async function Oe(r,...e){return typeof r=="string"?r:String(typeof r=="function"?await r(...e):r)}async function Ae(r,e={}){let{timeout:t=1e4,signal:i,...n}=e,o=new AbortController;i==null||i.addEventListener("abort",()=>o.abort());let a={},s;t>=0&&(s=setTimeout(()=>o.abort(),t),a={signal:o.signal});try{let u=await fetch(r,{...n,...a});return typeof s<"u"&&clearTimeout(s),u}catch(u){throw typeof s<"u"&&clearTimeout(s),new C("Error while calling fetch",{cause:u})}}function Fe(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function Ne(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new O("AbortError","The pause was aborted")):i()})})}function Ve(r){return Object.assign(Object.create(null),r??{})}function ke(r,e=!1){let t={};for(let i in r)Object.defineProperty(t,i,{get:()=>r[i],enumerable:!0,configurable:!0});return e?structuredClone(t):t}function Me(r,e,t){let i,n=()=>clearInterval(i),o=()=>{if(t!=null&&t.aborted)return n();r()};t==null||t.addEventListener("abort",n),o(),i=setInterval(o,e)}function Ce(r,e,t){let i,n=()=>clearTimeout(i),o=async()=>{if(t!=null&&t.aborted)return n();await r(),i=setTimeout(o,e)};t==null||t.addEventListener("abort",n),o()}function $e(r=0,e=0){if(e<0)throw new TypeError("Timeout must be a non-negative number");let t;if(typeof process<"u"&&"exit"in process&&typeof process.exit=="function")t=()=>process.exit(r);else if(typeof Deno<"u"&&"exit"in Deno&&typeof Deno.exit=="function")t=()=>Deno.exit(r);else throw new x("Cannot exit the process, no exit method available");setTimeout(t,e)}function Ie(r,e=1/0){if(typeof e!="number"||isNaN(e)||e<0)throw new TypeError("lines parameter must be a non-negative number");try{throw new O("GetCallStack","Capturing a stack trace with CoreUtils.getCallStack(). If you see this anywhere, you can safely ignore it.")}catch(t){let i=(t.stack??"").split(`
2
2
  `).map(n=>n.trim()).slice(2,e+2);return r!==!1?i:i.join(`
3
- `)}}function Ie(r){var n;let e=0,t=!1;(n=r.signal)==null||n.addEventListener("abort",()=>{t=!0},{once:!0});let i=async(o=!1)=>{var a;if(!t){try{if(((r.immediate??!0)||!o)&&(e++,await((a=r.condition)==null?void 0:a.call(r,e-1))??!0)){let s=await r.task(e-1);r.onSuccess&&await r.onSuccess(s,e-1)}}catch(s){if(r.onError&&await r.onError(s,e-1),r.abortOnError&&(t=!0),!r.onError&&!r.abortOnError)throw s}!t&&(typeof r.maxIterations!="number"||e<r.maxIterations)&&setTimeout(i,r.timeout)}};return i(!0)}function Re(r,e,t="auto"){switch(typeof e!="number"&&("length"in e?e=e.length:"size"in e?e=e.size:"count"in e&&(e=e.count)),["-s","-ies"].includes(t)||(t="auto"),isNaN(e)&&(e=2),t==="auto"?String(r).endsWith("y")?"-ies":"-s":t){case"-s":return`${r}${e===1?"":"s"}`;case"-ies":return`${String(r).slice(0,-1)}${e===1?"y":"ies"}`}}function ze(r){return r.charAt(0).toUpperCase()+r.slice(1)}var ie={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function Ue(r,e,t=ie){if(r===100)return t[100].repeat(e);let i=Math.floor(r/100*e),n=r/10*e-i,o="";n>=.75?o=t[75]:n>=.5?o=t[50]:n>=.25&&(o=t[25]);let a=t[100].repeat(i),s=t[0].repeat(e-i-(o?1:0));return`${a}${o}${s}`}function Le(r,...e){return r.replace(/%\d/gm,t=>{var n;let i=Number(t.substring(1))-1;return(n=e[i]??t)==null?void 0:n.toString()})}function je(r,e=", ",t=" and "){let i=[...r];if(i.length===0)return"";if(i.length===1)return String(i[0]);if(i.length===2)return i.join(t);let n=t+i[i.length-1];return i.pop(),i.join(e)+n}function Be(r){let e=r<0,t=Math.abs(r);if(isNaN(t)||!isFinite(t))throw new TypeError("The seconds argument must be a valid number");let i=Math.floor(t/3600),n=Math.floor(t%3600/60),o=Math.floor(t%60);return(e?"-":"")+[i?i+":":"",String(n).padStart(n>0||i>0?2:1,"0"),":",String(o).padStart(o>0||n>0||i>0||r===0?2:1,"0")].join("")}function Ke(r,e,t="..."){let i=(r==null?void 0:r.toString())??String(r),n=i.length>e?i.substring(0,e-t.length)+t:i;return n.length>e?n.substring(0,e):n}var ne={single:{horizontal:"\u2500",vertical:"\u2502",topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",leftT:"\u251C",rightT:"\u2524",topT:"\u252C",bottomT:"\u2534",cross:"\u253C"},double:{horizontal:"\u2550",vertical:"\u2551",topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",leftT:"\u2560",rightT:"\u2563",topT:"\u2566",bottomT:"\u2569",cross:"\u256C"},none:{horizontal:" ",vertical:" ",topLeft:" ",topRight:" ",bottomLeft:" ",bottomRight:" ",leftT:" ",rightT:" ",topT:" ",bottomT:" ",cross:" "}};function qe(r,e){var h;let t={columnAlign:"left",truncateAbove:1/0,truncEndStr:"\u2026",minPadding:1,lineStyle:"single",applyCellStyle:()=>{},applyLineStyle:()=>{},lineCharset:ne,...e??{}},i=(l,f,d)=>P(typeof l!="number"||isNaN(Number(l))?f:l,f,d);t.truncateAbove=i(t.truncateAbove,0,1/0),t.minPadding=i(t.minPadding,0,1/0);let n=t.lineCharset[t.lineStyle],o=l=>l.replace(/\u001b\[[0-9;]*m/g,""),a=r.map(l=>l.map(f=>String(f))),s=((h=r[0])==null?void 0:h.length)??0;if(s===0||a.length===0)return"";if(isFinite(t.truncateAbove)){let l=(f,d,g)=>{let y=d-g.length;if(y<=0)return g.slice(0,d);let T=0,D="",v=0,w=!1;for(;v<f.length;){if(f[v]==="\x1B"&&f[v+1]==="["){let A=f.indexOf("m",v+2);if(A!==-1){D+=f.slice(v,A+1),w=!0,v=A+1;continue}}if(T===y)return D+=g,w&&(D+="\x1B[0m"),D;D+=f[v],T++,v++}return D};for(let f of a)for(let d=0;d<f.length;d++)o(f[d]??"").length>t.truncateAbove&&(f[d]=l(f[d]??"",t.truncateAbove,t.truncEndStr))}let u=Array.from({length:s},(l,f)=>Math.max(0,...a.map(d=>o(d[f]??"").length))),c=(l,f,d)=>{let[g="",y=""]=t.applyLineStyle(l,f)??[];return`${g}${d}${y}`},m=(l,f,d,g)=>{let y="",T=0;y+=c(l,T++,f);for(let D=0;D<s;D++){let v=(u[D]??0)+t.minPadding*2;for(let w=0;w<v;w++)y+=c(l,T++,n.horizontal);D<s-1&&(y+=c(l,T++,d))}return y+=c(l,T++,g),y},p=[];for(let l=0;l<a.length;l++){let f=a[l]??[],d=l*3;t.lineStyle!=="none"&&p.push(l===0?m(d,n.topLeft,n.topT,n.topRight):m(d,n.leftT,n.cross,n.rightT));let g="",y=0;g+=c(d+1,y++,n.vertical);for(let T=0;T<s;T++){let D=f[T]??"",v=o(D).length,w=(u[T]??0)-v,A=(Array.isArray(t.columnAlign)?t.columnAlign[T]:t.columnAlign)??"left",N,V;switch(A){case"right":N=t.minPadding+w,V=t.minPadding;break;case"centerLeft":N=t.minPadding+Math.floor(w/2),V=t.minPadding+Math.ceil(w/2);break;case"centerRight":N=t.minPadding+Math.ceil(w/2),V=t.minPadding+Math.floor(w/2);break;default:N=t.minPadding,V=t.minPadding+w}let[se="",ue=""]=t.applyCellStyle(l,T)??[];g+=" ".repeat(N)+se+D+ue+" ".repeat(V),g+=c(d+1,y++,n.vertical)}p.push(g),t.lineStyle!=="none"&&l===a.length-1&&p.push(m(d+2,n.bottomLeft,n.bottomT,n.bottomRight))}return p.join(`
4
- `)}var ae=()=>({emit(r,...e){for(let t=this.events[r]||[],i=0,n=t.length;i<n;i++)t[i](...e)},events:{},on(r,e){return(this.events[r]||=[]).push(e),()=>{var t;this.events[r]=(t=this.events[r])==null?void 0:t.filter(i=>e!==i)}}});var E=class{events=ae();eventUnsubscribes=[];emitterOptions;constructor(e={}){this.emitterOptions={publicEmit:!1,...e}}on(e,t){let i,n=()=>{i&&(i(),this.eventUnsubscribes=this.eventUnsubscribes.filter(o=>o!==i))};return i=this.events.on(e,t),this.eventUnsubscribes.push(i),n}once(e,t){return new Promise(i=>{let n,o=((...a)=>{t==null||t(...a),n==null||n(),i(a)});n=this.events.on(e,o),this.eventUnsubscribes.push(n)})}onMulti(e){let t=[],i=()=>{for(let n of t)n();t.splice(0,t.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(n=>!t.includes(n))};for(let n of Array.isArray(e)?e:[e]){let o={allOf:[],oneOf:[],once:!1,...n},{oneOf:a,allOf:s,once:u,signal:c,callback:m}=o;if(c!=null&&c.aborted)return i;if(a.length===0&&s.length===0)throw new TypeError("NanoEmitter.onMulti(): Either `oneOf` or `allOf` or both must be provided in the options");let p=[],h=(d=!1)=>{if(!(!(c!=null&&c.aborted)&&!d)){for(let g of p)g();p.splice(0,p.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(g=>!p.includes(g))}},l=new Set,f=()=>s.length===0||l.size===s.length;for(let d of a){let g=this.events.on(d,((...y)=>{h(),f()&&(m(d,...y),u&&h(!0))}));p.push(g)}for(let d of s){let g=this.events.on(d,((...y)=>{h(),l.add(d),f()&&(a.length===0||a.includes(d))&&(m(d,...y),u&&h(!0))}));p.push(g)}t.push(()=>h(!0))}return i}emit(e,...t){return this.emitterOptions.publicEmit?(this.events.emit(e,...t),!0):!1}unsubscribeAll(){for(let e of this.eventUnsubscribes)e();this.eventUnsubscribes=[]}};var oe=1,_=class extends E{id;formatVersion;defaultData;encodeData;decodeData;compressionFormat="deflate-raw";memoryCache;engine;keyPrefix;options;firstInit=!0;cachedData;migrations;migrateIds=[];constructor(e){if(super(e.nanoEmitterOptions),this.id=e.id,this.formatVersion=e.formatVersion,this.defaultData=e.defaultData,this.memoryCache=e.memoryCache??!0,this.cachedData=this.memoryCache?e.defaultData:{},this.migrations=e.migrations,e.migrateIds&&(this.migrateIds=Array.isArray(e.migrateIds)?e.migrateIds:[e.migrateIds]),this.engine=typeof e.engine=="function"?e.engine():e.engine,this.keyPrefix=e.keyPrefix??"__ds-",this.options=e,"encodeData"in e&&"decodeData"in e&&Array.isArray(e.encodeData)&&Array.isArray(e.decodeData))this.encodeData=[e.encodeData[0],e.encodeData[1]],this.decodeData=[e.decodeData[0],e.decodeData[1]],this.compressionFormat=e.encodeData[0]??null;else if(e.compressionFormat===null)this.encodeData=void 0,this.decodeData=void 0,this.compressionFormat=null;else{let t=typeof e.compressionFormat=="string"?e.compressionFormat:"deflate-raw";this.compressionFormat=t,this.encodeData=[t,async i=>await B(i,t,"string")],this.decodeData=[t,async i=>await K(i,t,"string")]}this.engine.setDataStoreOptions({id:this.id,encodeData:this.encodeData,decodeData:this.decodeData})}async loadData(){try{if(this.firstInit){this.firstInit=!1;let u=Number(await this.engine.getValue("__ds_fmt_ver",0)),c=await this.engine.getValue(`_uucfg-${this.id}`,null);if(c){let m=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),p=await this.engine.getValue(`_uucfgenc-${this.id}`,null),h=[],l=(f,d,g)=>{h.push(this.engine.setValue(d,g)),h.push(this.engine.deleteValue(f))};l(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(m)||l(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,m),typeof p=="boolean"||p==="true"||p==="false"||typeof p=="number"||p==="0"||p==="1"?l(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(p)?this.compressionFormat??null:null):(h.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),h.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(h)}(isNaN(u)||u<oe)&&await this.engine.setValue("__ds_fmt_ver",oe)}this.migrateIds.length>0&&(await this.migrateId(this.migrateIds),this.migrateIds=[]);let e=await this.engine.getValue(`${this.keyPrefix}${this.id}-dat`,null),t=Number(await this.engine.getValue(`${this.keyPrefix}${this.id}-ver`,NaN));if(typeof e!="string"&&typeof e!="object"||e===null||isNaN(t)){await this.saveDefaultData(!1);let u=this.engine.deepCopy(this.defaultData);return this.events.emit("loadData",u),u}let i=e??JSON.stringify(this.defaultData),n=String(await this.engine.getValue(`${this.keyPrefix}${this.id}-enf`,null)),o=n!=="null"&&n!=="false"&&n!=="0"&&n!==""&&n!==null,a=typeof i=="string"?await this.engine.deserializeData(i,o):i;t<this.formatVersion&&this.migrations&&(a=await this.runMigrations(a,t));let s=this.memoryCache?this.cachedData=this.engine.deepCopy(a):this.engine.deepCopy(a);return this.events.emit("loadData",s),s}catch(e){let t=e instanceof Error?e:new Error(String(e));return console.warn("Error while parsing JSON data, resetting it to the default value.",e),this.events.emit("error",t),await this.saveDefaultData(),this.defaultData}}getData(){if(!this.memoryCache)throw new b("In-memory cache is disabled for this DataStore instance, so getData() can't be used. Please use loadData() instead.");return this.engine.deepCopy(this.cachedData)}setData(e){let t=this.engine.deepCopy(e);return this.memoryCache&&(this.cachedData=e,this.events.emit("updateDataSync",t)),new Promise(async i=>{let n=await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(e,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,this.formatVersion),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);if(n.every(o=>o.status==="fulfilled"))this.events.emit("updateData",t);else{let o=new Error("Error while saving data to persistent storage: "+n.map(a=>a.status==="rejected"?a.reason:null).filter(Boolean).join("; "));console.error(o),this.events.emit("error",o)}i()})}async saveDefaultData(e=!0){this.memoryCache&&(this.cachedData=this.defaultData);let t=await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(this.defaultData,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,this.formatVersion),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);if(t.every(i=>i.status==="fulfilled"))e&&this.events.emit("setDefaultData",this.defaultData);else{let i=new Error("Error while saving default data to persistent storage: "+t.map(n=>n.status==="rejected"?n.reason:null).filter(Boolean).join("; "));console.error(i),this.events.emit("error",i)}}async deleteData(){var e,t;await Promise.allSettled([this.engine.deleteValue(`${this.keyPrefix}${this.id}-dat`),this.engine.deleteValue(`${this.keyPrefix}${this.id}-ver`),this.engine.deleteValue(`${this.keyPrefix}${this.id}-enf`)]),await((t=(e=this.engine).deleteStorage)==null?void 0:t.call(e)),this.events.emit("deleteData")}encodingEnabled(){return!!(this.encodeData&&this.decodeData)&&this.compressionFormat!==null||!!this.compressionFormat}async runMigrations(e,t,i=!0){if(!this.migrations)return e;let n=e,o=Object.entries(this.migrations).sort(([u],[c])=>Number(u)-Number(c)),a=t;for(let u=0;u<o.length;u++){let[c,m]=o[u],p=Number(c);if(t<this.formatVersion&&t<p)try{let h=m(n);n=h instanceof Promise?await h:h,a=t=p;let l=p>=this.formatVersion||u===o.length-1;this.events.emit("migrateData",p,n,l)}catch(h){let l=new M(`Error while running migration function for format version '${c}'`,{cause:h});if(this.events.emit("migrationError",p,l),this.events.emit("error",l),!i)throw l;return await this.saveDefaultData(),this.engine.deepCopy(this.defaultData)}}await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(n,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,a),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);let s=this.memoryCache?this.cachedData=this.engine.deepCopy(n):this.engine.deepCopy(n);return this.events.emit("updateData",s),s}async migrateId(e){let t=Array.isArray(e)?e:[e];await Promise.all(t.map(async i=>{let[n,o,a]=await(async()=>{let[u,c,m]=await Promise.all([this.engine.getValue(`${this.keyPrefix}${i}-dat`,JSON.stringify(this.defaultData)),this.engine.getValue(`${this.keyPrefix}${i}-ver`,NaN),this.engine.getValue(`${this.keyPrefix}${i}-enf`,null)]);return[u,Number(c),!!m&&String(m)!=="null"]})();if(n===void 0||isNaN(o))return;let s=await this.engine.deserializeData(n,a);await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(s,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,o),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat),this.engine.deleteValue(`${this.keyPrefix}${i}-dat`),this.engine.deleteValue(`${this.keyPrefix}${i}-ver`),this.engine.deleteValue(`${this.keyPrefix}${i}-enf`)]),this.events.emit("migrateId",i,this.id)}))}};var $=class{dataStoreOptions;constructor(e){e&&(this.dataStoreOptions=e)}setDataStoreOptions(e){this.dataStoreOptions=e}async serializeData(e,t){var o,a,s,u,c;this.ensureDataStoreOptions();let i=JSON.stringify(e);if(!t||!((o=this.dataStoreOptions)!=null&&o.encodeData)||!((a=this.dataStoreOptions)!=null&&a.decodeData))return i;let n=(c=(u=(s=this.dataStoreOptions)==null?void 0:s.encodeData)==null?void 0:u[1])==null?void 0:c.call(u,i);return n instanceof Promise?await n:n}async deserializeData(e,t){var n,o,a;this.ensureDataStoreOptions();let i=(n=this.dataStoreOptions)!=null&&n.decodeData&&t?(a=(o=this.dataStoreOptions.decodeData)==null?void 0:o[1])==null?void 0:a.call(o,e):void 0;return i instanceof Promise&&(i=await i),JSON.parse(i??e)}ensureDataStoreOptions(){if(!this.dataStoreOptions)throw new b("DataStoreEngine must be initialized with DataStore options before use. If you are using this instance standalone, set them in the constructor or call `setDataStoreOptions()` with the DataStore options.");if(!this.dataStoreOptions.id)throw new b("DataStoreEngine must be initialized with a valid DataStore ID")}deepCopy(e){try{if("structuredClone"in globalThis)return structuredClone(e)}catch{}return JSON.parse(JSON.stringify(e))}},W=class extends ${options;constructor(e){super(e==null?void 0:e.dataStoreOptions),this.options={type:"localStorage",...e}}async getValue(e,t){let i=this.options.type==="localStorage"?globalThis.localStorage.getItem(e):globalThis.sessionStorage.getItem(e);return typeof i>"u"?t:i}async setValue(e,t){this.options.type==="localStorage"?globalThis.localStorage.setItem(e,String(t)):globalThis.sessionStorage.setItem(e,String(t))}async deleteValue(e){this.options.type==="localStorage"?globalThis.localStorage.removeItem(e):globalThis.sessionStorage.removeItem(e)}},S,H=class extends ${options;fileAccessQueue=Promise.resolve();constructor(e){super(e==null?void 0:e.dataStoreOptions),this.options={filePath:t=>`.ds-${t}`,...e}}async readFile(){var e,t,i,n;this.ensureDataStoreOptions();try{if(S||(S=(e=await import("fs/promises"))==null?void 0:e.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new b("'node:fs/promises' module not available")});let o=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions),a=await S.readFile(o,"utf-8");return a?JSON.parse(await((n=(i=(t=this.dataStoreOptions)==null?void 0:t.decodeData)==null?void 0:i[1])==null?void 0:n.call(i,a))??a):void 0}catch{return}}async writeFile(e){var t,i,n,o;this.ensureDataStoreOptions();try{if(S||(S=(t=await import("fs/promises"))==null?void 0:t.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new b("'node:fs/promises' module not available")});let a=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions);await S.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await S.writeFile(a,await((o=(n=(i=this.dataStoreOptions)==null?void 0:i.encodeData)==null?void 0:n[1])==null?void 0:o.call(n,JSON.stringify(e)))??JSON.stringify(e,void 0,2),"utf-8")}catch(a){console.error("Error writing file:",a)}}async getValue(e,t){let i=await this.readFile();if(!i)return t;let n=i==null?void 0:i[e];if(typeof n>"u")return t;if(typeof t=="string")return typeof n=="object"&&n!==null?JSON.stringify(n):typeof n=="string"?n:String(n);if(typeof n=="string")try{return JSON.parse(n)}catch{return t}return n}async setValue(e,t){this.fileAccessQueue=this.fileAccessQueue.then(async()=>{let i=await this.readFile();i||(i={});let n=t;if(typeof t=="string")try{if(t.startsWith("{")||t.startsWith("[")){let o=JSON.parse(t);typeof o=="object"&&o!==null&&(n=o)}}catch{}i[e]=n,await this.writeFile(i)}).catch(i=>{throw console.error("Error in setValue:",i),i}),await this.fileAccessQueue.catch(()=>{})}async deleteValue(e){this.fileAccessQueue=this.fileAccessQueue.then(async()=>{let t=await this.readFile();t&&(delete t[e],await this.writeFile(t))}).catch(t=>{throw console.error("Error in deleteValue:",t),t}),await this.fileAccessQueue.catch(()=>{})}async deleteStorage(){var e;this.ensureDataStoreOptions();try{if(S||(S=(e=await import("fs/promises"))==null?void 0:e.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new b("'node:fs/promises' module not available")});let t=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions);return await S.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var Q=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new x("DataStoreSerializer has to run in a secure context (HTTPS) or in another environment that implements the subtleCrypto API!");this.stores=e,this.options={addChecksum:!0,ensureIntegrity:!0,remapIds:{},...t}}async calcChecksum(e){return q(e,"SHA-256")}async serializePartial(e,t=!0,i=!0){var a;let n=[],o=this.stores.filter(s=>typeof e=="function"?e(s.id):e.includes(s.id));for(let s of o){let u=!!(t&&s.encodingEnabled()&&((a=s.encodeData)!=null&&a[1])),c=s.memoryCache?s.getData():await s.loadData(),m=u?await s.encodeData[1](JSON.stringify(c)):JSON.stringify(c);n.push({id:s.id,data:m,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(m):void 0})}return i?JSON.stringify(n):n}async serialize(e=!0,t=!0){return this.serializePartial(this.stores.map(i=>i.id),e,t)}async deserializePartial(e,t){let i=typeof t=="string"?JSON.parse(t):t;if(!Array.isArray(i)||!i.every(r.isSerializedDataStoreObj))throw new TypeError("Invalid serialized data format! Expected an array of SerializedDataStore objects.");let n=a=>{var s;return((s=Object.entries(this.options.remapIds).find(([,u])=>u.includes(a)))==null?void 0:s[0])??a},o=a=>typeof e=="function"?e(a):e.includes(a);for(let a of i){let s=n(a.id);if(!o(s))continue;let u=this.stores.find(m=>m.id===s);if(!u)throw new b(`Can't deserialize data because no DataStore instance with the ID "${s}" was found! Make sure to provide it in the DataStoreSerializer constructor.`);if(this.options.ensureIntegrity&&typeof a.checksum=="string"){let m=await this.calcChecksum(a.data);if(m!==a.checksum)throw new F(`Checksum mismatch for DataStore with ID "${a.id}"!
3
+ `)}}function Re(r){var n;let e=0,t=!1;(n=r.signal)==null||n.addEventListener("abort",()=>{t=!0},{once:!0});let i=async(o=!1)=>{var a;if(!t){try{if(((r.immediate??!0)||!o)&&(e++,await((a=r.condition)==null?void 0:a.call(r,e-1))??!0)){let s=await r.task(e-1);r.onSuccess&&await r.onSuccess(s,e-1)}}catch(s){if(r.onError&&await r.onError(s,e-1),r.abortOnError&&(t=!0),!r.onError&&!r.abortOnError)throw s}!t&&(typeof r.maxIterations!="number"||e<r.maxIterations)&&setTimeout(i,r.timeout)}};return i(!0)}function ze(r,e,t="auto"){switch(typeof e!="number"&&("length"in e?e=e.length:"size"in e?e=e.size:"count"in e&&(e=e.count)),["-s","-ies"].includes(t)||(t="auto"),isNaN(e)&&(e=2),t==="auto"?String(r).endsWith("y")?"-ies":"-s":t){case"-s":return`${r}${e===1?"":"s"}`;case"-ies":return`${String(r).slice(0,-1)}${e===1?"y":"ies"}`}}function Ue(r){return r.charAt(0).toUpperCase()+r.slice(1)}var ie={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function je(r,e,t=ie){if(r===100)return t[100].repeat(e);let i=Math.floor(r/100*e),n=r/10*e-i,o="";n>=.75?o=t[75]:n>=.5?o=t[50]:n>=.25&&(o=t[25]);let a=t[100].repeat(i),s=t[0].repeat(e-i-(o?1:0));return`${a}${o}${s}`}function Le(r,...e){return r.replace(/%\d/gm,t=>{var n;let i=Number(t.substring(1))-1;return(n=e[i]??t)==null?void 0:n.toString()})}function Ke(r,e=", ",t=" and "){let i=[...r];if(i.length===0)return"";if(i.length===1)return String(i[0]);if(i.length===2)return i.join(t);let n=t+i[i.length-1];return i.pop(),i.join(e)+n}function Be(r){let e=r<0,t=Math.abs(r);if(isNaN(t)||!isFinite(t))throw new TypeError("The seconds argument must be a valid number");let i=Math.floor(t/3600),n=Math.floor(t%3600/60),o=Math.floor(t%60);return(e?"-":"")+[i?i+":":"",String(n).padStart(n>0||i>0?2:1,"0"),":",String(o).padStart(o>0||n>0||i>0||r===0?2:1,"0")].join("")}function Je(r,e,t="..."){let i=(r==null?void 0:r.toString())??String(r),n=i.length>e?i.substring(0,e-t.length)+t:i;return n.length>e?n.substring(0,e):n}var ne={single:{horizontal:"\u2500",vertical:"\u2502",topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",leftT:"\u251C",rightT:"\u2524",topT:"\u252C",bottomT:"\u2534",cross:"\u253C"},double:{horizontal:"\u2550",vertical:"\u2551",topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",leftT:"\u2560",rightT:"\u2563",topT:"\u2566",bottomT:"\u2569",cross:"\u256C"},none:{horizontal:" ",vertical:" ",topLeft:" ",topRight:" ",bottomLeft:" ",bottomRight:" ",leftT:" ",rightT:" ",topT:" ",bottomT:" ",cross:" "}};function qe(r,e){var h;let t={columnAlign:"left",truncateAbove:1/0,truncEndStr:"\u2026",minPadding:1,lineStyle:"single",applyCellStyle:()=>{},applyLineStyle:()=>{},lineCharset:ne,...e??{}},i=(l,f,d)=>E(typeof l!="number"||isNaN(Number(l))?f:l,f,d);t.truncateAbove=i(t.truncateAbove,0,1/0),t.minPadding=i(t.minPadding,0,1/0);let n=t.lineCharset[t.lineStyle],o=l=>l.replace(/\u001b\[[0-9;]*m/g,""),a=r.map(l=>l.map(f=>String(f))),s=((h=r[0])==null?void 0:h.length)??0;if(s===0||a.length===0)return"";if(isFinite(t.truncateAbove)){let l=(f,d,g)=>{let b=d-g.length;if(b<=0)return g.slice(0,d);let T=0,D="",v=0,w=!1;for(;v<f.length;){if(f[v]==="\x1B"&&f[v+1]==="["){let A=f.indexOf("m",v+2);if(A!==-1){D+=f.slice(v,A+1),w=!0,v=A+1;continue}}if(T===b)return D+=g,w&&(D+="\x1B[0m"),D;D+=f[v],T++,v++}return D};for(let f of a)for(let d=0;d<f.length;d++)o(f[d]??"").length>t.truncateAbove&&(f[d]=l(f[d]??"",t.truncateAbove,t.truncEndStr))}let u=Array.from({length:s},(l,f)=>Math.max(0,...a.map(d=>o(d[f]??"").length))),c=(l,f,d)=>{let[g="",b=""]=t.applyLineStyle(l,f)??[];return`${g}${d}${b}`},m=(l,f,d,g)=>{let b="",T=0;b+=c(l,T++,f);for(let D=0;D<s;D++){let v=(u[D]??0)+t.minPadding*2;for(let w=0;w<v;w++)b+=c(l,T++,n.horizontal);D<s-1&&(b+=c(l,T++,d))}return b+=c(l,T++,g),b},p=[];for(let l=0;l<a.length;l++){let f=a[l]??[],d=l*3;t.lineStyle!=="none"&&p.push(l===0?m(d,n.topLeft,n.topT,n.topRight):m(d,n.leftT,n.cross,n.rightT));let g="",b=0;g+=c(d+1,b++,n.vertical);for(let T=0;T<s;T++){let D=f[T]??"",v=o(D).length,w=(u[T]??0)-v,A=(Array.isArray(t.columnAlign)?t.columnAlign[T]:t.columnAlign)??"left",F,N;switch(A){case"right":F=t.minPadding+w,N=t.minPadding;break;case"centerLeft":F=t.minPadding+Math.floor(w/2),N=t.minPadding+Math.ceil(w/2);break;case"centerRight":F=t.minPadding+Math.ceil(w/2),N=t.minPadding+Math.floor(w/2);break;default:F=t.minPadding,N=t.minPadding+w}let[se="",ue=""]=t.applyCellStyle(l,T)??[];g+=" ".repeat(F)+se+D+ue+" ".repeat(N),g+=c(d+1,b++,n.vertical)}p.push(g),t.lineStyle!=="none"&&l===a.length-1&&p.push(m(d+2,n.bottomLeft,n.bottomT,n.bottomRight))}return p.join(`
4
+ `)}var ae=()=>({emit(r,...e){for(let t=this.events[r]||[],i=0,n=t.length;i<n;i++)t[i](...e)},events:{},on(r,e){return(this.events[r]||=[]).push(e),()=>{var t;this.events[r]=(t=this.events[r])==null?void 0:t.filter(i=>e!==i)}}});var P=class{events=ae();eventUnsubscribes=[];emitterOptions;catchUpMemory=new Map;constructor(e={}){this.emitterOptions={publicEmit:!1,...e}}emitEvent(e,...t){var i;(i=this.emitterOptions.catchUpEvents)!=null&&i.includes(e)&&this.catchUpMemory.set(e,t),this.events.emit(e,...t)}on(e,t){let i,n=()=>{i&&(i(),this.eventUnsubscribes=this.eventUnsubscribes.filter(a=>a!==i))};i=this.events.on(e,t),this.eventUnsubscribes.push(i);let o=this.catchUpMemory.get(e);return o&&t(...o),n}once(e,t){let i=this.catchUpMemory.get(e);if(i){let n=i;return t==null||t(...n),Promise.resolve(n)}return new Promise(n=>{let o,a=((...s)=>{t==null||t(...s),o==null||o(),n(s)});o=this.events.on(e,a),this.eventUnsubscribes.push(o)})}onMulti(e){let t=[],i=()=>{for(let n of t)n();t.splice(0,t.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(n=>!t.includes(n))};for(let n of Array.isArray(e)?e:[e]){let o={allOf:[],oneOf:[],once:!1,...n},{oneOf:a,allOf:s,once:u,signal:c,callback:m}=o;if(c!=null&&c.aborted)return i;if(a.length===0&&s.length===0)throw new TypeError("NanoEmitter.onMulti(): Either `oneOf` or `allOf` or both must be provided in the options");let p=[],h=(d=!1)=>{if(!(!(c!=null&&c.aborted)&&!d)){for(let g of p)g();p.splice(0,p.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(g=>!p.includes(g))}},l=new Set,f=()=>s.length===0||l.size===s.length;for(let d of a){let g=this.events.on(d,((...b)=>{h(),f()&&(m(d,...b),u&&h(!0))}));p.push(g)}for(let d of s){let g=this.events.on(d,((...b)=>{h(),l.add(d),f()&&(a.length===0||a.includes(d))&&(m(d,...b),u&&h(!0))}));p.push(g)}t.push(()=>h(!0))}return i}emit(e,...t){return this.emitterOptions.publicEmit?(this.emitEvent(e,...t),!0):!1}unsubscribeAll(){for(let e of this.eventUnsubscribes)e();this.eventUnsubscribes=[]}};var oe=1,_=class extends P{id;formatVersion;defaultData;encodeData;decodeData;compressionFormat="deflate-raw";memoryCache;engine;keyPrefix;options;firstInit=!0;cachedData;migrations;migrateIds=[];constructor(e){if(super(e.nanoEmitterOptions),this.id=e.id,this.formatVersion=e.formatVersion,this.defaultData=e.defaultData,this.memoryCache=e.memoryCache??!0,this.cachedData=this.memoryCache?e.defaultData:{},this.migrations=e.migrations,e.migrateIds&&(this.migrateIds=Array.isArray(e.migrateIds)?e.migrateIds:[e.migrateIds]),this.engine=typeof e.engine=="function"?e.engine():e.engine,this.keyPrefix=e.keyPrefix??"__ds-",this.options=e,"encodeData"in e&&"decodeData"in e&&Array.isArray(e.encodeData)&&Array.isArray(e.decodeData))this.encodeData=[e.encodeData[0],e.encodeData[1]],this.decodeData=[e.decodeData[0],e.decodeData[1]],this.compressionFormat=e.encodeData[0]??null;else if(e.compressionFormat===null)this.encodeData=void 0,this.decodeData=void 0,this.compressionFormat=null;else{let t=typeof e.compressionFormat=="string"?e.compressionFormat:"deflate-raw";this.compressionFormat=t,this.encodeData=[t,async i=>await K(i,t,"string")],this.decodeData=[t,async i=>await B(i,t,"string")]}this.engine.setDataStoreOptions({id:this.id,encodeData:this.encodeData,decodeData:this.decodeData})}async loadData(){try{if(this.firstInit){this.firstInit=!1;let u=Number(await this.engine.getValue("__ds_fmt_ver",0)),c=await this.engine.getValue(`_uucfg-${this.id}`,null);if(c){let m=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),p=await this.engine.getValue(`_uucfgenc-${this.id}`,null),h=[],l=(f,d,g)=>{h.push(this.engine.setValue(d,g)),h.push(this.engine.deleteValue(f))};l(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(m)||l(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,m),typeof p=="boolean"||p==="true"||p==="false"||typeof p=="number"||p==="0"||p==="1"?l(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(p)?this.compressionFormat??null:null):(h.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),h.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(h)}(isNaN(u)||u<oe)&&await this.engine.setValue("__ds_fmt_ver",oe)}this.migrateIds.length>0&&(await this.migrateId(this.migrateIds),this.migrateIds=[]);let e=await this.engine.getValue(`${this.keyPrefix}${this.id}-dat`,null),t=Number(await this.engine.getValue(`${this.keyPrefix}${this.id}-ver`,NaN));if(typeof e!="string"&&typeof e!="object"||e===null||isNaN(t)){await this.saveDefaultData(!1);let u=this.engine.deepCopy(this.defaultData);return this.emitEvent("loadData",u),u}let i=e??JSON.stringify(this.defaultData),n=String(await this.engine.getValue(`${this.keyPrefix}${this.id}-enf`,null)),o=n!=="null"&&n!=="false"&&n!=="0"&&n!==""&&n!==null,a=typeof i=="string"?await this.engine.deserializeData(i,o):i;t<this.formatVersion&&this.migrations&&(a=await this.runMigrations(a,t));let s=this.memoryCache?this.cachedData=this.engine.deepCopy(a):this.engine.deepCopy(a);return this.emitEvent("loadData",s),s}catch(e){let t=e instanceof Error?e:new Error(String(e));return console.warn("Error while parsing JSON data, resetting it to the default value.",e),this.emitEvent("error",t),await this.saveDefaultData(),this.defaultData}}getData(){if(!this.memoryCache)throw new y("In-memory cache is disabled for this DataStore instance, so getData() can't be used. Please use loadData() instead.");return this.engine.deepCopy(this.cachedData)}setData(e){let t=this.engine.deepCopy(e);return this.memoryCache&&(this.cachedData=e,this.emitEvent("updateDataSync",t)),new Promise(async i=>{let n=await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(e,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,this.formatVersion),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);if(n.every(o=>o.status==="fulfilled"))this.emitEvent("updateData",t);else{let o=new Error("Error while saving data to persistent storage: "+n.map(a=>a.status==="rejected"?a.reason:null).filter(Boolean).join("; "));console.error(o),this.emitEvent("error",o)}i()})}async saveDefaultData(e=!0){this.memoryCache&&(this.cachedData=this.defaultData);let t=await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(this.defaultData,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,this.formatVersion),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);if(t.every(i=>i.status==="fulfilled"))e&&this.emitEvent("setDefaultData",this.defaultData);else{let i=new Error("Error while saving default data to persistent storage: "+t.map(n=>n.status==="rejected"?n.reason:null).filter(Boolean).join("; "));console.error(i),this.emitEvent("error",i)}}async deleteData(){var e,t;await Promise.allSettled([this.engine.deleteValue(`${this.keyPrefix}${this.id}-dat`),this.engine.deleteValue(`${this.keyPrefix}${this.id}-ver`),this.engine.deleteValue(`${this.keyPrefix}${this.id}-enf`)]),await((t=(e=this.engine).deleteStorage)==null?void 0:t.call(e)),this.emitEvent("deleteData")}encodingEnabled(){return!!(this.encodeData&&this.decodeData)&&this.compressionFormat!==null||!!this.compressionFormat}async runMigrations(e,t,i=!0){if(!this.migrations)return e;let n=e,o=Object.entries(this.migrations).sort(([u],[c])=>Number(u)-Number(c)),a=t;for(let u=0;u<o.length;u++){let[c,m]=o[u],p=Number(c);if(t<this.formatVersion&&t<p)try{let h=m(n);n=h instanceof Promise?await h:h,a=t=p;let l=p>=this.formatVersion||u===o.length-1;this.emitEvent("migrateData",p,n,l)}catch(h){let l=new M(`Error while running migration function for format version '${c}'`,{cause:h});if(this.emitEvent("migrationError",p,l),this.emitEvent("error",l),!i)throw l;return await this.saveDefaultData(),this.engine.deepCopy(this.defaultData)}}await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(n,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,a),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)]);let s=this.memoryCache?this.cachedData=this.engine.deepCopy(n):this.engine.deepCopy(n);return this.emitEvent("updateData",s),s}async migrateId(e){let t=Array.isArray(e)?e:[e];await Promise.all(t.map(async i=>{let[n,o,a]=await(async()=>{let[u,c,m]=await Promise.all([this.engine.getValue(`${this.keyPrefix}${i}-dat`,JSON.stringify(this.defaultData)),this.engine.getValue(`${this.keyPrefix}${i}-ver`,NaN),this.engine.getValue(`${this.keyPrefix}${i}-enf`,null)]);return[u,Number(c),!!m&&String(m)!=="null"]})();if(n===void 0||isNaN(o))return;let s=await this.engine.deserializeData(n,a);await Promise.allSettled([this.engine.setValue(`${this.keyPrefix}${this.id}-dat`,await this.engine.serializeData(s,this.encodingEnabled())),this.engine.setValue(`${this.keyPrefix}${this.id}-ver`,o),this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat),this.engine.deleteValue(`${this.keyPrefix}${i}-dat`),this.engine.deleteValue(`${this.keyPrefix}${i}-ver`),this.engine.deleteValue(`${this.keyPrefix}${i}-enf`)]),this.emitEvent("migrateId",i,this.id)}))}};var $=class{dataStoreOptions;constructor(e){e&&(this.dataStoreOptions=e)}setDataStoreOptions(e){this.dataStoreOptions=e}async serializeData(e,t){var o,a,s,u,c;this.ensureDataStoreOptions();let i=JSON.stringify(e);if(!t||!((o=this.dataStoreOptions)!=null&&o.encodeData)||!((a=this.dataStoreOptions)!=null&&a.decodeData))return i;let n=(c=(u=(s=this.dataStoreOptions)==null?void 0:s.encodeData)==null?void 0:u[1])==null?void 0:c.call(u,i);return n instanceof Promise?await n:n}async deserializeData(e,t){var n,o,a;this.ensureDataStoreOptions();let i=(n=this.dataStoreOptions)!=null&&n.decodeData&&t?(a=(o=this.dataStoreOptions.decodeData)==null?void 0:o[1])==null?void 0:a.call(o,e):void 0;return i instanceof Promise&&(i=await i),JSON.parse(i??e)}ensureDataStoreOptions(){if(!this.dataStoreOptions)throw new y("DataStoreEngine must be initialized with DataStore options before use. If you are using this instance standalone, set them in the constructor or call `setDataStoreOptions()` with the DataStore options.");if(!this.dataStoreOptions.id)throw new y("DataStoreEngine must be initialized with a valid DataStore ID")}deepCopy(e){try{if("structuredClone"in globalThis)return structuredClone(e)}catch{}return JSON.parse(JSON.stringify(e))}},W=class extends ${options;constructor(e){super(e==null?void 0:e.dataStoreOptions),this.options={type:"localStorage",...e}}async getValue(e,t){let i=this.options.type==="localStorage"?globalThis.localStorage.getItem(e):globalThis.sessionStorage.getItem(e);return typeof i>"u"?t:i}async setValue(e,t){this.options.type==="localStorage"?globalThis.localStorage.setItem(e,String(t)):globalThis.sessionStorage.setItem(e,String(t))}async deleteValue(e){this.options.type==="localStorage"?globalThis.localStorage.removeItem(e):globalThis.sessionStorage.removeItem(e)}},S,H=class extends ${options;fileAccessQueue=Promise.resolve();constructor(e){super(e==null?void 0:e.dataStoreOptions),this.options={filePath:t=>`.ds-${t}`,...e}}async readFile(){var e,t,i,n;this.ensureDataStoreOptions();try{if(S||(S=(e=await import("fs/promises"))==null?void 0:e.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new y("'node:fs/promises' module not available")});let o=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions),a=await S.readFile(o,"utf-8");return a?JSON.parse(await((n=(i=(t=this.dataStoreOptions)==null?void 0:t.decodeData)==null?void 0:i[1])==null?void 0:n.call(i,a))??a):void 0}catch{return}}async writeFile(e){var t,i,n,o;this.ensureDataStoreOptions();try{if(S||(S=(t=await import("fs/promises"))==null?void 0:t.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new y("'node:fs/promises' module not available")});let a=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions);await S.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await S.writeFile(a,await((o=(n=(i=this.dataStoreOptions)==null?void 0:i.encodeData)==null?void 0:n[1])==null?void 0:o.call(n,JSON.stringify(e)))??JSON.stringify(e,void 0,2),"utf-8")}catch(a){console.error("Error writing file:",a)}}async getValue(e,t){let i=await this.readFile();if(!i)return t;let n=i==null?void 0:i[e];if(typeof n>"u")return t;if(typeof t=="string")return typeof n=="object"&&n!==null?JSON.stringify(n):typeof n=="string"?n:String(n);if(typeof n=="string")try{return JSON.parse(n)}catch{return t}return n}async setValue(e,t){this.fileAccessQueue=this.fileAccessQueue.then(async()=>{let i=await this.readFile();i||(i={});let n=t;if(typeof t=="string")try{if(t.startsWith("{")||t.startsWith("[")){let o=JSON.parse(t);typeof o=="object"&&o!==null&&(n=o)}}catch{}i[e]=n,await this.writeFile(i)}).catch(i=>{throw console.error("Error in setValue:",i),i}),await this.fileAccessQueue.catch(()=>{})}async deleteValue(e){this.fileAccessQueue=this.fileAccessQueue.then(async()=>{let t=await this.readFile();t&&(delete t[e],await this.writeFile(t))}).catch(t=>{throw console.error("Error in deleteValue:",t),t}),await this.fileAccessQueue.catch(()=>{})}async deleteStorage(){var e;this.ensureDataStoreOptions();try{if(S||(S=(e=await import("fs/promises"))==null?void 0:e.default),!S)throw new x("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new y("'node:fs/promises' module not available")});let t=typeof this.options.filePath=="string"?this.options.filePath:this.options.filePath(this.dataStoreOptions.id,this.dataStoreOptions);return await S.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var Q=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new x("DataStoreSerializer has to run in a secure context (HTTPS) or in another environment that implements the subtleCrypto API!");this.stores=e,this.options={addChecksum:!0,ensureIntegrity:!0,remapIds:{},stringifyData:!0,...t}}async calcChecksum(e){try{return J(typeof e=="string"?e:JSON.stringify(e),"SHA-256")}catch(t){throw new Error(`Failed to calculate checksum: ${t.message}`,{cause:t})}}async serializePartial(e,t=!0,i=!0){var a;let n=[],o=this.stores.filter(s=>typeof e=="function"?e(s.id):e.includes(s.id));for(let s of o){let u=!!(t&&s.encodingEnabled()&&((a=s.encodeData)!=null&&a[1])),c=s.memoryCache?s.getData():await s.loadData(),m=u?await s.encodeData[1](JSON.stringify(c)):this.options.stringifyData?JSON.stringify(c):c;n.push({id:s.id,data:m,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(m):void 0})}return i?JSON.stringify(n):n}async serialize(e=!0,t=!0){return this.serializePartial(this.stores.map(i=>i.id),e,t)}async deserializePartial(e,t){let i=typeof t=="string"?JSON.parse(t):t;if(!Array.isArray(i)||!i.every(r.isSerializedDataStoreObj))throw new TypeError("Invalid serialized data format! Expected an array of SerializedDataStore objects.");let n=a=>{var s;return((s=Object.entries(this.options.remapIds).find(([,u])=>u.includes(a)))==null?void 0:s[0])??a},o=a=>typeof e=="function"?e(a):e.includes(a);for(let a of i){let s=n(a.id);if(!o(s))continue;let u=this.stores.find(m=>m.id===s);if(!u)throw new y(`Can't deserialize data because no DataStore instance with the ID "${s}" was found! Make sure to provide it in the DataStoreSerializer constructor.`);if(this.options.ensureIntegrity&&typeof a.checksum=="string"){let m=await this.calcChecksum(a.data);if(m!==a.checksum)throw new k(`Checksum mismatch for DataStore with ID "${a.id}"!
5
5
  Expected: ${a.checksum}
6
- Has: ${m}`)}let c=a.encoded&&u.encodingEnabled()?await u.decodeData[1](a.data):a.data;a.formatVersion&&!isNaN(Number(a.formatVersion))&&Number(a.formatVersion)<u.formatVersion?await u.runMigrations(JSON.parse(c),Number(a.formatVersion),!1):await u.setData(JSON.parse(c))}}async deserialize(e){return this.deserializePartial(this.stores.map(t=>t.id),e)}async loadStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(async t=>({id:t.id,data:await t.loadData()})))}async resetStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(t=>t.saveDefaultData()))}async deleteStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(t=>t.deleteData()))}static isSerializedDataStoreObjArray(e){return Array.isArray(e)&&e.every(t=>typeof t=="object"&&t!==null&&"id"in t&&"data"in t&&"formatVersion"in t&&"encoded"in t)}static isSerializedDataStoreObj(e){return typeof e=="object"&&e!==null&&"id"in e&&"data"in e&&"formatVersion"in e&&"encoded"in e}getStoresFiltered(e){return this.stores.filter(t=>typeof e>"u"?!0:Array.isArray(e)?e.includes(t.id):e(t.id))}};var z=class extends E{constructor(t=200,i="immediate",n){super(n);this.timeout=t;this.type=i}listeners=[];activeTimeout;queuedCall;addListener(t){this.listeners.push(t)}removeListener(t){let i=this.listeners.findIndex(n=>n===t);i!==-1&&this.listeners.splice(i,1)}removeAllListeners(){this.listeners=[]}getListeners(){return this.listeners}setTimeout(t){this.events.emit("change",this.timeout=t,this.type)}getTimeout(){return this.timeout}isTimeoutActive(){return typeof this.activeTimeout<"u"}setType(t){this.events.emit("change",this.timeout,this.type=t)}getType(){return this.type}call(...t){let i=(...o)=>{this.queuedCall=void 0,this.events.emit("call",...o),this.listeners.forEach(a=>a.call(this,...o))},n=()=>{this.activeTimeout=setTimeout(()=>{this.queuedCall?(this.queuedCall(),n()):this.activeTimeout=void 0},this.timeout)};switch(this.type){case"immediate":typeof this.activeTimeout>"u"?(i(...t),n()):this.queuedCall=()=>i(...t);break;case"idle":this.activeTimeout&&clearTimeout(this.activeTimeout),this.activeTimeout=setTimeout(()=>{i(...t),this.activeTimeout=void 0},this.timeout);break;default:throw new TypeError(`Invalid debouncer type: ${this.type}`)}}};function Je(r,e=200,t="immediate",i){let n=new z(e,t,i);n.addListener(r);let o=((...a)=>n.call(...a));return o.debouncer=n,o}
6
+ Has: ${m}`)}let c=a.encoded&&u.encodingEnabled()?await u.decodeData[1](typeof a.data=="string"?a.data:JSON.stringify(a.data)):a.data;a.formatVersion&&!isNaN(Number(a.formatVersion))&&Number(a.formatVersion)<u.formatVersion?await u.runMigrations(typeof c=="string"?JSON.parse(c):c,Number(a.formatVersion),!1):await u.setData(typeof c=="string"?JSON.parse(c):c)}}async deserialize(e){return this.deserializePartial(this.stores.map(t=>t.id),e)}async loadStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(async t=>({id:t.id,data:await t.loadData()})))}async resetStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(t=>t.saveDefaultData()))}async deleteStoresData(e){return Promise.allSettled(this.getStoresFiltered(e).map(t=>t.deleteData()))}static isSerializedDataStoreObjArray(e){return Array.isArray(e)&&e.every(t=>typeof t=="object"&&t!==null&&"id"in t&&"data"in t&&"formatVersion"in t&&"encoded"in t)}static isSerializedDataStoreObj(e){return typeof e=="object"&&e!==null&&"id"in e&&"data"in e&&"formatVersion"in e&&"encoded"in e}getStoresFiltered(e){return this.stores.filter(t=>typeof e>"u"?!0:Array.isArray(e)?e.includes(t.id):e(t.id))}};var z=class extends P{constructor(t=200,i="immediate",n){super(n);this.timeout=t;this.type=i}timeout;type;listeners=[];activeTimeout;queuedCall;addListener(t){this.listeners.push(t)}removeListener(t){let i=this.listeners.findIndex(n=>n===t);i!==-1&&this.listeners.splice(i,1)}removeAllListeners(){this.listeners=[]}getListeners(){return this.listeners}setTimeout(t){this.emitEvent("change",this.timeout=t,this.type)}getTimeout(){return this.timeout}isTimeoutActive(){return typeof this.activeTimeout<"u"}setType(t){this.emitEvent("change",this.timeout,this.type=t)}getType(){return this.type}call(...t){let i=(...o)=>{this.queuedCall=void 0,this.emitEvent("call",...o),this.listeners.forEach(a=>a.call(this,...o))},n=()=>{this.activeTimeout=setTimeout(()=>{this.queuedCall?(this.queuedCall(),n()):this.activeTimeout=void 0},this.timeout)};switch(this.type){case"immediate":typeof this.activeTimeout>"u"?(i(...t),n()):this.queuedCall=()=>i(...t);break;case"idle":this.activeTimeout&&clearTimeout(this.activeTimeout),this.activeTimeout=setTimeout(()=>{i(...t),this.activeTimeout=void 0},this.timeout);break;default:throw new TypeError(`Invalid debouncer type: ${this.type}`)}}};function _e(r,e=200,t="immediate",i){let n=new z(e,t,i);n.addListener(r);let o=((...a)=>n.call(...a));return o.debouncer=n,o}
7
7
  //# sourceMappingURL=CoreUtils.min.cjs.map