@impulsedev/chameleon 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -3123,6 +3123,10 @@ declare class Client<TIntents extends readonly IntentResolvable[] = readonly Int
3123
3123
  * register an event listener with full type-safety via discriminated unions
3124
3124
  */
3125
3125
  on<K extends keyof EventMap>(event: K, listener: (data: EventMap[K]) => void): this;
3126
+ /**
3127
+ * register a one-time event listener that automatically removes itself after the first call
3128
+ */
3129
+ once<K extends keyof EventMap>(event: K, listener: (data: EventMap[K]) => void): this;
3126
3130
  /**
3127
3131
  * remove an event listener
3128
3132
  */
package/dist/index.js CHANGED
@@ -1338,7 +1338,7 @@ var ChameleonGateway = class {
1338
1338
  // package.json
1339
1339
  var package_default = {
1340
1340
  name: "@impulsedev/chameleon",
1341
- version: "2.0.0",
1341
+ version: "3.0.0",
1342
1342
  description: "highly optimized, memory-efficient, and fully type-safe Discord API library",
1343
1343
  main: "dist/index.js",
1344
1344
  types: "dist/index.d.ts",
@@ -3567,13 +3567,30 @@ var Client = class {
3567
3567
  this.listeners.get(event).push(listener);
3568
3568
  return this;
3569
3569
  }
3570
+ /**
3571
+ * register a one-time event listener that automatically removes itself after the first call
3572
+ */
3573
+ once(event, listener) {
3574
+ const wrapper = (data) => {
3575
+ this.off(event, wrapper);
3576
+ listener(data);
3577
+ };
3578
+ wrapper.__original = listener;
3579
+ return this.on(event, wrapper);
3580
+ }
3570
3581
  /**
3571
3582
  * remove an event listener
3572
3583
  */
3573
3584
  off(event, listener) {
3574
3585
  const handlers = this.listeners.get(event);
3575
3586
  if (!handlers) return this;
3576
- const index = handlers.indexOf(listener);
3587
+ const castListener = listener;
3588
+ let index = handlers.indexOf(castListener);
3589
+ if (index === -1) {
3590
+ index = handlers.findIndex(
3591
+ (h) => h.__original === listener
3592
+ );
3593
+ }
3577
3594
  if (index !== -1) {
3578
3595
  handlers.splice(index, 1);
3579
3596
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@impulsedev/chameleon",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "description": "highly optimized, memory-efficient, and fully type-safe Discord API library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",