@discordeno/utils 19.0.0-next.99fbe1e → 19.0.0-next.9aaba00

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,113 @@
1
- export class Collection extends Map{constructor(e,t){if(super(e??[]),this.maxSize=t?.maxSize,!t?.sweeper)return;this.startSweeper(t.sweeper)}startSweeper(e){return this.sweeper?.intervalId&&clearInterval(this.sweeper.intervalId),this.sweeper=e,this.sweeper.intervalId=setInterval(()=>{this.forEach((t,r)=>{if(this.sweeper?.filter(t,r,e.bot))return this.delete(r),r})},e.interval),this.sweeper.intervalId}stopSweeper(){return clearInterval(this.sweeper?.intervalId)}changeSweeperInterval(e){null!=this.sweeper&&this.startSweeper({filter:this.sweeper.filter,interval:e})}changeSweeperFilter(e){null!=this.sweeper&&this.startSweeper({filter:e,interval:this.sweeper.interval})}set(e,t){return(void 0!==this.maxSize||0===this.maxSize)&&this.size>=this.maxSize?this:super.set(e,t)}forceSet(e,t){return super.set(e,t)}array(){return[...this.values()]}first(){return this.values().next().value}last(){return[...this.values()][this.size-1]}random(){let e=[...this.values()];return e[Math.floor(Math.random()*e.length)]}find(e){for(let t of this.keys()){let r=this.get(t);if(e(r,t))return r}}filter(e){let t=new Collection;return this.forEach((r,s)=>{e(r,s)&&t.set(s,r)}),t}map(e){let t=[];for(let r of this.keys()){let s=this.get(r);t.push(e(s,r))}return t}some(e){for(let t of this.keys()){let r=this.get(t);if(e(r,t))return!0}return!1}every(e){for(let t of this.keys()){let r=this.get(t);if(!e(r,t))return!1}return!0}reduce(e,t){let r=t;for(let s of this.keys()){let i=this.get(s);r=e(r,i,s)}return r}}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Db2xsZWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlSG9sZGVyQm90IHt9XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uPEssIFY+IGV4dGVuZHMgTWFwPEssIFY+IHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGFtb3VudCBvZiBpdGVtcyBhbGxvd2VkIGluIHRoaXMgY29sbGVjdGlvbi4gVG8gZGlzYWJsZSBjYWNoZSwgc2V0IGl0IDAsIHNldCB0byB1bmRlZmluZWQgdG8gbWFrZSBpdCBpbmZpbml0ZS5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBtYXhTaXplOiBudW1iZXIgfCB1bmRlZmluZWRcbiAgLyoqIEhhbmRsZXIgdG8gcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIGNvbGxlY3Rpb24gZXZlcnkgc28gb2Z0ZW4uICovXG4gIHN3ZWVwZXI6IChDb2xsZWN0aW9uU3dlZXBlcjxLLCBWPiAmIHsgaW50ZXJ2YWxJZD86IE5vZGVKUy5UaW1lciB9KSB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKGVudHJpZXM/OiAoUmVhZG9ubHlBcnJheTxyZWFkb25seSBbSywgVl0+IHwgbnVsbCkgfCBNYXA8SywgVj4sIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uczxLLCBWPikge1xuICAgIHN1cGVyKGVudHJpZXMgPz8gW10pXG5cbiAgICB0aGlzLm1heFNpemUgPSBvcHRpb25zPy5tYXhTaXplXG5cbiAgICBpZiAoIW9wdGlvbnM/LnN3ZWVwZXIpIHJldHVyblxuXG4gICAgdGhpcy5zdGFydFN3ZWVwZXIob3B0aW9ucy5zd2VlcGVyKVxuICB9XG5cbiAgc3RhcnRTd2VlcGVyKG9wdGlvbnM6IENvbGxlY3Rpb25Td2VlcGVyPEssIFY+KTogTm9kZUpTLlRpbWVyIHtcbiAgICBpZiAodGhpcy5zd2VlcGVyPy5pbnRlcnZhbElkKSBjbGVhckludGVydmFsKHRoaXMuc3dlZXBlci5pbnRlcnZhbElkKVxuXG4gICAgdGhpcy5zd2VlcGVyID0gb3B0aW9uc1xuICAgIHRoaXMuc3dlZXBlci5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zd2VlcGVyPy5maWx0ZXIodmFsdWUsIGtleSwgb3B0aW9ucy5ib3QpKSByZXR1cm5cblxuICAgICAgICB0aGlzLmRlbGV0ZShrZXkpXG4gICAgICAgIHJldHVybiBrZXlcbiAgICAgIH0pXG4gICAgfSwgb3B0aW9ucy5pbnRlcnZhbClcblxuICAgIHJldHVybiB0aGlzLnN3ZWVwZXIuaW50ZXJ2YWxJZFxuICB9XG5cbiAgc3RvcFN3ZWVwZXIoKTogdm9pZCB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodGhpcy5zd2VlcGVyPy5pbnRlcnZhbElkKVxuICB9XG5cbiAgY2hhbmdlU3dlZXBlckludGVydmFsKG5ld0ludGVydmFsOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zd2VlcGVyID09IG51bGwpIHJldHVyblxuXG4gICAgdGhpcy5zdGFydFN3ZWVwZXIoeyBmaWx0ZXI6IHRoaXMuc3dlZXBlci5maWx0ZXIsIGludGVydmFsOiBuZXdJbnRlcnZhbCB9KVxuICB9XG5cbiAgY2hhbmdlU3dlZXBlckZpbHRlcihuZXdGaWx0ZXI6ICh2YWx1ZTogViwga2V5OiBLLCBib3Q6IFBsYWNlSG9sZGVyQm90KSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3dlZXBlciA9PSBudWxsKSByZXR1cm5cblxuICAgIHRoaXMuc3RhcnRTd2VlcGVyKHsgZmlsdGVyOiBuZXdGaWx0ZXIsIGludGVydmFsOiB0aGlzLnN3ZWVwZXIuaW50ZXJ2YWwgfSlcbiAgfVxuXG4gIC8qKiBBZGQgYW4gaXRlbSB0byB0aGUgY29sbGVjdGlvbi4gTWFrZXMgc3VyZSBub3QgdG8gZ28gYWJvdmUgdGhlIG1heFNpemUuICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdGhpcyB7XG4gICAgLy8gV2hlbiB0aGlzIGNvbGxlY3Rpb24gaXMgbWF4U2l6ZWQgbWFrZSBzdXJlIHdlIGNhbiBhZGQgZmlyc3RcbiAgICBpZiAoKHRoaXMubWF4U2l6ZSAhPT0gdW5kZWZpbmVkIHx8IHRoaXMubWF4U2l6ZSA9PT0gMCkgJiYgdGhpcy5zaXplID49IHRoaXMubWF4U2l6ZSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICAvKiogQWRkIGFuIGl0ZW0gdG8gdGhlIGNvbGxlY3Rpb24sIG5vIG1hdHRlciB3aGF0IHRoZSBtYXhTaXplIGlzLiAqL1xuICBmb3JjZVNldChrZXk6IEssIHZhbHVlOiBWKTogdGhpcyB7XG4gICAgcmV0dXJuIHN1cGVyLnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgLyoqIENvbnZlcnQgdGhlIGNvbGxlY3Rpb24gdG8gYW4gYXJyYXkuICovXG4gIGFycmF5KCk6IFZbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnZhbHVlcygpXVxuICB9XG5cbiAgLyoqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGlzIGNvbGxlY3Rpb24uICovXG4gIGZpcnN0KCk6IFYgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnZhbHVlcygpLm5leHQoKS52YWx1ZVxuICB9XG5cbiAgLyoqIFJldHJpZXZlIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgY29sbGVjdGlvbi4gKi9cbiAgbGFzdCgpOiBWIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gWy4uLnRoaXMudmFsdWVzKCldW3RoaXMuc2l6ZSAtIDFdXG4gIH1cblxuICAvKiogUmV0cmlldmUgdGhlIHZhbHVlIG9mIGEgcmFuZG9tIGVsZW1lbnQgaW4gdGhpcyBjb2xsZWN0aW9uLiAqL1xuICByYW5kb20oKTogViB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXJyYXkgPSBbLi4udGhpcy52YWx1ZXMoKV1cbiAgICByZXR1cm4gYXJyYXlbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYXJyYXkubGVuZ3RoKV1cbiAgfVxuXG4gIC8qKiBGaW5kIGEgc3BlY2lmaWMgZWxlbWVudCBpbiB0aGlzIGNvbGxlY3Rpb24uICovXG4gIGZpbmQoY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5OiBLKSA9PiBib29sZWFuKTogTm9uTnVsbGFibGU8Vj4gfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMua2V5cygpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0KGtleSkhXG4gICAgICBpZiAoY2FsbGJhY2sodmFsdWUsIGtleSkpIHJldHVybiB2YWx1ZVxuICAgIH1cbiAgICAvLyBJZiBub3RoaW5nIG1hdGNoZWRcbiAgfVxuXG4gIC8qKiBGaW5kIGFsbCBlbGVtZW50cyBpbiB0aGlzIGNvbGxlY3Rpb24gdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybi4gKi9cbiAgZmlsdGVyKGNhbGxiYWNrOiAodmFsdWU6IFYsIGtleTogSykgPT4gYm9vbGVhbik6IENvbGxlY3Rpb248SywgVj4ge1xuICAgIGNvbnN0IHJlbGV2YW50ID0gbmV3IENvbGxlY3Rpb248SywgVj4oKVxuICAgIHRoaXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKGNhbGxiYWNrKHZhbHVlLCBrZXkpKSByZWxldmFudC5zZXQoa2V5LCB2YWx1ZSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlbGV2YW50XG4gIH1cblxuICAvKiogQ29udmVydHMgdGhlIGNvbGxlY3Rpb24gaW50byBhbiBhcnJheSBieSBydW5uaW5nIGEgY2FsbGJhY2sgb24gYWxsIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLiAqL1xuICBtYXA8VD4oY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5OiBLKSA9PiBUKTogVFtdIHtcbiAgICBjb25zdCByZXN1bHRzID0gW11cbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMoKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChrZXkpIVxuICAgICAgcmVzdWx0cy5wdXNoKGNhbGxiYWNrKHZhbHVlLCBrZXkpKVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIG9uZSBvZiB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hlcyB0aGUgcGF0dGVybi4gKi9cbiAgc29tZShjYWxsYmFjazogKHZhbHVlOiBWLCBrZXk6IEspID0+IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLmtleXMoKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldChrZXkpIVxuICAgICAgaWYgKGNhbGxiYWNrKHZhbHVlLCBrZXkpKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqIENoZWNrIGlmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hlcyB0aGUgcGF0dGVybi4gKi9cbiAgZXZlcnkoY2FsbGJhY2s6ICh2YWx1ZTogViwga2V5OiBLKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoa2V5KSFcbiAgICAgIGlmICghY2FsbGJhY2sodmFsdWUsIGtleSkpIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogUnVucyBhIGNhbGxiYWNrIG9uIGFsbCBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiwgbWVyZ2luZyB0aGVtIGludG8gYSBzaW5nbGUgdmFsdWUuICovXG4gIHJlZHVjZTxUPihjYWxsYmFjazogKGFjY3VtdWxhdG9yOiBULCB2YWx1ZTogViwga2V5OiBLKSA9PiBULCBpbml0aWFsVmFsdWU/OiBUKTogVCB7XG4gICAgbGV0IGFjY3VtdWxhdG9yOiBUID0gaW5pdGlhbFZhbHVlIVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoa2V5KSFcbiAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2soYWNjdW11bGF0b3IsIHZhbHVlLCBrZXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yXG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uT3B0aW9uczxLLCBWPiB7XG4gIC8qKiBIYW5kbGVyIHRvIGNsZWFuIG91dCB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gZXZlcnkgc28gb2Z0ZW4uICovXG4gIHN3ZWVwZXI/OiBDb2xsZWN0aW9uU3dlZXBlcjxLLCBWPlxuICAvKiogVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIGNvbGxlY3Rpb24uICovXG4gIG1heFNpemU/OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uU3dlZXBlcjxLLCBWPiB7XG4gIC8qKiBUaGUgZmlsdGVyIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIGVsZW1lbnQgc2hvdWxkIGJlIGRlbGV0ZWQgb3Igbm90ICovXG4gIGZpbHRlcjogKHZhbHVlOiBWLCBrZXk6IEssIC4uLmFyZ3M6IGFueVtdKSA9PiBib29sZWFuXG4gIC8qKiBUaGUgaW50ZXJ2YWwgaW4gd2hpY2ggdGhlIHN3ZWVwZXIgc2hvdWxkIHJ1biAqL1xuICBpbnRlcnZhbDogbnVtYmVyXG4gIC8qKiBUaGUgYm90IG9iamVjdCBpdHNlbGYgKi9cbiAgYm90PzogUGxhY2VIb2xkZXJCb3Rcbn1cbiJdLCJuYW1lcyI6WyJDb2xsZWN0aW9uIiwiTWFwIiwiY29uc3RydWN0b3IiLCJlbnRyaWVzIiwib3B0aW9ucyIsIm1heFNpemUiLCJzd2VlcGVyIiwic3RhcnRTd2VlcGVyIiwiaW50ZXJ2YWxJZCIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImZvckVhY2giLCJ2YWx1ZSIsImtleSIsImZpbHRlciIsImJvdCIsImRlbGV0ZSIsImludGVydmFsIiwic3RvcFN3ZWVwZXIiLCJjaGFuZ2VTd2VlcGVySW50ZXJ2YWwiLCJuZXdJbnRlcnZhbCIsImNoYW5nZVN3ZWVwZXJGaWx0ZXIiLCJuZXdGaWx0ZXIiLCJzZXQiLCJ1bmRlZmluZWQiLCJzaXplIiwiZm9yY2VTZXQiLCJhcnJheSIsInZhbHVlcyIsImZpcnN0IiwibmV4dCIsImxhc3QiLCJyYW5kb20iLCJNYXRoIiwiZmxvb3IiLCJsZW5ndGgiLCJmaW5kIiwiY2FsbGJhY2siLCJrZXlzIiwiZ2V0IiwicmVsZXZhbnQiLCJtYXAiLCJyZXN1bHRzIiwicHVzaCIsInNvbWUiLCJldmVyeSIsInJlZHVjZSIsImluaXRpYWxWYWx1ZSIsImFjY3VtdWxhdG9yIl0sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLE1BQU1BLG1CQUF5QkMsSUFTcENDLFlBQVlDLENBQTZELENBQUVDLENBQWlDLENBQUUsQ0FLNUcsR0FKQSxLQUFLLENBQUNELEdBQVcsRUFBRSxFQUVuQixJQUFJLENBQUNFLE9BQU8sQ0FBR0QsR0FBU0MsUUFFcEIsQ0FBQ0QsR0FBU0UsUUFBUyxNQUFNLENBRTdCLElBQUksQ0FBQ0MsWUFBWSxDQUFDSCxFQUFRRSxPQUFPLENBQ25DLENBRUFDLGFBQWFILENBQWdDLENBQWdCLENBYTNELE9BWkksSUFBSSxDQUFDRSxPQUFPLEVBQUVFLFlBQVlDLGNBQWMsSUFBSSxDQUFDSCxPQUFPLENBQUNFLFVBQVUsRUFFbkUsSUFBSSxDQUFDRixPQUFPLENBQUdGLEVBQ2YsSUFBSSxDQUFDRSxPQUFPLENBQUNFLFVBQVUsQ0FBR0UsWUFBWSxJQUFNLENBQzFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDLENBQUNDLEVBQU9DLElBQVEsQ0FDM0IsR0FB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
1
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
2
+ export class Collection extends Map {
3
+ constructor(entries, options){
4
+ super(entries ?? []);
5
+ this.maxSize = options?.maxSize;
6
+ if (!options?.sweeper) return;
7
+ this.startSweeper(options.sweeper);
8
+ }
9
+ startSweeper(options) {
10
+ if (this.sweeper?.intervalId) clearInterval(this.sweeper.intervalId);
11
+ this.sweeper = options;
12
+ this.sweeper.intervalId = setInterval(()=>{
13
+ this.forEach((value, key)=>{
14
+ if (!this.sweeper?.filter(value, key, options.bot)) return;
15
+ this.delete(key);
16
+ return key;
17
+ });
18
+ }, options.interval);
19
+ return this.sweeper.intervalId;
20
+ }
21
+ stopSweeper() {
22
+ return clearInterval(this.sweeper?.intervalId);
23
+ }
24
+ changeSweeperInterval(newInterval) {
25
+ if (this.sweeper == null) return;
26
+ this.startSweeper({
27
+ filter: this.sweeper.filter,
28
+ interval: newInterval
29
+ });
30
+ }
31
+ changeSweeperFilter(newFilter) {
32
+ if (this.sweeper == null) return;
33
+ this.startSweeper({
34
+ filter: newFilter,
35
+ interval: this.sweeper.interval
36
+ });
37
+ }
38
+ /** Add an item to the collection. Makes sure not to go above the maxSize. */ set(key, value) {
39
+ // When this collection is maxSized make sure we can add first
40
+ if ((this.maxSize !== undefined || this.maxSize === 0) && this.size >= this.maxSize) {
41
+ return this;
42
+ }
43
+ return super.set(key, value);
44
+ }
45
+ /** Add an item to the collection, no matter what the maxSize is. */ forceSet(key, value) {
46
+ return super.set(key, value);
47
+ }
48
+ /** Convert the collection to an array. */ array() {
49
+ return [
50
+ ...this.values()
51
+ ];
52
+ }
53
+ /** Retrieve the value of the first element in this collection. */ first() {
54
+ return this.values().next().value;
55
+ }
56
+ /** Retrieve the value of the last element in this collection. */ last() {
57
+ return [
58
+ ...this.values()
59
+ ][this.size - 1];
60
+ }
61
+ /** Retrieve the value of a random element in this collection. */ random() {
62
+ const array = [
63
+ ...this.values()
64
+ ];
65
+ return array[Math.floor(Math.random() * array.length)];
66
+ }
67
+ /** Find a specific element in this collection. */ find(callback) {
68
+ for (const key of this.keys()){
69
+ const value = this.get(key);
70
+ if (callback(value, key)) return value;
71
+ }
72
+ // If nothing matched
73
+ }
74
+ /** Find all elements in this collection that match the given pattern. */ filter(callback) {
75
+ const relevant = new Collection();
76
+ this.forEach((value, key)=>{
77
+ if (callback(value, key)) relevant.set(key, value);
78
+ });
79
+ return relevant;
80
+ }
81
+ /** Converts the collection into an array by running a callback on all items in the collection. */ map(callback) {
82
+ const results = [];
83
+ for (const key of this.keys()){
84
+ const value = this.get(key);
85
+ results.push(callback(value, key));
86
+ }
87
+ return results;
88
+ }
89
+ /** Check if one of the items in the collection matches the pattern. */ some(callback) {
90
+ for (const key of this.keys()){
91
+ const value = this.get(key);
92
+ if (callback(value, key)) return true;
93
+ }
94
+ return false;
95
+ }
96
+ /** Check if all of the items in the collection matches the pattern. */ every(callback) {
97
+ for (const key of this.keys()){
98
+ const value = this.get(key);
99
+ if (!callback(value, key)) return false;
100
+ }
101
+ return true;
102
+ }
103
+ /** Runs a callback on all items in the collection, merging them into a single value. */ reduce(callback, initialValue) {
104
+ let accumulator = initialValue;
105
+ for (const key of this.keys()){
106
+ const value = this.get(key);
107
+ accumulator = callback(accumulator, value, key);
108
+ }
109
+ return accumulator;
110
+ }
111
+ }
112
+
113
+ //# sourceMappingURL=Collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Collection.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface PlaceHolderBot {}\n\nexport class Collection<K, V> extends Map<K, V> {\n /**\n * The maximum amount of items allowed in this collection. To disable cache, set it 0, set to undefined to make it infinite.\n * @default undefined\n */\n maxSize: number | undefined\n /** Handler to remove items from the collection every so often. */\n sweeper: (CollectionSweeper<K, V> & { intervalId?: NodeJS.Timer }) | undefined\n\n constructor(entries?: (ReadonlyArray<readonly [K, V]> | null) | Map<K, V>, options?: CollectionOptions<K, V>) {\n super(entries ?? [])\n\n this.maxSize = options?.maxSize\n\n if (!options?.sweeper) return\n\n this.startSweeper(options.sweeper)\n }\n\n startSweeper(options: CollectionSweeper<K, V>): NodeJS.Timer {\n if (this.sweeper?.intervalId) clearInterval(this.sweeper.intervalId)\n\n this.sweeper = options\n this.sweeper.intervalId = setInterval(() => {\n this.forEach((value, key) => {\n if (!this.sweeper?.filter(value, key, options.bot)) return\n\n this.delete(key)\n return key\n })\n }, options.interval)\n\n return this.sweeper.intervalId\n }\n\n stopSweeper(): void {\n return clearInterval(this.sweeper?.intervalId)\n }\n\n changeSweeperInterval(newInterval: number): void {\n if (this.sweeper == null) return\n\n this.startSweeper({ filter: this.sweeper.filter, interval: newInterval })\n }\n\n changeSweeperFilter(newFilter: (value: V, key: K, bot: PlaceHolderBot) => boolean): void {\n if (this.sweeper == null) return\n\n this.startSweeper({ filter: newFilter, interval: this.sweeper.interval })\n }\n\n /** Add an item to the collection. Makes sure not to go above the maxSize. */\n set(key: K, value: V): this {\n // When this collection is maxSized make sure we can add first\n if ((this.maxSize !== undefined || this.maxSize === 0) && this.size >= this.maxSize) {\n return this\n }\n\n return super.set(key, value)\n }\n\n /** Add an item to the collection, no matter what the maxSize is. */\n forceSet(key: K, value: V): this {\n return super.set(key, value)\n }\n\n /** Convert the collection to an array. */\n array(): V[] {\n return [...this.values()]\n }\n\n /** Retrieve the value of the first element in this collection. */\n first(): V | undefined {\n return this.values().next().value\n }\n\n /** Retrieve the value of the last element in this collection. */\n last(): V | undefined {\n return [...this.values()][this.size - 1]\n }\n\n /** Retrieve the value of a random element in this collection. */\n random(): V | undefined {\n const array = [...this.values()]\n return array[Math.floor(Math.random() * array.length)]\n }\n\n /** Find a specific element in this collection. */\n find(callback: (value: V, key: K) => boolean): NonNullable<V> | undefined {\n for (const key of this.keys()) {\n const value = this.get(key)!\n if (callback(value, key)) return value\n }\n // If nothing matched\n }\n\n /** Find all elements in this collection that match the given pattern. */\n filter(callback: (value: V, key: K) => boolean): Collection<K, V> {\n const relevant = new Collection<K, V>()\n this.forEach((value, key) => {\n if (callback(value, key)) relevant.set(key, value)\n })\n\n return relevant\n }\n\n /** Converts the collection into an array by running a callback on all items in the collection. */\n map<T>(callback: (value: V, key: K) => T): T[] {\n const results = []\n for (const key of this.keys()) {\n const value = this.get(key)!\n results.push(callback(value, key))\n }\n return results\n }\n\n /** Check if one of the items in the collection matches the pattern. */\n some(callback: (value: V, key: K) => boolean): boolean {\n for (const key of this.keys()) {\n const value = this.get(key)!\n if (callback(value, key)) return true\n }\n\n return false\n }\n\n /** Check if all of the items in the collection matches the pattern. */\n every(callback: (value: V, key: K) => boolean): boolean {\n for (const key of this.keys()) {\n const value = this.get(key)!\n if (!callback(value, key)) return false\n }\n\n return true\n }\n\n /** Runs a callback on all items in the collection, merging them into a single value. */\n reduce<T>(callback: (accumulator: T, value: V, key: K) => T, initialValue?: T): T {\n let accumulator: T = initialValue!\n\n for (const key of this.keys()) {\n const value = this.get(key)!\n accumulator = callback(accumulator, value, key)\n }\n\n return accumulator\n }\n}\n\nexport interface CollectionOptions<K, V> {\n /** Handler to clean out the items in the collection every so often. */\n sweeper?: CollectionSweeper<K, V>\n /** The maximum number of items allowed in the collection. */\n maxSize?: number\n}\n\nexport interface CollectionSweeper<K, V> {\n /** The filter to determine whether an element should be deleted or not */\n filter: (value: V, key: K, ...args: any[]) => boolean\n /** The interval in which the sweeper should run */\n interval: number\n /** The bot object itself */\n bot?: PlaceHolderBot\n}\n"],"names":["Collection","Map","constructor","entries","options","maxSize","sweeper","startSweeper","intervalId","clearInterval","setInterval","forEach","value","key","filter","bot","delete","interval","stopSweeper","changeSweeperInterval","newInterval","changeSweeperFilter","newFilter","set","undefined","size","forceSet","array","values","first","next","last","random","Math","floor","length","find","callback","keys","get","relevant","map","results","push","some","every","reduce","initialValue","accumulator"],"mappings":"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"}
package/dist/base64.js CHANGED
@@ -1,2 +1,262 @@
1
- export function encode(e){let t;let n="string"==typeof e?new TextEncoder().encode(e):e instanceof Uint8Array?e:new Uint8Array(e),o="",a=n.length;for(t=2;t<a;t+=3)o+=r[n[t-2]>>2]+r[(3&n[t-2])<<4|n[t-1]>>4]+r[(15&n[t-1])<<2|n[t]>>6]+r[63&n[t]];return t===a+1&&(o+=r[n[t-2]>>2]+r[(3&n[t-2])<<4]+"=="),t===a&&(o+=r[n[t-2]>>2]+r[(3&n[t-2])<<4|n[t-1]>>4]+r[(15&n[t-1])<<2]+"="),o}export function decode(r){let t;if(r.length%4!=0)throw Error("Unable to parse base64 string.");let n=r.indexOf("=");if(-1!==n&&n<r.length-2)throw Error("Unable to parse base64 string.");let o=r.endsWith("==")?2:r.endsWith("=")?1:0,a=r.length,i=new Uint8Array(3*(a/4));for(let l=0,s=0;l<a;l+=4,s+=3)t=e(r.charCodeAt(l))<<18|e(r.charCodeAt(l+1))<<12|e(r.charCodeAt(l+2))<<6|e(r.charCodeAt(l+3)),i[s]=t>>16,i[s+1]=t>>8&255,i[s+2]=255&t;return i.subarray(0,i.length-o)}function e(e){if(e>=t.length)throw Error("Unable to parse base64 string.");let r=t[e];if(255===r)throw Error("Unable to parse base64 string.");return r}let r=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],t=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255,255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255,255,255,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXNlNjQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDUkVESVQ6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2VuZXBvbW55YXNjaGloLzcyYzQyM2Y3MjdkMzk1ZWVhYTA5Njk3MDU4MjM4NzI3XG4gKiBFbmNvZGVzIGEgZ2l2ZW4gVWludDhBcnJheSwgQXJyYXlCdWZmZXIgb3Igc3RyaW5nIGludG8gUkZDNDY0OCBiYXNlNjQgcmVwcmVzZW50YXRpb25cbiAqIEBwYXJhbSBkYXRhXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGUoZGF0YTogQXJyYXlCdWZmZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB1aW50OCA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKSA6IGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpXG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgaVxuICBjb25zdCBsID0gdWludDgubGVuZ3RoXG4gIGZvciAoaSA9IDI7IGkgPCBsOyBpICs9IDMpIHtcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2kgLSAyXSA+PiAyXVxuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbKCh1aW50OFtpIC0gMl0gJiAweDAzKSA8PCA0KSB8ICh1aW50OFtpIC0gMV0gPj4gNCldXG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1soKHVpbnQ4W2kgLSAxXSAmIDB4MGYpIDw8IDIpIHwgKHVpbnQ4W2ldID4+IDYpXVxuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbdWludDhbaV0gJiAweDNmXVxuICB9XG4gIGlmIChpID09PSBsICsgMSkge1xuICAgIC8vIDEgb2N0ZXQgeWV0IHRvIHdyaXRlXG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1t1aW50OFtpIC0gMl0gPj4gMl1cbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjWyh1aW50OFtpIC0gMl0gJiAweDAzKSA8PCA0XVxuICAgIHJlc3VsdCArPSAnPT0nXG4gIH1cbiAgaWYgKGkgPT09IGwpIHtcbiAgICAvLyAyIG9jdGV0cyB5ZXQgdG8gd3JpdGVcbiAgICByZXN1bHQgKz0gYmFzZTY0YWJjW3VpbnQ4W2kgLSAyXSA+PiAyXVxuICAgIHJlc3VsdCArPSBiYXNlNjRhYmNbKCh1aW50OFtpIC0gMl0gJiAweDAzKSA8PCA0KSB8ICh1aW50OFtpIC0gMV0gPj4gNCldXG4gICAgcmVzdWx0ICs9IGJhc2U2NGFiY1sodWludDhbaSAtIDFdICYgMHgwZikgPDwgMl1cbiAgICByZXN1bHQgKz0gJz0nXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIENSRURJVDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZW5lcG9tbnlhc2NoaWgvNzJjNDIzZjcyN2QzOTVlZWFhMDk2OTcwNTgyMzg3MjdcbiAqIERlY29kZXMgUkZDNDY0OCBiYXNlNjQgc3RyaW5nIGludG8gYW4gVWludDhBcnJheVxuICogQHBhcmFtIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZShkYXRhOiBzdHJpbmcpOiBVaW50OEFycmF5IHtcbiAgaWYgKGRhdGEubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIGJhc2U2NCBzdHJpbmcuJylcbiAgfVxuICBjb25zdCBpbmRleCA9IGRhdGEuaW5kZXhPZignPScpXG4gIGlmIChpbmRleCAhPT0gLTEgJiYgaW5kZXggPCBkYXRhLmxlbmd0aCAtIDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBiYXNlNjQgc3RyaW5nLicpXG4gIH1cbiAgY29uc3QgbWlzc2luZ09jdGV0cyA9IGRhdGEuZW5kc1dpdGgoJz09JykgPyAyIDogZGF0YS5lbmRzV2l0aCgnPScpID8gMSA6IDBcbiAgY29uc3QgbiA9IGRhdGEubGVuZ3RoXG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KDMgKiAobiAvIDQpKVxuICBsZXQgYnVmZmVyXG4gIGZvciAobGV0IGkgPSAwLCBqID0gMDsgaSA8IG47IGkgKz0gNCwgaiArPSAzKSB7XG4gICAgYnVmZmVyID1cbiAgICAgIChnZXRCYXNlNjRDb2RlKGRhdGEuY2hhckNvZGVBdChpKSkgPDwgMTgpIHxcbiAgICAgIChnZXRCYXNlNjRDb2RlKGRhdGEuY2hhckNvZGVBdChpICsgMSkpIDw8IDEyKSB8XG4gICAgICAoZ2V0QmFzZTY0Q29kZShkYXRhLmNoYXJDb2RlQXQoaSArIDIpKSA8PCA2KSB8XG4gICAgICBnZXRCYXNlNjRDb2RlKGRhdGEuY2hhckNvZGVBdChpICsgMykpXG4gICAgcmVzdWx0W2pdID0gYnVmZmVyID4+IDE2XG4gICAgcmVzdWx0W2ogKyAxXSA9IChidWZmZXIgPj4gOCkgJiAweGZmXG4gICAgcmVzdWx0W2ogKyAyXSA9IGJ1ZmZlciAmIDB4ZmZcbiAgfVxuICByZXR1cm4gcmVzdWx0LnN1YmFycmF5KDAsIHJlc3VsdC5sZW5ndGggLSBtaXNzaW5nT2N0ZXRzKVxufVxuXG4vKipcbiAqIENSRURJVDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZW5lcG9tbnlhc2NoaWgvNzJjNDIzZjcyN2QzOTVlZWFhMDk2OTcwNTgyMzg3MjdcbiAqIEBwYXJhbSBjaGFyQ29kZVxuICovXG5mdW5jdGlvbiBnZXRCYXNlNjRDb2RlKGNoYXJDb2RlOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoY2hhckNvZGUgPj0gYmFzZTY0Y29kZXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcGFyc2UgYmFzZTY0IHN0cmluZy4nKVxuICB9XG4gIGNvbnN0IGNvZGUgPSBiYXNlNjRjb2Rlc1tjaGFyQ29kZV1cbiAgaWYgKGNvZGUgPT09IDI1NSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHBhcnNlIGJhc2U2NCBzdHJpbmcuJylcbiAgfVxuICByZXR1cm4gY29kZVxufVxuXG4vLyBDb3B5cmlnaHQgMjAxOC0yMDIxIHRoZSBEZW5vIGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIE1JVCBsaWNlbnNlLlxuY29uc3QgYmFzZTY0YWJjID0gW1xuICAnQScsXG4gICdCJyxcbiAgJ0MnLFxuICAnRCcsXG4gICdFJyxcbiAgJ0YnLFxuICAnRycsXG4gICdIJyxcbiAgJ0knLFxuICAnSicsXG4gICdLJyxcbiAgJ0wnLFxuICAnTScsXG4gICdOJyxcbiAgJ08nLFxuICAnUCcsXG4gICdRJyxcbiAgJ1InLFxuICAnUycsXG4gICdUJyxcbiAgJ1UnLFxuICAnVicsXG4gICdXJyxcbiAgJ1gnLFxuICAnWScsXG4gICdaJyxcbiAgJ2EnLFxuICAnYicsXG4gICdjJyxcbiAgJ2QnLFxuICAnZScsXG4gICdmJyxcbiAgJ2cnLFxuICAnaCcsXG4gICdpJyxcbiAgJ2onLFxuICAnaycsXG4gICdsJyxcbiAgJ20nLFxuICAnbicsXG4gICdvJyxcbiAgJ3AnLFxuICAncScsXG4gICdyJyxcbiAgJ3MnLFxuICAndCcsXG4gICd1JyxcbiAgJ3YnLFxuICAndycsXG4gICd4JyxcbiAgJ3knLFxuICAneicsXG4gICcwJyxcbiAgJzEnLFxuICAnMicsXG4gICczJyxcbiAgJzQnLFxuICAnNScsXG4gICc2JyxcbiAgJzcnLFxuICAnOCcsXG4gICc5JyxcbiAgJysnLFxuICAnLycsXG5dXG5cbi8vIENSRURJVDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZW5lcG9tbnlhc2NoaWgvNzJjNDIzZjcyN2QzOTVlZWFhMDk2OTcwNTgyMzg3MjdcbmNvbnN0IGJhc2U2NGNvZGVzID0gW1xuICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSxcbiAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDYyLCAyNTUsIDI1NSwgMjU1LCA2MywgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDI1NSwgMjU1LCAyNTUsXG4gIDAsIDI1NSwgMjU1LCAyNTUsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNixcbiAgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsXG5dXG4iXSwibmFtZXMiOlsiZW5jb2RlIiwiZGF0YSIsImkiLCJ1aW50OCIsIlRleHRFbmNvZGVyIiwiVWludDhBcnJheSIsInJlc3VsdCIsImwiLCJsZW5ndGgiLCJiYXNlNjRhYmMiLCJkZWNvZGUiLCJidWZmZXIiLCJFcnJvciIsImluZGV4IiwiaW5kZXhPZiIsIm1pc3NpbmdPY3RldHMiLCJlbmRzV2l0aCIsIm4iLCJqIiwiZ2V0QmFzZTY0Q29kZSIsImNoYXJDb2RlQXQiLCJzdWJhcnJheSIsImNoYXJDb2RlIiwiYmFzZTY0Y29kZXMiLCJjb2RlIl0sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLFNBQVNBLE9BQU9DLENBQTBCLENBQVUsS0FHckRDLEVBRkosSUFBTUMsRUFBUSxBQUFnQixVQUFoQixPQUFPRixFQUFvQixJQUFJRyxjQUFjSixNQUFNLENBQUNDLEdBQVFBLGFBQWdCSSxXQUFhSixFQUFPLElBQUlJLFdBQVdKLEVBQUssQ0FDOUhLLEVBQVMsR0FFUEMsRUFBSUosRUFBTUssTUFBTSxDQUN0QixJQUFLTixFQUFJLEVBQUdBLEVBQUlLLEVBQUdMLEdBQUssRUFJdEJJLEdBSFVHLENBQVMsQ0FBQ04sQ0FBSyxDQUFDRCxFQUFJLEVBQUUs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LElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0QsQ0FHS2MsRUFBYyxDQUNsQixJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQzVJLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFJLElBQUssSUFBSyxJQUFLLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxJQUFLLElBQUssSUFDL0ksRUFBRyxJQUFLLElBQUssSUFBSyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksSUFBSyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssR0FDOUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FBSSxHQUFJLEdBQUksR0FDakcifQ==
1
+ /**
2
+ * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
3
+ * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation
4
+ * @param data
5
+ */ export function encode(data) {
6
+ const uint8 = typeof data === 'string' ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data);
7
+ let result = '';
8
+ let i;
9
+ const l = uint8.length;
10
+ for(i = 2; i < l; i += 3){
11
+ result += base64abc[uint8[i - 2] >> 2];
12
+ result += base64abc[(uint8[i - 2] & 0x03) << 4 | uint8[i - 1] >> 4];
13
+ result += base64abc[(uint8[i - 1] & 0x0f) << 2 | uint8[i] >> 6];
14
+ result += base64abc[uint8[i] & 0x3f];
15
+ }
16
+ if (i === l + 1) {
17
+ // 1 octet yet to write
18
+ result += base64abc[uint8[i - 2] >> 2];
19
+ result += base64abc[(uint8[i - 2] & 0x03) << 4];
20
+ result += '==';
21
+ }
22
+ if (i === l) {
23
+ // 2 octets yet to write
24
+ result += base64abc[uint8[i - 2] >> 2];
25
+ result += base64abc[(uint8[i - 2] & 0x03) << 4 | uint8[i - 1] >> 4];
26
+ result += base64abc[(uint8[i - 1] & 0x0f) << 2];
27
+ result += '=';
28
+ }
29
+ return result;
30
+ }
31
+ /**
32
+ * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
33
+ * Decodes RFC4648 base64 string into an Uint8Array
34
+ * @param data
35
+ */ export function decode(data) {
36
+ if (data.length % 4 !== 0) {
37
+ throw new Error('Unable to parse base64 string.');
38
+ }
39
+ const index = data.indexOf('=');
40
+ if (index !== -1 && index < data.length - 2) {
41
+ throw new Error('Unable to parse base64 string.');
42
+ }
43
+ const missingOctets = data.endsWith('==') ? 2 : data.endsWith('=') ? 1 : 0;
44
+ const n = data.length;
45
+ const result = new Uint8Array(3 * (n / 4));
46
+ let buffer;
47
+ for(let i = 0, j = 0; i < n; i += 4, j += 3){
48
+ buffer = getBase64Code(data.charCodeAt(i)) << 18 | getBase64Code(data.charCodeAt(i + 1)) << 12 | getBase64Code(data.charCodeAt(i + 2)) << 6 | getBase64Code(data.charCodeAt(i + 3));
49
+ result[j] = buffer >> 16;
50
+ result[j + 1] = buffer >> 8 & 0xff;
51
+ result[j + 2] = buffer & 0xff;
52
+ }
53
+ return result.subarray(0, result.length - missingOctets);
54
+ }
55
+ /**
56
+ * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
57
+ * @param charCode
58
+ */ function getBase64Code(charCode) {
59
+ if (charCode >= base64codes.length) {
60
+ throw new Error('Unable to parse base64 string.');
61
+ }
62
+ const code = base64codes[charCode];
63
+ if (code === 255) {
64
+ throw new Error('Unable to parse base64 string.');
65
+ }
66
+ return code;
67
+ }
68
+ // Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
69
+ const base64abc = [
70
+ 'A',
71
+ 'B',
72
+ 'C',
73
+ 'D',
74
+ 'E',
75
+ 'F',
76
+ 'G',
77
+ 'H',
78
+ 'I',
79
+ 'J',
80
+ 'K',
81
+ 'L',
82
+ 'M',
83
+ 'N',
84
+ 'O',
85
+ 'P',
86
+ 'Q',
87
+ 'R',
88
+ 'S',
89
+ 'T',
90
+ 'U',
91
+ 'V',
92
+ 'W',
93
+ 'X',
94
+ 'Y',
95
+ 'Z',
96
+ 'a',
97
+ 'b',
98
+ 'c',
99
+ 'd',
100
+ 'e',
101
+ 'f',
102
+ 'g',
103
+ 'h',
104
+ 'i',
105
+ 'j',
106
+ 'k',
107
+ 'l',
108
+ 'm',
109
+ 'n',
110
+ 'o',
111
+ 'p',
112
+ 'q',
113
+ 'r',
114
+ 's',
115
+ 't',
116
+ 'u',
117
+ 'v',
118
+ 'w',
119
+ 'x',
120
+ 'y',
121
+ 'z',
122
+ '0',
123
+ '1',
124
+ '2',
125
+ '3',
126
+ '4',
127
+ '5',
128
+ '6',
129
+ '7',
130
+ '8',
131
+ '9',
132
+ '+',
133
+ '/'
134
+ ];
135
+ // CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727
136
+ const base64codes = [
137
+ 255,
138
+ 255,
139
+ 255,
140
+ 255,
141
+ 255,
142
+ 255,
143
+ 255,
144
+ 255,
145
+ 255,
146
+ 255,
147
+ 255,
148
+ 255,
149
+ 255,
150
+ 255,
151
+ 255,
152
+ 255,
153
+ 255,
154
+ 255,
155
+ 255,
156
+ 255,
157
+ 255,
158
+ 255,
159
+ 255,
160
+ 255,
161
+ 255,
162
+ 255,
163
+ 255,
164
+ 255,
165
+ 255,
166
+ 255,
167
+ 255,
168
+ 255,
169
+ 255,
170
+ 255,
171
+ 255,
172
+ 255,
173
+ 255,
174
+ 255,
175
+ 255,
176
+ 255,
177
+ 255,
178
+ 255,
179
+ 255,
180
+ 62,
181
+ 255,
182
+ 255,
183
+ 255,
184
+ 63,
185
+ 52,
186
+ 53,
187
+ 54,
188
+ 55,
189
+ 56,
190
+ 57,
191
+ 58,
192
+ 59,
193
+ 60,
194
+ 61,
195
+ 255,
196
+ 255,
197
+ 255,
198
+ 0,
199
+ 255,
200
+ 255,
201
+ 255,
202
+ 0,
203
+ 1,
204
+ 2,
205
+ 3,
206
+ 4,
207
+ 5,
208
+ 6,
209
+ 7,
210
+ 8,
211
+ 9,
212
+ 10,
213
+ 11,
214
+ 12,
215
+ 13,
216
+ 14,
217
+ 15,
218
+ 16,
219
+ 17,
220
+ 18,
221
+ 19,
222
+ 20,
223
+ 21,
224
+ 22,
225
+ 23,
226
+ 24,
227
+ 25,
228
+ 255,
229
+ 255,
230
+ 255,
231
+ 255,
232
+ 255,
233
+ 255,
234
+ 26,
235
+ 27,
236
+ 28,
237
+ 29,
238
+ 30,
239
+ 31,
240
+ 32,
241
+ 33,
242
+ 34,
243
+ 35,
244
+ 36,
245
+ 37,
246
+ 38,
247
+ 39,
248
+ 40,
249
+ 41,
250
+ 42,
251
+ 43,
252
+ 44,
253
+ 45,
254
+ 46,
255
+ 47,
256
+ 48,
257
+ 49,
258
+ 50,
259
+ 51
260
+ ];
261
+
262
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/base64.ts"],"sourcesContent":["/**\n * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727\n * Encodes a given Uint8Array, ArrayBuffer or string into RFC4648 base64 representation\n * @param data\n */\nexport function encode(data: ArrayBuffer | string): string {\n const uint8 = typeof data === 'string' ? new TextEncoder().encode(data) : data instanceof Uint8Array ? data : new Uint8Array(data)\n let result = ''\n let i\n const l = uint8.length\n for (i = 2; i < l; i += 3) {\n result += base64abc[uint8[i - 2] >> 2]\n result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]\n result += base64abc[((uint8[i - 1] & 0x0f) << 2) | (uint8[i] >> 6)]\n result += base64abc[uint8[i] & 0x3f]\n }\n if (i === l + 1) {\n // 1 octet yet to write\n result += base64abc[uint8[i - 2] >> 2]\n result += base64abc[(uint8[i - 2] & 0x03) << 4]\n result += '=='\n }\n if (i === l) {\n // 2 octets yet to write\n result += base64abc[uint8[i - 2] >> 2]\n result += base64abc[((uint8[i - 2] & 0x03) << 4) | (uint8[i - 1] >> 4)]\n result += base64abc[(uint8[i - 1] & 0x0f) << 2]\n result += '='\n }\n return result\n}\n\n/**\n * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727\n * Decodes RFC4648 base64 string into an Uint8Array\n * @param data\n */\nexport function decode(data: string): Uint8Array {\n if (data.length % 4 !== 0) {\n throw new Error('Unable to parse base64 string.')\n }\n const index = data.indexOf('=')\n if (index !== -1 && index < data.length - 2) {\n throw new Error('Unable to parse base64 string.')\n }\n const missingOctets = data.endsWith('==') ? 2 : data.endsWith('=') ? 1 : 0\n const n = data.length\n const result = new Uint8Array(3 * (n / 4))\n let buffer\n for (let i = 0, j = 0; i < n; i += 4, j += 3) {\n buffer =\n (getBase64Code(data.charCodeAt(i)) << 18) |\n (getBase64Code(data.charCodeAt(i + 1)) << 12) |\n (getBase64Code(data.charCodeAt(i + 2)) << 6) |\n getBase64Code(data.charCodeAt(i + 3))\n result[j] = buffer >> 16\n result[j + 1] = (buffer >> 8) & 0xff\n result[j + 2] = buffer & 0xff\n }\n return result.subarray(0, result.length - missingOctets)\n}\n\n/**\n * CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727\n * @param charCode\n */\nfunction getBase64Code(charCode: number): number {\n if (charCode >= base64codes.length) {\n throw new Error('Unable to parse base64 string.')\n }\n const code = base64codes[charCode]\n if (code === 255) {\n throw new Error('Unable to parse base64 string.')\n }\n return code\n}\n\n// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.\nconst base64abc = [\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n '0',\n '1',\n '2',\n '3',\n '4',\n '5',\n '6',\n '7',\n '8',\n '9',\n '+',\n '/',\n]\n\n// CREDIT: https://gist.github.com/enepomnyaschih/72c423f727d395eeaa09697058238727\nconst base64codes = [\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,\n 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255,\n 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26,\n 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,\n]\n"],"names":["encode","data","uint8","TextEncoder","Uint8Array","result","i","l","length","base64abc","decode","Error","index","indexOf","missingOctets","endsWith","n","buffer","j","getBase64Code","charCodeAt","subarray","charCode","base64codes","code"],"mappings":"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"}
package/dist/bucket.js CHANGED
@@ -1,2 +1,80 @@
1
- import{delay as e}from"./utils.js";export function createLeakyBucket({max:e,refillInterval:t,refillAmount:n,tokens:i,waiting:l,...a}){return{max:e,refillInterval:t,refillAmount:n>e?e:n,lastRefill:performance.now(),allowAcquire:!0,nextRefill:function(){return nextRefill(this)},tokens:function(){return updateTokens(this)},acquire:async function(e,t){return await acquire(this,e,t)},tokensState:i??e,waiting:l??[],...a}}export function updateTokens(e){let t=performance.now()-e.lastRefill,n=Math.floor(t/e.refillInterval);return e.tokensState=Math.min(e.tokensState+e.refillAmount*n,e.max),e.lastRefill+=e.refillInterval*n,e.tokensState}export function nextRefill(e){return updateTokens(e),performance.now()-e.lastRefill+e.refillInterval}export async function acquire(t,n,i=!1){if(!t.allowAcquire&&(await new Promise(e=>{i?t.waiting.unshift(e):t.waiting.push(e)}),!t.allowAcquire))return await acquire(t,n);t.allowAcquire=!1;let l=updateTokens(t);if(l<n){let a=Math.ceil((n-l)/t.refillAmount),r=t.refillInterval*a;await e(r),updateTokens(t)}let o=(n%t.refillAmount)??n;t.tokensState-=o,t.allowAcquire=!0,t.waiting.shift()?.()}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9idWNrZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQaWNrUGFydGlhbCB9IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICcuL3V0aWxzLmpzJ1xuXG4vKiogQSBMZWFreSBCdWNrZXQuXG4gKiBVc2VmdWwgZm9yIHJhdGUgbGltaXRpbmcgcHVycG9zZXMuXG4gKiBUaGlzIHVzZXMgYHBlcmZvcm1hbmNlLm5vdygpYCBpbnN0ZWFkIG9mIGBEYXRlLm5vdygpYCBmb3IgaGlnaGVyIGFjY3VyYWN5LlxuICpcbiAqIE5PVEU6IFRoaXMgYnVja2V0IGlzIGxhenksIG1lYW5zIGl0IG9ubHkgdXBkYXRlcyB3aGVuIGEgcmVsYXRlZCBtZXRob2QgaXMgY2FsbGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlYWt5QnVja2V0IHtcbiAgLyoqIEhvdyBtYW55IHRva2VucyB0aGlzIGJ1Y2tldCBjYW4gaG9sZC4gKi9cbiAgbWF4OiBudW1iZXJcbiAgLyoqIEFtb3VudCBvZiB0b2tlbnMgZ2FpbmVkIHBlciBpbnRlcnZhbC5cbiAgICogSWYgYmlnZ2VyIHRoYW4gYG1heGAgaXQgd2lsbCBiZSBwcmVzc2VkIHRvIGBtYXhgLlxuICAgKi9cbiAgcmVmaWxsQW1vdW50OiBudW1iZXJcbiAgLyoqIEludGVydmFsIGF0IHdoaWNoIHRoZSBidWNrZXQgZ2FpbnMgdG9rZW5zLiAqL1xuICByZWZpbGxJbnRlcnZhbDogbnVtYmVyXG5cbiAgLyoqIEFjcXVpcmUgdG9rZW5zIGZyb20gdGhlIGJ1Y2tldC5cbiAgICogUmVzb2x2ZXMgd2hlbiB0aGUgdG9rZW5zIGFyZSBhY3F1aXJlZCBhbmQgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtoaWdoUHJpb3JpdHk9ZmFsc2VdIFdoZXRoZXIgdGhpcyBhY3F1aXJlIGlzIHNob3VsZCBiZSBkb25lIGFzYXAuXG4gICAqL1xuICBhY3F1aXJlOiAoYW1vdW50OiBudW1iZXIsIGhpZ2hQcmlvcml0eT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD5cblxuICAvKiogUmV0dXJucyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB1bnRpbCB0aGUgbmV4dCByZWZpbGwuICovXG4gIG5leHRSZWZpbGw6ICgpID0+IG51bWJlclxuXG4gIC8qKiBDdXJyZW50IHRva2VucyBpbiB0aGUgYnVja2V0LiAqL1xuICB0b2tlbnM6ICgpID0+IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCB0cmFjayBvZiB3aGVuIHRoZSBsYXN0IHJlZmlsbCBvZiB0b2tlbnMgd2FzLlxuICAgKiBETyBOT1QgVE9VQ0ggVEhJUyEgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBvZmMgOlBcbiAgICovXG4gIGxhc3RSZWZpbGw6IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBzdGF0ZSBvZiB3aGV0aGVyIGN1cnJlbnRseSBpdCBpcyBhbGxvd2VkIHRvIGFjcXVpcmUgdG9rZW5zLlxuICAgKiBETyBOT1QgVE9VQ0ggVEhJUyEgVW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBvZmMgOlBcbiAgICovXG4gIGFsbG93QWNxdWlyZTogYm9vbGVhblxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBudW1iZXIgb2YgY3VycmVudGx5IGF2YWlsYWJsZSB0b2tlbnMuXG4gICAqIERPIE5PVCBUT1VDSCBUSElTISBVbmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIG9mYyA6UFxuICAgKi9cbiAgdG9rZW5zU3RhdGU6IG51bWJlclxuXG4gIC8qKiBAcHJpdmF0ZSBJbnRlcm5hbCBhcnJheSBvZiBwcm9taXNlcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIG5vIHJhY2UgY29uZGl0aW9ucy5cbiAgICogRE8gTk9UIFRPVUNIIFRISVMhIFVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgb2ZjIDpQXG4gICAqL1xuICB3YWl0aW5nOiBBcnJheTwoXz86IHVua25vd24pID0+IHZvaWQ+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMZWFreUJ1Y2tldCh7XG4gIG1heCxcbiAgcmVmaWxsSW50ZXJ2YWwsXG4gIHJlZmlsbEFtb3VudCxcbiAgdG9rZW5zLFxuICB3YWl0aW5nLFxuICAuLi5yZXN0XG59OiBPbWl0PFBpY2tQYXJ0aWFsPExlYWt5QnVja2V0LCAnbWF4JyB8ICdyZWZpbGxJbnRlcnZhbCcgfCAncmVmaWxsQW1vdW50Jz4sICd0b2tlbnMnPiAmIHtcbiAgLyoqIEN1cnJlbnQgdG9rZW5zIGluIHRoZSBidWNrZXQuXG4gICAqIEBkZWZhdWx0IG1heFxuICAgKi9cbiAgdG9rZW5zPzogbnVtYmVyXG59KTogTGVha3lCdWNrZXQge1xuICByZXR1cm4ge1xuICAgIG1heCxcbiAgICByZWZpbGxJbnRlcnZhbCxcbiAgICByZWZpbGxBbW91bnQ6IHJlZmlsbEFtb3VudCA+IG1heCA/IG1heCA6IHJlZmlsbEFtb3VudCxcbiAgICBsYXN0UmVmaWxsOiBwZXJmb3JtYW5jZS5ub3coKSxcbiAgICBhbGxvd0FjcXVpcmU6IHRydWUsXG5cbiAgICBuZXh0UmVmaWxsOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbmV4dFJlZmlsbCh0aGlzKVxuICAgIH0sXG5cbiAgICB0b2tlbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1cGRhdGVUb2tlbnModGhpcylcbiAgICB9LFxuXG4gICAgYWNxdWlyZTogYXN5bmMgZnVuY3Rpb24gKGFtb3VudCwgaGlnaFByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWNxdWlyZSh0aGlzLCBhbW91bnQsIGhpZ2hQcmlvcml0eSlcbiAgICB9LFxuXG4gICAgdG9rZW5zU3RhdGU6IHRva2VucyA/PyBtYXgsXG4gICAgd2FpdGluZzogd2FpdGluZyA/PyBbXSxcblxuICAgIC4uLnJlc3QsXG4gIH1cbn1cblxuLyoqIFVwZGF0ZSB0aGUgdG9rZW5zIG9mIHRoYXQgYnVja2V0LlxuICogQHJldHVybnMge251bWJlcn0gVGhlIGFtb3VudCBvZiBjdXJyZW50IGF2YWlsYWJsZSB0b2tlbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVUb2tlbnMoYnVja2V0OiBMZWFreUJ1Y2tldCk6IG51bWJlciB7XG4gIGNvbnN0IHRpbWVQYXNzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIGJ1Y2tldC5sYXN0UmVmaWxsXG4gIGNvbnN0IG1pc3NlZFJlZmlsbHMgPSBNYXRoLmZsb29yKHRpbWVQYXNzZWQgLyBidWNrZXQucmVmaWxsSW50ZXJ2YWwpXG5cbiAgLy8gVGhlIHJlZmlsbCBzaGFsbCBub3QgZXhjZWVkIHRoZSBtYXggYW1vdW50IG9mIHRva2Vucy5cbiAgYnVja2V0LnRva2Vuc1N0YXRlID0gTWF0aC5taW4oYnVja2V0LnRva2Vuc1N0YXRlICsgYnVja2V0LnJlZmlsbEFtb3VudCAqIG1pc3NlZFJlZmlsbHMsIGJ1Y2tldC5tYXgpXG4gIGJ1Y2tldC5sYXN0UmVmaWxsICs9IGJ1Y2tldC5yZWZpbGxJbnRlcnZhbCAqIG1pc3NlZFJlZmlsbHNcblxuICByZXR1cm4gYnVja2V0LnRva2Vuc1N0YXRlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXh0UmVmaWxsKGJ1Y2tldDogTGVha3lCdWNrZXQpOiBudW1iZXIge1xuICAvLyBTaW5jZSB0aGlzIGJ1Y2tldCBpcyBsYXp5IHVwZGF0ZSB0aGUgdG9rZW5zIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgbmV4dCByZWZpbGwuXG4gIHVwZGF0ZVRva2VucyhidWNrZXQpXG5cbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIC0gYnVja2V0Lmxhc3RSZWZpbGwgKyBidWNrZXQucmVmaWxsSW50ZXJ2YWxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjcXVpcmUoYnVja2V0OiBMZWFreUJ1Y2tldCwgYW1vdW50OiBudW1iZXIsIGhpZ2hQcmlvcml0eSA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIFRvIHByZXZlbnQgdGhlIHJhY2UgY29uZGl0aW9uIG9mIDIgYWNxdWlyZXMgaGFwcGVuaW5nIGF0IG9uY2UsXG4gIC8vIGNoZWNrIHdoZXRoZXIgaXRzIGN1cnJlbnRseSBhbGxvd2VkIHRvIGFjcXVpcmUuXG4gIGlmICghYnVja2V0LmFsbG93QWNxdWlyZSkge1xuICAgIC8vIGNyZWF0ZSwgcHVzaCwgYW5kIHdhaXQgdW50aWwgdGhlIGN1cnJlbnQgcnVubmluZyBhY3F1aXJpbmcgaXMgZmluaXNoZWQuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmIChoaWdoUHJpb3JpdHkpIHtcbiAgICAgICAgYnVja2V0LndhaXRpbmcudW5zaGlmdChyZXNvbHZlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVja2V0LndhaXRpbmcucHVzaChyZXNvbHZlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBTb21laG93IGFub3RoZXIgYWNxdWlyZSBoYXMgc3RhcnRlZCxcbiAgICAvLyBzbyBuZWVkIHRvIHdhaXQgYWdhaW4uXG4gICAgaWYgKCFidWNrZXQuYWxsb3dBY3F1aXJlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgYWNxdWlyZShidWNrZXQsIGFtb3VudClcbiAgICB9XG4gIH1cblxuICBidWNrZXQuYWxsb3dBY3F1aXJlID0gZmFsc2VcbiAgLy8gU2luY2UgdGhlIGJ1Y2tldCBpcyBsYXp5IHVwZGF0ZSB0aGUgdG9rZW5zIG5vdyxcbiAgLy8gYW5kIGFsc28gZ2V0IHRoZSBjdXJyZW50IGFtb3VudCBvZiBhdmFpbGFibGUgdG9rZW5zXG4gIGNvbnN0IGN1cnJlbnRUb2tlbnMgPSB1cGRhdGVUb2tlbnMoYnVja2V0KVxuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCBtb3JlIHRoYW4gYXZhaWxhYmxlIHRva2VucyBoYXZlIGJlZW4gYWNxdWlyZWQsXG4gIC8vIHNvIGNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoaXMgYWNxdWlyZSBpcyBnb29kIHRvIGdvLlxuICBpZiAoY3VycmVudFRva2VucyA8IGFtb3VudCkge1xuICAgIGNvbnN0IHRva2Vuc05lZWRlZCA9IGFtb3VudCAtIGN1cnJlbnRUb2tlbnNcbiAgICBjb25zdCByZWZpbGxzTmVlZGVkID0gTWF0aC5jZWlsKHRva2Vuc05lZWRlZCAvIGJ1Y2tldC5yZWZpbGxBbW91bnQpXG5cbiAgICBjb25zdCB3YWl0VGltZSA9IGJ1Y2tldC5yZWZpbGxJbnRlcnZhbCAqIHJlZmlsbHNOZWVkZWRcbiAgICBhd2FpdCBkZWxheSh3YWl0VGltZSlcblxuICAgIC8vIFVwZGF0ZSB0aGUgdG9rZW5zIGFnYWluIHRvIGVuc3VyZSBub3RoaW5nIGhhcyBiZWVuIG1pc3NlZC5cbiAgICB1cGRhdGVUb2tlbnMoYnVja2V0KVxuICB9XG5cbiAgLy8gSW4gb3JkZXIgdG8gbm90IHN1YnRyYWN0IHRvbyBtdWNoIGZyb20gdGhlIHRva2VucyxcbiAgLy8gY2FsY3VsYXRlIHdoYXQgaXMgYWN0dWFsbHkgbmVlZGVkIHRvIHN1YnRyYWN0LlxuICBjb25zdCB0b1N1YnRyYWN0ID0gYW1vdW50ICUgYnVja2V0LnJlZmlsbEFtb3VudCA/PyBhbW91bnRcbiAgYnVja2V0LnRva2Vuc1N0YXRlIC09IHRvU3VidHJhY3RcblxuICAvLyBBbGxvdyB0aGUgbmV4dCBhY3F1aXJlIHRvIGhhcHBlbi5cbiAgYnVja2V0LmFsbG93QWNxdWlyZSA9IHRydWVcbiAgLy8gSWYgdGhlcmUgaXMgYW4gYWNxdWlyZSB3YWl0aW5nLCBsZXQgaXQgY29udGludWUuXG4gIGJ1Y2tldC53YWl0aW5nLnNoaWZ0KCk/LigpXG59XG4iXSwibmFtZXMiOlsiZGVsYXkiLCJjcmVhdGVMZWFreUJ1Y2tldCIsIm1heCIsInJlZmlsbEludGVydmFsIiwicmVmaWxsQW1vdW50IiwidG9rZW5zIiwid2FpdGluZyIsInJlc3QiLCJsYXN0UmVmaWxsIiwicGVyZm9ybWFuY2UiLCJub3ciLCJhbGxvd0FjcXVpcmUiLCJuZXh0UmVmaWxsIiwidXBkYXRlVG9rZW5zIiwiYWNxdWlyZSIsImFtb3VudCIsImhpZ2hQcmlvcml0eSIsInRva2Vuc1N0YXRlIiwiYnVja2V0IiwidGltZVBhc3NlZCIsIm1pc3NlZFJlZmlsbHMiLCJNYXRoIiwiZmxvb3IiLCJtaW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc2hpZnQiLCJwdXNoIiwiY3VycmVudFRva2VucyIsInJlZmlsbHNOZWVkZWQiLCJjZWlsIiwidG9rZW5zTmVlZGVkIiwid2FpdFRpbWUiLCJ0b1N1YnRyYWN0Iiwic2hpZnQiXSwibWFwcGluZ3MiOiJBQUNBLE9BQVNBLFNBQUFBLENBQUssS0FBUSxZQUFZLEFBbURsQyxRQUFPLFNBQVNDLGtCQUFrQixDQUNoQ0MsSUFBQUEsQ0FBRyxDQUNIQyxlQUFBQSxDQUFjLENBQ2RDLGFBQUFBLENBQVksQ0FDWkMsT0FBQUEsQ0FBTSxDQUNOQyxRQUFBQSxDQUFPLENBQ1AsR0FBR0MsRUFNSixDQUFlLENBQ2QsTUFBTyxDQUNMTCxJQUFBQSxFQUNBQyxlQUFBQSxFQUNBQyxhQUFjQSxFQUFlRixFQUFNQSxFQUFNRSxDQUFZLENBQ3JESSxXQUFZQyxZQUFZQyxHQUFHLEdBQzNCQyxhQUFjLENBQUEsRUFFZEMsV0FBWSxVQUFZLENBQ3RCLE9BQU9BLFdBQVcsSUFBSSxDQUN4QixFQUVBUCxPQUFRLFVBQVksQ0FDbEIsT0FBT1EsYUFBYSxJQUFJLENBQzFCLEVBRUFDLFFBQVMsZUFBZ0JDLENBQU0sQ0FBRUMsQ0FBWSxDQUFFLENBQzdDLE9BQU8sTUFBTUYsUUFBUSxJQUFJLENBQUVDLEVBQVFDLEVBQ3JDLEVBRUFDLFlBQWFaLEdBQVVILEVBQ3ZCSSxRQUFTQSxHQUFXLEVBQUUsQ0FFdEIsR0FBR0MsQ0FBSSxBQUNULENBQ0YsQ0FBQyxBQUtELE9BQU8sU0FBU00sYUFBYUssQ0FBbUIsQ0FBVSxDQUN4RCxJQUFNQyxFQUFhVixZQUFZQyxHQUFHLEdBQUtRLEVBQU9WLFVBQVUsQ0FDbERZLEVBQWdCQyxLQUFLQyxLQUFLLENBQUNILEVBQWFELEVBQU9mLGNBQWMsRUFNbkUsT0FIQWUsRUFBT0QsV0FBVyxDQUFHSSxLQUFLRSxHQUFHLENBQUNMLEVBQU9ELFdBQVcsQ0FBR0MsRUFBT2QsWUFBWSxDQUFHZ0IsRUFBZUYsRUFBT2hCLEdBQUcsRUFDbEdnQixFQUFPVixVQUFVLEVBQUlVLEVBQU9mLGNBQWMsQ0FBR2lCLEVBRXRDRixFQUFPRCxXQUFXLEFBQzNCLENBQUMsQUFFRCxPQUFPLFNBQVNMLFdBQVdNLENBQW1CLENBQVUsQ0FJdEQsT0FGQUwsYUFBYUssR0FFTlQsWUFBWUMsR0FBRyxHQUFLUSxFQUFPVixVQUFVLENBQUdVLEVBQU9mLGNBQWMsQUFDdEUsQ0FBQyxBQUVELE9BQU8sZUFBZVcsUUFBUUksQ0FBbUIsQ0FBRUgsQ0FBYyxDQUFFQyxFQUFlLENBQUEsQ0FBSyxDQUFpQixDQUd0RyxHQUFJLENBQUNFLEVBQU9QLFlBQVksR0FFdEIsTUFBTSxJQUFJYSxRQUFRLEFBQUNDLEdBQVksQ0FDekJULEVBQ0ZFLEVBQU9aLE9BQU8sQ0FBQ29CLE9BQU8sQ0FBQ0QsR0FFdkJQLEVBQU9aLE9BQU8sQ0FBQ3FCLElBQUksQ0FBQ0YsRUFFeEIsR0FJSSxDQUFDUCxFQUFPUCxZQUFZLEVBQ3RCLE9BQU8sTUFBTUcsUUFBUUksRUFBUUgsRUFFaEMsQUFFREcsQ0FBQUEsRUFBT1AsWUFBWSxDQUFHLENBQUEsRUFHdEIsSUFBTWlCLEVBQWdCZixhQUFhSyxHQUluQyxHQUFJVSxFQUFnQmIsRUFBUSxDQUUxQixJQUFNYyxFQUFnQlIsS0FBS1MsSUFBSSxDQUFDQyxBQURYaEIsQ0FBQUEsRUFBU2EsQ0FBWSxFQUNLVixFQUFPZCxZQUFZLEVBRTVENEIsRUFBV2QsRUFBT2YsY0FBYyxDQUFHMEIsQ0FDekMsT0FBTTdCLEVBQU1nQyxHQUdabkIsYUFBYUssRUFDZixDQUFDLEFBSUQsSUFBTWUsRUFBYWxCLENBQUFBLEVBQVNHLEVBQU9kLFlBQVksQUFBRCxHQUFLVyxDQUNuREcsQ0FBQUEsRUFBT0QsV0FBVyxFQUFJZ0IsRUFHdEJmLEVBQU9QLFlBQVksQ0FBRyxDQUFBLEVBRXRCTyxFQUFPWixPQUFPLENBQUM0QixLQUFLLE1BQ3RCLENBQUMifQ==
1
+ import { delay } from './utils.js';
2
+ export function createLeakyBucket({ max , refillInterval , refillAmount , tokens , waiting , ...rest }) {
3
+ return {
4
+ max,
5
+ refillInterval,
6
+ refillAmount: refillAmount > max ? max : refillAmount,
7
+ lastRefill: performance.now(),
8
+ allowAcquire: true,
9
+ nextRefill: function() {
10
+ return nextRefill(this);
11
+ },
12
+ tokens: function() {
13
+ return updateTokens(this);
14
+ },
15
+ acquire: async function(amount, highPriority) {
16
+ return await acquire(this, amount, highPriority);
17
+ },
18
+ tokensState: tokens ?? max,
19
+ waiting: waiting ?? [],
20
+ ...rest
21
+ };
22
+ }
23
+ /** Update the tokens of that bucket.
24
+ * @returns {number} The amount of current available tokens.
25
+ */ export function updateTokens(bucket) {
26
+ const timePassed = performance.now() - bucket.lastRefill;
27
+ const missedRefills = Math.floor(timePassed / bucket.refillInterval);
28
+ // The refill shall not exceed the max amount of tokens.
29
+ bucket.tokensState = Math.min(bucket.tokensState + bucket.refillAmount * missedRefills, bucket.max);
30
+ bucket.lastRefill += bucket.refillInterval * missedRefills;
31
+ return bucket.tokensState;
32
+ }
33
+ export function nextRefill(bucket) {
34
+ // Since this bucket is lazy update the tokens before calculating the next refill.
35
+ updateTokens(bucket);
36
+ return performance.now() - bucket.lastRefill + bucket.refillInterval;
37
+ }
38
+ export async function acquire(bucket, amount, highPriority = false) {
39
+ // To prevent the race condition of 2 acquires happening at once,
40
+ // check whether its currently allowed to acquire.
41
+ if (!bucket.allowAcquire) {
42
+ // create, push, and wait until the current running acquiring is finished.
43
+ await new Promise((resolve)=>{
44
+ if (highPriority) {
45
+ bucket.waiting.unshift(resolve);
46
+ } else {
47
+ bucket.waiting.push(resolve);
48
+ }
49
+ });
50
+ // Somehow another acquire has started,
51
+ // so need to wait again.
52
+ if (!bucket.allowAcquire) {
53
+ return await acquire(bucket, amount);
54
+ }
55
+ }
56
+ bucket.allowAcquire = false;
57
+ // Since the bucket is lazy update the tokens now,
58
+ // and also get the current amount of available tokens
59
+ const currentTokens = updateTokens(bucket);
60
+ // It's possible that more than available tokens have been acquired,
61
+ // so calculate the amount of milliseconds to wait until this acquire is good to go.
62
+ if (currentTokens < amount) {
63
+ const tokensNeeded = amount - currentTokens;
64
+ const refillsNeeded = Math.ceil(tokensNeeded / bucket.refillAmount);
65
+ const waitTime = bucket.refillInterval * refillsNeeded;
66
+ await delay(waitTime);
67
+ // Update the tokens again to ensure nothing has been missed.
68
+ updateTokens(bucket);
69
+ }
70
+ // In order to not subtract too much from the tokens,
71
+ // calculate what is actually needed to subtract.
72
+ const toSubtract = (amount % bucket.refillAmount) ?? amount;
73
+ bucket.tokensState -= toSubtract;
74
+ // Allow the next acquire to happen.
75
+ bucket.allowAcquire = true;
76
+ // If there is an acquire waiting, let it continue.
77
+ bucket.waiting.shift()?.();
78
+ }
79
+
80
+ //# sourceMappingURL=bucket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/bucket.ts"],"sourcesContent":["import type { PickPartial } from '@discordeno/types'\nimport { delay } from './utils.js'\n\n/** A Leaky Bucket.\n * Useful for rate limiting purposes.\n * This uses `performance.now()` instead of `Date.now()` for higher accuracy.\n *\n * NOTE: This bucket is lazy, means it only updates when a related method is called.\n */\nexport interface LeakyBucket {\n /** How many tokens this bucket can hold. */\n max: number\n /** Amount of tokens gained per interval.\n * If bigger than `max` it will be pressed to `max`.\n */\n refillAmount: number\n /** Interval at which the bucket gains tokens. */\n refillInterval: number\n\n /** Acquire tokens from the bucket.\n * Resolves when the tokens are acquired and available.\n * @param {boolean} [highPriority=false] Whether this acquire is should be done asap.\n */\n acquire: (amount: number, highPriority?: boolean) => Promise<void>\n\n /** Returns the number of milliseconds until the next refill. */\n nextRefill: () => number\n\n /** Current tokens in the bucket. */\n tokens: () => number\n\n /** @private Internal track of when the last refill of tokens was.\n * DO NOT TOUCH THIS! Unless you know what you are doing ofc :P\n */\n lastRefill: number\n\n /** @private Internal state of whether currently it is allowed to acquire tokens.\n * DO NOT TOUCH THIS! Unless you know what you are doing ofc :P\n */\n allowAcquire: boolean\n\n /** @private Internal number of currently available tokens.\n * DO NOT TOUCH THIS! Unless you know what you are doing ofc :P\n */\n tokensState: number\n\n /** @private Internal array of promises necessary to guarantee no race conditions.\n * DO NOT TOUCH THIS! Unless you know what you are doing ofc :P\n */\n waiting: Array<(_?: unknown) => void>\n}\n\nexport function createLeakyBucket({\n max,\n refillInterval,\n refillAmount,\n tokens,\n waiting,\n ...rest\n}: Omit<PickPartial<LeakyBucket, 'max' | 'refillInterval' | 'refillAmount'>, 'tokens'> & {\n /** Current tokens in the bucket.\n * @default max\n */\n tokens?: number\n}): LeakyBucket {\n return {\n max,\n refillInterval,\n refillAmount: refillAmount > max ? max : refillAmount,\n lastRefill: performance.now(),\n allowAcquire: true,\n\n nextRefill: function () {\n return nextRefill(this)\n },\n\n tokens: function () {\n return updateTokens(this)\n },\n\n acquire: async function (amount, highPriority) {\n return await acquire(this, amount, highPriority)\n },\n\n tokensState: tokens ?? max,\n waiting: waiting ?? [],\n\n ...rest,\n }\n}\n\n/** Update the tokens of that bucket.\n * @returns {number} The amount of current available tokens.\n */\nexport function updateTokens(bucket: LeakyBucket): number {\n const timePassed = performance.now() - bucket.lastRefill\n const missedRefills = Math.floor(timePassed / bucket.refillInterval)\n\n // The refill shall not exceed the max amount of tokens.\n bucket.tokensState = Math.min(bucket.tokensState + bucket.refillAmount * missedRefills, bucket.max)\n bucket.lastRefill += bucket.refillInterval * missedRefills\n\n return bucket.tokensState\n}\n\nexport function nextRefill(bucket: LeakyBucket): number {\n // Since this bucket is lazy update the tokens before calculating the next refill.\n updateTokens(bucket)\n\n return performance.now() - bucket.lastRefill + bucket.refillInterval\n}\n\nexport async function acquire(bucket: LeakyBucket, amount: number, highPriority = false): Promise<void> {\n // To prevent the race condition of 2 acquires happening at once,\n // check whether its currently allowed to acquire.\n if (!bucket.allowAcquire) {\n // create, push, and wait until the current running acquiring is finished.\n await new Promise((resolve) => {\n if (highPriority) {\n bucket.waiting.unshift(resolve)\n } else {\n bucket.waiting.push(resolve)\n }\n })\n\n // Somehow another acquire has started,\n // so need to wait again.\n if (!bucket.allowAcquire) {\n return await acquire(bucket, amount)\n }\n }\n\n bucket.allowAcquire = false\n // Since the bucket is lazy update the tokens now,\n // and also get the current amount of available tokens\n const currentTokens = updateTokens(bucket)\n\n // It's possible that more than available tokens have been acquired,\n // so calculate the amount of milliseconds to wait until this acquire is good to go.\n if (currentTokens < amount) {\n const tokensNeeded = amount - currentTokens\n const refillsNeeded = Math.ceil(tokensNeeded / bucket.refillAmount)\n\n const waitTime = bucket.refillInterval * refillsNeeded\n await delay(waitTime)\n\n // Update the tokens again to ensure nothing has been missed.\n updateTokens(bucket)\n }\n\n // In order to not subtract too much from the tokens,\n // calculate what is actually needed to subtract.\n const toSubtract = amount % bucket.refillAmount ?? amount\n bucket.tokensState -= toSubtract\n\n // Allow the next acquire to happen.\n bucket.allowAcquire = true\n // If there is an acquire waiting, let it continue.\n bucket.waiting.shift()?.()\n}\n"],"names":["delay","createLeakyBucket","max","refillInterval","refillAmount","tokens","waiting","rest","lastRefill","performance","now","allowAcquire","nextRefill","updateTokens","acquire","amount","highPriority","tokensState","bucket","timePassed","missedRefills","Math","floor","min","Promise","resolve","unshift","push","currentTokens","tokensNeeded","refillsNeeded","ceil","waitTime","toSubtract","shift"],"mappings":"AACA,SAASA,KAAK,QAAQ,aAAY;AAmDlC,OAAO,SAASC,kBAAkB,EAChCC,IAAG,EACHC,eAAc,EACdC,aAAY,EACZC,OAAM,EACNC,QAAO,EACP,GAAGC,MAMJ,EAAe;IACd,OAAO;QACLL;QACAC;QACAC,cAAcA,eAAeF,MAAMA,MAAME,YAAY;QACrDI,YAAYC,YAAYC,GAAG;QAC3BC,cAAc,IAAI;QAElBC,YAAY,WAAY;YACtB,OAAOA,WAAW,IAAI;QACxB;QAEAP,QAAQ,WAAY;YAClB,OAAOQ,aAAa,IAAI;QAC1B;QAEAC,SAAS,eAAgBC,MAAM,EAAEC,YAAY,EAAE;YAC7C,OAAO,MAAMF,QAAQ,IAAI,EAAEC,QAAQC;QACrC;QAEAC,aAAaZ,UAAUH;QACvBI,SAASA,WAAW,EAAE;QAEtB,GAAGC,IAAI;IACT;AACF,CAAC;AAED;;CAEC,GACD,OAAO,SAASM,aAAaK,MAAmB,EAAU;IACxD,MAAMC,aAAaV,YAAYC,GAAG,KAAKQ,OAAOV,UAAU;IACxD,MAAMY,gBAAgBC,KAAKC,KAAK,CAACH,aAAaD,OAAOf,cAAc;IAEnE,wDAAwD;IACxDe,OAAOD,WAAW,GAAGI,KAAKE,GAAG,CAACL,OAAOD,WAAW,GAAGC,OAAOd,YAAY,GAAGgB,eAAeF,OAAOhB,GAAG;IAClGgB,OAAOV,UAAU,IAAIU,OAAOf,cAAc,GAAGiB;IAE7C,OAAOF,OAAOD,WAAW;AAC3B,CAAC;AAED,OAAO,SAASL,WAAWM,MAAmB,EAAU;IACtD,kFAAkF;IAClFL,aAAaK;IAEb,OAAOT,YAAYC,GAAG,KAAKQ,OAAOV,UAAU,GAAGU,OAAOf,cAAc;AACtE,CAAC;AAED,OAAO,eAAeW,QAAQI,MAAmB,EAAEH,MAAc,EAAEC,eAAe,KAAK,EAAiB;IACtG,iEAAiE;IACjE,kDAAkD;IAClD,IAAI,CAACE,OAAOP,YAAY,EAAE;QACxB,0EAA0E;QAC1E,MAAM,IAAIa,QAAQ,CAACC,UAAY;YAC7B,IAAIT,cAAc;gBAChBE,OAAOZ,OAAO,CAACoB,OAAO,CAACD;YACzB,OAAO;gBACLP,OAAOZ,OAAO,CAACqB,IAAI,CAACF;YACtB,CAAC;QACH;QAEA,uCAAuC;QACvC,yBAAyB;QACzB,IAAI,CAACP,OAAOP,YAAY,EAAE;YACxB,OAAO,MAAMG,QAAQI,QAAQH;QAC/B,CAAC;IACH,CAAC;IAEDG,OAAOP,YAAY,GAAG,KAAK;IAC3B,kDAAkD;IAClD,sDAAsD;IACtD,MAAMiB,gBAAgBf,aAAaK;IAEnC,oEAAoE;IACpE,oFAAoF;IACpF,IAAIU,gBAAgBb,QAAQ;QAC1B,MAAMc,eAAed,SAASa;QAC9B,MAAME,gBAAgBT,KAAKU,IAAI,CAACF,eAAeX,OAAOd,YAAY;QAElE,MAAM4B,WAAWd,OAAOf,cAAc,GAAG2B;QACzC,MAAM9B,MAAMgC;QAEZ,6DAA6D;QAC7DnB,aAAaK;IACf,CAAC;IAED,qDAAqD;IACrD,iDAAiD;IACjD,MAAMe,aAAalB,CAAAA,SAASG,OAAOd,YAAY,AAAD,KAAKW;IACnDG,OAAOD,WAAW,IAAIgB;IAEtB,oCAAoC;IACpCf,OAAOP,YAAY,GAAG,IAAI;IAC1B,mDAAmD;IACnDO,OAAOZ,OAAO,CAAC4B,KAAK;AACtB,CAAC"}
package/dist/casing.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { Camelize, Snakelize } from '@discordeno/types';
2
- export declare const camelize: <T>(object: T) => Camelize<T>;
3
- export declare const snakelize: <T>(object: T) => Snakelize<T>;
2
+ export declare function camelize<T>(object: T): Camelize<T>;
3
+ export declare function snakelize<T>(object: T): Snakelize<T>;
4
4
  export declare function snakeToCamelCase(str: string): string;
5
5
  export declare function camelToSnakeCase(str: string): string;
6
6
  //# sourceMappingURL=casing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5D,eAAO,MAAM,QAAQ,+BAcpB,CAAA;AAED,eAAO,MAAM,SAAS,gCAerB,CAAA;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAepD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAapD"}
1
+ {"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5D,wBAAgB,QAAQ,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAcnD;AAED,wBAAgB,SAAS,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAerD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAepD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAapD"}