@sv443-network/coreutils 3.3.0 → 3.4.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,16 @@
1
1
  # @sv443-network/coreutils
2
2
 
3
+ ## 3.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 7e5c0b6: `Debouncer` and `debounce` now have an extra parameter of type `NanoEmitterOptions` to customize the underlying `NanoEmitter` instance.
8
+ - 2a04a7d: Added function `createRecurringTask()` as a "batteries included" alternative to `setImmediateTimeoutLoop()` and `setImmediateInterval()`, with more ways to control task execution and aborting.
9
+
10
+ ### Patch Changes
11
+
12
+ - 328c460: Fix internal event emission problems in `Debouncer`
13
+
3
14
  ## 3.3.0
4
15
 
5
16
  ### Minor Changes
package/README.md CHANGED
@@ -35,6 +35,7 @@ Intended to be used in conjunction with [`@sv443-network/userutils`](https://git
35
35
  - 🔷 [`type DataStoreOptions`](./docs.md#type-datastoreoptions) - Options for the data store
36
36
  - 🔷 [`type DataMigrationsDict`](./docs.md#type-datamigrationsdict) - Dictionary of data migration functions
37
37
  - 🔷 [`type DataStoreData`](./docs.md#type-datastoredata) - The type of the serializable data
38
+ - 🔷 [`type DataStoreEventMap`](./docs.md#type-datastoreeventmap) - Map of DataStore events
38
39
  - 🟧 [`class DataStoreSerializer`](./docs.md#class-datastoreserializer) - Serializes and deserializes data for multiple DataStore instances
39
40
  - 🔷 [`type DataStoreSerializerOptions`](./docs.md#type-datastoreserializeroptions) - Options for the DataStoreSerializer
40
41
  - 🔷 [`type LoadStoresDataResult`](./docs.md#type-loadstoresdataresult) - Result of calling [`loadStoresData()`](./docs.md#datastoreserializer-loadstoresdata)
@@ -83,6 +84,8 @@ Intended to be used in conjunction with [`@sv443-network/userutils`](https://git
83
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
84
85
  - 🟣 [`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)
85
86
  - 🟣 [`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
+ - 🟣 [`function createRecurringTask()`](./docs.md#function-createrecurringtask) - Similar to `setImmediateTimeoutLoop()`, but with many more ways of controlling execution.
88
+ - 🔷 [`type RecurringTaskOptions`](./docs.md#type-recurringtaskoptions) - Options for the `createRecurringTask()` function.
86
89
  - 🟣 [`function scheduleExit()`](./docs.md#function-scheduleexit) - Schedules a process exit after the next event loop tick, to allow operations like IO writes to finish.
87
90
  - [**NanoEmitter:**](./docs.md#nanoemitter)
88
91
  - 🟧 [`class NanoEmitter`](./docs.md#class-nanoemitter) - Simple, lightweight event emitter class that can be used in both FP and OOP, inspired by [`EventEmitter` from `node:events`](https://nodejs.org/api/events.html#class-eventemitter), based on [`nanoevents`](https://npmjs.com/package/nanoevents)
@@ -55,6 +55,7 @@ __export(lib_exports, {
55
55
  consumeGen: () => consumeGen,
56
56
  consumeStringGen: () => consumeStringGen,
57
57
  createProgressBar: () => createProgressBar,
58
+ createRecurringTask: () => createRecurringTask,
58
59
  darkenColor: () => darkenColor,
59
60
  debounce: () => debounce,
60
61
  decompress: () => decompress,
@@ -460,12 +461,45 @@ function getCallStack(asArray, lines = Infinity) {
460
461
  if (typeof lines !== "number" || isNaN(lines) || lines < 0)
461
462
  throw new TypeError("lines parameter must be a non-negative number");
462
463
  try {
463
- throw new Error("This is to capture a stack trace with CoreUtils.getCallStack(). (If you see this somewhere, you can safely ignore it.)");
464
+ throw new CustomError("GetCallStack", "Capturing a stack trace with CoreUtils.getCallStack(). If you see this anywhere, you can safely ignore it.");
464
465
  } catch (err) {
465
466
  const stack = (err.stack ?? "").split("\n").map((line) => line.trim()).slice(2, lines + 2);
466
467
  return asArray !== false ? stack : stack.join("\n");
467
468
  }
468
469
  }
470
+ function createRecurringTask(options) {
471
+ var _a;
472
+ let iterations = 0;
473
+ let aborted = false;
474
+ (_a = options.signal) == null ? void 0 : _a.addEventListener("abort", () => {
475
+ aborted = true;
476
+ }, { once: true });
477
+ const runRecurringTask = async (initial = false) => {
478
+ var _a2;
479
+ if (aborted)
480
+ return;
481
+ try {
482
+ if ((options.immediate ?? true) || !initial) {
483
+ iterations++;
484
+ if (await ((_a2 = options.condition) == null ? void 0 : _a2.call(options, iterations - 1)) ?? true) {
485
+ const val = await options.task(iterations - 1);
486
+ if (options.onSuccess)
487
+ await options.onSuccess(val, iterations - 1);
488
+ }
489
+ }
490
+ } catch (err) {
491
+ if (options.onError)
492
+ await options.onError(err, iterations - 1);
493
+ if (options.abortOnError)
494
+ aborted = true;
495
+ if (!options.onError && !options.abortOnError)
496
+ throw err;
497
+ }
498
+ if (!aborted && (typeof options.maxIterations !== "number" || iterations < options.maxIterations))
499
+ setTimeout(runRecurringTask, options.timeout);
500
+ };
501
+ return runRecurringTask(true);
502
+ }
469
503
 
470
504
  // lib/text.ts
471
505
  function autoPlural(term, num, pluralType = "auto") {
@@ -1276,7 +1310,10 @@ var DataStoreSerializer = class _DataStoreSerializer {
1276
1310
  ...options
1277
1311
  };
1278
1312
  }
1279
- /** Calculates the checksum of a string */
1313
+ /**
1314
+ * Calculates the checksum of a string. Uses {@linkcode computeHash()} with SHA-256 and digests as a hex string by default.
1315
+ * Override this in a subclass if a custom checksum method is needed.
1316
+ */
1280
1317
  async calcChecksum(input) {
1281
1318
  return computeHash(input, "SHA-256");
1282
1319
  }
@@ -1407,8 +1444,8 @@ var Debouncer = class extends NanoEmitter {
1407
1444
  * @param timeout Timeout in milliseconds between letting through calls - defaults to 200
1408
1445
  * @param type The edge type to use for the debouncer - see {@linkcode DebouncerType} for details or [the documentation for an explanation and diagram](https://github.com/Sv443-Network/UserUtils/blob/main/docs.md#debouncer) - defaults to "immediate"
1409
1446
  */
1410
- constructor(timeout = 200, type = "immediate") {
1411
- super();
1447
+ constructor(timeout = 200, type = "immediate", nanoEmitterOptions) {
1448
+ super(nanoEmitterOptions);
1412
1449
  this.timeout = timeout;
1413
1450
  this.type = type;
1414
1451
  }
@@ -1439,7 +1476,7 @@ var Debouncer = class extends NanoEmitter {
1439
1476
  //#region timeout
1440
1477
  /** Sets the timeout for the debouncer */
1441
1478
  setTimeout(timeout) {
1442
- this.emit("change", this.timeout = timeout, this.type);
1479
+ this.events.emit("change", this.timeout = timeout, this.type);
1443
1480
  }
1444
1481
  /** Returns the current timeout */
1445
1482
  getTimeout() {
@@ -1452,7 +1489,7 @@ var Debouncer = class extends NanoEmitter {
1452
1489
  //#region type
1453
1490
  /** Sets the edge type for the debouncer */
1454
1491
  setType(type) {
1455
- this.emit("change", this.timeout, this.type = type);
1492
+ this.events.emit("change", this.timeout, this.type = type);
1456
1493
  }
1457
1494
  /** Returns the current edge type */
1458
1495
  getType() {
@@ -1463,7 +1500,7 @@ var Debouncer = class extends NanoEmitter {
1463
1500
  call(...args) {
1464
1501
  const cl = (...a) => {
1465
1502
  this.queuedCall = void 0;
1466
- this.emit("call", ...a);
1503
+ this.events.emit("call", ...a);
1467
1504
  this.listeners.forEach((l) => l.call(this, ...a));
1468
1505
  };
1469
1506
  const setRepeatTimeout = () => {
@@ -1496,8 +1533,8 @@ var Debouncer = class extends NanoEmitter {
1496
1533
  }
1497
1534
  }
1498
1535
  };
1499
- function debounce(fn, timeout = 200, type = "immediate") {
1500
- const debouncer = new Debouncer(timeout, type);
1536
+ function debounce(fn, timeout = 200, type = "immediate", nanoEmitterOptions) {
1537
+ const debouncer = new Debouncer(timeout, type, nanoEmitterOptions);
1501
1538
  debouncer.addListener(fn);
1502
1539
  const func = ((...args) => debouncer.call(...args));
1503
1540
  func.debouncer = debouncer;
@@ -1,6 +1,6 @@
1
- "use strict";var Y=Object.create;var N=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ie=Object.prototype.hasOwnProperty;var ne=(r,e)=>{for(var t in e)N(r,t,{get:e[t],enumerable:!0})},L=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of te(e))!ie.call(r,n)&&n!==t&&N(r,n,{get:()=>e[n],enumerable:!(i=ee(e,n))||i.enumerable});return r};var k=(r,e,t)=>(t=r!=null?Y(re(r)):{},L(e||!r||!r.__esModule?N(t,"default",{value:r,enumerable:!0}):t,r)),ae=r=>L(N({},"__esModule",{value:!0}),r);var $e={};ne($e,{BrowserStorageEngine:()=>j,ChecksumMismatchError:()=>v,CustomError:()=>w,DataStore:()=>R,DataStoreEngine:()=>P,DataStoreSerializer:()=>K,DatedError:()=>p,Debouncer:()=>V,FileStorageEngine:()=>B,MigrationError:()=>x,NanoEmitter:()=>S,NetworkError:()=>E,ScriptContextError:()=>y,ValidationError:()=>U,abtoa:()=>W,atoab:()=>Q,autoPlural:()=>Pe,bitSetHas:()=>oe,capitalize:()=>Oe,clamp:()=>D,compress:()=>I,computeHash:()=>z,consumeGen:()=>ge,consumeStringGen:()=>ye,createProgressBar:()=>Ne,darkenColor:()=>q,debounce:()=>Me,decompress:()=>C,defaultPbChars:()=>G,digitCount:()=>se,fetchAdvanced:()=>be,formatNumber:()=>ue,getCallStack:()=>Ee,getListLength:()=>De,hexToRgb:()=>_,insertValues:()=>Fe,joinArrayReadable:()=>Ve,lightenColor:()=>fe,mapRange:()=>F,overflowVal:()=>ce,pauseFor:()=>Se,pureObj:()=>Te,randRange:()=>T,randomId:()=>he,randomItem:()=>de,randomItemIndex:()=>$,randomizeArray:()=>me,rgbToHex:()=>H,roundFixed:()=>M,scheduleExit:()=>xe,secsToTimeStr:()=>Ae,setImmediateInterval:()=>ve,setImmediateTimeoutLoop:()=>we,takeRandomItem:()=>pe,takeRandomItemIndex:()=>J,truncStr:()=>ke,valsWithin:()=>le});module.exports=ae($e);function oe(r,e){return(r&e)===e}function D(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function se(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 ue(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function F(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 ce(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 T(...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(F(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function M(r,e){let t=10**e;return Math.round(r*t)/t}function le(r,e,t=1,i=.5){return Math.abs(M(r,t)-M(e,t))<=i}function de(r){return $(r)[0]}function $(r){if(r.length===0)return[void 0,void 0];let e=T(r.length-1);return[r[e],e]}function me(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 pe(r){var e;return(e=J(r))==null?void 0:e[0]}function J(r){let[e,t]=$(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function q(r,e,t=!1){var c;r=r.trim();let i=(l,d,m,f)=>(l=Math.max(0,Math.min(255,l-l*f/100)),d=Math.max(0,Math.min(255,d-d*f/100)),m=Math.max(0,Math.min(255,m-m*f/100)),[l,d,m]),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]=_(r);else if(r.startsWith("rgb")){let l=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!l)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=l}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?H(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function _(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[D(i,0,255),D(n,0,255),D(o,0,255),typeof e=="number"?D(e,0,1):void 0]}function fe(r,e,t=!1){return q(r,e*-1,t)}function H(r,e,t,i,n=!0,o=!1){let a=s=>D(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 W(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function Q(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function I(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:W(a)}async function C(r,e,t="string"){let i=r instanceof Uint8Array?r:Q((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 z(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 he(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=>F(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[T(0,o.length-1,t)]===1?a.toUpperCase():a).join(""):n.join("")}var p=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},v=class extends p{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},w=class extends p{constructor(e,t,i){super(t,i),this.name=e}},x=class extends p{constructor(e,t){super(e,t),this.name="MigrationError"}},U=class extends p{constructor(e,t){super(e,t),this.name="ValidationError"}},y=class extends p{constructor(e,t){super(e,t),this.name="ScriptContextError"}},E=class extends p{constructor(e,t){super(e,t),this.name="NetworkError"}};async function ge(r){return await(typeof r=="function"?r():r)}async function ye(r){return typeof r=="string"?r:String(typeof r=="function"?await r():r)}async function be(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 E("Error while calling fetch",{cause:u})}}function De(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function Se(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new w("AbortError","The pause was aborted")):i()})})}function Te(r){return Object.assign(Object.create(null),r??{})}function ve(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 we(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 xe(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 y("Cannot exit the process, no exit method available");setTimeout(t,e)}function Ee(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 Error("This is to capture a stack trace with CoreUtils.getCallStack(). (If you see this somewhere, you can safely ignore it.)")}catch(t){let i=(t.stack??"").split(`
1
+ "use strict";var Y=Object.create;var N=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,ie=Object.prototype.hasOwnProperty;var ne=(r,e)=>{for(var t in e)N(r,t,{get:e[t],enumerable:!0})},K=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of te(e))!ie.call(r,n)&&n!==t&&N(r,n,{get:()=>e[n],enumerable:!(i=ee(e,n))||i.enumerable});return r};var A=(r,e,t)=>(t=r!=null?Y(re(r)):{},K(e||!r||!r.__esModule?N(t,"default",{value:r,enumerable:!0}):t,r)),ae=r=>K(N({},"__esModule",{value:!0}),r);var $e={};ne($e,{BrowserStorageEngine:()=>j,ChecksumMismatchError:()=>w,CustomError:()=>S,DataStore:()=>U,DataStoreEngine:()=>P,DataStoreSerializer:()=>L,DatedError:()=>p,Debouncer:()=>F,FileStorageEngine:()=>B,MigrationError:()=>x,NanoEmitter:()=>T,NetworkError:()=>E,ScriptContextError:()=>b,ValidationError:()=>R,abtoa:()=>W,atoab:()=>Q,autoPlural:()=>Oe,bitSetHas:()=>oe,capitalize:()=>Ne,clamp:()=>D,compress:()=>$,computeHash:()=>z,consumeGen:()=>ge,consumeStringGen:()=>be,createProgressBar:()=>Ve,createRecurringTask:()=>Pe,darkenColor:()=>q,debounce:()=>Ie,decompress:()=>C,defaultPbChars:()=>G,digitCount:()=>se,fetchAdvanced:()=>ye,formatNumber:()=>ue,getCallStack:()=>Ee,getListLength:()=>De,hexToRgb:()=>_,insertValues:()=>Fe,joinArrayReadable:()=>ke,lightenColor:()=>fe,mapRange:()=>V,overflowVal:()=>ce,pauseFor:()=>Te,pureObj:()=>Se,randRange:()=>v,randomId:()=>he,randomItem:()=>de,randomItemIndex:()=>I,randomizeArray:()=>me,rgbToHex:()=>H,roundFixed:()=>M,scheduleExit:()=>xe,secsToTimeStr:()=>Ae,setImmediateInterval:()=>ve,setImmediateTimeoutLoop:()=>we,takeRandomItem:()=>pe,takeRandomItemIndex:()=>J,truncStr:()=>Me,valsWithin:()=>le});module.exports=ae($e);function oe(r,e){return(r&e)===e}function D(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function se(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 ue(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function V(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 ce(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(V(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function M(r,e){let t=10**e;return Math.round(r*t)/t}function le(r,e,t=1,i=.5){return Math.abs(M(r,t)-M(e,t))<=i}function de(r){return I(r)[0]}function I(r){if(r.length===0)return[void 0,void 0];let e=v(r.length-1);return[r[e],e]}function me(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 pe(r){var e;return(e=J(r))==null?void 0:e[0]}function J(r){let[e,t]=I(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function q(r,e,t=!1){var c;r=r.trim();let i=(l,d,m,f)=>(l=Math.max(0,Math.min(255,l-l*f/100)),d=Math.max(0,Math.min(255,d-d*f/100)),m=Math.max(0,Math.min(255,m-m*f/100)),[l,d,m]),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]=_(r);else if(r.startsWith("rgb")){let l=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!l)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=l}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?H(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function _(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[D(i,0,255),D(n,0,255),D(o,0,255),typeof e=="number"?D(e,0,1):void 0]}function fe(r,e,t=!1){return q(r,e*-1,t)}function H(r,e,t,i,n=!0,o=!1){let a=s=>D(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 W(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function Q(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function $(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:W(a)}async function C(r,e,t="string"){let i=r instanceof Uint8Array?r:Q((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 z(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 he(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=>V(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 p=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},w=class extends p{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},S=class extends p{constructor(e,t,i){super(t,i),this.name=e}},x=class extends p{constructor(e,t){super(e,t),this.name="MigrationError"}},R=class extends p{constructor(e,t){super(e,t),this.name="ValidationError"}},b=class extends p{constructor(e,t){super(e,t),this.name="ScriptContextError"}},E=class extends p{constructor(e,t){super(e,t),this.name="NetworkError"}};async function ge(r){return await(typeof r=="function"?r():r)}async function be(r){return typeof r=="string"?r:String(typeof r=="function"?await r():r)}async function ye(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 E("Error while calling fetch",{cause:u})}}function De(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function Te(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new S("AbortError","The pause was aborted")):i()})})}function Se(r){return Object.assign(Object.create(null),r??{})}function ve(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 we(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 xe(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 b("Cannot exit the process, no exit method available");setTimeout(t,e)}function Ee(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 S("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 Pe(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 Oe(r){return r.charAt(0).toUpperCase()+r.slice(1)}var G={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function Ne(r,e,t=G){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 Fe(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 Ve(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 Ae(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 Z=()=>({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 S=class{events=Z();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:l}=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 d=[],m=(g=!1)=>{if(!(!(c!=null&&c.aborted)&&!g)){for(let b of d)b();d.splice(0,d.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(b=>!d.includes(b))}},f=new Set,O=()=>s.length===0||f.size===s.length;for(let g of a){let b=this.events.on(g,((...A)=>{m(),O()&&(l(g,...A),u&&m(!0))}));d.push(b)}for(let g of s){let b=this.events.on(g,((...A)=>{m(),f.add(g),O()&&(a.length===0||a.includes(g))&&(l(g,...A),u&&m(!0))}));d.push(b)}t.push(()=>m(!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 X=1,R=class extends S{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 I(i,t,"string")],this.decodeData=[t,async i=>await C(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 l=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),d=await this.engine.getValue(`_uucfgenc-${this.id}`,null),m=[],f=(O,g,b)=>{m.push(this.engine.setValue(g,b)),m.push(this.engine.deleteValue(O))};f(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(l)||f(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,l),typeof d=="boolean"||d==="true"||d==="false"||typeof d=="number"||d==="0"||d==="1"?f(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(d)?this.compressionFormat??null:null):(m.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),m.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(m)}(isNaN(u)||u<X)&&await this.engine.setValue("__ds_fmt_ver",X)}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 p("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,l]=o[u],d=Number(c);if(t<this.formatVersion&&t<d)try{let m=l(n);n=m instanceof Promise?await m:m,a=t=d;let f=d>=this.formatVersion||u===o.length-1;this.events.emit("migrateData",d,n,f)}catch(m){let f=new x(`Error while running migration function for format version '${c}'`,{cause:m});if(this.events.emit("migrationError",d,f),this.events.emit("error",f),!i)throw f;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,l]=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),!!l&&String(l)!=="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 P=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 p("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 p("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))}},j=class extends P{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)}},h,B=class extends P{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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.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(h||(h=(t=await import("fs/promises"))==null?void 0:t.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await h.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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var K=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new y("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 z(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(),l=u?await s.encodeData[1](JSON.stringify(c)):JSON.stringify(c);n.push({id:s.id,data:l,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(l):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(l=>l.id===s);if(!u)throw new p(`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 l=await this.calcChecksum(a.data);if(l!==a.checksum)throw new v(`Checksum mismatch for DataStore with ID "${a.id}"!
3
+ `)}}function Pe(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 Oe(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 Ne(r){return r.charAt(0).toUpperCase()+r.slice(1)}var G={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function Ve(r,e,t=G){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 Fe(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 Ae(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 Me(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 Z=()=>({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 T=class{events=Z();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:l}=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 d=[],m=(g=!1)=>{if(!(!(c!=null&&c.aborted)&&!g)){for(let y of d)y();d.splice(0,d.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(y=>!d.includes(y))}},f=new Set,O=()=>s.length===0||f.size===s.length;for(let g of a){let y=this.events.on(g,((...k)=>{m(),O()&&(l(g,...k),u&&m(!0))}));d.push(y)}for(let g of s){let y=this.events.on(g,((...k)=>{m(),f.add(g),O()&&(a.length===0||a.includes(g))&&(l(g,...k),u&&m(!0))}));d.push(y)}t.push(()=>m(!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 X=1,U=class extends T{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 $(i,t,"string")],this.decodeData=[t,async i=>await C(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 l=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),d=await this.engine.getValue(`_uucfgenc-${this.id}`,null),m=[],f=(O,g,y)=>{m.push(this.engine.setValue(g,y)),m.push(this.engine.deleteValue(O))};f(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(l)||f(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,l),typeof d=="boolean"||d==="true"||d==="false"||typeof d=="number"||d==="0"||d==="1"?f(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(d)?this.compressionFormat??null:null):(m.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),m.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(m)}(isNaN(u)||u<X)&&await this.engine.setValue("__ds_fmt_ver",X)}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 p("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,l]=o[u],d=Number(c);if(t<this.formatVersion&&t<d)try{let m=l(n);n=m instanceof Promise?await m:m,a=t=d;let f=d>=this.formatVersion||u===o.length-1;this.events.emit("migrateData",d,n,f)}catch(m){let f=new x(`Error while running migration function for format version '${c}'`,{cause:m});if(this.events.emit("migrationError",d,f),this.events.emit("error",f),!i)throw f;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,l]=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),!!l&&String(l)!=="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 P=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 p("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 p("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))}},j=class extends P{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)}},h,B=class extends P{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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.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(h||(h=(t=await import("fs/promises"))==null?void 0:t.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await h.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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var L=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new b("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 z(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(),l=u?await s.encodeData[1](JSON.stringify(c)):JSON.stringify(c);n.push({id:s.id,data:l,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(l):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(l=>l.id===s);if(!u)throw new p(`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 l=await this.calcChecksum(a.data);if(l!==a.checksum)throw new w(`Checksum mismatch for DataStore with ID "${a.id}"!
4
4
  Expected: ${a.checksum}
5
- Has: ${l}`)}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 V=class extends S{constructor(t=200,i="immediate"){super();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.emit("change",this.timeout=t,this.type)}getTimeout(){return this.timeout}isTimeoutActive(){return typeof this.activeTimeout<"u"}setType(t){this.emit("change",this.timeout,this.type=t)}getType(){return this.type}call(...t){let i=(...o)=>{this.queuedCall=void 0,this.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 Me(r,e=200,t="immediate"){let i=new V(e,t);i.addListener(r);let n=((...o)=>i.call(...o));return n.debouncer=i,n}
5
+ Has: ${l}`)}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 F=class extends T{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 Ie(r,e=200,t="immediate",i){let n=new F(e,t,i);n.addListener(r);let o=((...a)=>n.call(...a));return o.debouncer=n,o}
6
6
  //# sourceMappingURL=CoreUtils.min.cjs.map
@@ -1,6 +1,6 @@
1
- function G(r,e){return(r&e)===e}function D(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function Z(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 X(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function F(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 Y(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(F(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function A(r,e){let t=10**e;return Math.round(r*t)/t}function ee(r,e,t=1,i=.5){return Math.abs(A(r,t)-A(e,t))<=i}function ie(r){return k(r)[0]}function k(r){if(r.length===0)return[void 0,void 0];let e=v(r.length-1);return[r[e],e]}function ne(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 ae(r){var e;return(e=L(r))==null?void 0:e[0]}function L(r){let[e,t]=k(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function J(r,e,t=!1){var c;r=r.trim();let i=(l,d,m,f)=>(l=Math.max(0,Math.min(255,l-l*f/100)),d=Math.max(0,Math.min(255,d-d*f/100)),m=Math.max(0,Math.min(255,m-m*f/100)),[l,d,m]),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]=q(r);else if(r.startsWith("rgb")){let l=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!l)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=l}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?_(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function q(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[D(i,0,255),D(n,0,255),D(o,0,255),typeof e=="number"?D(e,0,1):void 0]}function ue(r,e,t=!1){return J(r,e*-1,t)}function _(r,e,t,i,n=!0,o=!1){let a=s=>D(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 H(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function W(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function M(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:H(a)}async function $(r,e,t="string"){let i=r instanceof Uint8Array?r:W((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 I(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 de(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=>F(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 p=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},w=class extends p{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},x=class extends p{constructor(e,t,i){super(t,i),this.name=e}},E=class extends p{constructor(e,t){super(e,t),this.name="MigrationError"}},C=class extends p{constructor(e,t){super(e,t),this.name="ValidationError"}},y=class extends p{constructor(e,t){super(e,t),this.name="ScriptContextError"}},P=class extends p{constructor(e,t){super(e,t),this.name="NetworkError"}};async function he(r){return await(typeof r=="function"?r():r)}async function ge(r){return typeof r=="string"?r:String(typeof r=="function"?await r():r)}async function ye(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 P("Error while calling fetch",{cause:u})}}function be(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function De(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new x("AbortError","The pause was aborted")):i()})})}function Se(r){return Object.assign(Object.create(null),r??{})}function Te(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 ve(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 we(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 y("Cannot exit the process, no exit method available");setTimeout(t,e)}function xe(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 Error("This is to capture a stack trace with CoreUtils.getCallStack(). (If you see this somewhere, you can safely ignore it.)")}catch(t){let i=(t.stack??"").split(`
1
+ function G(r,e){return(r&e)===e}function D(r,e,t){return typeof t!="number"&&(t=e,e=0),Math.max(Math.min(r,t),e)}function Z(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 X(r,e,t){return r.toLocaleString(e,t==="short"?{notation:"compact",compactDisplay:"short",maximumFractionDigits:1}:{style:"decimal",maximumFractionDigits:0})}function V(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 Y(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 w(...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(V(o,0,255,e,t)).toString(10)).join(""))}else return Math.floor(Math.random()*(t-e+1))+e}function k(r,e){let t=10**e;return Math.round(r*t)/t}function ee(r,e,t=1,i=.5){return Math.abs(k(r,t)-k(e,t))<=i}function ie(r){return A(r)[0]}function A(r){if(r.length===0)return[void 0,void 0];let e=w(r.length-1);return[r[e],e]}function ne(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 ae(r){var e;return(e=K(r))==null?void 0:e[0]}function K(r){let[e,t]=A(r);return t===void 0?[void 0,void 0]:(r.splice(t,1),[e,t])}function J(r,e,t=!1){var c;r=r.trim();let i=(l,d,m,f)=>(l=Math.max(0,Math.min(255,l-l*f/100)),d=Math.max(0,Math.min(255,d-d*f/100)),m=Math.max(0,Math.min(255,m-m*f/100)),[l,d,m]),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]=q(r);else if(r.startsWith("rgb")){let l=(c=r.match(/\d+(\.\d+)?/g))==null?void 0:c.map(Number);if(!l)throw new TypeError("Invalid RGB/RGBA color format");[n,o,a,s]=l}else throw new TypeError("Unsupported color format");return[n,o,a]=i(n,o,a,e),u?_(n,o,a,s,r.startsWith("#"),t):r.startsWith("rgba")?`rgba(${n}, ${o}, ${a}, ${s??NaN})`:`rgb(${n}, ${o}, ${a})`}function q(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[D(i,0,255),D(n,0,255),D(o,0,255),typeof e=="number"?D(e,0,1):void 0]}function ue(r,e,t=!1){return J(r,e*-1,t)}function _(r,e,t,i,n=!0,o=!1){let a=s=>D(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 H(r){return btoa(new Uint8Array(r).reduce((e,t)=>e+String.fromCharCode(t),""))}function W(r){return Uint8Array.from(atob(r),e=>e.charCodeAt(0))}async function M(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:H(a)}async function I(r,e,t="string"){let i=r instanceof Uint8Array?r:W((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 $(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 de(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=>V(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[w(0,o.length-1,t)]===1?a.toUpperCase():a).join(""):n.join("")}var p=class extends Error{date;constructor(e,t){super(e,t),this.name=this.constructor.name,this.date=new Date}},x=class extends p{constructor(e,t){super(e,t),this.name="ChecksumMismatchError"}},S=class extends p{constructor(e,t,i){super(t,i),this.name=e}},E=class extends p{constructor(e,t){super(e,t),this.name="MigrationError"}},C=class extends p{constructor(e,t){super(e,t),this.name="ValidationError"}},b=class extends p{constructor(e,t){super(e,t),this.name="ScriptContextError"}},P=class extends p{constructor(e,t){super(e,t),this.name="NetworkError"}};async function he(r){return await(typeof r=="function"?r():r)}async function ge(r){return typeof r=="string"?r:String(typeof r=="function"?await r():r)}async function be(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 P("Error while calling fetch",{cause:u})}}function ye(r,e=!0){return"length"in r?r.length:"size"in r?r.size:"count"in r?r.count:e?0:NaN}function De(r,e,t=!1){return new Promise((i,n)=>{let o=setTimeout(()=>i(),r);e==null||e.addEventListener("abort",()=>{clearTimeout(o),t?n(new S("AbortError","The pause was aborted")):i()})})}function Te(r){return Object.assign(Object.create(null),r??{})}function Se(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 ve(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 we(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 b("Cannot exit the process, no exit method available");setTimeout(t,e)}function xe(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 S("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 Pe(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 Oe(r){return r.charAt(0).toUpperCase()+r.slice(1)}var Q={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function Ne(r,e,t=Q){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 Fe(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 Ve(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 Ae(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 z=()=>({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 S=class{events=z();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:l}=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 d=[],m=(g=!1)=>{if(!(!(c!=null&&c.aborted)&&!g)){for(let b of d)b();d.splice(0,d.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(b=>!d.includes(b))}},f=new Set,T=()=>s.length===0||f.size===s.length;for(let g of a){let b=this.events.on(g,((...N)=>{m(),T()&&(l(g,...N),u&&m(!0))}));d.push(b)}for(let g of s){let b=this.events.on(g,((...N)=>{m(),f.add(g),T()&&(a.length===0||a.includes(g))&&(l(g,...N),u&&m(!0))}));d.push(b)}t.push(()=>m(!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 U=1,R=class extends S{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 M(i,t,"string")],this.decodeData=[t,async i=>await $(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 l=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),d=await this.engine.getValue(`_uucfgenc-${this.id}`,null),m=[],f=(T,g,b)=>{m.push(this.engine.setValue(g,b)),m.push(this.engine.deleteValue(T))};f(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(l)||f(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,l),typeof d=="boolean"||d==="true"||d==="false"||typeof d=="number"||d==="0"||d==="1"?f(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(d)?this.compressionFormat??null:null):(m.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),m.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(m)}(isNaN(u)||u<U)&&await this.engine.setValue("__ds_fmt_ver",U)}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 p("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,l]=o[u],d=Number(c);if(t<this.formatVersion&&t<d)try{let m=l(n);n=m instanceof Promise?await m:m,a=t=d;let f=d>=this.formatVersion||u===o.length-1;this.events.emit("migrateData",d,n,f)}catch(m){let f=new E(`Error while running migration function for format version '${c}'`,{cause:m});if(this.events.emit("migrationError",d,f),this.events.emit("error",f),!i)throw f;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,l]=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),!!l&&String(l)!=="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 O=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 p("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 p("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))}},j=class extends O{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)}},h,B=class extends O{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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.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(h||(h=(t=await import("fs/promises"))==null?void 0:t.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await h.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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new y("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var K=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new y("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 I(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(),l=u?await s.encodeData[1](JSON.stringify(c)):JSON.stringify(c);n.push({id:s.id,data:l,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(l):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(l=>l.id===s);if(!u)throw new p(`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 l=await this.calcChecksum(a.data);if(l!==a.checksum)throw new w(`Checksum mismatch for DataStore with ID "${a.id}"!
3
+ `)}}function Ee(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 Oe(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 Ne(r){return r.charAt(0).toUpperCase()+r.slice(1)}var Q={100:"\u2588",75:"\u2593",50:"\u2592",25:"\u2591",0:"\u2500"};function Ve(r,e,t=Q){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 Fe(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 Ae(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 Me(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 z=()=>({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 T=class{events=z();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:l}=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 d=[],m=(g=!1)=>{if(!(!(c!=null&&c.aborted)&&!g)){for(let y of d)y();d.splice(0,d.length),this.eventUnsubscribes=this.eventUnsubscribes.filter(y=>!d.includes(y))}},f=new Set,v=()=>s.length===0||f.size===s.length;for(let g of a){let y=this.events.on(g,((...N)=>{m(),v()&&(l(g,...N),u&&m(!0))}));d.push(y)}for(let g of s){let y=this.events.on(g,((...N)=>{m(),f.add(g),v()&&(a.length===0||a.includes(g))&&(l(g,...N),u&&m(!0))}));d.push(y)}t.push(()=>m(!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 R=1,U=class extends T{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 M(i,t,"string")],this.decodeData=[t,async i=>await I(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 l=Number(await this.engine.getValue(`_uucfgver-${this.id}`,NaN)),d=await this.engine.getValue(`_uucfgenc-${this.id}`,null),m=[],f=(v,g,y)=>{m.push(this.engine.setValue(g,y)),m.push(this.engine.deleteValue(v))};f(`_uucfg-${this.id}`,`${this.keyPrefix}${this.id}-dat`,c),isNaN(l)||f(`_uucfgver-${this.id}`,`${this.keyPrefix}${this.id}-ver`,l),typeof d=="boolean"||d==="true"||d==="false"||typeof d=="number"||d==="0"||d==="1"?f(`_uucfgenc-${this.id}`,`${this.keyPrefix}${this.id}-enf`,[0,"0",!0,"true"].includes(d)?this.compressionFormat??null:null):(m.push(this.engine.setValue(`${this.keyPrefix}${this.id}-enf`,this.compressionFormat)),m.push(this.engine.deleteValue(`_uucfgenc-${this.id}`))),await Promise.allSettled(m)}(isNaN(u)||u<R)&&await this.engine.setValue("__ds_fmt_ver",R)}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 p("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,l]=o[u],d=Number(c);if(t<this.formatVersion&&t<d)try{let m=l(n);n=m instanceof Promise?await m:m,a=t=d;let f=d>=this.formatVersion||u===o.length-1;this.events.emit("migrateData",d,n,f)}catch(m){let f=new E(`Error while running migration function for format version '${c}'`,{cause:m});if(this.events.emit("migrationError",d,f),this.events.emit("error",f),!i)throw f;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,l]=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),!!l&&String(l)!=="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 O=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 p("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 p("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))}},j=class extends O{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)}},h,B=class extends O{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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.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(h||(h=(t=await import("fs/promises"))==null?void 0:t.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.mkdir(a.slice(0,a.lastIndexOf(a.includes("/")?"/":"\\")),{recursive:!0}),await h.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(h||(h=(e=await import("fs/promises"))==null?void 0:e.default),!h)throw new b("FileStorageEngine requires Node.js or Deno with Node compatibility (v1.31+)",{cause:new p("'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 h.unlink(t)}catch(t){console.error("Error deleting file:",t)}}};var L=class r{stores;options;constructor(e,t={}){if(!crypto||!crypto.subtle)throw new b("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 $(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(),l=u?await s.encodeData[1](JSON.stringify(c)):JSON.stringify(c);n.push({id:s.id,data:l,formatVersion:s.formatVersion,encoded:u,checksum:this.options.addChecksum?await this.calcChecksum(l):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(l=>l.id===s);if(!u)throw new p(`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 l=await this.calcChecksum(a.data);if(l!==a.checksum)throw new x(`Checksum mismatch for DataStore with ID "${a.id}"!
4
4
  Expected: ${a.checksum}
5
- Has: ${l}`)}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 V=class extends S{constructor(t=200,i="immediate"){super();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.emit("change",this.timeout=t,this.type)}getTimeout(){return this.timeout}isTimeoutActive(){return typeof this.activeTimeout<"u"}setType(t){this.emit("change",this.timeout,this.type=t)}getType(){return this.type}call(...t){let i=(...o)=>{this.queuedCall=void 0,this.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 He(r,e=200,t="immediate"){let i=new V(e,t);i.addListener(r);let n=((...o)=>i.call(...o));return n.debouncer=i,n}export{j as BrowserStorageEngine,w as ChecksumMismatchError,x as CustomError,R as DataStore,O as DataStoreEngine,K as DataStoreSerializer,p as DatedError,V as Debouncer,B as FileStorageEngine,E as MigrationError,S as NanoEmitter,P as NetworkError,y as ScriptContextError,C as ValidationError,H as abtoa,W as atoab,Pe as autoPlural,G as bitSetHas,Oe as capitalize,D as clamp,M as compress,I as computeHash,he as consumeGen,ge as consumeStringGen,Ne as createProgressBar,J as darkenColor,He as debounce,$ as decompress,Q as defaultPbChars,Z as digitCount,ye as fetchAdvanced,X as formatNumber,xe as getCallStack,be as getListLength,q as hexToRgb,Fe as insertValues,Ve as joinArrayReadable,ue as lightenColor,F as mapRange,Y as overflowVal,De as pauseFor,Se as pureObj,v as randRange,de as randomId,ie as randomItem,k as randomItemIndex,ne as randomizeArray,_ as rgbToHex,A as roundFixed,we as scheduleExit,Ae as secsToTimeStr,Te as setImmediateInterval,ve as setImmediateTimeoutLoop,ae as takeRandomItem,L as takeRandomItemIndex,ke as truncStr,ee as valsWithin};
5
+ Has: ${l}`)}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 F=class extends T{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 We(r,e=200,t="immediate",i){let n=new F(e,t,i);n.addListener(r);let o=((...a)=>n.call(...a));return o.debouncer=n,o}export{j as BrowserStorageEngine,x as ChecksumMismatchError,S as CustomError,U as DataStore,O as DataStoreEngine,L as DataStoreSerializer,p as DatedError,F as Debouncer,B as FileStorageEngine,E as MigrationError,T as NanoEmitter,P as NetworkError,b as ScriptContextError,C as ValidationError,H as abtoa,W as atoab,Oe as autoPlural,G as bitSetHas,Ne as capitalize,D as clamp,M as compress,$ as computeHash,he as consumeGen,ge as consumeStringGen,Ve as createProgressBar,Ee as createRecurringTask,J as darkenColor,We as debounce,I as decompress,Q as defaultPbChars,Z as digitCount,be as fetchAdvanced,X as formatNumber,xe as getCallStack,ye as getListLength,q as hexToRgb,Fe as insertValues,ke as joinArrayReadable,ue as lightenColor,V as mapRange,Y as overflowVal,De as pauseFor,Te as pureObj,w as randRange,de as randomId,ie as randomItem,A as randomItemIndex,ne as randomizeArray,_ as rgbToHex,k as roundFixed,we as scheduleExit,Ae as secsToTimeStr,Se as setImmediateInterval,ve as setImmediateTimeoutLoop,ae as takeRandomItem,K as takeRandomItemIndex,Me as truncStr,ee as valsWithin};
6
6
  //# sourceMappingURL=CoreUtils.min.mjs.map