Node CSV version 0.2 incluant le support de l'API streaming
Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.
Annoncé en Août, le parser CSV pour Node.js dans sa version 0.2 est sorti hier. Cette version est une mise à jour majeure dans le sens ou elle aligne l’API de la librairie avec les meilleures pratiques en terme de traitement de flux de données. Le parser CSV se comporte désormais à la fois comme un “Stream Writer” et un “Stream Reader”. Attention, pour atteindre cet objectif, un certain nombre de changements ont eu lieu dans l’API rendant le module légèrement incompatible avec les versions précédentes.
Migration
J’ai essayé ici de rapporter tous les changements d’API. Je penserai à mettre à jour cette section avec vos suggestions dans la mesure où j’en aurai oubliés. Les fonctions ‘from*’ et ‘to*’ ont été réécrites par ‘from.’ and ‘to.’. L’évènement ‘data’ est maintenant l’évènement ‘record’. L’évènement ‘data’ reçoit dorénavant une version sérialisée (voir la documentation relative au “stringifier”) de l’évènement ‘record’.
Stream API
C’est ici l’amélioration majeure de l’annonce du mois d’août. Le schéma ci-dessous extrait du code source illustre la structure le l’architecture des flux (“stream”) dans Node.js et l’applique au parser CSV :
|-----------| |---------|---------| |---------|
| | | | | | |
| | | CSV | | |
| | | | | | |
| Stream | | Writer | Reader | | Stream |
| Reader |.pipe(| API | API |).pipe(| Writer |)
| | | | | | |
| | | | | | |
|-----------| |---------|---------| |---------|
Comme on peut le constater, cette version est compatible avec les spécifications de l’API stream. Le parser se comporte à la fois comme un Stream Writer en entré et un Stream Reader en sortie. Exemple :
fs.createReadStream( './in' )
.pipe( csv() )
.pipe( fs.createWriteStream('./out') )
Fonctionnalités utiles
Comme alternative, le module fournis plus fonctions facilitant le développement et accessibles au travers des propriétés from
et to
. Certaines de ces fonctions existaient déjà dans la version 0.1 et ont simplement été renommées. Par exemple, la fonction csv.fromPath()
est maintenant csv.from.path()
. De plus, de nouvelles fonctions ont été ajoutées, par exemple csv.to.string
. Exemple :
csv()
.from.path( './in' )
.to.string( function(data){ console.log(data) } )
Documentation
Comme déjà expérimenté dans de nombreux projets antérieurs tel que Mecano, renommé Nikita, le contenu du “readme” a été réduit à son minimum, ne s’adressant qu’aux potentiels participants du projet, et la documentation est générées directement depuis le code source. Un script a été écrit spécifiquement pour remplir ce rôle. L’idée est de documenter le code par des commentaires respectant la syntaxe Markdown. Un simple parser écrit à base d’expressions régulières lit chaque fichiers sources, extrait ces commentaires et écrit un fichier Markdown à l’intérieur du répertoire “./doc”. Ce répertoire “./doc” est finalement copié dans le répertoire Jekyll de ce site Internet avant d’être déployé et rendu disponible ici. Note, au moment où j’écris ces lignes, ce script a besoin encore de quelques petits rafistolages et la documentation doit être relue pour corriger la syntaxe Markdown et les erreurs d’orthographes. Comme d’habitude, toutes vos contributions seront les bien venues.
Conclusion
Merci d’essayer cette nouvelle monture et laissez-moi un petit message pour dire ce que vous en pensez.