@bemedev/monadisk
v0.1.3
Published
Une bibliothèque TypeScript pour la gestion de monades avec des transformations et des vérifications de types.
Downloads
22
Readme
Monadisk
Une bibliothèque TypeScript pour la gestion de monades avec des transformations et des vérifications de types.
Installation
pnpm add monadiskCaractéristiques
- Création de monades avec vérifications de types
- Transformations de données typées
- Combinaison de monades (AND/OR)
- Fonctions de vérification personnalisables
- Support TypeScript complet
API
createMonad
Crée une nouvelle monade avec des vérificateurs.
const monad = createMonad(
['string', createCheck(data => typeof data === 'string')],
['number', createCheck(data => typeof data === 'number')],
);createCheck
Crée une fonction de vérification pour la monade.
const stringCheck = createCheck</* string, it's inferred */>(
data => typeof data === 'string',
);transform
Transforme les données selon les règles définies.
const transform1 = transform(monad, {
string: data => `String: ${data}`,
number: data => `Number: ${data}`,
else: () => 'Unknown type',
});Méthodes d'un Monad
add
Ajoute un nouveau vérificateur à la monade.
const newMonad = monad.add(
45,
createCheck(data => data === 45),
);and
Combine deux monades avec une opération AND.
const combinedMonad = monad1.and(monad2);or
Combine deux monades avec une opération OR.
const combinedMonad = monad1.or(monad2);mergeAnd
Fusionne deux monades avec des clés combinées (AND).
const mergedMonad = monad1.mergeAnd(monad2);mergeOr
Fusionne deux monades avec des clés combinées (OR).
const mergedMonad = monad1.mergeOr(monad2);parse
Analyse une valeur et retourne la clé correspondante.
const result = monad.parse(value);Exemple d'utilisation
import { createMonad, createCheck, transform } from 'monadisk';
// Création d'une monade
const monad = createMonad(
['string', createCheck(data => typeof data === 'string')],
['number', createCheck(data => typeof data === 'number')],
[45, createCheck(data => data === 45)],
);
// Création d'un transformateur
const transformer = transform(monad, {
string: data => `Texte: ${data}`,
number: data => `Nombre: ${data}`,
45: data => `Nombre spécial: ${data}`,
else: () => 'Type inconnu',
});
// Utilisation
console.log(transform('hello')); // "Texte: hello"
console.log(transform(42)); // "Nombre: 42"
console.log(transform(45)); // "Nombre spécial: 45"
console.log(transform(true)); // "Type inconnu"Concat (very powerfull)
Concatène deux monades en combinant leurs vérificateurs avec le séparateur
::. Cette méthode crée une nouvelle monade où l'on combine les
vérificateurs des deux monades.
// Exemple d'utilisation de concat
const monad1 = createMonad(
['string', createCheck(data => typeof data === 'string')],
['number', createCheck(data => typeof data === 'number')],
);
const monad2 = createMonad(
[45, createCheck(data => data === 45)],
['bool', createCheck(data => typeof data === 'boolean')],
);
// Crée une nouvelle monade avec les clés combinées:
// 'string::45', 'string::bool', 'number::45', 'number::bool'
const concatenated = monad1.concat(monad2);
// Utilisation avec transform
const transformer = transform(concatenated, {
// Ici, on a deux arguments
'string::45': (str, num) => `String ${str} avec nombre ${num}`,
'number::bool': (num, bool) => `Nombre ${num} avec booléen ${bool}`,
else: () => 'Combinaison non gérée',
});
// Cette méthode est utile quand vous voulez créer une monade qui vérifie plusieurs conditions indépendantes sur différents arguments.NB: transform retourne une erreur si le cas n'est pas pris en charge
import { createMonad, createCheck, transform } from 'monadisk';
// Création d'une monade
const monad = createMonad(
['string', createCheck(data => typeof data === 'string')],
['number', createCheck(data => typeof data === 'number')],
[45, createCheck(data => data === 45)],
);
// Création d'un transformateur
const transformer = transform(monad, {
string: data => `Texte: ${data}`,
number: data => `Nombre: ${data}`,
45: data => `Nombre spécial: ${data}`,
// no else case
});
// Utilisation
console.log(transform('hello')); // "Texte: hello"
console.log(transform(42)); // "Nombre: 42"
console.log(transform(45)); // "Nombre spécial: 45"
console.log(transform(true)); // Will throws error `Case for "true" is not handled`Licence
MIT
CHANGE_LOG
Version [0.1.1] --> 2025/03/10 12:30
- Upgrade deps
Version [0.1.0] --> 2025/02/15 21:00
- Release for better performance
Version [0.0.7] --> 2025/02/01 21:00
- Add helpers to simplify usage
Version [0.0.6] --> 2025/01/30 16/00
- Add option to concat monad
Version [0.0.5] --> 2025/01/28 13:10
- Upgrade deps
- Better testing (100% coverage)
Version [0.0.4] --> 2025/01/28 11:10
- La fonction
transformgénère une erreur si le cas n'est pas pris en charge
Version [0.0.3] --> 2025/01/28 11:10
- 🐛 Correction des fautes de frappe dans les exemples
- Correction de
tarnsformentransformdans les exemples de code - Amélioration de la lisibilité des exemples
- Correction de
- 📝 Restructuration du CHANGELOG
- Ajout des dates de version
- Utilisation de balises
<details>pour le contenu
- Better testing : 100% coverage
Version [0.0.1] --> 2025/01/28 02:02
- ✨ Première version de la bibliothèque
- 🎉 Implémentation des fonctionnalités de base :
- Création de monades avec
createMonad - Création de vérificateurs avec
createCheck - Transformations avec
transform - Méthodes de combinaison (
and,or,mergeAnd,mergeOr) - Support complet de TypeScript
- Création de monades avec
- 📝 Documentation initiale
- ⚡️ Tests unitaires de base
- 🔄 Ajout des méthodes de fusion avancées pour une meilleure gestion des
monades complexes
- Amélioration de la documentation des méthodes
mergeAndetmergeOr - Optimisation des performances pour les opérations de fusion
- Amélioration de la documentation des méthodes
Auteur
chlbri ([email protected])
