woff2-encoder
Version:
A TypeScript library for handling WOFF2 encoding using WebAssembly
125 lines (82 loc) • 3.08 kB
Markdown
# woff2-encoder
A TypeScript library for handling WOFF2 encoding using WebAssembly.
## 🚀 Getting Started
### Prerequisites
- If using Node, `>= 18.x`
### Installation
```console
npm install woff2-encoder
```
## Notes
If you only need to decompress WOFF2 files, it's recommended that you import
from `woff2-encoder/decompress` (see the [Decompress only](#decompress-only)
example below). This will net your end users a significant decrease in bundle
size as it uses its own separate WASM file with a much smaller footprint.
## 📚 API Reference
### `compress`
Compresses SFNT (TrueType/OpenType) font data to WOFF2 font data.
**Returns:** `Promise<Uint8Array>` A promise resolving to the WOFF2 font data.
| Parameter | Type | Description |
| :-------- | :-------------------------- | :------------------ |
| buffer | `ArrayBuffer \| Uint8Array` | The SFNT font data. |
### `decompress`
Decompresses WOFF2 font data back to SFNT (TrueType/OpenType) font data.
**Returns:** `Promise<Uint8Array>` A promise resolving to the SFNT font data.
| Parameter | Type | Description |
| :-------- | :-------------------------- | :------------------- |
| buffer | `ArrayBuffer \| Uint8Array` | The WOFF2 font data. |
## 💡 Examples
### Compress a TTF font using Node.js
```typescript
import fs from 'node:fs';
import { compress } from 'woff2-encoder';
async function example() {
const fontFile = fs.readFileSync('./my-font.ttf');
const output = await compress(fontFile);
}
```
### Decompress a WOFF2 font from a URL
```typescript
import { decompress } from 'woff2-encoder';
async function example() {
const fontBuffer = await fetch('https://example.com/my-font.woff2').then(
(res) => res.arrayBuffer()
);
const output = await decompress(fontBuffer);
}
```
### Parse a WOFF2 font with [opentype.js](https://github.com/opentypejs/opentype.js)
```typescript
import fs from 'node:fs';
import opentype from 'opentype.js';
import { decompress } from 'woff2-encoder';
async function example() {
const fontFile = fs.readFileSync('./my-font.woff2');
const output = await decompress(fontFile);
// Since opentype.js requires a buffer, we pass
// in the buffer and not the byte array itself
const fontData = opentype.parse(output.buffer);
}
```
### Decompress only
```typescript
import fs from 'node:fs';
import opentype from 'opentype.js';
import decompress from 'woff2-encoder/decompress';
async function example() {
const fontBuffer = await fetch('https://example.com/my-font.woff2').then(
(res) => res.arrayBuffer()
);
const output = await decompress(fontBuffer);
}
```
## ⭐ Acknowledgements
- [google/woff2](https://github.com/google/woff2) - For the C++ implemention for encoding WOFF2 files.
- [fontello/wawoff2](https://github.com/fontello/wawoff2) - For the initial WebAssembly port of Google's WOFF2 encoder.
## 📃 License
MIT License. See [LICENSE](https://github.com/itskyedo/woff2-encoder/blob/main/LICENSE) for details.