@mostajs/doc-export
v0.1.1
Published
Orchestrateur Markdown → livrable paginé thémé (PDF A4, diaporama 16:9 PDF/PPTX, HTML autonome), zéro dépendance, sans build. Compose @mostajs/markdown-html (md→HTML) et @mostajs/palette (thèmes) ; les moteurs de rendu (Chrome headless, Electron printToPD
Maintainers
Readme
@mostajs/doc-export
Auteur : Dr Hamid MADANI [email protected] Licence : AGPL-3.0-or-later · Niveau : N2 (compose) · Zéro dépendance, sans build
Orchestrateur Markdown → livrable paginé thémé : PDF (A4), diaporama (PDF/PPTX),
HTML autonome. doc-export est volontairement mince : il compose
@mostajs/markdown-html (md→HTML) et
@mostajs/palette (thèmes), et délègue le rendu au
meilleur moteur du monde (Playwright / Electron / WeasyPrint / Typst / pandoc) via un port
RenderDriver injecté. Il ne réimplémente aucun moteur PDF (cf. docs/01-ETUDE-ETAT-ART).
Pourquoi ce module (ce que l'état de l'art ne donne pas)
- Orchestration composable dans une app (servir un README en aide, exporter un rapport, une fiche).
- Thèmes dérivés de
@mostajs/palette— contrastes validés (pas de couleurs en dur). - RTL arabe natif · souveraineté AGPL · cœur zéro-dépendance.
- Embarquement Electron zéro-binaire (
webContents.printToPDF) — aucune solution mondiale ne le fait.
Install
npm i @mostajs/doc-export @mostajs/markdown-html
# + un driver de rendu selon le contexte (voir plus bas)Exemple minimal — HTML autonome (aucun driver requis)
import { createDocExporter } from '@mostajs/doc-export'
import * as markdown from '@mostajs/markdown-html' // port md→HTML (défaut)
const doc = createDocExporter({
markdown: { toHtml: (md) => ({ html: markdown.mdToHtml(md).html }) },
})
const { html } = await doc.render({
source: '# Bonjour\n\nUn **document** souverain.',
format: 'html', // 'pdf' | 'slides-pdf' | 'pptx' | 'html'
theme: 'light',
})
// -> HTML autonome (CSS embarqué), prêt à écrire sur disque ou à servir.PDF — brancher un driver (on adopte le meilleur moteur du monde)
import { createDocExporter } from '@mostajs/doc-export'
import * as markdown from '@mostajs/markdown-html'
import { electronPdfDriver } from '@mostajs/doc-driver-electron' // 0 binaire dans une app Electron
const doc = createDocExporter({
markdown: { toHtml: (md) => ({ html: markdown.mdToHtml(md).html }) },
drivers: { pdf: electronPdfDriver() },
})
await doc.render({ source, format: 'pdf', theme: 'light', out: 'sortie.pdf' })| Contexte | Driver recommandé |
|---|---|
| Serveur, rendu chaud rapide | @mostajs/doc-driver-playwright (défaut serveur) |
| Application Electron | @mostajs/doc-driver-electron (zéro binaire) |
| PDF léger, CSS Paged strict, sans JS | @mostajs/doc-driver-weasyprint |
| Typographie de référence | @mostajs/doc-driver-typst |
| Diaporama PPTX | @mostajs/doc-driver-pandoc |
Diaporama
await doc.render({ source, format: 'slides-pdf', theme: 'slides-light', out: 'deck.pdf' })
// Chaque `---` (règle horizontale) devient une frontière de diapo (1 diapo = 1 page).RTL arabe
lang/dir sont auto-détectés (nom *.ar.md ou contenu arabe) ; sinon fournis explicitement.
Le dir est posé sur <body>, cible des règles RTL des thèmes.
API
createDocExporter({ markdown, theme?, drivers? }) -> { render(req) }
render({ source, format?, theme?, lang?, dir?, title?, out? }) -> { html?, bytes?, out? }
Helpers purs exportés : detectDir, injectSlideBreaks, assembleStandaloneHtml, esc.
Sauts de page (document)
Pour commencer une section sur une nouvelle page, poser le saut sur le titre —
<h2 style="page-break-before: always;">Titre</h2> — jamais un <div> vide (page blanche sous
Chromium). Détails : Entreprise/md2View/md2View-v2/docs/AUDIT-CSS.md.
Tests
npm test # node test-scripts/unit/doc-export.test.mjs (@mostajs/mjs-unit)Voir aussi
docs/00-CARTOGRAPHIE-ET-PROPOSITION.md— proposition (DEVRULES §4).docs/01-ETUDE-ETAT-ART-doc-export.md— état de l'art mondial (DEVRULES §⓪ Phase 2 / §9 #1).
