Indicateurs de fonctionnalités
@bext-stack/framework/flags est un client d'indicateur de fonctionnalité de style Pennant pour les applications PRISM. bext a déjà un moteur d'indicateur Rust derrière /__bext/sdk/flags/evaluate, mais son fichier serveur est configuré et il n'y avait pas de client typé - applications lancées manuellement
fetch(). Ce module vous propose deux modes, et ils composent :
- Indicateurs locaux définis par le code — définit un indicateur comme un booléen, un prédicat sur
le contexte de la demande, ou un déploiement déterministe et collant
percentage(). Pur, sans serveur, testable à l'unité - c'est le titre Pennant qui manquait bext. - Relais à distance — pour les clés que vous n'avez pas définies localement, évaluez-les le point de terminaison du SDK de la fonctionnalité Indicateur de fonctionnalité (lorsqu'un fournisseur est configuré).
Quand l'utiliser#
- Expédiez le code sombre et activez-le pour une fraction des utilisateurs.
- Lancez une version bêta derrière une liste blanche ou un attribut.
- Exécutez une expérience A/B/n avec une affectation collante.
Définir et évaluer#
import { defineFlags, percentage, forUsers, forAttribute } from "@bext-stack/framework/flags";
const flags = defineFlags({
flags: {
"new-checkout": percentage(30), // sticky 30% rollout
"beta-banner": forUsers("u_1", "u_2"),
"holiday-theme": forAttribute("country", "FR"),
"priority-queue": (ctx) => ctx.attributes?.plan === "enterprise",
},
remote: { appId: "my-site" }, // optional server fallback
default: false,
});
if (await flags.isEnabled("new-checkout", { userId: user.id })) { /* … */ }
const arm = flags.variant("home-hero", ["control", "b", "c"], { userId: user.id });
| Membre | Retours |
|---|---|
isEnabled(key, ctx?) |
Promise<boolean> — victoires locales, sinon à distance, sinon par défaut |
isEnabledSync(key, ctx?) |
boolean — local uniquement (clés à distance → par défaut) |
variant(experiment, variants, ctx?) |
un bras collant pour le sujet |
all(ctx?) |
{ flag: boolean } pour chaque drapeau local - amorcez une interface utilisateur |
defined |
les noms des drapeaux locaux |
Aides aux règles : percentage(pct) (déterministe, salé par la touche indicateur afin que deux indicateurs à 50 % n'activent pas la moitié identique), forUsers(...ids),
forAttribute(key, value), ou tout autre (ctx) => boolean.
Déterministe et collant#
Les déploiements en pourcentage et l'attribution de variantes hachent le sujet ( userId →
sessionId → aucun) avec la clé flag/experiment, donc :
- le même utilisateur obtient toujours la même réponse (pas de bascule entre les requêtes),
- un utilisateur sans identifiant ne peut pas être regroupé de manière permanente, donc un indicateur
percentagereste hors pour eux (fermé sur panne), et - deux drapeaux indépendants au même pourcentage ne permettent pas la même cohorte.
Préférez userId dans le contexte pour les utilisateurs connectés, et un sessionId stable (par exemple à partir d'un séance signée ) pour les utilisateurs anonymes - qui maintient un déploiement persistant lors des demandes d'un visiteur.
Relation avec la fonctionnalité Indicateur de fonctionnalité#
La fonctionnalité Rust Indicateur de fonctionnalité est le moteur configuré côté serveur par fichier/fournisseur (alimente également l'expérience comprend ). Ce module est le client in-code TypeScript : définissez des indicateurs à côté du code qu'ils contrôlent, évaluez-les sans aller-retour et accédez au moteur uniquement pour les clés que vous laissez aux opérations.
Essayez-le#
Le démo des drapeaux de fonctionnalités en direct vous permet de saisir un identifiant utilisateur et de voir sur quels indicateurs sont évalués - déterministes et collants, de sorte que le même nom se résout toujours de la même manière. Source dans
sites/demo/src/app/examples/feature-flags/page.tsx.
Voir aussi#
- Indicateur de fonctionnalité — le moteur Rust présenté devant.
- Variantes d'expérimentation : inclusions A/B côté serveur.
- Boîte à outils de candidature — le reste de la couche d'application TypeScript.