@medicomind/rolldown-compression 1.2.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +37 -39
- package/dist/index.d.cts +4 -3
- package/dist/index.d.mts +4 -3
- package/index.d.ts +2 -1
- package/index.js +52 -52
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# @medicomind/rolldown-compression
|
|
2
2
|
|
|
3
|
+
## 2.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`a273ee7`](https://github.com/Medico-Mind/rolldown-compression/commit/a273ee7e17321963d75de2ccceaa76f93cb6b6cf) Thanks [@Mnwa](https://github.com/Mnwa)! - Lazier brotli worker pool and retuned multithreading defaults
|
|
8
|
+
|
|
9
|
+
- The brotli worker pool is now initialized lazily: worker threads are only spawned on the first input large enough to take the multithreaded path, instead of on every rayon worker thread up front. Small workloads no longer pay the thread-spawn cost. Also fixed a lazy-init bug where the worker-pool path could silently fall back to the single-stream encoder.
|
|
10
|
+
- Retuned multithreaded brotli defaults: the default `sectionSize` grew from 1 MiB to 4 MiB (matching the default 22-bit window), and inputs now need to be at least 4× `sectionSize` (16 MiB at the default, previously 2 MiB) to be split across the worker pool. Inputs between 2 MiB and 16 MiB are now compressed as a single stream, which improves their compression ratio; a cross-file batch keeps all cores busy in that range anyway.
|
|
11
|
+
- Broadened the PGO training corpus (SVG sprites, vendor-sized HTML/CSS, a 17 MiB payload, and a dedicated worker-pool batch) so shipped binaries are profile-optimized for the retuned multithreaded path as well; benchmark CI now measures the same PGO+BOLT builds that are released, and native tests also run on aarch64 Linux.
|
|
12
|
+
|
|
13
|
+
## 2.0.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [`b3d6170`](https://github.com/Medico-Mind/rolldown-compression/commit/b3d61702cd9db4fb2f4d54c24419e50e1ea9a3fe) Thanks [@Mnwa](https://github.com/Mnwa)! - Faster prebuilt Linux binaries through deeper build optimization:
|
|
18
|
+
|
|
19
|
+
- The `x86_64-linux-gnu` binding is now additionally optimized with LLVM BOLT: after the PGO build, the binary is instrumented, retrained on the compression workload, and re-laid-out post-link (basic-block reordering, function splitting, ICF).
|
|
20
|
+
- PGO now also covers the C dependencies (zstd, mimalloc), not just the Rust code, on the Linux targets: the CI installs a clang matching rustc's LLVM major and instruments the C sources with `-fprofile-generate`/`-fprofile-use` alongside rustc's `-Cprofile-generate`/`-Cprofile-use`, so both languages train and optimize from one merged profile. The new `--c-pgo` flag in `scripts/pgo/build.mjs` verifies the clang/rustc LLVM majors match and safely falls back to Rust-only PGO when they don't.
|
|
21
|
+
- All Linux targets now compile their C sources with clang (previously host gcc on `x86_64-linux-gnu` and musl).
|
|
22
|
+
|
|
23
|
+
No API or behavior changes — the published bindings are just faster on Linux.
|
|
24
|
+
|
|
25
|
+
## 2.0.0
|
|
26
|
+
|
|
27
|
+
### Major Changes
|
|
28
|
+
|
|
29
|
+
- [`6728b63`](https://github.com/Medico-Mind/rolldown-compression/commit/6728b63535a9dadd590b759fdae781377cbef9a0) Thanks [@Mnwa](https://github.com/Mnwa)! - Require Node.js v22.14.0 or newer by targeting Node-API 10, and switch the native addon to mimalloc as the global allocator.
|
|
30
|
+
|
|
31
|
+
**Why Node-API 10:** the addon previously targeted Node-API 8 to keep Node 18 support. Node 18 is end-of-life, so we now build against Node-API 10 (shipped in Node v22.14.0+). This lets napi-rs use the newest runtime APIs — notably cheaper Buffer creation from existing ArrayBuffers, which matters for a plugin whose entire output is compressed Buffers — instead of compatibility fallbacks for old runtimes.
|
|
32
|
+
|
|
33
|
+
**Why mimalloc:** batch compression is allocation-heavy and runs on every core through the rayon worker pool, where the system allocator becomes a contention point — especially musl's malloc on Alpine, which serializes heavily under multi-threaded load. mimalloc's per-thread heaps remove that contention and speed up the many short-lived encoder/buffer allocations. On musl targets it is built with `local_dynamic_tls` so the dlopen-ed `.node` addon does not exhaust musl's static TLS space (the "cannot allocate memory in static TLS block" failure). The wasm32-wasip1 fallback build keeps the default allocator.
|
|
34
|
+
|
|
3
35
|
## 1.2.2
|
|
4
36
|
|
|
5
37
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -8,9 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
Fast, native compression plugin for [Rolldown](https://rolldown.rs) and [Vite 8+](#usage-with-vite): compresses emitted assets with **gzip**, **brotli** and **zstd** at build time. The compression core is written in Rust (napi-rs + rayon) — one batched FFI call per build, fanned out across all CPU cores, without ever blocking the JS event loop.
|
|
10
10
|
|
|
11
|
-
**
|
|
12
|
-
|
|
13
|
-
Since v0.3.3 we are using PGO and Bolt optimizations in our native binaries. It reduce around 5-10% build compression time in some cases (see benchmarks).
|
|
11
|
+
**3x faster builds in a real project**: switching a production app from `node:zlib`-based (node v26.4.0) compression to this plugin cut total build time from 3:50 to 1:23 (294% → 688% CPU utilization) — see [real-world results](#real-world-results).
|
|
14
12
|
|
|
15
13
|
API ergonomics mirror [`vite-plugin-compression2`](https://github.com/nonzzz/vite-plugin-compression); see [differences](#differences-from-vite-plugin-compression2).
|
|
16
14
|
|
|
@@ -106,7 +104,7 @@ All options are validated when `compression()` is called — invalid levels (e.g
|
|
|
106
104
|
| `gzip` | `level` | 0–9 | 6 |
|
|
107
105
|
| `brotli` | `quality` | 0–11 | 11 |
|
|
108
106
|
| `brotli` | `windowBits` | 10–24 | 22 |
|
|
109
|
-
| `brotli` | `sectionSize` | ≥ 1 (bytes) |
|
|
107
|
+
| `brotli` | `sectionSize` | ≥ 1 (bytes) | 4 MiB |
|
|
110
108
|
| `zstd` | `level` | 1–22 | 19 |
|
|
111
109
|
|
|
112
110
|
```ts
|
|
@@ -115,7 +113,7 @@ defineAlgorithm('brotli', { quality: 7, windowBits: 22 })
|
|
|
115
113
|
defineAlgorithm('zstd', { level: 12 })
|
|
116
114
|
```
|
|
117
115
|
|
|
118
|
-
`sectionSize` is the target number of bytes each brotli worker thread compresses when a large input is split across the native worker pool; inputs at least
|
|
116
|
+
`sectionSize` is the target number of bytes each brotli worker thread compresses when a large input is split across the native worker pool; inputs at least four times `sectionSize` take the multithreaded path (16 MiB at the default). Smaller sections finish large files faster at a slight cost in compression ratio — sections much smaller than the window (`2^windowBits` bytes) lose too many cross-section matches.
|
|
119
117
|
|
|
120
118
|
## How it works
|
|
121
119
|
|
|
@@ -177,42 +175,42 @@ example.com {
|
|
|
177
175
|
Switching a production app's build from `node:zlib`-based compression to this plugin (same algorithms and levels):
|
|
178
176
|
|
|
179
177
|
```
|
|
180
|
-
before: npm run build
|
|
181
|
-
after: npm run build
|
|
178
|
+
before: npm run build 675.82s user 4.63s system 294% cpu 3:50.92 total
|
|
179
|
+
after: npm run build 567.80s user 7.41s system 688% cpu 1:23.58 total
|
|
182
180
|
```
|
|
183
181
|
|
|
184
182
|
**4.03x faster wall clock.** Compression stops being serialized behind the libuv thread pool (default `UV_THREADPOOL_SIZE=4`) and runs on all cores instead — CPU utilization jumps from 235% to 784%.
|
|
185
183
|
|
|
186
184
|
### Synthetic benchmark
|
|
187
185
|
|
|
188
|
-
`npm run bench` (or `node benchmark/index.mjs --quick`) generates a dist-shaped fixture set —
|
|
186
|
+
`npm run bench` (or `node benchmark/index.mjs --quick`) generates a dist-shaped fixture set — 202 files / ~85 MB with a long-tail size distribution, including two monolithic >16 MiB bundles that exercise the multithreaded brotli path — and compresses it with the native core vs `node:zlib` driven at full parallelism via `Promise.all` (the reference plugin's best case). Both sides always use the same levels.
|
|
189
187
|
|
|
190
188
|
Results on an Apple M1 Pro (10 cores), Node 26, default `UV_THREADPOOL_SIZE`:
|
|
191
189
|
|
|
192
190
|
#### With PGO
|
|
193
|
-
| scenario | output
|
|
194
|
-
|
|
195
|
-
| gzip+brotli (ref. defaults: 9/11) |
|
|
196
|
-
| gzip (level 9) |
|
|
197
|
-
| gzip (level 6) |
|
|
198
|
-
| brotli (quality 11) |
|
|
199
|
-
| brotli (quality 6) |
|
|
200
|
-
| zstd (level 19) |
|
|
191
|
+
| scenario | output | native (rust) | node:zlib | speedup |
|
|
192
|
+
|-----------------------------------|----------|---------------|-----------|---------|
|
|
193
|
+
| gzip+brotli (ref. defaults: 9/11) | 15.06 MB | 17.61s | 36.74s | 2.09x |
|
|
194
|
+
| gzip (level 9) | 9.62 MB | 0.31s | 0.80s | 2.60x |
|
|
195
|
+
| gzip (level 6) | 9.86 MB | 0.18s | 0.37s | 2.09x |
|
|
196
|
+
| brotli (quality 11) | 5.45 MB | 17.43s | 36.65s | 2.10x |
|
|
197
|
+
| brotli (quality 6) | 9.88 MB | 0.28s | 0.40s | 1.40x |
|
|
198
|
+
| zstd (level 19) | 5.54 MB | 8.28s | 14.35s | 1.73x |
|
|
201
199
|
|
|
202
200
|
#### Without PGO
|
|
203
|
-
| scenario | output
|
|
204
|
-
|
|
205
|
-
| gzip+brotli (ref. defaults: 9/11) |
|
|
206
|
-
| gzip (level 9) |
|
|
207
|
-
| gzip (level 6) |
|
|
208
|
-
| brotli (quality 11) |
|
|
209
|
-
| brotli (quality 6) |
|
|
210
|
-
| zstd (level 19) |
|
|
201
|
+
| scenario | output | native (rust) | node:zlib | speedup |
|
|
202
|
+
|-----------------------------------|----------|---------------|-----------|---------|
|
|
203
|
+
| gzip+brotli (ref. defaults: 9/11) | 15.06 MB | 18.34s | 36.62s | 2.00x |
|
|
204
|
+
| gzip (level 9) | 9.62 MB | 0.28s | 0.80s | 2.85x |
|
|
205
|
+
| gzip (level 6) | 9.86 MB | 0.19s | 0.37s | 1.93x |
|
|
206
|
+
| brotli (quality 11) | 5.45 MB | 19.67s | 36.50s | 1.86x |
|
|
207
|
+
| brotli (quality 6) | 9.88 MB | 0.31s | 0.40s | 1.27x |
|
|
208
|
+
| zstd (level 19) | 5.54 MB | 8.35s | 14.98s | 1.79x |
|
|
211
209
|
|
|
212
210
|
Reading these numbers honestly:
|
|
213
211
|
|
|
214
|
-
- **gzip** and **zstd**
|
|
215
|
-
- **brotli at quality 11** is the bound on the combined number: the Rust `brotli` crate is at per-core parity with node's C brotli (we measured a 1.01 single-thread ratio), so the
|
|
212
|
+
- **gzip** and **zstd** are faster per core ([zlib-rs](https://github.com/trifectatechfoundation/zlib-rs), ~2.4x faster per core than node's bundled zlib in our measurements; libzstd) *and* use every core, while `node:zlib` is capped at `UV_THREADPOOL_SIZE` (default 4) threads. The two >16 MiB bundles temper the headline numbers: neither algorithm has a sectioned mode, so each giant file occupies a single thread on both sides and that tail runs at the per-core ratio rather than the thread-count ratio.
|
|
213
|
+
- **brotli at quality 11** is the bound on the combined number: the Rust `brotli` crate is at per-core parity with node's C brotli (we measured a 1.01 single-thread ratio), so the speedup is parallelism — every core against `UV_THREADPOOL_SIZE` threads across the many small files, plus the sectioned worker pool (4 x 4 MiB sections) on the >16 MiB bundles that `node:zlib` has to compress one thread per file.
|
|
216
214
|
- The speedup grows with core count and shrinks if you raise `UV_THREADPOOL_SIZE` for the JS side — the benchmark prints both so runs are comparable.
|
|
217
215
|
|
|
218
216
|
### PGO / BOLT builds
|
|
@@ -221,19 +219,19 @@ Reading these numbers honestly:
|
|
|
221
219
|
|
|
222
220
|
1. baseline release build → `target/pgo/baseline.node`
|
|
223
221
|
2. instrumented build (`-Cprofile-generate`)
|
|
224
|
-
3. training run over a static corpus (`scripts/pgo/corpus.mjs`: JS bundles, JSON, CSS, HTML, source maps, base64 blobs, incompressible noise — every algorithm at fast/default/max levels)
|
|
222
|
+
3. training run over a static corpus (`scripts/pgo/corpus.mjs`: JS bundles, JSON, CSS, HTML, SVG sprites, source maps, base64 blobs, incompressible noise — every algorithm at fast/default/max levels)
|
|
225
223
|
4. `llvm-profdata merge` (uses the rustup `llvm-tools` component; `rustup component add llvm-tools` if missing)
|
|
226
224
|
5. optimized rebuild (`-Cprofile-use`) → `target/pgo/pgo.node`, also installed as the platform binding in the repo root
|
|
227
225
|
6. on Linux ELF targets with `llvm-bolt`/`merge-fdata` on PATH, a BOLT post-link pass (instrument → retrain → `-reorder-blocks=ext-tsp` layout optimization) → `target/pgo/bolt.node`. BOLT does not support Mach-O/PE, so this step is skipped on macOS and Windows.
|
|
228
226
|
|
|
229
227
|
`npm run bench:pgo` (or with `--quick`) then benchmarks baseline vs PGO(+BOLT) on the same dist-shaped fixtures as `npm run bench`, with interleaved iterations and median timings:
|
|
230
228
|
|
|
231
|
-
| scenario
|
|
232
|
-
|
|
233
|
-
| baseline
|
|
229
|
+
| scenario | what it measures |
|
|
230
|
+
|----------------|------------------------------------------------------------|
|
|
231
|
+
| baseline | plain `--release` (fat LTO, `codegen-units = 1`) |
|
|
234
232
|
| pgo / pgo+bolt | same flags plus `-Cprofile-use` (and BOLT layout on Linux) |
|
|
235
233
|
|
|
236
|
-
Expect modest gains: the baseline already ships fat LTO with `codegen-units = 1`, so PGO adds a few percent on the compression-heavy scenarios (~1.1x on the
|
|
234
|
+
Expect modest gains: the baseline already ships fat LTO with `codegen-units = 1`, so PGO adds a few percent on the compression-heavy scenarios (~1.1x on the brotli quality 11 run on an M1 Pro) and is within noise on sub-second ones. Sub-second scenario deltas in the table are measurement noise, not regressions.
|
|
237
235
|
|
|
238
236
|
The release workflow builds every published binary with PGO. Cross-compiled targets run the training workload through an emulation layer — x64 Node under Rosetta 2 for `x86_64-apple-darwin`, an arm64 Node container under QEMU for `aarch64-unknown-linux-gnu`, and an Alpine container for musl — so each target trains on its own instrumented binding.
|
|
239
237
|
|
|
@@ -241,16 +239,16 @@ The release workflow builds every published binary with PGO. Cross-compiled targ
|
|
|
241
239
|
|
|
242
240
|
Prebuilt binaries are published for:
|
|
243
241
|
|
|
244
|
-
| platform
|
|
245
|
-
|
|
246
|
-
| macOS arm64
|
|
247
|
-
| macOS x64
|
|
248
|
-
| Linux x64 (glibc)
|
|
242
|
+
| platform | triple |
|
|
243
|
+
|---------------------|-----------------------------|
|
|
244
|
+
| macOS arm64 | `aarch64-apple-darwin` |
|
|
245
|
+
| macOS x64 | `x86_64-apple-darwin` |
|
|
246
|
+
| Linux x64 (glibc) | `x86_64-unknown-linux-gnu` |
|
|
249
247
|
| Linux arm64 (glibc) | `aarch64-unknown-linux-gnu` |
|
|
250
|
-
| Linux x64 (musl)
|
|
251
|
-
| Windows x64
|
|
248
|
+
| Linux x64 (musl) | `x86_64-unknown-linux-musl` |
|
|
249
|
+
| Windows x64 | `x86_64-pc-windows-msvc` |
|
|
252
250
|
|
|
253
|
-
Node.js >= 18.
|
|
251
|
+
Node.js >= 22.14.0 (since v2; v1.x supports Node.js >= 18).
|
|
254
252
|
|
|
255
253
|
### WebAssembly fallback
|
|
256
254
|
|
package/dist/index.d.cts
CHANGED
|
@@ -11,9 +11,10 @@ interface GzipOptions {
|
|
|
11
11
|
/**
|
|
12
12
|
* Brotli options. `quality`: 0-11, default 11. `windowBits`: 10-24, default 22.
|
|
13
13
|
* `sectionSize`: target bytes per worker thread when large inputs are split
|
|
14
|
-
* across the native brotli worker pool; inputs at least
|
|
15
|
-
* the multithreaded path. Default
|
|
16
|
-
* faster at a slight cost in compression
|
|
14
|
+
* across the native brotli worker pool; inputs at least four times this size
|
|
15
|
+
* take the multithreaded path. Default 4 MiB (multithreading from 16 MiB).
|
|
16
|
+
* Smaller sections finish large files faster at a slight cost in compression
|
|
17
|
+
* ratio.
|
|
17
18
|
*/
|
|
18
19
|
interface BrotliOptions {
|
|
19
20
|
quality?: number;
|
package/dist/index.d.mts
CHANGED
|
@@ -11,9 +11,10 @@ interface GzipOptions {
|
|
|
11
11
|
/**
|
|
12
12
|
* Brotli options. `quality`: 0-11, default 11. `windowBits`: 10-24, default 22.
|
|
13
13
|
* `sectionSize`: target bytes per worker thread when large inputs are split
|
|
14
|
-
* across the native brotli worker pool; inputs at least
|
|
15
|
-
* the multithreaded path. Default
|
|
16
|
-
* faster at a slight cost in compression
|
|
14
|
+
* across the native brotli worker pool; inputs at least four times this size
|
|
15
|
+
* take the multithreaded path. Default 4 MiB (multithreading from 16 MiB).
|
|
16
|
+
* Smaller sections finish large files faster at a slight cost in compression
|
|
17
|
+
* ratio.
|
|
17
18
|
*/
|
|
18
19
|
interface BrotliOptions {
|
|
19
20
|
quality?: number;
|
package/index.d.ts
CHANGED
|
@@ -56,7 +56,8 @@ export interface CompressTask {
|
|
|
56
56
|
/**
|
|
57
57
|
* Brotli only: target section size in bytes per worker thread when
|
|
58
58
|
* large inputs are split across the brotli worker pool; inputs at
|
|
59
|
-
* least
|
|
59
|
+
* least four times this size take the multithreaded path
|
|
60
|
+
* (default 4 MiB, i.e. multithreading from 16 MiB).
|
|
60
61
|
*/
|
|
61
62
|
sectionSize?: number
|
|
62
63
|
}
|
package/index.js
CHANGED
|
@@ -77,8 +77,8 @@ function requireNative() {
|
|
|
77
77
|
try {
|
|
78
78
|
const binding = require('@medicomind/rolldown-compression-android-arm64')
|
|
79
79
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-android-arm64/package.json').version
|
|
80
|
-
if (bindingPackageVersion !== '
|
|
81
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
80
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
81
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
82
82
|
}
|
|
83
83
|
return binding
|
|
84
84
|
} catch (e) {
|
|
@@ -93,8 +93,8 @@ function requireNative() {
|
|
|
93
93
|
try {
|
|
94
94
|
const binding = require('@medicomind/rolldown-compression-android-arm-eabi')
|
|
95
95
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-android-arm-eabi/package.json').version
|
|
96
|
-
if (bindingPackageVersion !== '
|
|
97
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
96
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
97
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
98
98
|
}
|
|
99
99
|
return binding
|
|
100
100
|
} catch (e) {
|
|
@@ -114,8 +114,8 @@ function requireNative() {
|
|
|
114
114
|
try {
|
|
115
115
|
const binding = require('@medicomind/rolldown-compression-win32-x64-gnu')
|
|
116
116
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-win32-x64-gnu/package.json').version
|
|
117
|
-
if (bindingPackageVersion !== '
|
|
118
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
117
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
118
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
119
119
|
}
|
|
120
120
|
return binding
|
|
121
121
|
} catch (e) {
|
|
@@ -130,8 +130,8 @@ function requireNative() {
|
|
|
130
130
|
try {
|
|
131
131
|
const binding = require('@medicomind/rolldown-compression-win32-x64-msvc')
|
|
132
132
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-win32-x64-msvc/package.json').version
|
|
133
|
-
if (bindingPackageVersion !== '
|
|
134
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
133
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
134
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
135
135
|
}
|
|
136
136
|
return binding
|
|
137
137
|
} catch (e) {
|
|
@@ -147,8 +147,8 @@ function requireNative() {
|
|
|
147
147
|
try {
|
|
148
148
|
const binding = require('@medicomind/rolldown-compression-win32-ia32-msvc')
|
|
149
149
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-win32-ia32-msvc/package.json').version
|
|
150
|
-
if (bindingPackageVersion !== '
|
|
151
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
150
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
151
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
152
152
|
}
|
|
153
153
|
return binding
|
|
154
154
|
} catch (e) {
|
|
@@ -163,8 +163,8 @@ function requireNative() {
|
|
|
163
163
|
try {
|
|
164
164
|
const binding = require('@medicomind/rolldown-compression-win32-arm64-msvc')
|
|
165
165
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-win32-arm64-msvc/package.json').version
|
|
166
|
-
if (bindingPackageVersion !== '
|
|
167
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
166
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
167
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
168
168
|
}
|
|
169
169
|
return binding
|
|
170
170
|
} catch (e) {
|
|
@@ -182,8 +182,8 @@ function requireNative() {
|
|
|
182
182
|
try {
|
|
183
183
|
const binding = require('@medicomind/rolldown-compression-darwin-universal')
|
|
184
184
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-darwin-universal/package.json').version
|
|
185
|
-
if (bindingPackageVersion !== '
|
|
186
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
185
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
186
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
187
187
|
}
|
|
188
188
|
return binding
|
|
189
189
|
} catch (e) {
|
|
@@ -198,8 +198,8 @@ function requireNative() {
|
|
|
198
198
|
try {
|
|
199
199
|
const binding = require('@medicomind/rolldown-compression-darwin-x64')
|
|
200
200
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-darwin-x64/package.json').version
|
|
201
|
-
if (bindingPackageVersion !== '
|
|
202
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
201
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
202
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
203
203
|
}
|
|
204
204
|
return binding
|
|
205
205
|
} catch (e) {
|
|
@@ -214,8 +214,8 @@ function requireNative() {
|
|
|
214
214
|
try {
|
|
215
215
|
const binding = require('@medicomind/rolldown-compression-darwin-arm64')
|
|
216
216
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-darwin-arm64/package.json').version
|
|
217
|
-
if (bindingPackageVersion !== '
|
|
218
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
217
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
218
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
219
219
|
}
|
|
220
220
|
return binding
|
|
221
221
|
} catch (e) {
|
|
@@ -234,8 +234,8 @@ function requireNative() {
|
|
|
234
234
|
try {
|
|
235
235
|
const binding = require('@medicomind/rolldown-compression-freebsd-x64')
|
|
236
236
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-freebsd-x64/package.json').version
|
|
237
|
-
if (bindingPackageVersion !== '
|
|
238
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
237
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
238
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
239
239
|
}
|
|
240
240
|
return binding
|
|
241
241
|
} catch (e) {
|
|
@@ -250,8 +250,8 @@ function requireNative() {
|
|
|
250
250
|
try {
|
|
251
251
|
const binding = require('@medicomind/rolldown-compression-freebsd-arm64')
|
|
252
252
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-freebsd-arm64/package.json').version
|
|
253
|
-
if (bindingPackageVersion !== '
|
|
254
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
253
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
254
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
255
255
|
}
|
|
256
256
|
return binding
|
|
257
257
|
} catch (e) {
|
|
@@ -271,8 +271,8 @@ function requireNative() {
|
|
|
271
271
|
try {
|
|
272
272
|
const binding = require('@medicomind/rolldown-compression-linux-x64-musl')
|
|
273
273
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-x64-musl/package.json').version
|
|
274
|
-
if (bindingPackageVersion !== '
|
|
275
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
274
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
275
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
276
276
|
}
|
|
277
277
|
return binding
|
|
278
278
|
} catch (e) {
|
|
@@ -287,8 +287,8 @@ function requireNative() {
|
|
|
287
287
|
try {
|
|
288
288
|
const binding = require('@medicomind/rolldown-compression-linux-x64-gnu')
|
|
289
289
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-x64-gnu/package.json').version
|
|
290
|
-
if (bindingPackageVersion !== '
|
|
291
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
290
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
291
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
292
292
|
}
|
|
293
293
|
return binding
|
|
294
294
|
} catch (e) {
|
|
@@ -305,8 +305,8 @@ function requireNative() {
|
|
|
305
305
|
try {
|
|
306
306
|
const binding = require('@medicomind/rolldown-compression-linux-arm64-musl')
|
|
307
307
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-arm64-musl/package.json').version
|
|
308
|
-
if (bindingPackageVersion !== '
|
|
309
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
308
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
309
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
310
310
|
}
|
|
311
311
|
return binding
|
|
312
312
|
} catch (e) {
|
|
@@ -321,8 +321,8 @@ function requireNative() {
|
|
|
321
321
|
try {
|
|
322
322
|
const binding = require('@medicomind/rolldown-compression-linux-arm64-gnu')
|
|
323
323
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-arm64-gnu/package.json').version
|
|
324
|
-
if (bindingPackageVersion !== '
|
|
325
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
324
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
325
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
326
326
|
}
|
|
327
327
|
return binding
|
|
328
328
|
} catch (e) {
|
|
@@ -339,8 +339,8 @@ function requireNative() {
|
|
|
339
339
|
try {
|
|
340
340
|
const binding = require('@medicomind/rolldown-compression-linux-arm-musleabihf')
|
|
341
341
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-arm-musleabihf/package.json').version
|
|
342
|
-
if (bindingPackageVersion !== '
|
|
343
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
342
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
343
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
344
344
|
}
|
|
345
345
|
return binding
|
|
346
346
|
} catch (e) {
|
|
@@ -355,8 +355,8 @@ function requireNative() {
|
|
|
355
355
|
try {
|
|
356
356
|
const binding = require('@medicomind/rolldown-compression-linux-arm-gnueabihf')
|
|
357
357
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-arm-gnueabihf/package.json').version
|
|
358
|
-
if (bindingPackageVersion !== '
|
|
359
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
358
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
359
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
360
360
|
}
|
|
361
361
|
return binding
|
|
362
362
|
} catch (e) {
|
|
@@ -373,8 +373,8 @@ function requireNative() {
|
|
|
373
373
|
try {
|
|
374
374
|
const binding = require('@medicomind/rolldown-compression-linux-loong64-musl')
|
|
375
375
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-loong64-musl/package.json').version
|
|
376
|
-
if (bindingPackageVersion !== '
|
|
377
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
376
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
377
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
378
378
|
}
|
|
379
379
|
return binding
|
|
380
380
|
} catch (e) {
|
|
@@ -389,8 +389,8 @@ function requireNative() {
|
|
|
389
389
|
try {
|
|
390
390
|
const binding = require('@medicomind/rolldown-compression-linux-loong64-gnu')
|
|
391
391
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-loong64-gnu/package.json').version
|
|
392
|
-
if (bindingPackageVersion !== '
|
|
393
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
392
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
393
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
394
394
|
}
|
|
395
395
|
return binding
|
|
396
396
|
} catch (e) {
|
|
@@ -407,8 +407,8 @@ function requireNative() {
|
|
|
407
407
|
try {
|
|
408
408
|
const binding = require('@medicomind/rolldown-compression-linux-riscv64-musl')
|
|
409
409
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-riscv64-musl/package.json').version
|
|
410
|
-
if (bindingPackageVersion !== '
|
|
411
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
410
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
411
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
412
412
|
}
|
|
413
413
|
return binding
|
|
414
414
|
} catch (e) {
|
|
@@ -423,8 +423,8 @@ function requireNative() {
|
|
|
423
423
|
try {
|
|
424
424
|
const binding = require('@medicomind/rolldown-compression-linux-riscv64-gnu')
|
|
425
425
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-riscv64-gnu/package.json').version
|
|
426
|
-
if (bindingPackageVersion !== '
|
|
427
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
426
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
427
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
428
428
|
}
|
|
429
429
|
return binding
|
|
430
430
|
} catch (e) {
|
|
@@ -440,8 +440,8 @@ function requireNative() {
|
|
|
440
440
|
try {
|
|
441
441
|
const binding = require('@medicomind/rolldown-compression-linux-ppc64-gnu')
|
|
442
442
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-ppc64-gnu/package.json').version
|
|
443
|
-
if (bindingPackageVersion !== '
|
|
444
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
443
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
444
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
445
445
|
}
|
|
446
446
|
return binding
|
|
447
447
|
} catch (e) {
|
|
@@ -456,8 +456,8 @@ function requireNative() {
|
|
|
456
456
|
try {
|
|
457
457
|
const binding = require('@medicomind/rolldown-compression-linux-s390x-gnu')
|
|
458
458
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-linux-s390x-gnu/package.json').version
|
|
459
|
-
if (bindingPackageVersion !== '
|
|
460
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
459
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
460
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
461
461
|
}
|
|
462
462
|
return binding
|
|
463
463
|
} catch (e) {
|
|
@@ -476,8 +476,8 @@ function requireNative() {
|
|
|
476
476
|
try {
|
|
477
477
|
const binding = require('@medicomind/rolldown-compression-openharmony-arm64')
|
|
478
478
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-openharmony-arm64/package.json').version
|
|
479
|
-
if (bindingPackageVersion !== '
|
|
480
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
479
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
480
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
481
481
|
}
|
|
482
482
|
return binding
|
|
483
483
|
} catch (e) {
|
|
@@ -492,8 +492,8 @@ function requireNative() {
|
|
|
492
492
|
try {
|
|
493
493
|
const binding = require('@medicomind/rolldown-compression-openharmony-x64')
|
|
494
494
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-openharmony-x64/package.json').version
|
|
495
|
-
if (bindingPackageVersion !== '
|
|
496
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
495
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
496
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
497
497
|
}
|
|
498
498
|
return binding
|
|
499
499
|
} catch (e) {
|
|
@@ -508,8 +508,8 @@ function requireNative() {
|
|
|
508
508
|
try {
|
|
509
509
|
const binding = require('@medicomind/rolldown-compression-openharmony-arm')
|
|
510
510
|
const bindingPackageVersion = require('@medicomind/rolldown-compression-openharmony-arm/package.json').version
|
|
511
|
-
if (bindingPackageVersion !== '
|
|
512
|
-
throw new Error(`Native binding package version mismatch, expected
|
|
511
|
+
if (bindingPackageVersion !== '2.0.1' && process.env.NAPI_RS_ENFORCE_VERSION_CHECK && process.env.NAPI_RS_ENFORCE_VERSION_CHECK !== '0') {
|
|
512
|
+
throw new Error(`Native binding package version mismatch, expected 2.0.1 but got ${bindingPackageVersion}. You can reinstall dependencies to fix this issue.`)
|
|
513
513
|
}
|
|
514
514
|
return binding
|
|
515
515
|
} catch (e) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@medicomind/rolldown-compression",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Fast native (Rust) gzip / brotli / zstd compression plugin for Rolldown, powered by napi-rs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"rolldown",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"CHANGELOG.md"
|
|
47
47
|
],
|
|
48
48
|
"engines": {
|
|
49
|
-
"node": ">=
|
|
49
|
+
"node": ">= 22.14.0"
|
|
50
50
|
},
|
|
51
51
|
"publishConfig": {
|
|
52
52
|
"access": "public",
|
|
@@ -91,13 +91,13 @@
|
|
|
91
91
|
"rolldown": "^1.0.0"
|
|
92
92
|
},
|
|
93
93
|
"optionalDependencies": {
|
|
94
|
-
"@medicomind/rolldown-compression-darwin-arm64": "1.
|
|
95
|
-
"@medicomind/rolldown-compression-darwin-x64": "1.
|
|
96
|
-
"@medicomind/rolldown-compression-linux-arm64-gnu": "1.
|
|
97
|
-
"@medicomind/rolldown-compression-linux-x64-gnu": "1.
|
|
98
|
-
"@medicomind/rolldown-compression-linux-x64-musl": "1.
|
|
99
|
-
"@medicomind/rolldown-compression-wasm32-wasi": "1.
|
|
100
|
-
"@medicomind/rolldown-compression-win32-x64-msvc": "1.
|
|
94
|
+
"@medicomind/rolldown-compression-darwin-arm64": "2.1.0",
|
|
95
|
+
"@medicomind/rolldown-compression-darwin-x64": "2.1.0",
|
|
96
|
+
"@medicomind/rolldown-compression-linux-arm64-gnu": "2.1.0",
|
|
97
|
+
"@medicomind/rolldown-compression-linux-x64-gnu": "2.1.0",
|
|
98
|
+
"@medicomind/rolldown-compression-linux-x64-musl": "2.1.0",
|
|
99
|
+
"@medicomind/rolldown-compression-wasm32-wasi": "2.1.0",
|
|
100
|
+
"@medicomind/rolldown-compression-win32-x64-msvc": "2.1.0"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
103
|
"@biomejs/biome": "^2.5.3",
|