Skip to content

Latest commit

History

History
115 lines (80 loc) 路 2.41 KB

API.md

File metadata and controls

115 lines (80 loc) 路 2.41 KB

compat-flags

npm version npm downloads

馃尨 Gradual feature flags.

Note

This is a reference implementation for Compatibility Date Flaga.

See RFC for the RFC details.

Usage

Install package:

# npm
npm install compat-flags

# yarn
yarn add compat-flags

# pnpm
pnpm install compat-flags

# bun
bun install compat-flags

Defining compatibility flags

import {
  defineCompatibilityFlag,
  defineCompatibilityFlags,
} from "compat-flags";

const compatFlags = defineCompatibilityFlags({
  build_cache: defineCompatibilityFlag({
    name: "Enable build caching support",
    from: "2024/03/14",
  }),
  node_fix: defineCompatibilityFlag({
    name: "Enable hotfix for Node.js suppor",
    from: "2024/01/01",
    to: "2024/01/15",
  }),
});

Checking compatibility flags

isCompatFlagEnabled

isCompatFlagEnabled checks if a flag is enabled within the range [from, to] in compatibility flag.

If enabled, returns true, if disabled, returns false and if not specified, returns undefined.

import { isCompatFlagEnabled } from "compat flags";

// Loaded from user or integration config
const compatSpec = { date: "2020/1/1", flags: ["build_cache"] };

const buildCache = isCompatFlagEnabled("build_cache", compatFlags, userSpec);

Date

formatDate

formatDate makes sure input date is formatted as YY/MM/DD

import type { formatDate } from 'compat-flags'

Types

// Typescript types
import type {
  CompatibilityFlags,
  CompatibilityFlag,
} from "./types";

// Type helpers
import {
  defineCompatibilityFlag,
  defineCompatibilityFlags,
} from "compat-flags";

CompatibilityFlags defines an object map from flag keys to their defenition.

CompatibilityFlag defines a specific compatibility flag with from date (required), and name (human friendly name) and to which are optional.

Development

  • Clone this repository
  • Install latest LTS version of Node.js
  • Enable Corepack using corepack enable
  • Install dependencies using pnpm install
  • Run interactive tests using pnpm dev

License

Made with 馃挍

Published under MIT License.