📚 Cheatsheet — 4 Librairies Essentielles

Axios · Lodash · Day.js · Zod — toutes les méthodes clés en un coup d'œil

📡 Axios
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
axios.get(url[, config])
axios.post(url, data[, config])
axios.put(url, data[, config])
axios.patch(url, data[, config])
axios.delete(url[, config])
{
  params:  { _limit: 5, page: 1 },  // query string
  headers: { Authorization: 'Bearer token' },
  timeout: 5000,
  baseURL: 'https://api.example.com',
  signal:  controller.signal        // annulation
}
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
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)
);
const [users, posts] = await Promise.all([
  axios.get('/users'),
  axios.get('/posts')
]);
🔧 Lodash
<script src="https://cdn.jsdelivr.net/npm/lodash@4/lodash.min.js"></script>
// Usage : _.nomDeLaMethode()
_.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
_.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
_.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)
_.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
const result = _.chain(data)
  .filter(p => p.actif)
  .sortBy('prix')
  .map(p => p.nom)
  .value();  // déclenche l'exécution !
📅 Day.js
<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>
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é
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)
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
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
<script src="https://cdn.jsdelivr.net/npm/zod/lib/index.umd.js"></script>
<script>
  const { z } = Zod; // accès au namespace
</script>
z.string()    z.number()    z.boolean()
z.date()      z.null()      z.undefined()
z.literal('admin')
z.enum(['user','admin','mod'])
z.any()       z.unknown()
// 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
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 — 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);
  });
}
// 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']
 })

Ressources externes

→ Projet Final — Hub de données