A WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs
MIT License
woff2-rs
A WOFF2 decompressor converts WOFF2 to TTF or OTF, powered by Rust based woff2-rs and napi-rs.
npm i @woff2/woff2-rs
yarn add @woff2/woff2-rs
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()
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
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.
With ava, run yarn test/npm run test
to testing native addon. You can also switch to another testing framework if you want.
Rust
Node.js@10+
which fully supported Node-API
[email protected]
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