📚 Cheatsheet — 4 Librairies Essentielles
Axios · Lodash · Day.js · Zod — toutes les méthodes clés en un coup d'œil
📡 Axios
Installation CDN
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
Méthodes HTTP
axios.get(url[, config])
axios.post(url, data[, config])
axios.put(url, data[, config])
axios.patch(url, data[, config])
axios.delete(url[, config])
Configuration
{
params: { _limit: 5, page: 1 }, // query string
headers: { Authorization: 'Bearer token' },
timeout: 5000,
baseURL: 'https://api.example.com',
signal: controller.signal // annulation
}
Réponse & Erreurs
response.data // corps JSON parsé
response.status // 200, 201, 404…
response.headers // en-têtes de réponse
// Dans catch :
error.response.data
error.response.status
error.request // pas de réponse (réseau)
error.message // message d'erreur
Instance & Intercepteurs
const api = axios.create({
baseURL: 'https://api.example.com',
timeout: 8000
});
// Requête sortante
api.interceptors.request.use(config => {
config.headers.Authorization = 'Bearer ' + token;
return config;
});
// Réponse entrante
api.interceptors.response.use(
res => res,
err => Promise.reject(err)
);
Requêtes parallèles
const [users, posts] = await Promise.all([
axios.get('/users'),
axios.get('/posts')
]);
🔧 Lodash
Installation CDN
<script src="https://cdn.jsdelivr.net/npm/lodash@4/lodash.min.js"></script>
// Usage : _.nomDeLaMethode()
Collections
_.map(arr, fn) // transformer
_.filter(arr, fn) // filtrer
_.find(arr, {key:val}) // trouver un élément
_.reduce(arr, fn, init) // réduire
_.forEach(arr, fn) // itérer
_.every(arr, fn) // tous vérifient ?
_.some(arr, fn) // au moins un ?
_.groupBy(arr, 'key') // regrouper
Arrays
_.sortBy(arr, ['price','name'])
_.orderBy(arr, ['price'], ['desc'])
_.uniq(arr) // valeurs uniques
_.uniqBy(arr, 'id')
_.flatten([[1,2],[3]]) // [1,2,3]
_.chunk(arr, 9) // pages de 9
_.compact(arr) // supprime falsy
Objets
_.pick(obj, ['a','b']) // garder a et b
_.omit(obj, ['password']) // exclure password
_.merge({}, defaults, overrides)
_.cloneDeep(obj) // copie profonde
_.get(obj, 'a.b.c', defaut)
_.set(obj, 'a.b', valeur)
Fonctions
_.debounce(fn, 300) // attendre 300ms silence
_.throttle(fn, 300) // max 1 appel / 300ms
_.once(fn) // s'exécute 1 seule fois
_.memoize(fn) // cache les résultats
Pipeline _.chain()
const result = _.chain(data)
.filter(p => p.actif)
.sortBy('prix')
.map(p => p.nom)
.value(); // déclenche l'exécution !
📅 Day.js
Installation CDN
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/locale/fr.js"></script>
<script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/relativeTime.js"></script>
<script>
dayjs.locale('fr');
dayjs.extend(window.dayjs_plugin_relativeTime);
</script>
Créer une date
dayjs() // maintenant
dayjs('2024-03-15') // depuis string ISO
dayjs.unix(timestamp) // depuis timestamp UNIX
dayjs(new Date()) // depuis Date object
dayjs().isValid() // vérifier la validité
Formatage
dayjs().format('DD/MM/YYYY') // 15/03/2024
dayjs().format('DD MMMM YYYY') // 15 mars 2024
dayjs().format('HH:mm:ss') // 14:30:00
dayjs().format('dddd') // vendredi
// Tokens principaux :
// YYYY MM DD HH mm ss
// dddd (jour) MMMM (mois)
Manipulation (immutable)
dayjs().add(7, 'day')
dayjs().subtract(1, 'month')
dayjs().startOf('month') // 1er du mois 00:00
dayjs().endOf('year') // 31/12 23:59:59
dayjs().set('year', 2025)
dayjs().clone() // copie indépendante
Comparaison & Plugins
d1.isBefore(d2)
d1.isAfter(d2)
d1.isSame(d2, 'day')
d1.diff(d2, 'day') // nombre de jours
d1.diff(d2, 'month')
// Plugin relativeTime
dayjs().fromNow() // "il y a quelques secondes"
dayjs('2020-01-01').from(dayjs()) // "il y a 4 ans"
🛡️ Zod
Installation CDN
<script src="https://cdn.jsdelivr.net/npm/zod/lib/index.umd.js"></script>
<script>
const { z } = Zod; // accès au namespace
</script>
Types primitifs
z.string() z.number() z.boolean()
z.date() z.null() z.undefined()
z.literal('admin')
z.enum(['user','admin','mod'])
z.any() z.unknown()
Validateurs
// Strings
z.string().min(2).max(50).email().url()
.regex(/pattern/).startsWith('https')
// Numbers
z.number().min(0).max(100).int().positive()
// Modificateurs
.optional() // peut être undefined
.nullable() // peut être null
.default(val) // valeur par défaut
Objets & Tableaux
z.object({ name: z.string(), age: z.number() })
.strict() // rejette les clés inconnues
.partial() // tous les champs optionnels
.extend({ bio: z.string() })
.pick({ name: true })
.omit({ password: true })
z.array(z.string()).min(1).max(10).nonempty()
parse vs safeParse
// parse — lance une ZodError si invalide
const data = schema.parse(input);
// safeParse — retourne un résultat
const result = schema.safeParse(input);
if (result.success) {
use(result.data);
} else {
result.error.issues.forEach(i => {
console.log(i.path[0], ':', i.message);
});
}
Avancé
// Transformation
z.string().email().transform(v => v.toLowerCase())
// Validation personnalisée
z.number().refine(n => n % 2 === 0, 'Doit être pair')
// Validation inter-champs
z.object({ pwd: z.string(), confirm: z.string() })
.refine(d => d.pwd === d.confirm, {
message: 'Mots de passe différents',
path: ['confirm']
})