Evaluation Context
Shows how to serve different values to different users.
Enable the feature flag for Chrome users only.
import { flag } from "flags/next";
type Entities = { browser: "Safari" | "Chrome" }
export const enableSummerSale = flag<boolean, Entities>(
{
key: "summer-sale",
description: "Shows a bright yellow banner for a 20% discount",
defaultValue: false,
identify({ headers, cookies }) {
const ua = headers.get("user-agent") || "";
const isSafari = ua.includes("Safari") && !ua.includes("Chrome");
return { browser: isSafari ? "Safari" : "Chrome" };
},
decide({ entities }) {
return entities?.browser === "Chrome";
},
}
);
Cache the identify
function for the current request using dedupe
.
It's like React's unstable_cache
but middleware friendly.
import { flag, dedupe } from "flags/next";
type Entities = { browser: "Safari" | "Chrome" }
const identify = dedupe(({ headers, cookies }): Entities => {
const ua = headers.get("user-agent") || "";
const isSafari = ua.includes("Safari") && !ua.includes("Chrome");
return { browser: isSafari ? "Safari" : "Chrome" };
});
export const enableSummerSale = flag<boolean, Entities>({
key: "summer-sale",
description: "Shows a bright yellow banner for a 20% discount",
defaultValue: false,
identify,
decide({ entities }) {
return entities?.browser !== "Safari";
},
});