flags
Minified2.36 KBMinzipped786 BFunctional utilities for bitwise flags.
Example
ts
import { pipe } from "@monstermann/dfdl";
import { Flags } from "@monstermann/flags";
// Define a schema for your flags
const permissions = {
read: 0,
write: 1,
execute: 2,
delete: 3,
} as const;
// Create a bitmask from the schema
let userFlags = Flags.fromRecord(permissions);
// 15 (0b1111 - all flags set)
// Add and remove flags
userFlags = pipe(
userFlags,
Flags.remove(permissions.delete),
Flags.remove(permissions.execute),
);
// 3 (0b0011 - only read and write)
// Check individual flags
Flags.has(userFlags, permissions.read); // true
Flags.has(userFlags, permissions.execute); // false
// Check multiple flags
Flags.hasAll(userFlags, [permissions.read, permissions.write]); // true
Flags.hasAny(userFlags, [permissions.execute, permissions.delete]); // false
// Convert to a record
Flags.toRecord(userFlags, permissions);
// { read: true, write: true, execute: false, delete: false }
// Set operations
const adminFlags = Flags.fromRecord({
read: 0,
write: 1,
execute: 2,
delete: 3,
});
const guestFlags = Flags.fromRecord({ read: 0 });
Flags.union(guestFlags, Flags.fromRecord({ write: 1 }));
// 3 (0b011 - read and write)
Flags.intersection(userFlags, adminFlags);
// 3 (0b011 - common flags: read and write)
Flags.isSubset(guestFlags, adminFlags); // true
Flags.isSuperset(adminFlags, guestFlags); // trueInstallation
sh
npm install @monstermann/flagssh
pnpm add @monstermann/flagssh
yarn add @monstermann/flagssh
bun add @monstermann/flagsTree-shaking
Installation
sh
npm install -D @monstermann/unplugin-flagssh
pnpm -D add @monstermann/unplugin-flagssh
yarn -D add @monstermann/unplugin-flagssh
bun -D add @monstermann/unplugin-flagsUsage
ts
// vite.config.ts
import flags from "@monstermann/unplugin-flags/vite";
export default defineConfig({
plugins: [flags()],
});ts
// rollup.config.js
import flags from "@monstermann/unplugin-flags/rollup";
export default {
plugins: [flags()],
};ts
// rolldown.config.js
import flags from "@monstermann/unplugin-flags/rolldown";
export default {
plugins: [flags()],
};ts
// webpack.config.js
const flags = require("@monstermann/unplugin-flags/webpack");
module.exports = {
plugins: [flags()],
};ts
// rspack.config.js
const flags = require("@monstermann/unplugin-flags/rspack");
module.exports = {
plugins: [flags()],
};ts
// esbuild.config.js
import { build } from "esbuild";
import flags from "@monstermann/unplugin-flags/esbuild";
build({
plugins: [flags()],
});