Skip to content

Bibliotheque Node

Théo178 edited this page Aug 19, 2026 · 6 revisions

Bibliothèque Node.js

Branche : node-library

Même code que CLI (lib/), sans Commander ni interface en ligne de commande : exposé comme package npm installable, pour être appelé directement depuis un autre programme Node sans passer par un sous-processus (spawn/exec).

Installation

npm install @bloopstudio/anyform

Utilisation

const anyform = require('anyform');
const fs = require('fs');

// Images — Buffer en entrée, Buffer en sortie (chaîne de caractères si la cible est SVG).
const input = fs.readFileSync('photo.png');
const webpBuffer = await anyform.convertImage(input, 'webp', { quality: 80 });
fs.writeFileSync('photo.webp', webpBuffer);

// Compression (même format, taille réduite) — retourne { buffer, ext }.
const { buffer, ext } = await anyform.compressImage(input, 'png', 'strong');

// Données — Buffer en entrée, Buffer en sortie.
const xlsx = anyform.convertData(fs.readFileSync('data.csv'), 'csv', 'xlsx');

// Audio/vidéo — chemins de fichiers (ffmpeg lit/écrit sur disque, pas de Buffer possible).
await anyform.convertMedia('musique.wav', 'musique.mp3');
await anyform.compressVideo('clip.mp4', 'clip-compresse.mp4', 'mp4', 'medium');

// Sous-titres — texte en entrée, texte en sortie.
const vtt = anyform.convertSubtitle(fs.readFileSync('sous-titres.srt', 'utf8'), 'srt', 'vtt');

// Inspection et comparaison — chemins de fichiers, aucune modification du fichier source.
const infos = await anyform.inspectFile('photo.jpg', 'image', 'jpg');
const diff = await anyform.compareFiles('avant.png', 'apres.png', 'image');

Voir index.js sur la branche pour la liste complète des fonctions exportées, groupées par domaine (images, données, audio/vidéo, sous-titres, inspection/comparaison).

Pourquoi une branche à part plutôt qu'une option du CLI

cli-converter et node-library partagent le même code de conversion (lib/), mais ont des cibles différentes : la première s'utilise depuis un terminal, la seconde s'importe dans un autre programme. Les séparer évite qu'un npm install du CLI installe des dépendances (Commander) inutiles pour un simple require('anyform'), et inversement.

Langue des messages d'erreur

Même détection que le CLI : $LC_ALL/$LANG/$LANGUAGE de l'environnement, anglais si l'un commence par en, français sinon (pas de --lang, pas de ligne de commande ici — la langue se force en définissant la variable d'environnement avant d'importer le module). anyform.t(key, vars) et anyform.getLanguage() sont exposés directement pour un appelant qui voudrait afficher ses propres messages dans la même langue que les erreurs internes.

Formats supportés

Identiques au CLI :

  • Images — entrée : SVG, PNG, JPG, WebP, GIF, BMP, TIFF, AVIF, ICO, HEIC/HEIF. Sortie : PNG, JPG, WebP, TIFF, AVIF, ICO, SVG (vectorisation via potrace).
  • Données : CSV ⇄ JSON ⇄ XLSX.
  • Audio : WAV, MP3, OGG, FLAC, AAC, M4A, WMA, Opus.
  • Vidéo : MP4, WebM, MOV, AVI, MKV, FLV, OGV.
  • Sous-titres : SRT ⇄ VTT ⇄ ASS, en pur JavaScript (aucune dépendance).

Structure du code

  • index.js — point d'entrée public, ré-exporte les fonctions de lib/
  • lib/convert.js — conversion et compression d'images (sharp + potrace + heic-convert)
  • lib/data.js — conversion de données (SheetJS)
  • lib/media.js — conversion et compression audio/vidéo (ffmpeg-static)
  • lib/subtitles.js — conversion de sous-titres SRT/VTT/ASS (texte pur)
  • lib/inspect.js — lecture des propriétés d'un fichier, sans le modifier
  • lib/compare.js — diff entre deux fichiers (image, texte ligne à ligne, ou empreinte)
  • lib/i18n.js — traduction FR/EN des messages d'erreur

Versioning et publication

Le patch de package.json est incrémenté automatiquement à chaque push touchant index.js/lib//package.json sur node-library (workflow publish-npm.yml), qui publie ensuite la nouvelle version sur npm avec un token stocké dans le secret NPM_TOKEN du dépôt. Comme les autres workflows du projet, il ne garde que ses 10 runs les plus récents.

Clone this wiki locally