- Plus de recours temporaire à
this.find(scope.getQuery())
au lieu descope.clone()
dans les méthodes métier des modèles Mongoose. - Exploitation du validateur
isMongoId
au lieu d'une regex pour les requêtes REST - Connexion dynamique au schéma du serveur GraphQL depuis l'extension VS Code pour une meilleure complétion / validation des textes GraphQL du code source.
- Simplification d'un test de réponse GraphQL en utilisant
toEqual()
etexpect.stringMatching()
plutôt que deux tests partiels de structure. - Restriction des vérifications de tokens JWT à l'algorithme choisi (HS256).
- Simplification du code de configuration CORS, notamment côté Apollo.
- La politique CORS n'autorise plus des clients
localhost
en mode production.
Le recours à l'import de modules JSON au sein d'ESM nécessitait des drapeaux CLI spécifiques un peu partout (--experimental-json-modules
) et gênait sur Node >= 16.14 en raison de l'exigence d'assertions d'import (ex. import TUNES from '../fixtures/tunes.json' assert { type: 'json' }
), lesquelles sont encore au stade 3 du TC39 et donc embêtantes pour un ESLint pur (sans Babel).
Vu l'usage qu'on en faisait, on a simplement migré sur un ESM avec un export default
devant le littéral, ce qui permet de marcher sur du Node récent avec un ESLint brut, sans recourir à Babel notamment.
Afin d'éviter tout risque d'installation basé package.json
(ex. package-lock.json
antérieur), comme sur Heroku par exemple, qui rencontrerait des soucis de dépendances pairs (peer deps), on a migré certains modules :
graph-scalars
au lieu de@saeris/graphql-scalars
. Plus moderne, TS-friendly, à jour sur GraphQL 16 là où le précédent utilisait un vieux GraphQL 14.restify-cors-middleware2
au lieu derestify-cors-middleware
. Un fork qui a suivi les versions de Restify (notamment la 8.x) et améliore encore la conformité à la spec CORS officielle.eslint-config-standard
en@next
pour attraper la 7.x, qui accepte ESLint 8.x (la stable est restée sur ESLint 7, déjà "ancien"…).
- Mise à jour de toutes les dépendances
- Bascule vers Apollo 3 et GraphQL 16, ce qui a nécessité pas mal d'adaptations / réécritures.
- Exigence de Node 14+ (pour les ESM natifs ; préférer 15+)
- Passage aux modules ESM natifs (y compris avec Jest). Nécessite Node 14+.
- Exploitation de la stack Apollo complète dans les tests GraphQL, afin notamment de tester les directives.
- Tests GraphQL autour de l'authentification
- Mise à jour de toutes les dépendances
- Passage à 'apollo-server-testing' pour les tests GraphQL
- Exigence de Node 14+ (pour les ESM natifs)
- Normalisation (minuscules) de l’email utilisateur directement dans la couche modèle, ce qui simplifie les appels depuis les contrôleurs et resolvers.
- L’utilitaire
run
des tests GraphQL signale désormais correctement les erreurs d’interprétation de la requête par le moteur (ex. champ inconnu). - Le audit logger du serveur REST retranscrit désormais les méta-données du
champ
info
des erreurs « maison » (telles que celles derestify-errors
). - La signature du middleware
cors
préserve désormais les valeurs par défaut individuelles en cas d’appel avec seulement certaines options. - Renommage fichier de monkeypatch du routeur de Restify.
- Mise à jour de la connexion Apollo Engine (détection auto de la clé
APOLLO_KEY
, nouveau mode de reporting automatique du schéma à jour). - Mise à jour de toutes les dépendances et outils
- On ne s'amuse plus à gérer la révocation côté serveur des JWT, surtout qu'ils expirent à 30 minutes de base… Ça simplifie la démo et le workflow pour se concentrer sur le cœur du truc.
- Bascule de
restify-request-validator
ànode-restify-validation
, nettement plus complet, moins friable et sans bug idiot sur la source d’analyse des paramètres du chemin d’URL. - Correction de la fermeture finale des connexion MongoDB pendant les tests
- Refactoring des
reduce()
qui restaient, qui n’étaient finalement que des boucles déguisées, pour plus de lisibilité. - Extraction de la logique de construction des descripteurs de pagination dans un utilitaire pré-fourni, pour ne pas faire de bruit inutile lors des étapes successives de construction (simulé dans le contrôleur, puis en méthode métier sur le modèle).
- Passage de
dotenv
àdotenv-safe
, avec son.env.example
, pour coller davantage aux meilleures pratiques. - Utilisation de Mongoose-PII uniquement pour les champs de mot de passe, car on recommande plutôt du Encryption at rest pour le chiffrement des PII.
- Lecture unique des clés d’environnement, en accord avec les meilleures pratiques recommandées.
- Mise à jour de toutes les dépendances et outils
- Tâches explicites
dev
etgraphql:dev
pour le développement des serveurs - Harmonisation
async
/await
desrc/graphql-server.js
. - Champ GraphQL virtuel
voteCount
avec resolver dédié. - Simplification du resolver de
createTune
, en tirant parti de la prévalidation inhérente à GraphQL. - Simplification des tests de réponse GraphQL, en tirant parti du fait que la
grappe résultat ne contient par définition que ce qu’on a demandé : un
toEqual()
suffit, au lieu d’untoMatchObject()
.
- Mise à jour de toutes les dépendances et outils
- Reformatage propre des commentaires et annotations
- Toutes les scripts npm sont prédéfinis sans analyseur de sortie VSCode, pour
éviter le prompt VSCode à l’exécution (
.vscode/tasks.json
)
- Nettoyage général du code (DRY, réordonnancements…)
- Code annoté complet
- Fix tests contrôleur REST des tunes une fois le RBAC mis en place
- Plus d’extensions VS Code recommandées
- Restriction du contenu zippé pour les déploiements Azure