Version 6 du package CSV pour Node.js

Version 6 du package CSV pour Node.js

WORMS David

By WORMS David

15 nov. 2021

La dernière version du package csv pour Node.js vient d’être publiée ainsi que celles de ses sous-projects. Voici les versions publiées :

  • csv version 6.0.0, précédente version 5.5.3 NPM
  • csv-generate version 4.0.0, précédente version 3.4.3 NPM
  • csv-parse version 5.0.0, précédente version 4.16.3 NPM
  • csv-stringify version 6.0.0, précédente version 5.6.5 NPM
  • stream-transform version 4.0.0, précédente version 2.1.3 NPM

Il y eut de nombreux commits depuis que le dernier package fut publié, une centaine, un peu trop à mon goût. La plupart de l’effort fut consacré à migrer version les modules ECMAScript et à fournir une infrastructure de build robuste basée sur Rollup. Le site internet a été mis à jour et enrichi par de nombreux exemples.

Avant de présenter les évolutions, commençons par les breaking changes. Certains noms de module ont changé en fonction de l’environnement visé. La documentation fournit de nombreuses informations en ce sens et une multitude d’exemples. Aussi, quelques noms d’options ont été renommées dans le package csv-parse. Toutefois, la liste des changements incompatibles est relativement courte :

  • Les utilisateurs de CommonJS doivent modifier le chemin des modules sync, de {package_name}/lib/sync à {package_name}/sync.
  • Les imports sont toujours déstructurés, par exemple import {parse} from 'csv-parse', il n’y a aucun default exports.
  • Dans le package csv-parse, l’option relax est désormais relax_quotes.
  • Dans le package csv-parse, l’option skip_lines_with_empty_values est désormais skip_records_with_empty_values.
  • Dans le package csv-parse, l’option skip_lines_with_error est désormais skip_records_with_error.
  • Dans le package csv-parse, l’erreur CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH est désormais CSV_RECORD_INCONSISTENT_COLUMNS.
  • Dans le package csv-parse, l’erreur INCONSISTENT_RECORD_LENGTH est désormais RECORD_INCONSISTENT_FIELDS_LENGTH.

Voici la liste des principales évolutions :

  • Tous les projets et leurs modules sont désormais écrit en module ECMAScript.
  • Utilisation transparente entre CommonJS et ESM via la directive exports du package.json
  • Écriture de nombreux exemple intégré à la documentation
  • Remplace de la distribution browser par la distribution IIFE générée par Rollup
  • Nouvelle distribution UMD
  • Integration de règles de lint pour tous les fichiers js et coffee
  • Backporter la compatibility avec Node.js 8 dans csv-stringify
  • Dans csv-parse, afficher le buffer dans les options skip_line_with_errors et raw
  • Dans csv-parse, l’option objname peut se définir par position d’index
  • Quelques amélioration du côté de TypeScript

Voici un rapide exemple illustrant les principaux impacts de cette nouvelle version, en utilisant le module csv-parse/lib/sync. Dans la précédente version, le code ressemble à :

const parse = require('csv-parse/lib/sync');
const records = parse('a, "b" ,c', {
  relax: true
});

Dans la dernière version, le code mise à jour est :

// `parse` is now destructured, it is consistent with
// `const {parse} = require('csv/sync');` if you are using the `csv` package.
// Also, the path to the sync module is now 'csv-parse/sync'
const {parse} = require('csv-parse/sync');
const records = parse('a, "b" ,c', {
  // `relax` was renamed `relax_quotes`, this is one of the few options from
  // `csv-parse` which were renamed.
  relax_quotes: true
});

Merci de partager vos bugs et propositions de nouvelles fonctionnalités en vous rendant sur le dépôt du projet CSV dans GitHub.

Canada - Maroc - France

International locations

10 rue de la Kasbah
2393 Rabbat
Canada

Nous sommes une équipe passionnée par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Science le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.