@bendyline/squisq-formats
v1.2.1
Published
Document format converters — DOCX, PDF, OOXML import/export
Maintainers
Readme
@bendyline/squisq-formats
Document format converters for Squisq. Import and export between Squisq's Markdown-based document model and common file formats — DOCX, PPTX, PDF, and HTML. All converters run entirely in the browser with no server or native binaries required.
Part of the Squisq monorepo.
Install
npm install @bendyline/squisq-formats @bendyline/squisqSupported Formats
| Format | Import | Export | Theme | Subpath |
| --------------------- | ------- | ------- | ----- | -------------------------------- |
| DOCX (Word) | ✅ | ✅ | ✅ | @bendyline/squisq-formats/docx |
| PDF | ✅ | ✅ | ✅ | @bendyline/squisq-formats/pdf |
| HTML | — | ✅ | ✅ | @bendyline/squisq-formats/html |
| EPUB (e-book) | — | ✅ | ✅ | @bendyline/squisq-formats/epub |
| PPTX (PowerPoint) | planned | ✅ | ✅ | @bendyline/squisq-formats/pptx |
| XLSX (Excel) | planned | planned | — | @bendyline/squisq-formats/xlsx |
All export formats accept an optional themeId to apply Squisq theme colors and typography.
Quick Examples
DOCX
import { markdownDocToDocx, docxToMarkdownDoc } from '@bendyline/squisq-formats/docx';
// Export: MarkdownDocument → DOCX (Uint8Array)
const docxBytes = await markdownDocToDocx(markdownDoc);
// Import: DOCX (ArrayBuffer) → MarkdownDocument
const markdownDoc = await docxToMarkdownDoc(docxBuffer);import {
markdownDocToPdf,
pdfToMarkdownDoc,
configurePdfWorker,
} from '@bendyline/squisq-formats/pdf';
// Configure the PDF.js worker (required for import)
configurePdfWorker('/pdf.worker.min.mjs');
// Export: MarkdownDocument → PDF (Uint8Array)
const pdfBytes = await markdownDocToPdf(markdownDoc);
// Import: PDF (ArrayBuffer) → MarkdownDocument
const markdownDoc = await pdfToMarkdownDoc(pdfBuffer);HTML
import { docToHtml, docToHtmlZip } from '@bendyline/squisq-formats/html';
// Export: Doc → standalone HTML string
const html = docToHtml(doc);
// Export: Doc → ZIP with HTML + images
const zipBytes = await docToHtmlZip(doc);EPUB
import { markdownDocToEpub } from '@bendyline/squisq-formats/epub';
// Export: MarkdownDocument → EPUB (ArrayBuffer)
const epubBytes = await markdownDocToEpub(markdownDoc, {
title: 'My Book',
author: 'Jane Doe',
});PPTX
import { markdownDocToPptx } from '@bendyline/squisq-formats/pptx';
// Export: MarkdownDocument → PPTX (ArrayBuffer)
// Each H1/H2 heading starts a new slide
const pptxBytes = await markdownDocToPptx(markdownDoc);Doc-level Convenience Functions
Each format also exports Doc-level wrappers that handle the Markdown↔Doc conversion internally:
import { docToDocx, docxToDoc } from '@bendyline/squisq-formats/docx';
import { docToPdf, pdfToDoc } from '@bendyline/squisq-formats/pdf';
import { docToPptx } from '@bendyline/squisq-formats/pptx';Subpath Exports
| Subpath | Contents |
| --------------------------------- | -------------------------------------------------------------- |
| @bendyline/squisq-formats/docx | DOCX import/export |
| @bendyline/squisq-formats/pdf | PDF import/export + worker config |
| @bendyline/squisq-formats/html | HTML export |
| @bendyline/squisq-formats/epub | EPUB 3 e-book export |
| @bendyline/squisq-formats/ooxml | Shared OOXML infrastructure (ZIP reader/writer, XML utilities) |
| @bendyline/squisq-formats/pptx | PPTX export (import planned) |
| @bendyline/squisq-formats/xlsx | XLSX stubs (not yet implemented) |
Architecture
All converters use Squisq's MarkdownDocument AST as the pivot format. Importing a file parses it into a MarkdownDocument; exporting serializes from one. The OOXML subpath provides shared infrastructure for reading and writing Office Open XML packages (used by DOCX and PPTX, and eventually XLSX).
Related Packages
| Package | Description | | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | | @bendyline/squisq | Headless core — schemas, templates, spatial, markdown, storage | | @bendyline/squisq-react | React components for rendering docs | | @bendyline/squisq-editor-react | React editor with raw/WYSIWYG/preview modes |
