Either
Monade Either pour la gestion d'erreurs fonctionnelle et type-safe. Permet de représenter une valeur qui peut être soit un succès (Right), soit une erreur (Left), évitant ainsi l'utilisation d'exceptions.
Comment faire les imports ?
La bibliothèque expose les namespaces DEither et E depuis l'entrée principale ou en import direct (tree-shaking friendly), ce qui permet de ne charger que ce dont vous avez besoin.
import { DEither, E } from "@duplojs/utils";
import * as DEither from "@duplojs/utils/either";
import * as E from "@duplojs/utils/either";Guide
Une explication complète (concept, info obligatoire, pattern matching, pipelines et variantes) est disponible ici :
Constructeurs Right
right
Construit un Right typé avec une information métier obligatoire (payload optionnel).
result
Construit un Right de résultat neutre, ni positif ni négatif, avec une information métier et un payload. Il peut être currifié pour pipe.
success
Raccourci pour retourner un succès right("success", value) de manière expressive.
ok
Retourne un Right sans valeur (void) taggé avec l'information littérale "ok".
Constructeurs Left
left
Construit un Left en fournissant l'information métier et éventuellement une valeur.
error
Raccourci pour signaler une erreur typée left("error", value).
fail
Retourne un Left sans payload taggé "fail" pour les cas d'échec génériques.
Contrôles Right
isRight
Type guard qui vérifie si une valeur est un Right.
whenIsRight
Exécute une fonction uniquement quand l'entrée est Right, sinon relaie la valeur originale.
whenIsRightOtherwise
Exécute un callback sur Right (avec valeur unwrap) et un callback sur toutes les autres entrées.
unwrapRight
Unwrap le payload d'un Right et renvoie l'entrée inchangée si l'entrée n'est pas Right.
unwrapRightOrThrow
Unwrap immédiatement le payload d'un Right et lève une erreur si l'entrée n'est pas Right.
Contrôles Left
isLeft
Type guard qui détecte un Left.
whenIsLeft
Permet d'appliquer une fonction lorsqu'on reçoit un Left puis de continuer le flux.
whenIsLeftOtherwise
Exécute un callback sur Left (avec valeur unwrap) et un callback sur toutes les autres entrées.
unwrapLeft
Unwrap le payload d'un Left et renvoie l'entrée inchangée si l'entrée n'est pas Left.
unwrapLeftOrThrow
Unwrap immédiatement le payload d'un Left et lève une erreur si l'entrée n'est pas Left.
Pipelines orientés Right
rightPipe
Chaîne des transformations synchrones tant que les résultats restent Right, s'interrompt sur le premier Left.
rightAsyncPipe
Version asynchrone acceptant promesses ou Either et s'arrêtant automatiquement sur un Left.
group
Agrège plusieurs Either synchrones et renvoie le premier Left ou un objet des valeurs Right.
asyncGroup
Version asynchrone de group acceptant promesses et Future.
Autre
hasInformation
Type guard basé sur l'information littérale pour cibler précisément un cas métier.
whenHasInformation
Pattern matching qui déclenche une fonction quand l'information (ou une liste d'infos) correspond.
whenHasInformationOtherwise
Exécute le callback correspondant ou un callback otherwise recevant l'entrée brute restante.
whenIsSelected
Exécute un callback pour les informations sélectionnées avec true dans un sélecteur exhaustif et relaie les autres entrées inchangées.
whenIsSelectedOtherwise
Exécute le callback sélectionné ou un callback otherwise recevant l'entrée brute non sélectionnée.
matchInformation
Pattern matching exhaustif par information où chaque cas Either doit être traité.
matchInformationOtherwise
Pattern matching non exhaustif par information avec callback de fallback obligatoire.
keepAsRightByInformation
Conserve les informations Either correspondantes côté Right et convertit chaque Right non correspondant en Left.
keepAsRightSelection
Conserve les informations Either sélectionnées côté Right via un sélecteur exhaustif.
unwrapByInformation
Unwrap un Either quand une information (ou l'une de plusieurs informations) correspond, sinon renvoie l'entrée inchangée.
unwrapByInformationOrThrow
Unwrap un Either uniquement lorsqu'une information littérale précise correspond, sinon lève une erreur.
unwrapSelection
Unwrap les payloads Either sélectionnés par un sélecteur exhaustif d'informations, sinon renvoie l'entrée inchangée.
unwrapSelectionOrThrow
Unwrap les payloads Either sélectionnés par un sélecteur exhaustif d'informations, sinon lève une erreur.
forwardAssertsSelection
Transmet sans modification les Either sélectionnés par un sélecteur exhaustif d'informations et lève une erreur pour les autres.
expect
Helper de typage qui renvoie le même Either en conservant strictement les types Left/Right.
safeCallback
Exécute un callback en capturant les exceptions et rejets de promesse dans, ou en résolvant vers, un Left<"safe-callback-error">.
asyncSafeCallback
Exécute un callback ou une promesse en capturant les exceptions et rejets dans un Promise<Left<"safe-callback-error">>.
Helpers booléens
bool
Convertit n'importe quelle valeur en Either booléen (Right si truthy, Left si falsy) tout en conservant le typage.
boolTruthy
Force la création d'un Right<"bool"> en marquant explicitement une valeur truthy.
boolFalsy
Construit un Left<"bool"> à partir d'une valeur falsy (undefined, null, "", 0, false).
isBoolTruthy
Type guard spécialisé pour les boolTruthy.
whenIsBoolTruthy
Déclenche une fonction uniquement lorsqu'une valeur (ou le résultat de bool) est truthy.
whenIsBoolTruthyOtherwise
Traite les valeurs truthy et toutes les entrées brutes restantes avec deux callbacks explicites.
isBoolFalsy
Type guard spécialisé pour les boolFalsy.
whenIsBoolFalsy
Déclenche une fonction uniquement lorsqu'une valeur (ou le résultat de bool) est falsy.
whenIsBoolFalsyOtherwise
Traite les valeurs falsy et toutes les entrées brutes restantes avec deux callbacks explicites.
Gestion des valeurs nullish
nullish
Transforme une valeur potentiellement null/undefined en Either, remplie à droite si la valeur existe.
nullishEmpty
Construit explicitement un Left<"nullish"> avec une valeur null ou undefined.
nullishFilled
Construit un Right<"nullish"> à partir d'une valeur définie.
isNullishEmpty
Type guard pour détecter un nullishEmpty.
whenIsNullishEmpty
Applique une fonction uniquement pour le cas nullishEmpty.
whenIsNullishEmptyOtherwise
Traite les valeurs nullish vides et toutes les entrées brutes restantes avec deux callbacks.
isNullishFilled
Type guard pour détecter un nullishFilled.
whenIsNullishFilled
Applique une fonction lorsque la valeur nullish est effectivement définie (Right).
whenIsNullishFilledOtherwise
Traite les valeurs nullish remplies et toutes les entrées brutes restantes avec deux callbacks.
Gestion des valeurs nullables
nullable
Encapsule un null possible en Either, ce qui impose de gérer l'absence de valeur.
nullableEmpty
Construit un Left<"nullable"> contenant null.
nullableFilled
Construit un Right<"nullable"> avec une valeur non nulle.
isNullableEmpty
Type guard pour les nullableEmpty.
whenIsNullableEmpty
Callback déclenché uniquement lorsque la valeur est null.
whenIsNullableEmptyOtherwise
Traite les valeurs nullable vides et toutes les entrées brutes restantes avec deux callbacks.
isNullableFilled
Type guard pour les nullableFilled.
whenIsNullableFilled
Callback déclenché lorsque la valeur nullable est présente (Right).
whenIsNullableFilledOtherwise
Traite les valeurs nullable remplies et toutes les entrées brutes restantes avec deux callbacks.
Gestion des optionnels
optional
Wrappe une valeur possiblement undefined en Either, utile pour les champs optionnels.
optionalEmpty
Construit un Left<"optional"> contenant undefined.
optionalFilled
Construit un Right<"optional"> avec une valeur définie.
isOptionalEmpty
Type guard pour les optionalEmpty.
whenIsOptionalEmpty
Callback déclenché uniquement lorsqu'un optionnel est vide.
whenIsOptionalEmptyOtherwise
Traite les valeurs optionnelles vides et toutes les entrées brutes restantes avec deux callbacks.
isOptionalFilled
Type guard pour les optionalFilled.
whenIsOptionalFilled
Callback déclenché lorsqu'un optionnel contient une valeur.
whenIsOptionalFilledOtherwise
Traite les valeurs optionnelles remplies et toutes les entrées brutes restantes avec deux callbacks.
Futures et asynchronisme
future
Convertit une valeur (ou un Either) en Future, classe dérivée de Promise avec support de Future.all.
futureSuccess
Construit un Right<"future"> pour signaler explicitement une résolution réussie.
futureError
Construit un Left<"future"> pour représenter une erreur asynchrone standardisée.
