@sapphire/ratelimits 2.4.10-next.d2ec5e56 → 2.4.10-next.d8701971

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/README.md CHANGED
@@ -7,7 +7,6 @@
7
7
  **Bucket implementation for Ratelimits.**
8
8
 
9
9
  [![GitHub](https://img.shields.io/github/license/sapphiredev/utilities)](https://github.com/sapphiredev/utilities/blob/main/LICENSE.md)
10
- [![codecov](https://codecov.io/gh/sapphiredev/utilities/branch/main/graph/badge.svg?token=OEGIV6RFDO)](https://codecov.io/gh/sapphiredev/utilities)
11
10
  [![npm bundle size](https://img.shields.io/bundlephobia/min/@sapphire/ratelimits?logo=webpack&style=flat-square)](https://bundlephobia.com/result?p=@sapphire/ratelimits)
12
11
  [![npm](https://img.shields.io/npm/v/@sapphire/ratelimits?color=crimson&logo=npm&style=flat-square)](https://www.npmjs.com/package/@sapphire/ratelimits)
13
12
 
@@ -3,10 +3,7 @@
3
3
  var __defProp = Object.defineProperty;
4
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
5
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
- var __publicField = (obj, key, value) => {
7
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
- return value;
9
- };
6
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
10
7
 
11
8
  // src/lib/RateLimit.ts
12
9
  var _RateLimit = class _RateLimit {
@@ -51,10 +48,8 @@ var _RateLimit = class _RateLimit {
51
48
  * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.
52
49
  */
53
50
  consume() {
54
- if (this.limited)
55
- throw new Error("Cannot consume a limited bucket");
56
- if (this.expired)
57
- this.reset();
51
+ if (this.limited) throw new Error("Cannot consume a limited bucket");
52
+ if (this.expired) this.reset();
58
53
  this.remaining--;
59
54
  return this;
60
55
  }
@@ -135,8 +130,7 @@ var _RateLimitManager = class _RateLimitManager extends Map {
135
130
  */
136
131
  sweep() {
137
132
  for (const [id, value] of this.entries()) {
138
- if (value.expired)
139
- this.delete(id);
133
+ if (value.expired) this.delete(id);
140
134
  }
141
135
  if (this.size === 0 && this.sweepInterval !== void 0 && this.sweepInterval !== null) {
142
136
  clearInterval(this.sweepInterval);
@@ -153,5 +147,5 @@ var RateLimitManager = _RateLimitManager;
153
147
 
154
148
  exports.RateLimit = RateLimit;
155
149
  exports.RateLimitManager = RateLimitManager;
156
- //# sourceMappingURL=out.js.map
150
+ //# sourceMappingURL=index.cjs.map
157
151
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":";;;;;;;;;AAEO,IAAM,aAAN,MAAM,WAAsB;AAAA;AAAA;AAAA;AAAA,EAmB3B,YAAY,SAA8B;AAfjD;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAQ;AAMP,SAAK,UAAU;AACf,SAAK,MAAM;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,cAAc,KAAK,CAAC,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,gBAAwB;AAClC,WAAO,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACtB,QAAI,KAAK;AAAS,YAAM,IAAI,MAAM,iCAAiC;AACnE,QAAI,KAAK;AAAS,WAAK,MAAM;AAE7B,SAAK;AACL,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,WAAO,KAAK,eAAe,EAAE,UAAU;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAuB;AAC7B,SAAK,YAAY,KAAK,QAAQ;AAC9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,YAAkB;AACxB,SAAK,UAAU,KAAK,IAAI,IAAI,KAAK,QAAQ;AACzC,WAAO;AAAA,EACR;AACD;AA9EmC;AAA5B,IAAM,YAAN;;;ACAA,IAAM,oBAAN,MAAM,0BAAqC,IAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB/D,YAAY,MAAc,QAAQ,GAAG;AAC3C,UAAM;AAjBP;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAQ;AASP,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,IAAqB;AACnC,WAAO,KAAK,IAAI,EAAE,KAAK,KAAK,OAAO,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,IAAqB;AAClC,UAAM,QAAQ,IAAI,UAAU,IAAI;AAChC,SAAK,IAAI,IAAI,KAAK;AAClB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOgB,IAAI,IAAO,OAA2B;AACrD,SAAK,kBAAL,KAAK,gBAAkB,YAAY,KAAK,MAAM,KAAK,IAAI,GAAG,kBAAiB,qBAAqB;AAChG,WAAO,MAAM,IAAI,IAAI,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,eAAW,CAAC,IAAI,KAAK,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAI,MAAM;AAAS,aAAK,OAAO,EAAE;AAAA,IAClC;AAEA,QAAI,KAAK,SAAS,KAAK,KAAK,kBAAkB,UAAa,KAAK,kBAAkB,MAAM;AACvF,oBAAc,KAAK,aAAa;AAChC,WAAK,gBAAgB;AAAA,IACtB;AAAA,EACD;AAMD;AAzEuE;AAAA;AAAA;AAAA;AAwEtE,cAxEY,mBAwEE,yBAAwB;AAxEhC,IAAM,mBAAN","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
@@ -1,10 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __publicField = (obj, key, value) => {
5
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
6
- return value;
7
- };
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
5
 
9
6
  // src/lib/RateLimit.ts
10
7
  var _RateLimit = class _RateLimit {
@@ -49,10 +46,8 @@ var _RateLimit = class _RateLimit {
49
46
  * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.
50
47
  */
51
48
  consume() {
52
- if (this.limited)
53
- throw new Error("Cannot consume a limited bucket");
54
- if (this.expired)
55
- this.reset();
49
+ if (this.limited) throw new Error("Cannot consume a limited bucket");
50
+ if (this.expired) this.reset();
56
51
  this.remaining--;
57
52
  return this;
58
53
  }
@@ -133,8 +128,7 @@ var _RateLimitManager = class _RateLimitManager extends Map {
133
128
  */
134
129
  sweep() {
135
130
  for (const [id, value] of this.entries()) {
136
- if (value.expired)
137
- this.delete(id);
131
+ if (value.expired) this.delete(id);
138
132
  }
139
133
  if (this.size === 0 && this.sweepInterval !== void 0 && this.sweepInterval !== null) {
140
134
  clearInterval(this.sweepInterval);
@@ -150,5 +144,5 @@ __publicField(_RateLimitManager, "sweepIntervalDuration", 3e4);
150
144
  var RateLimitManager = _RateLimitManager;
151
145
 
152
146
  export { RateLimit, RateLimitManager };
153
- //# sourceMappingURL=out.js.map
147
+ //# sourceMappingURL=index.mjs.map
154
148
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":";;;;;;;;;AAEO,IAAM,aAAN,MAAM,WAAsB;AAAA;AAAA;AAAA;AAAA,EAmB3B,YAAY,SAA8B;AAfjD;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAQ;AAMP,SAAK,UAAU;AACf,SAAK,MAAM;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,cAAc,KAAK,CAAC,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,gBAAwB;AAClC,WAAO,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACtB,QAAI,KAAK;AAAS,YAAM,IAAI,MAAM,iCAAiC;AACnE,QAAI,KAAK;AAAS,WAAK,MAAM;AAE7B,SAAK;AACL,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,WAAO,KAAK,eAAe,EAAE,UAAU;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAuB;AAC7B,SAAK,YAAY,KAAK,QAAQ;AAC9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,YAAkB;AACxB,SAAK,UAAU,KAAK,IAAI,IAAI,KAAK,QAAQ;AACzC,WAAO;AAAA,EACR;AACD;AA9EmC;AAA5B,IAAM,YAAN;;;ACAA,IAAM,oBAAN,MAAM,0BAAqC,IAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB/D,YAAY,MAAc,QAAQ,GAAG;AAC3C,UAAM;AAjBP;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAQ;AASP,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,IAAqB;AACnC,WAAO,KAAK,IAAI,EAAE,KAAK,KAAK,OAAO,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,IAAqB;AAClC,UAAM,QAAQ,IAAI,UAAU,IAAI;AAChC,SAAK,IAAI,IAAI,KAAK;AAClB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOgB,IAAI,IAAO,OAA2B;AACrD,SAAK,kBAAL,KAAK,gBAAkB,YAAY,KAAK,MAAM,KAAK,IAAI,GAAG,kBAAiB,qBAAqB;AAChG,WAAO,MAAM,IAAI,IAAI,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,eAAW,CAAC,IAAI,KAAK,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAI,MAAM;AAAS,aAAK,OAAO,EAAE;AAAA,IAClC;AAEA,QAAI,KAAK,SAAS,KAAK,KAAK,kBAAkB,UAAa,KAAK,kBAAkB,MAAM;AACvF,oBAAc,KAAK,aAAa;AAChC,WAAK,gBAAgB;AAAA,IACtB;AAAA,EACD;AAMD;AAzEuE;AAAA;AAAA;AAAA;AAwEtE,cAxEY,mBAwEE,yBAAwB;AAxEhC,IAAM,mBAAN","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
@@ -4,10 +4,7 @@ var SapphireSnowflake = (function (exports) {
4
4
  var __defProp = Object.defineProperty;
5
5
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
6
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
- var __publicField = (obj, key, value) => {
8
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
9
- return value;
10
- };
7
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
8
 
12
9
  // src/lib/RateLimit.ts
13
10
  var _RateLimit = class _RateLimit {
@@ -52,10 +49,8 @@ var SapphireSnowflake = (function (exports) {
52
49
  * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.
53
50
  */
54
51
  consume() {
55
- if (this.limited)
56
- throw new Error("Cannot consume a limited bucket");
57
- if (this.expired)
58
- this.reset();
52
+ if (this.limited) throw new Error("Cannot consume a limited bucket");
53
+ if (this.expired) this.reset();
59
54
  this.remaining--;
60
55
  return this;
61
56
  }
@@ -136,8 +131,7 @@ var SapphireSnowflake = (function (exports) {
136
131
  */
137
132
  sweep() {
138
133
  for (const [id, value] of this.entries()) {
139
- if (value.expired)
140
- this.delete(id);
134
+ if (value.expired) this.delete(id);
141
135
  }
142
136
  if (this.size === 0 && this.sweepInterval !== void 0 && this.sweepInterval !== null) {
143
137
  clearInterval(this.sweepInterval);
@@ -158,5 +152,5 @@ var SapphireSnowflake = (function (exports) {
158
152
  return exports;
159
153
 
160
154
  })({});
161
- //# sourceMappingURL=out.js.map
155
+ //# sourceMappingURL=index.global.js.map
162
156
  //# sourceMappingURL=index.global.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":";;;;;;;;;AAEO,IAAM,aAAN,MAAM,WAAsB;AAAA;AAAA;AAAA;AAAA,EAmB3B,YAAY,SAA8B;AAfjD;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAO;AAKP;AAAA;AAAA;AAAA,wBAAQ;AAMP,SAAK,UAAU;AACf,SAAK,MAAM;AAAA,EACZ;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,kBAAkB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,UAAmB;AAC7B,WAAO,KAAK,cAAc,KAAK,CAAC,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAW,gBAAwB;AAClC,WAAO,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI,GAAG,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACtB,QAAI,KAAK;AAAS,YAAM,IAAI,MAAM,iCAAiC;AACnE,QAAI,KAAK;AAAS,WAAK,MAAM;AAE7B,SAAK;AACL,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,WAAO,KAAK,eAAe,EAAE,UAAU;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKO,iBAAuB;AAC7B,SAAK,YAAY,KAAK,QAAQ;AAC9B,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKO,YAAkB;AACxB,SAAK,UAAU,KAAK,IAAI,IAAI,KAAK,QAAQ;AACzC,WAAO;AAAA,EACR;AACD;AA9EmC;AAA5B,IAAM,YAAN;;;ACAA,IAAM,oBAAN,MAAM,0BAAqC,IAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB/D,YAAY,MAAc,QAAQ,GAAG;AAC3C,UAAM;AAjBP;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAgB;AAKhB;AAAA;AAAA;AAAA,wBAAQ;AASP,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,QAAQ,IAAqB;AACnC,WAAO,KAAK,IAAI,EAAE,KAAK,KAAK,OAAO,EAAE;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,OAAO,IAAqB;AAClC,UAAM,QAAQ,IAAI,UAAU,IAAI;AAChC,SAAK,IAAI,IAAI,KAAK;AAClB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOgB,IAAI,IAAO,OAA2B;AACrD,SAAK,kBAAL,KAAK,gBAAkB,YAAY,KAAK,MAAM,KAAK,IAAI,GAAG,kBAAiB,qBAAqB;AAChG,WAAO,MAAM,IAAI,IAAI,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKO,QAAc;AACpB,eAAW,CAAC,IAAI,KAAK,KAAK,KAAK,QAAQ,GAAG;AACzC,UAAI,MAAM;AAAS,aAAK,OAAO,EAAE;AAAA,IAClC;AAEA,QAAI,KAAK,SAAS,KAAK,KAAK,kBAAkB,UAAa,KAAK,kBAAkB,MAAM;AACvF,oBAAc,KAAK,aAAa;AAChC,WAAK,gBAAgB;AAAA,IACtB;AAAA,EACD;AAMD;AAzEuE;AAAA;AAAA;AAAA;AAwEtE,cAxEY,mBAwEE,yBAAwB;AAxEhC,IAAM,mBAAN","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/RateLimit.ts","../../src/lib/RateLimitManager.ts"],"names":[],"mappings":"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","file":"index.global.js","sourcesContent":["import type { RateLimitManager } from './RateLimitManager';\n\nexport class RateLimit<K = string> {\n\t/**\n\t * The remaining amount of times this entry can be dripped before the bucket is empty.\n\t */\n\tpublic remaining!: number;\n\n\t/**\n\t * The timestamp that represents when this entry will reset back to a available state.\n\t */\n\tpublic expires!: number;\n\n\t/**\n\t * The {@link RateLimitManager} this entry is for.\n\t */\n\tprivate manager: RateLimitManager<K>;\n\n\t/**\n\t * @param manager The manager for this entry.\n\t */\n\tpublic constructor(manager: RateLimitManager<K>) {\n\t\tthis.manager = manager;\n\t\tthis.reset();\n\t}\n\n\t/**\n\t * Whether this entry is expired or not, allowing the bucket to be reset.\n\t */\n\tpublic get expired(): boolean {\n\t\treturn this.remainingTime === 0;\n\t}\n\n\t/**\n\t * Whether this entry is limited or not.\n\t */\n\tpublic get limited(): boolean {\n\t\treturn this.remaining === 0 && !this.expired;\n\t}\n\n\t/**\n\t * The remaining time in milliseconds before resetting.\n\t */\n\tpublic get remainingTime(): number {\n\t\treturn Math.max(this.expires - Date.now(), 0);\n\t}\n\n\t/**\n\t * Consumes {@link RateLimit.remaining} by one if it's not limited, calling {@link RateLimit.reset} first if {@link RateLimit.expired} is true.\n\t */\n\tpublic consume(): this {\n\t\tif (this.limited) throw new Error('Cannot consume a limited bucket');\n\t\tif (this.expired) this.reset();\n\n\t\tthis.remaining--;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry back to it's full state.\n\t */\n\tpublic reset(): this {\n\t\treturn this.resetRemaining().resetTime();\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.remaining} uses back to full state.\n\t */\n\tpublic resetRemaining(): this {\n\t\tthis.remaining = this.manager.limit;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Resets the entry's {@link RateLimit.expires} to the current time plus {@link RateLimitManager.time}.\n\t */\n\tpublic resetTime(): this {\n\t\tthis.expires = Date.now() + this.manager.time;\n\t\treturn this;\n\t}\n}\n","import { RateLimit } from './RateLimit';\n\nexport class RateLimitManager<K = string> extends Map<K, RateLimit<K>> {\n\t/**\n\t * The amount of milliseconds for the {@link RateLimit ratelimits} from this manager to expire.\n\t */\n\tpublic readonly time: number;\n\n\t/**\n\t * The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic readonly limit: number;\n\n\t/**\n\t * The interval to sweep expired {@link RateLimit ratelimits}.\n\t */\n\tprivate sweepInterval!: NodeJS.Timeout | undefined | null;\n\n\t/**\n\t * @param time The amount of milliseconds for the ratelimits from this manager to expire.\n\t * @param limit The amount of times a {@link RateLimit} can drip before it's limited.\n\t */\n\tpublic constructor(time: number, limit = 1) {\n\t\tsuper();\n\n\t\tthis.time = time;\n\t\tthis.limit = limit;\n\t}\n\n\t/**\n\t * Gets a {@link RateLimit} from this manager or creates it if it does not exist.\n\t * @param id The id for the {@link RateLimit}\n\t */\n\tpublic acquire(id: K): RateLimit<K> {\n\t\treturn this.get(id) ?? this.create(id);\n\t}\n\n\t/**\n\t * Creates a {@link RateLimit} for this manager.\n\t * @param id The id the {@link RateLimit} belongs to\n\t */\n\tpublic create(id: K): RateLimit<K> {\n\t\tconst value = new RateLimit(this);\n\t\tthis.set(id, value);\n\t\treturn value;\n\t}\n\n\t/**\n\t * Wraps Collection's set method to set interval to sweep inactive {@link RateLimit}s.\n\t * @param id The id the {@link RateLimit} belongs to\n\t * @param value The {@link RateLimit} to set\n\t */\n\tpublic override set(id: K, value: RateLimit<K>): this {\n\t\tthis.sweepInterval ??= setInterval(this.sweep.bind(this), RateLimitManager.sweepIntervalDuration);\n\t\treturn super.set(id, value);\n\t}\n\n\t/**\n\t * Wraps Collection's sweep method to clear the interval when this manager is empty.\n\t */\n\tpublic sweep(): void {\n\t\tfor (const [id, value] of this.entries()) {\n\t\t\tif (value.expired) this.delete(id);\n\t\t}\n\n\t\tif (this.size === 0 && this.sweepInterval !== undefined && this.sweepInterval !== null) {\n\t\t\tclearInterval(this.sweepInterval);\n\t\t\tthis.sweepInterval = null;\n\t\t}\n\t}\n\n\t/**\n\t * The delay in milliseconds for {@link RateLimitManager.sweepInterval}.\n\t */\n\tpublic static sweepIntervalDuration = 30_000;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapphire/ratelimits",
3
- "version": "2.4.10-next.d2ec5e56",
3
+ "version": "2.4.10-next.d8701971",
4
4
  "description": "Bucket implementation for Ratelimits.",
5
5
  "author": "@sapphire",
6
6
  "license": "MIT",
@@ -10,6 +10,7 @@
10
10
  "unpkg": "dist/iife/index.global.js",
11
11
  "types": "dist/cjs/index.d.cts",
12
12
  "exports": {
13
+ "browser": "./dist/iife/index.global.js",
13
14
  "import": {
14
15
  "types": "./dist/esm/index.d.mts",
15
16
  "default": "./dist/esm/index.mjs"
@@ -17,20 +18,20 @@
17
18
  "require": {
18
19
  "types": "./dist/cjs/index.d.cts",
19
20
  "default": "./dist/cjs/index.cjs"
20
- },
21
- "browser": "./dist/iife/index.global.js"
21
+ }
22
22
  },
23
23
  "sideEffects": false,
24
24
  "homepage": "https://github.com/sapphiredev/utilities/tree/main/packages/ratelimits",
25
25
  "scripts": {
26
26
  "test": "vitest run",
27
27
  "lint": "eslint src tests --ext ts --fix -c ../../.eslintrc",
28
- "build": "tsup && yarn build:rename-cjs-index",
29
- "build:rename-cjs-index": "tsx --tsconfig ../../scripts/tsconfig.json ../../scripts/rename-cjs-index.cts",
28
+ "build": "yarn gen-index && tsup && yarn build:rename-cjs-index",
29
+ "build:rename-cjs-index": "tsx ../../scripts/rename-cjs-index.cts",
30
30
  "docs": "typedoc-json-parser",
31
31
  "prepack": "yarn build",
32
32
  "bump": "cliff-jumper",
33
- "check-update": "cliff-jumper --dry-run"
33
+ "check-update": "cliff-jumper --dry-run",
34
+ "gen-index": "tsx ../../scripts/gen-index.cts ratelimits --write"
34
35
  },
35
36
  "repository": {
36
37
  "type": "git",
@@ -61,13 +62,13 @@
61
62
  "access": "public"
62
63
  },
63
64
  "devDependencies": {
64
- "@favware/cliff-jumper": "^4.0.0",
65
- "@vitest/coverage-v8": "^1.6.0",
66
- "tsup": "^8.0.2",
67
- "tsx": "^4.11.0",
65
+ "@favware/cliff-jumper": "^5.0.0",
66
+ "@vitest/coverage-v8": "^2.1.4",
67
+ "tsup": "^8.3.5",
68
+ "tsx": "^4.19.2",
68
69
  "typedoc": "^0.25.13",
69
- "typedoc-json-parser": "^10.0.0",
70
- "typescript": "^5.4.5",
71
- "vitest": "^1.6.0"
70
+ "typedoc-json-parser": "^10.1.6",
71
+ "typescript": "~5.4.5",
72
+ "vitest": "^2.1.4"
72
73
  }
73
74
  }