loro-crdt 1.13.6 → 1.13.8

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 CHANGED
@@ -1,5 +1,43 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.13.8
4
+
5
+ ### Patch Changes
6
+
7
+ - ac1feb6: Reduce peak memory across large snapshot import, `toJSON`, update import, and
8
+ snapshot export by preserving lazy state, bounding the decompressed SSTable
9
+ block cache by bytes, and preallocating the snapshot output exactly. Snapshot
10
+ import now validates every embedded SSTable block checksum before accepting
11
+ external bytes.
12
+
13
+ Full snapshot export no longer walks the alive-container graph: store entries
14
+ for referenced containers are created when the creating op or imported diff is
15
+ applied, so a cold export after a large import is a flush plus KV export
16
+ instead of re-reading every container from compressed blocks. As part of this,
17
+ full export round-trips imported state bytes faithfully (inconsistent
18
+ alive-container parent metadata is now rejected by shallow export, which still
19
+ walks, rather than by full export), and an ensured-but-empty mergeable child is
20
+ no longer materialized into the KV store by a full export — importers resolve
21
+ it from its parent map marker. First `toJSON` after import also avoids decoding
22
+ each lazy container twice.
23
+
24
+ ## 1.13.7
25
+
26
+ ### Patch Changes
27
+
28
+ - 3986805: Speed up snapshot import. When decoding a Loro snapshot, the redundant per-block SSTable validation (eager block-metadata decode and per-block checksums) is now skipped, because the whole snapshot body is already protected by the document-level checksum verified during decoding. This removes a second hash pass over the data (roughly halving B4 snapshot import time) while preserving integrity guarantees.
29
+
30
+ This fast path is internal to Loro's snapshot decoding. The public `MemKvStore::import_all` still verifies every block's checksum; a separate `import_all_unchecked` opts into the unchecked path and is only used where an outer checksum already guarantees integrity.
31
+
32
+ - 9b6330d: Speed up local text editing (~35% faster on the B4 editing trace). Three hot-path
33
+ changes: the lock-order debug instrumentation is now compiled out of release
34
+ builds (it ran on every per-op lock acquisition); the visible-op count is bumped
35
+ incrementally for local ops instead of recomputing it from the version vectors
36
+ (which also allocated) on every op; and a couple of per-op allocations on the
37
+ text insert/delete path were removed (lazy error-context formatting and inline
38
+ storage for entity ranges).
39
+ - c37e76a: Fix a checkout hang after snapshot import. Change-store blocks decoded from a snapshot recorded a wrong end lamport (`lamport_range.1` was set to the start lamport of the block's last change instead of its end). When a change was split across multiple blocks and a lamport-based lookup engaged the binary search path in `ChangeStore::get_change_by_lamport_lte` — e.g. the movable-list diff calculator resolving historical positions during `checkout` — the degenerate range made the search loop forever. The binary search now also caps its steps and falls back to a scan if it ever fails to converge; the fallback considers both unflushed in-memory blocks and the underlying kv store, so lamport lookups (e.g. `getChangeAtLamport`) stay correct for local changes that have not been flushed yet.
40
+
3
41
  ## 1.13.6
4
42
 
5
43
  ### Patch Changes