Bibliothèque d'utilitaires moderne pour les développeurs JavaScript/TypeScript. Une collection de fonctions fiables et bien testées pour les tâches de programmation courantes.
- 🚀 Syntaxe moderne ES2020+
- 📦 Builds ESM et CommonJS optimisés par tree-shaking
- 💪 Prise en charge complète de TypeScript avec définitions de types complètes
- ✅ Tests unitaires complets
- 🔒 Aucune dépendance
- 📖 Bien documenté avec des commentaires JSDoc
20 fonctions utilitaires organisées en 5 modules :
slugify()- Convertit le texte en slugs compatibles avec les URLcapitalize()- Met la première lettre en majusculetruncate()- Tronque le texte avec des points de suspensionrandomString()- Génère des chaînes de caractères aléatoires
formatNumber()- Formate les nombres avec des séparateurs de milliersclamp()- Limite une valeur entre un minimum et un maximumroundTo()- Arrondit à un nombre de décimales spécifiépercent()- Calcule les pourcentages
formatDate()- Formate les dates selon la localetimeAgo()- Affiche le temps écoulé de manière lisibleisValidDate()- Valide les dates
deepClone()- Clone les objets en profondeurmerge()- Fusionne les objets de manière récursiveomit()- Supprime des clés spécifiquespick()- Sélectionne des clés spécifiques
unique()- Supprime les doublonschunk()- Divise un tableau en plusieurs morceauxflatten()- Aplatit les tableaux imbriquésgroupBy()- Regroupe les éléments par clé/fonction
npm install @progestionsoft/axiomyarn add @progestionsoft/axiompnpm add @progestionsoft/axiomimport { formatNumber, slugify } from '@progestionsoft/axiom';
console.log(formatNumber(1234567.89)); // "1,234,567.89"
console.log(slugify('Hello World!')); // "hello-world"import axiom from '@progestionsoft/axiom';
console.log(axiom.formatNumber(1234567.89)); // "1,234,567.89"
console.log(axiom.slugify('Hello World!')); // "hello-world"Convertit une chaîne de caractères en un slug compatible avec les URL.
slugify('Hello World!'); // "hello-world"
slugify('Café Français'); // "cafe-francais"Met la première lettre d'une chaîne de caractères en majuscule.
capitalize('hello world'); // "Hello world"
capitalize('HELLO'); // "Bonjour"Tronque une chaîne de caractères à une longueur spécifiée et ajoute des points de suspension.
truncate('Lorem ipsum dolor sit amet', 10); // "Lorem ipsu..."
truncate('Hello World', 8, '…'); // "Hello W…"Génère une chaîne de caractères aléatoire de longueur spécifiée.
randomString(8); // "aB3dE7fG"
randomString(6, 'ABC123'); // "A1B2C3"Formate un nombre avec des séparateurs de milliers et des décimales.
formatNumber(1234567.89); // "1,234,567.89"
formatNumber(1234.5, 0); // "1,235"
formatNumber(1234.56, 2, 'de-DE'); // "1.234,56"Limite un nombre entre une valeur minimale et maximale.
clamp(10, 0, 5); // 5
clamp(-5, 0, 10); // 0
clamp(7, 0, 10); // 7Arrondit un nombre à un nombre spécifié de décimales.
roundTo(3.14159, 2); // 3.14
roundTo(2.5); // 3Calcule le pourcentage d'une valeur par rapport à un total.
percent(25, 100); // 25
percent(1, 3, 2); // 33.33formatDate(date: Date | string | number, options?: Intl.DateTimeFormatOptions, locale?: string): string
Formate une date selon une locale.
formatDate(new Date('2024-01-15')); // "15/01/2024"
formatDate(new Date(), { dateStyle: 'full' }); // "lundi 15 janvier 2024"
formatDate(Date.now(), { year: 'numeric', month: 'long' }); // "janvier 2024"Renvoie la différence de temps par rapport à maintenant, dans un format lisible.
timeAgo(new Date(Date.now() - 60000)); // "il y a 1 minute"
timeAgo(new Date(Date.now() + 3600000)); // "dans 1 heure"Vérifie si une date est valide.
isValidDate(new Date()); // true
isValidDate('2024-01-15'); // true
isValidDate('invalid'); // falseCrée un clone profond d'un objet.
const original = { a: 1, b: { c: 2 } };
const cloned = deepClone(original);
cloned.b.c = 3; // original.b.c reste 2Fusionne profondément deux objets ou plus.
merge({ a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
merge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }Crée un nouvel objet en omettant les clés spécifiées.
omit({ a: 1, b: 2, c: 3 }, ['b', 'c']); // { a: 1 }Crée un nouvel objet contenant uniquement les clés spécifiées.
pick({ a: 1, b: 2, c: 3 }, ['a', 'c']); // { a: 1, c: 3 }Retourne un tableau avec des valeurs uniques.
unique([1, 2, 2, 3, 3, 3]); // [1, 2, 3]
unique(['a', 'b', 'a']); // ['a', 'b']Divise un tableau en morceaux de taille spécifiée.
chunk([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]]Aplatit un tableau imbriqué jusqu'à une profondeur spécifiée.
flatten([1, [2, [3, [4]]]]); // [1, 2, [3, [4]]]
flatten([1, [2, [3, [4]]]], 2); // [1, 2, 3, [4]]
flatten([1, [2, [3, [4]]]], Infinity); // [1, 2, 3, 4]Regroupe les éléments d'un tableau par une clé ou une fonction.
groupBy([{ age: 21 }, { age: 22 }, { age: 21 }], 'age');
// { '21': [{ age: 21 }, { age: 21 }], '22': [{ age: 22 }] }
groupBy([1.3, 2.1, 2.4], Math.floor);
// { '1': [1.3], '2': [2.1, 2.4] }Testez toutes les fonctions de manière interactive avec notre Axiom Playground conçu avec Nuxt et Tailwind CSS !
L'espace de test comprend des pages interactives pour tester chaque catégorie d'utilitaires avec des résultats en temps réel.
Consultez playground/README.md pour plus de détails.
Les contributions sont les bienvenues ! N'hésitez pas à soumettre une Pull Request.
- Forkez le dépôt
- Créez votre branche de fonctionnalité (
git checkout -b feature/amazing-feature) - Commitez vos modifications (
git commit -m 'Ajout d'une fonctionnalité incroyable') - Poussez vers la branche (
git push origin feature/amazing-feature) - Ouvrez une Pull Request
Ce projet est sous licence MIT.
Si vous avez des questions ou rencontrez des problèmes, veuillez ouvrir une issue sur GitHub.