@componentor/fs 3.0.47 → 3.0.49
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/dist/index.js +32 -16
- package/dist/index.js.map +1 -1
- package/dist/workers/repair.worker.js +32 -9
- package/dist/workers/repair.worker.js.map +1 -1
- package/dist/workers/server.worker.js +32 -9
- package/dist/workers/server.worker.js.map +1 -1
- package/dist/workers/sync-relay.worker.js +32 -9
- package/dist/workers/sync-relay.worker.js.map +1 -1
- package/package.json +1 -1
- package/readme.md +14 -0
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -604,6 +604,20 @@ Make sure `opfsSync` is enabled (it's `true` by default). Files are mirrored to
|
|
|
604
604
|
|
|
605
605
|
See [CHANGELOG.md](./CHANGELOG.md) for the full version history.
|
|
606
606
|
|
|
607
|
+
### v3.0.49 (2026)
|
|
608
|
+
|
|
609
|
+
**Fixes:**
|
|
610
|
+
- `rename` over a non-empty directory no longer leaves stale descendants. Previously the target's children survived in `pathIndex` while their inodes were never freed; source descendants were laid on top, leaking inodes and leaving zombies reachable via `read`. Surfaced as corrupt `.vite/deps` after Vite's `deps_temp_<hash>` → `deps` swap (stale chunks for `vue.js`, `@unhead/vue`, etc., or 404s)
|
|
611
|
+
- `rename(x, x)` no longer destroys the file (it used to free its own blocks and mark its inode FREE before re-pointing the index)
|
|
612
|
+
- Same descendant-cleanup logic now applies when the rename target is an *implicit* directory (path with no inode of its own but with descendants in `pathIndex` — the state produced by bulk OPFS import)
|
|
613
|
+
- `write`, `symlink`, `link`, and `copy` (with `COPYFILE_EXCL`) now reject implicit-directory targets (EISDIR for `write`, EEXIST for the others). Previously these silently clobbered the implicit dir, e.g. registering a regular `FILE` inode at a path whose children still existed in `pathIndex` — breaking every subsequent read of that path and its subtree
|
|
614
|
+
- Add 5 regression tests in `implicit-dir-targets.test.ts` covering each fixed call site
|
|
615
|
+
|
|
616
|
+
### v3.0.48 (2026)
|
|
617
|
+
|
|
618
|
+
**Fixes:**
|
|
619
|
+
- Close the residual race left in the 3.0.47 broker-heartbeat fix: stop calling `close()` on the prior control port. The disentangle signal travels on a separate IPC pipe from the SW main channel with no ordering guarantee against `register-server`, so a `transfer-port` already queued in the SW inbox could still be dispatched against a detached `serverPort` and silently dropped. Letting the old port live until both endpoints become unreferenced (and GC-collected) keeps it routable through the swap and removes the window entirely
|
|
620
|
+
|
|
607
621
|
### v3.0.47 (2026)
|
|
608
622
|
|
|
609
623
|
**Fixes:**
|