* feat: return import status in import_batch method
* feat(wasm): add importUpdateBatch returned status support
* chore: add changeset update
* chore: update ffi return type
Fix the dead loop issue here: https://gist.github.com/sunflowerdeath/c0e2b46b6f5d2e32d368f8e04f730237
# Reason for the Dead Loop in `find_common_ancestor`
### Original Assumptions
1. **Dependency Assumption**
If a DagNode is depended upon by other nodes, the direction of this dependency will only point to before the end of the node. This assumption is used in system design.
2. **Node Overlap Assumption**
DagNodes do not overlap with each other. When retrieving DagNodes from two different positions:
- They are either completely identical
- Or they do not overlap at all
- If there is overlap, it means they are the same node
### Current Issues
1. **Issues Caused by Lazy Loading**
Due to the use of lazy loading, new situations have arisen. Initially:
- A certain DagNode is not depended upon by other DagNodes
- Therefore, the initially retrieved form is complete
2. **Impact of Subsequent Loading**
After loading additional DagNodes:
- The newly loaded DagNode may depend on the internal position of the previously complete DagNode
- This causes the originally complete DagNode to be split into multiple smaller DagNodes
3. **Violation of Original Assumptions**
In this case, when retrieving the content of the original DagNode again:
- Other DagNode dependencies may appear in the middle
- There may be overlaps on the DagNode
- This violates the original design assumptions
# Fix Approach
Remove the assumption in the original implementation that "overlapping DagNodes will not occur." When overlapping DagNodes are found, retain the shorter one and remove the longer one.
* fix: tree should use jitter 0 by default
Otherwise, there may be inconsistency between the event and the actual data. But this will increase the cost when the index property is not used.
* chore: add changeset
* chore: fix warning
* refactor: enable tree move by default
* docs: update related docs
* feat: Add isDeleted() method to containers
- Add isDeleted() method to all container types (Text, Map, List, Tree, etc.)
- Fix deletion tracking for containers in tree operations
- Add tests to verify deletion state across different scenarios
* chore: fix redundant field names
---------
Co-authored-by: Leon Zhao <leeeon233@gmail.com>
* perf: use simplified internal string
* fix: make internal string trait impl more stringish
* perf: reduce InternalString memory cost from 16 bytes to 8 bytes
on 64bit platform
* chore: fix warning
* perf: optimize drop
* test: add init large map example
* feat: allow users to query the changed containers in the target id range
* chore: add changeset note
* chore: update cargo toml
* test: add related tests and add a commit before get_changed_container_in
* Introducing Loro Guru on Gurubase.io
Signed-off-by: Kursat Aktas <kursat.ce@gmail.com>
* fix guru badge style
---------
Signed-off-by: Kursat Aktas <kursat.ce@gmail.com>
* perf: use a priority-queue-based search for updating text
It tends to produce diffs with more continuous edits,
which is more efficient when we need to apply them to CRDTs
* fix: use better text diff calc
* refactor: add text update options struct
* chore: update text.update comments
* chore: fix warnings
* fix: rm a dumb optimization
* feat: make vitest tests pass
* chore: update readme & add deno test for web bundle
* chore: bump version to 1.0.8-alpha.0
* chore: bump loro-crdt version
* fix: build script
export init method from loro-wasm/web
* chore: bump version
* chore: specify which files to include for npm publish
* refactor: rename loro-js to loro-js-test
* refactor: remove the old loro-js folder
* fix: build scripts
* chore: 1.0.8-alpha.3
* chore: add release info