hucre

hucre

C'EST QUOI ?

hucre est un moteur de tableur écrit en TypeScript pur, sans aucune dépendance. Il lit et écrit du XLSX, du CSV, de l'ODS, du JSON, du NDJSON et du XML, et lit en plus le XLS legacy et le XLSB. Le core n'utilise aucune API Node (fs, crypto, Buffer) ni eval, donc le même paquet tourne dans Node 24+, Deno, Bun, un navigateur, un Cloudflare Worker ou une edge function Vercel.

POURQUOI C'EST INTÉRESSANT ?

  • Zéro dépendance et imports tree-shakeable : chaque format a son sous-chemin. parseCsv + writeCsv depuis hucre/csv pèsent 3,7 Ko gzippés, readXlsx seul 34 Ko, la lib entière 129 Ko. Ces tailles sont figées dans un budget que la CI fait échouer dès qu'une entrée déborde
  • Streaming des deux côtés : streamXlsxRows est un générateur async qui parse le ZIP de bout en bout directement depuis un ReadableStream, avec plafond de lignes et filtre de plage A1. writeXlsxStream consomme n'importe quel itérable - un curseur de base de données, un autre flux - et la mémoire ne grimpe pas avec le nombre de lignes
  • Deux chemins séparés volontairement : openXlsx/saveXlsx recopie octet pour octet chaque partie qu'il ne régénère pas, donc les graphiques, les macros VBA et les thèmes survivent à une modification. readXlsx/writeXlsx est le chemin d'auteur, qui reconstruit le classeur depuis le modèle
  • L'écriture couvre les parties pénibles : styles de cellules, largeurs de colonnes calculées selon la police (caractères CJK double largeur compris), volets figés, filtres automatiques, validation de données, liens, images, commentaires, tableaux, mises en forme conditionnelles avec leurs styles dxf, sparklines et cases à cocher natives Excel 2024
  • Validation de schéma intégrée : validateWithSchema coerce les types et applique required, pattern, min/max, enum et des validateurs maison, puis rend les objets propres d'un côté et la liste des erreurs (ligne, champ, valeur) de l'autre
  • API unifiée et CLI : read() détecte le format aux octets magiques ou au premier caractère, write() sort dans neuf formats, et npx hucre convert|inspect|validate fait la même chose depuis un terminal, stdin et stdout compris

CAS D'USAGE

  • Générer un export Excel stylé depuis une route API ou une edge function, sans ajouter la moindre dépendance
  • Ingérer un fichier client de plusieurs millions de lignes en flux, avec un schéma qui contrôle chaque ligne au passage
  • Modifier une cellule dans un classeur métier truffé de graphiques et de macros sans casser le reste du fichier
  • Convertir un XLS legacy ou un CSV vers du XLSX, du Markdown ou du NDJSON en une seule commande