@woff2/woff2-rs
v1.0.1
Published
A WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs.
Downloads
4,651
Maintainers
Readme
Node woff2-rs
A WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs.
Features
- Converts WOFF2 to TTF or OTF.
- Quick to install, no need for node-gyp and postinstall.
- Cross-platform support, including Apple M Chips.
- Support for running as native addons in Deno.
Installation
npm i @woff2/woff2-rs
yarn add @woff2/woff2-rs
Usage
import { promises as fs } from 'fs'
import path, { join } from 'path'
import { fileURLToPath } from 'url'
import woff2Rs from '@woff2/woff2-rs'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.resolve(path.dirname(__filename))
async function toTTF() {
const font = await fs.readFile(join(__dirname, '../__test__/fa-regular-400-v5.15.4.woff2'))
const outputBuffer = woff2Rs.decode(font) // output TTF buffer
await fs.writeFile(join(__dirname, 'fa-regular-400.ttf'), outputBuffer)
}
toTTF()
Benchmark
npm run bench
Running "WOFF2 to TTF (Use Font Awesome)" suite...
Progress: 50%
Progress: 100%
woff2-next(node-gyp binding):
2 990 ops/s, ±0.30% | fastest
@napi-rs/ttf2woff2(Rust binding):
2 396 ops/s, ±0.66% | 19.87% slower
@woff2/woff2-rs(Pure Rust):
1 934 ops/s, ±0.30% | 35.32% slower
wawoff(Wasm):
1 501 ops/s, ±0.75% | slowest, 49.8% slower
Support matrix
| | Node.js 12 | Node.js 14 | Node.js 16 | Node.js 18 | npm | | ---------------- | ---------- | ---------- | ---------- | ---------- | --- | | Windows x64 | ✓ | ✓ | ✓ | ✓ | | | Windows x32 | ✓ | ✓ | ✓ | ✓ | | | Windows arm64 | ✓ | ✓ | ✓ | ✓ | | | macOS x64 | ✓ | ✓ | ✓ | ✓ | | | macOS arm64(M1) | ✓ | ✓ | ✓ | ✓ | | | Linux x64 gnu | ✓ | ✓ | ✓ | ✓ | | | Linux x64 musl | ✓ | ✓ | ✓ | ✓ | | | Linux arm gnu | ✓ | ✓ | ✓ | ✓ | | | Linux arm64 gnu | ✓ | ✓ | ✓ | ✓ | | | Linux arm64 musl | ✓ | ✓ | ✓ | ✓ | | | Android arm64 | ✓ | ✓ | ✓ | ✓ | | | Android armv7 | ✓ | ✓ | ✓ | ✓ | |
Build
After yarn build/npm run build
command, you can see package-template.[darwin|win32|linux].node
file in project root. This is the native addon built from lib.rs.
Test
With ava, run yarn test/npm run test
to testing native addon. You can also switch to another testing framework if you want.
Develop requirements
- Install the latest
Rust
- Install
Node.js@10+
which fully supportedNode-API
- Install
[email protected]
Test in local
- yarn
- yarn build
- yarn test
Release package
Ensure you have set your NPM_TOKEN in the GitHub
project setting.
In Settings -> Secrets
, add NPM_TOKEN into it.
When you want to release the package:
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]
# 1.0.0 => 1.0.1
npm version patch
# or 1.0.0 => 1.1.0
npm version minor
git push