Skip to content

jvopinho/sybits

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bitfield

A powerful, type-safe and flexible bitfield utility for JavaScript and TypeScript.

Supports bigint, multiple input formats, immutability, and dynamic class creation.


✨ Features

  • ⚑ 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

πŸ“¦ Installation

npm install sybits

πŸš€ Quick Start

import { createBitfield } from "your-package-name";

const Permissions = createBitfield([
  "READ",
  "WRITE",
  "DELETE"
] as const);

const perms = new Permissions([
  "READ", 
  "WRITE"
]);

perms.has("READ");   // true
perms.has("DELETE"); // false

🧠 Creating a Bitfield

Simple

const Permissions = createBitfield([
  "READ",
  "WRITE",
  "DELETE"
] as const);

Advanced

const PermissionsBits = {
  READ: 1n << 0n,
  WRITE: 1n << 1n,
  DELETE: 1n << 2n
}
const Permissions = createBitfield(
  PermissionsBits,
  // Default Bits ( READ and WRITE )
  PermissionsBits.READ | PermissionsBits.WRITE
);

πŸ› οΈ Usage

Add / Remove

perms.add("READ");
perms.remove("WRITE");

Check flags

perms.has("READ"); // true

Multiple input formats

perms.add(
  "READ",
  ["WRITE", "DELETE"],
  1n,
  new Permissions("READ")
);

Missing flags

perms.missing(["READ", "WRITE", "DELETE"]);
// β†’ ["WRITE", "DELETE"]

Convert to array

perms.toArray();
// β†’ ["READ", "WRITE"]

Serialize

perms.serialize();
// β†’ { READ: true, WRITE: true, DELETE: false }

Iterate

for (const flag of perms) {
  console.log(flag);
}

πŸ”’ Immutability

If the instance is frozen, operations return a new instance:

const frozen = Object.freeze(new Permissions("READ"));

const updated = frozen.add("WRITE");

updated.has("WRITE"); // true
frozen.has("WRITE");  // false

πŸ”’ Raw Value

perms.bits; // bigint

🧩 Static Properties

Permissions.Flags.READ; // bigint
Permissions.ALL;        // bigint (all flags combined)

🧠 How resolve Works

The library automatically resolves inputs like:

  • string β†’ flag
  • bigint β†’ raw value
  • Bitfield β†’ its bits
  • arrays β†’ recursively flattened and combined

⚠️ Notes

  • Always use as const when defining flags arrays to preserve type safety
  • toJSON() returns a number (may lose precision for very large bitfields)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors