A powerful, type-safe and flexible bitfield utility for JavaScript and TypeScript.
Supports bigint, multiple input formats, immutability, and dynamic class creation.
- ⚡ Type-safe flags
- 🧠 Accepts multiple input formats (string, bigint, arrays, instances)
- 🔢 Uses
bigint(no 32-bit limits) - 🧩 Dynamic bitfield classes with
createBitfield - 🔄 Mutable and immutable modes (via
Object.freeze) - 📦 Fully typed for TypeScript
- 🧪 Designed for reliability and testing
npm install sybitsimport{createBitfield}from"your-package-name";constPermissions=createBitfield(["READ","WRITE","DELETE"]asconst);constperms=newPermissions(["READ","WRITE"]);perms.has("READ");// trueperms.has("DELETE");// falseconstPermissions=createBitfield(["READ","WRITE","DELETE"]asconst);constPermissionsBits={READ: 1n<<0n,WRITE: 1n<<1n,DELETE: 1n<<2n}constPermissions=createBitfield(PermissionsBits,// Default Bits ( READ and WRITE )PermissionsBits.READ|PermissionsBits.WRITE);perms.add("READ");perms.remove("WRITE");perms.has("READ");// trueperms.add("READ",["WRITE","DELETE"],1n,newPermissions("READ"));perms.missing(["READ","WRITE","DELETE"]);// → ["WRITE", "DELETE"]perms.toArray();// → ["READ", "WRITE"]perms.serialize();// → { READ: true, WRITE: true, DELETE: false }for(constflagofperms){console.log(flag);}If the instance is frozen, operations return a new instance:
constfrozen=Object.freeze(newPermissions("READ"));constupdated=frozen.add("WRITE");updated.has("WRITE");// truefrozen.has("WRITE");// falseperms.bits;// bigintPermissions.Flags.READ;// bigintPermissions.ALL;// bigint (all flags combined)The library automatically resolves inputs like:
- string → flag
- bigint → raw value
- Bitfield → its bits
- arrays → recursively flattened and combined
- Always use
as constwhen defining flags arrays to preserve type safety toJSON()returns a number (may lose precision for very large bitfields)