Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 11 additions & 13 deletions packages/discord.js/src/util/BitField.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ class BitField {
* Gets all given bits that are missing from the bitfield.
* @param {BitFieldResolvable} bits Bit(s) to check for
* @param {...*} hasParams Additional parameters for the has method, if any
* @returns {string[]}
* @returns {(number|bigint)[]}
*/
missing(bits, ...hasParams) {
return new this.constructor(bits).remove(this).toArray(...hasParams);
return [...new this.constructor(bits).remove(this)[Symbol.iterator](...hasParams)];
}

/**
Expand Down Expand Up @@ -121,15 +121,6 @@ class BitField {
return serialized;
}

/**
* Gets an {@link Array} of bitfield names based on the bits available.
* @param {...*} hasParams Additional parameters for the has method, if any
* @returns {string[]}
*/
toArray(...hasParams) {
return Object.keys(this.constructor.Flags).filter(bit => this.has(bit, ...hasParams));
}

toJSON() {
return typeof this.bitfield === 'number' ? this.bitfield : this.bitfield.toString();
}
Expand All @@ -138,8 +129,15 @@ class BitField {
return this.bitfield;
}

*[Symbol.iterator]() {
yield* this.toArray();
/**
* Allows bit fields to be consumed with for-of loops
* @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of}
*/
*[Symbol.iterator](...hasParams) {
const one = typeof this.bitfield === 'number' ? 1 : 1n;
for (let bit = one; bit <= this.bitfield; bit <<= one) {
if (this.has(bit, ...hasParams)) yield bit;
}
}

/**
Expand Down
8 changes: 4 additions & 4 deletions packages/discord.js/src/util/PermissionsBitField.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ class PermissionsBitField extends BitField {
}

/**
* Gets an {@link Array} of bitfield names based on the permissions available.
* @returns {string[]}
* Allows permissions bit fields to be consumed with for-of loops
* @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of}
*/
toArray() {
return super.toArray(false);
*[Symbol.iterator]() {
yield* super[Symbol.iterator](false);
}
}

Expand Down
5 changes: 2 additions & 3 deletions packages/discord.js/typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -652,10 +652,9 @@ export class BitField<S extends string, N extends number | bigint = number> {
public missing(bits: BitFieldResolvable<S, N>, ...hasParams: readonly unknown[]): S[];
public remove(...bits: BitFieldResolvable<S, N>[]): BitField<S, N>;
public serialize(...hasParams: readonly unknown[]): Record<S, boolean>;
public toArray(...hasParams: readonly unknown[]): S[];
public toJSON(): N extends number ? number : string;
public valueOf(): N;
public [Symbol.iterator](): IterableIterator<S>;
public [Symbol.iterator](...hasParams: readonly unknown[]): IterableIterator<N>;
public static Flags: EnumLike<unknown, number | bigint>;
public static resolve(bit?: BitFieldResolvable<string, number | bigint>): number | bigint;
}
Expand Down Expand Up @@ -2343,7 +2342,7 @@ export class PermissionsBitField extends BitField<PermissionsString, bigint> {
public has(permission: PermissionResolvable, checkAdmin?: boolean): boolean;
public missing(bits: BitFieldResolvable<PermissionsString, bigint>, checkAdmin?: boolean): PermissionsString[];
public serialize(checkAdmin?: boolean): Record<PermissionsString, boolean>;
public toArray(): PermissionsString[];
public [Symbol.iterator](): IterableIterator<bigint>;

public static All: bigint;
public static Default: bigint;
Expand Down