[BSR] Le module Moment.js est déprécié
Les applications front et back de Pix utilisent Moment.js.
Celui-ci est maintenant considéré comme endetté (ex. mutabilité, taille élevée) et est en mode maintenance. Ses auteurs recommandent de passer à d'autres projets. cf. https://momentjs.com/docs/#/-project-status
Suggestion
Remplacer Moment.js par un autre module plus petits et plus à jour. cf. https://momentjs.com/docs/#/-project-status/recommendations/
TL;DR
Après analyse de la situation, je propose de remplacer Moment.js par Day.js
Discussion
J'ai commencé par regarder les explications de Moment. C'est clair : Moment est mort.
J'ai été interpellé par les API natives Date et Intl qui font le taff pour des besoins simples. J'ai hâte de voir débarquer l'API Temporal.
💡 Les sources semblent concorder pour dire que
Intln'est pas super performant de base, mais qu'une fois la mise en cache effectuée (j'en déduis qu'il y a des mécanismes internes de cache), ça passe.
Par curiosité, je me suis demandé s'il fallait encore utiliser une lib, et Moment.js en particulier. Je suis tombé sur cet article / repo, qui propose des pistes de réflexion intéressantes.
Par la suite, j'ai fait une comparaison sur Npm Trends entre moment, date-fns, dayjset luxon :

Il semblerait que date-fns soit la meilleure alternative.
J'ai creusé le sujet et suis tombé sur cet article, par quelqu'un qui se présente comme un ancien contributeur active de date-fns et qui recommande de se passer de lib ou de passer par… Day.js.
Je suis plutôt convaincu par son argumentaire, notamment l'argument consistant à dire que "si vous n'êtes pas outillé pour faire du fonctionnel, restez sur une lib OO".
J'ai poussé plus loin la réflexion. J'ai commencé à farfouiller le code de Pix pour me faire une idée. Je me suis restreint pour cette étude aux fichiers projets de Pix API.
❤️ j'adore les scopes de recherches de Webstorm
Y a un gros paquet de correspondances (100+ dans 27+ fichiers) !

Pour finir, j'ai regardé si y avait de l'outillage ou des méthodes magiques. Je suis tombé sur cet article qui m'a l'air intéressant à suivre.
Ma conclusion : Moment est mort, remplaçons-le par Day.js.
Est-ce qu'on ne devrait pas ajouter une couche d'abstraction entre la lib choisie (moment / day / whatever) et notre usage ? Cela permettrait de mieux gérer la dépendance.
Dans la mesure où on n'est pas censé changer de lib de gestion de date régulièrement, ça me paraît un peu overkill.
En même temps, si le futur est Temporal et que nous devions vivre en zone transitoire d'ici là (je table sur 2 ou 3 années avant de voir atterrir la spécification et sa mise en œuvre), peut-être que la question se pose effectivement.
Par défaut, je pencherais plutôt pour le "non" tout en étant prêt à me laisser convaincre par le "oui".
Un des arguments pour serait la plus grande facilité à tester. A voir ce qu'en pense le reste de l'équipe.
Fait avec #7673