Bytes decode in the order of § 10.1: UTF-8 mark, UTF-16 mark, a NUL in the first 4 KiB without a mark refused with its remedy, then strict UTF-8, then windows-1252. A mark its bytes contradict, and any decoded NUL, are refused: decoded, they would give names no later check sees. The separator is the candidate among ";", "," and tab that leaves no quote open and gives one field count above one on the first twenty records; a lone recognised header reads as one column. Records follow RFC 4180 and are numbered as a spreadsheet numbers its rows. Checked: 89 tests, 60 mutants killed; review found no behaviour defect. --- FR --- [ADD] csv : décodage en quatre temps, choix du séparateur, découpage Les octets se décodent dans l'ordre du § 10.1 : marque UTF-8, marque UTF-16, octet nul dans les 4 Kio sans marque refusé avec son remède, UTF-8 strict, puis windows-1252. Une marque contredite par ses octets, et tout nul décodé, sont refusés : décodés, ils donneraient des noms qu'aucun contrôle ne verrait. Le séparateur parmi « ; », « , » et la tabulation ne laisse aucun guillemet ouvert et donne un même nombre de champs, plus d'un, sur vingt enregistrements ; un en-tête seul reconnu se lit en une colonne. Découpage RFC 4180, rangs comme dans un tableur. Vérifié : 89 épreuves, 60 mutants tués ; aucun défaut à la revue. Assisted-by: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01EUXSGcwCLSC69FWEdCtWSb
21 lines
731 B
JavaScript
21 lines
731 B
JavaScript
// © 2026 TechnoLibre (http://www.technolibre.ca)
|
|
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
// Erreurs que lève la lecture d'un CSV. Le code d'une ErreurCsv nomme le
|
|
// refus ; ses détails portent ce que l'appelant lit pour agir, comme le
|
|
// remède d'un refus d'encodage. Le message, code et détails en JSON, sert au
|
|
// diagnostic et n'est pas un texte affiché, que fournit la table des libellés
|
|
// (§ 14.6).
|
|
|
|
export class ErreurCsv extends Error {
|
|
/**
|
|
* @param {string} code
|
|
* @param {Object} [details]
|
|
*/
|
|
constructor(code, details = {}) {
|
|
super(`${code} ${JSON.stringify(details)}`);
|
|
this.code = code;
|
|
this.details = details;
|
|
}
|
|
}
|
|
ErreurCsv.prototype.name = 'ErreurCsv';
|