Skip to content

flagbear/flagbear-ts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

166f52b · Mar 18, 2025
Mar 18, 2025
Mar 18, 2025
Mar 18, 2025
Aug 31, 2024
Aug 31, 2024
Aug 31, 2024
Sep 14, 2020
Mar 18, 2025
Sep 24, 2020
Mar 18, 2025
Aug 31, 2024
Mar 18, 2025
Mar 18, 2025
Aug 31, 2024
Mar 18, 2025

Repository files navigation

Build & Publish codecov npm GitHub license Maintenance Donate

Motivation

Simple library to separate deployment of features from release time. It uses network accesible files without the need of a server to provide feature toggles.

Installation

add it to your project using npm install flagbear --save or yarn add flagbear

Usage

import { flagbear } from '../lib'
// or: const { flagbear } = require("flagbear")

const url = "https://gist.githubusercontent.com/alvarolorentedev/c469f99bef5a5c0634b4a94a4acd6546/raw/toggles"
const refreshRateSeconds = 5
const defaultValues = [
    {
      type: "release",
      name: "prop",
      value: true,
    },
    {
      type: "release",
      name: "prop2",
      value: true
    },
    {
      type: "context",
      name: "prop3",
      conditions: [
        {
          field: "username",
          value: "user1",
          operation: "eq"
        }
      ]
    }
]

const subject = new flagbear(url, refreshRateSeconds, defaultValues)


setInterval(() => {
    if (subject.isEnabled("prop"))
        console.log("do stuff")
    else
        console.log("dont do stuff")
    if (subject.isEnabled("prop3", {"username": "user1"}))
        console.log("do stuff for user 1")
    else
        console.log("dont do stuff for user 1")
    if (subject.isEnabled("prop3", {"username": "user2"}))
        console.log("do stuff for user 2")
    else
        console.log("dont do stuff for user 2")
        
    console.log("-----------")
}, 10000);

Type of toggles

Release

Simple true/false logical path definition.

{
    type: "release",
    name: "prop",
    value: true,
}

Context

Allows complex logic to decide the outcome of the logical path (example traffic, users, resources available).

{
    type: "context",
    name: "prop3",
    conditions: [
        {
            field: "username",
            value: "user1",
            operation: "eq"
        }
    ]
}

available operations are:

  • 'eq': equal (===)
  • 'ne': not equal (!==)
  • 'gt': greater than (>)
  • 'ge': greater equal (>=)
  • 'lt': lesser than (<)
  • 'le': lesser qqual (<=)