Commit graph

1516 commits

Author SHA1 Message Date
github-actions[bot]
b30bb18f77 chore: version packages 2024-06-21 12:11:28 +08:00
Zixuan Chen
439e4e9829
Add packages' repo and basic doc (#390)
* docs: update the pkg desc

* chore: changeset
2024-06-21 12:08:13 +08:00
Leon Zhao
fb028f861d
fix: export CommitOptions & JsonSchema (#389) 2024-06-20 16:52:36 +08:00
Zixuan Chen
3848db5a9e
fix: warnings 2024-06-20 16:30:03 +08:00
Zixuan Chen
6cb5aad4c7
chore: fuzz 2024-06-20 16:21:57 +08:00
Zixuan Chen
a276010128
feat: replace states with container store 2024-06-20 13:17:32 +08:00
Zixuan Chen
fcdbaed172
fix: warnings 2024-06-18 19:38:10 +08:00
Zixuan Chen
9c050b8b0b
refactor: fix name err & add counter state fast snapshot 2024-06-18 18:17:46 +08:00
Zixuan Chen
d6c8a632ad
Merge branch 'main' into zxch3n/container-store 2024-06-18 18:09:14 +08:00
Zixuan Chen
572635dad2
feat: tree state 2024-06-18 14:36:14 +08:00
Zixuan Chen
a290f29bb5
bk: tree impl (untested) 2024-06-14 18:37:51 +08:00
Zixuan Chen
3729deb12d
feat: richtext snapshot 2024-06-14 12:32:08 +08:00
Zixuan Chen
e857227330
feat: movable list snapshot 2024-06-13 22:49:43 +08:00
Zixuan Chen
0d3709b79e
feat: map snapshot 2024-06-13 17:50:29 +08:00
Zixuan Chen
01427947f7
feat: list fast snapshot 2024-06-13 16:16:52 +08:00
github-actions[bot]
2940029b63
chore: version packages (#386)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-06-13 15:31:53 +08:00
Leon Zhao
0b3c6ba1d0
fix: merge 2024-06-13 15:11:29 +08:00
Zixuan Chen
4dd609ca51
fix: cids encode/decode 2024-06-13 14:48:10 +08:00
Leon Zhao
afac34755f
feat: implementing Counter and expose to js side (#384) 2024-06-13 14:43:19 +08:00
Zixuan Chen
e54da5d838
bk: container store encode/decode 2024-06-13 12:13:30 +08:00
Zixuan Chen
d71fee144d
bk: container store impl 2024-06-12 11:43:02 +08:00
Leon Zhao
a941cddfb7
feat: export any range version with json schema (#383) 2024-06-11 20:08:03 +08:00
Leon Zhao
881167b18e
fix: tree state get FI by index error (#382) 2024-06-11 15:19:12 +08:00
Zixuan Chen
9be969dd38
chore: release 2024-06-07 14:14:26 +08:00
Leon Zhao
2df2a52b05
feat: Stable JSON representation for history (#368)
---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2024-06-07 13:18:30 +08:00
Zixuan Chen
d2973df859
refactor: rm unused code (#380) 2024-06-07 10:17:23 +08:00
github-actions[bot]
f86421ee75
chore: version packages (#379)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-06-06 16:59:07 +08:00
Zixuan Chen
dc55055b6f
Perf cache WASM text toDelta result (#378)
* refactor: make cursor transformation in undo/redo better

* chore: add release info

* perf: cache to_delta value in wasm

* chore: release msg
2024-06-06 16:54:52 +08:00
Zixuan Chen
6d47015f6e
Refactor undo cursor (#377)
* refactor: make cursor transformation in undo/redo better

* chore: add release info
2024-06-06 16:49:36 +08:00
Zixuan Chen
2fc20e94aa
refactor: rm oplog.changes 2024-06-04 23:44:29 +08:00
Zixuan Chen
3a842a90ee
refactor: rm more usage of changes 2024-06-04 23:08:38 +08:00
Zixuan Chen
2ff4a88a49
refactor: replace merge change iter with change_store 2024-06-04 21:53:30 +08:00
Zixuan Chen
ad9c3a79bd
Merge branch 'main' into zxch3n/loro-649 2024-06-04 20:59:36 +08:00
Zixuan Chen
7e09e858fe
refactor: use change store to iter ops and find by idlp 2024-06-04 19:11:44 +08:00
Zixuan Chen
6dcf801dd3
feat: add necessary query entry for change_store 2024-06-04 15:45:24 +08:00
Zixuan Chen
1f3290ef80
refactor: rm has_dependents field in change
It's not longer required
2024-06-04 15:24:26 +08:00
Zixuan Chen
54637a7b42
Publish v0.16.2 to crates.io (#374)
* chore: mark dev-utils not published

* chore: release rust crates

* chore: publish fi

* chore: pre publish fi

* chore: update lockfile

* test: change fuzz rev
2024-05-29 22:55:55 +08:00
Leon Zhao
cd04b27d65
fix: fuzz cache and counter feature (#373)
* fix: fuzz cache and counter feature

* fix: rev
2024-05-29 22:44:21 +08:00
Zixuan Chen
338601308e
feat: add iter changes and get change to change_store 2024-05-29 19:01:45 +08:00
Zixuan Chen
8e0a4c6cc8
refactor: wrap block in Arc 2024-05-29 18:09:02 +08:00
Zixuan Chen
fd6e945d4b
fix: import change merge err 2024-05-28 22:09:15 +08:00
Zixuan Chen
c84ef7df99
test: setup baseline bench 2024-05-28 20:27:41 +08:00
Zixuan Chen
d5de22008e
feat: estimate change size 2024-05-28 16:46:42 +08:00
Zixuan Chen
3caacee82f
feat: decode ops in block 2024-05-28 14:44:37 +08:00
Zixuan Chen
b13b4bcf94
refactor: reuse more serde_columnar code 2024-05-27 19:02:01 +08:00
Zixuan Chen
0c81543b6e
chore: bk impl for block encode & decode 2024-05-27 11:52:23 +08:00
Leon Zhao
4a0c8b6ddd
fix: tree transform when a and b is equal (#371)
* test: add test
2024-05-25 08:32:56 +08:00
github-actions[bot]
7fc85b1b04
chore: version packages (#370)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-23 10:28:24 +08:00
Zixuan Chen
6700dad19b
feat: Add event listener and native support of cursor transformation for undo/redo (#369) 2024-05-23 10:19:08 +08:00
github-actions[bot]
c8bbb437ca
chore: version packages (#366)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-21 13:12:38 +08:00
Zixuan Chen
1a347cab72
feat: refine undo impl (#365)
* feat: refine undo impl

- Add "unfo" origin for undo and redo event
- Allow users to skip certain local operations
- Skip undo/redo ops that're not visible to users

* feat: add returned bool value to indicate whether undo/redo is executed
2024-05-21 13:08:43 +08:00
Zixuan Chen
c124efc531
chore: update .npmignore 2024-05-21 06:48:45 +08:00
github-actions[bot]
d01fd66e39
chore: version packages (#364)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-21 06:40:05 +08:00
Zixuan Chen
321e0e72a4
Undo (#361)
https://github.com/loro-dev/loro/pull/361

---------

Co-authored-by: Leon Zhao <leeeon233@gmail.com>
2024-05-21 06:14:49 +08:00
Leon Zhao
26753f0d4d
fix: better jitter for fractional index (#360)
* fix: better jitter
2024-05-16 15:26:49 +08:00
Leon Zhao
6e14e5b117
Feat: Make the encoding format forward and backward compatible (#329) 2024-05-13 21:37:10 +08:00
Gábor Szabó
d958767b13
add repository to Cargo.toml (#358) 2024-05-10 21:14:17 +08:00
Zixuan Chen
ea7d8b0669
fix: refine error message on corrupted data (#356)
* fix: refine error message on corrupted data

* fix: comment
2024-05-10 11:06:01 +08:00
github-actions[bot]
3f23a67bb4
chore: version packages (#355)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-09 16:31:21 +08:00
Zixuan Chen
a9484b48a2
Fix potential movable list bug (#354)
* fix: upgrade wasm-bindgen to fix str free err

* chore: fix ci

* fix: potential bug in movable list op group
2024-05-09 15:46:19 +08:00
Zixuan Chen
0660b1a1be
fix: upgrade wasm-bindgen to fix str free err (#353)
* fix: upgrade wasm-bindgen to fix str free err

* chore: fix ci
2024-05-09 15:22:34 +08:00
Leon Zhao
51a673822e
fix: tree fuzz sort value (#351) 2024-05-07 19:39:38 +08:00
Leon Zhao
fffd49b5fa
Use fractional index to order the children of the tree (#298)
* feat: fractional index

---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2024-05-07 14:01:13 +08:00
Zixuan Chen
4021ad820c
chore: loro-rs v0.5.1 2024-05-06 13:37:55 +08:00
Gábor Szabó
93726186c5
add repository field (#350) 2024-05-06 07:43:46 +08:00
github-actions[bot]
da8a0f63e5 chore: version packages 2024-05-04 11:41:30 +08:00
Zixuan Chen
dd8c7f7392
perf: delete span merge err (#348)
* perf: delete span merge err

* fix: slicing of DeleteSpanWIthId

* fix: sliceable err
2024-05-04 11:32:49 +08:00
Zixuan Chen
456ff12503
chore: warn missing debug impl (#347) 2024-05-04 11:32:31 +08:00
Zixuan Chen
659c9c54ea
fix(wasm): movable list .kind() (#342) 2024-05-04 11:32:18 +08:00
github-actions[bot]
307df25691
chore: version packages (#346)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-05-02 16:54:47 +08:00
Zixuan Chen
c2da94a557
fix: upgrade generic-btree to allow large btree (#344) 2024-05-02 16:45:33 +08:00
Leon Zhao
cd8b9a31e7
fix: missing MovableList in all container type (#343) 2024-05-02 11:28:28 +08:00
Zixuan Chen
8bf180827f
fix: get cursor err on text and movable list (#337) 2024-04-29 21:42:50 +08:00
Zixuan Chen
ce178df1e8
docs: minor fix on set_change_merge_interval api (#341) 2024-04-29 21:42:37 +08:00
Zixuan Chen
2918d01906
fix: refine ts type; reject invalid operations (#334) 2024-04-29 21:42:08 +08:00
Zixuan Chen
ca5f762646
fix: impl a few unimplemented! for movable tree (#335) 2024-04-29 21:40:57 +08:00
Zixuan Chen
e5dfded0f3
chore: skip the checking if not debug_assertions (#340) 2024-04-29 21:40:05 +08:00
Zixuan Chen
996ce70e45
docs: add warn(missing_docs) to loro and loro-wasm (#339) 2024-04-29 19:35:21 +08:00
Zixuan Chen
f869b959f3
chore: specify loro-delta version in loro 2024-04-29 18:16:00 +08:00
Zixuan Chen
5660bcc4a5
chore: bump loro-rs to v0.5.0 2024-04-29 18:09:07 +08:00
Leon Zhao
6224974124
chore: rename js toJSON (#338) 2024-04-29 16:23:00 +08:00
Leon Zhao
a1ec948c32
fix: fuzz tree delete nested (#336) 2024-04-28 17:06:47 +08:00
github-actions[bot]
41d198d9e4
chore: version packages (#333)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-26 12:29:22 +08:00
Zixuan Chen
31a8569840
Movable List (#293)
* bk: add move op content

* bk: add inner_movable_list diff and related stuff

* perf: high perf state

* fix: update old list item cache

* fix: should use id in del

* feat: two kinds of len for movable list state

* bk: add op index to movable list

* bk: make basic handler test pass

* refactor: add move_from to list event

* fix: make all existing tests pass

* bk: list move event hint into event

* bk: convert inner event into user event

Co-authored-by: Leon <leeeon233@gmail.com>

* fix: convert issue when inserting new value

* feat: add op group for movable list

* feat: diff calc

* feat: add mov support to tracker

* fix: when applying diff, state should be force update

* feat: encoded op

* feat: snapshot encode

* fix: pass basic sync

* fix: snapshot encode/decode

* fix: warnings

* feat: expose mov list to loro crate

* test: fuzz movable list

* test: fix fuzz integration

* fix: movable list basic move sync

* fix: movable list events

* fix: movable event err

* fix: register child container on movable list

* fix: should not return child index if the value is already overwritten

* fix: local event err in movable list

* fix: get elem at pos

* refactor: extract mut op that could break invariants

* fix: event err

* fix: child container to elem err

* fix: bringback event issue

* fix: event err

* fix: event emit

* fix: id to cursor iter issue

* chore: fix a few warnings

* fix: warnings

* fix: fix move in tracker

* test: add consistency check

* test: fix tracker

* refactor: simplify event conversion in docstate

* refactor: refine move event

* refactor: simplify the maintain of parent child links

* fix: revive err

* fix: warnings

* fix: it's possible that pos change but cannot find the respective list item

* fix: elem may be dropped after snapshot

* fix: warnings

* fix: richtext time travel issue

* fix: move op used wrong delete id on tracker

* fix: handle events created by concurrent moves correctly

* fix: event hint error, used op index for list event

* fix: move_from flag err

* fix: id to cursor get err

* test: add mov fuzz target

* fix: the pos of inserting new container

* fix: used wrong event hint index

* fix: del event hint

* fix: warnings

* fix: internal diff to event err

* fix: event's move flag error
This "move" flag does not actually mean that the insertion
is caused by the move op.
就算是 move 造成的它不一定就能是 true
它得是下游真的能在“前一个版本的 array 里找到“,才能是 true

* fix: remove redundant elements from the movable list

The Movable List is currently flawed; an element may not exist on the movable list state, yet there are operations that revive its corresponding list item. In such cases, the diff calculation does not send back the corresponding element state (this occurs when tracing back, which fuzz testing currently does not cover. It might only be exposed by randomly switching to a version and then checking for consistency; otherwise, as long as all elements are in memory, this problem does not arise).

Moreover, there is no need to store elements in the state that do not have a corresponding list item. They will be deleted during the Snapshot, and relying on "them still being in the state" is incorrect behavior. Such adjustments also eliminate the need to maintain the `pending_elements` field.

By allowing the opgroup to record the mapping from pos id to state id, we can ensure that the events sent to the movable list state will include the corresponding state.

Movable List 现在是有错的,elem 可能不存在 movable list state 上,但是又有操作把它对应的 list item 复活了,此时 diff calc 不会把对应 element 状态发送回来(往前回溯的时候会出现,fuzz 现在没覆盖到。得有随意切换一个版本然后 check consistency 才可能会暴露;否则现在大家 elements 都在内存,就没这个问题)

而且我们没有必要在状态中存储没有对应 list item 的 element。在 Snapshot 的时候它们都会被删掉,如果依赖了“它们还会在 state 内”就是错误的行为。这样的调整也让我们不需要去维护 pending_elements 这个 field 了

通过让 opgroup 记录了 pos id → state id 的映射,可以保证发给 movable list state 的事件中会带上对应的 state

* test: make fuzzer stricter

* test: test expectation error

* refactor: rename stable pos to cursor

* tests: chore list bench init

* test: add bench

* bench: add mov & set bench

* feat(wasm): movable list js api

* fix: make movablelist able to attach even if it's already attached & refine the type of subscribe

* fix: remove the loro doc param in .unsub

* refactor: refine ts types and export setContainer api

* chore: fix warnings

* chore: rm debug logs

* perf: reduce mem usage of opgroup

* bench: add list criterion bench

---------

Co-authored-by: Leon <leeeon233@gmail.com>
2024-04-26 12:08:53 +08:00
github-actions[bot]
1b59909490
chore: version packages (#332)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-24 19:29:58 +08:00
Leon Zhao
684d121702
fix: insert attach container (#331)
* fix: insert attached container

* test: insert attached container

* test: add more assert for insert container
2024-04-24 16:50:05 +08:00
Zixuan Chen
9d4f7aa8a3
DeltaRope (#327)
* feat: delta rope support init

* perf: use generic-btree v0.9.0

* refactor: improve readability and maintainability

* fix: fix several issues about composing

* fix: a few more issue about composing deletions

* test: rich text

* fix: cover more edge cases

* refactor: use deltarope for list event

* refactor: replace text delta with DeltaRope

* fix: list fuzz err

* fix: safety issue on insert_many

* chore: refine impl of text delta

* refactor: use Replace instead of insert+del in DeltaItem (#330)

* refactor: use Replace instead of insert+del in DeltaItem

* fix: each deltaitem should have non-zero rle_len
Updated generic-btree dependency to version 0.10.3 and refactored DeltaItem and DeltaRope implementations in loro-delta. Refine compose impl

* fix: update generic-btree to fix the update leaf issue

* chore: lockfile

* chore: clippy fix

* refactor: make composing easier to understand

* refactor: simplify the impl of composing
2024-04-24 13:53:26 +08:00
Zixuan Chen
f99bfd8e21
Refactor rm unused code (#328)
* chore: init

* fix: fuzz config

* refactor: rm unused code
2024-04-22 21:20:00 +08:00
github-actions[bot]
4700ead1c1
chore: version packages (#326)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-18 19:56:47 +08:00
Zixuan Chen
a32b75ad3b
fix(js): allow convert from undefined to LoroValue (#323) 2024-04-18 09:47:00 +08:00
Zixuan Chen
2fc44206fb
Fix rich text cursor pos (#324)
* test: add text cursor test

* fix: should return event index
2024-04-18 09:46:50 +08:00
github-actions[bot]
e8352ad38d
chore: version packages (#321)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-17 15:15:17 +08:00
Zixuan Chen
01b45598d8
refactor: parse uint8array to binary (#320)
and refine Awareness type in ts
2024-04-17 15:09:03 +08:00
github-actions[bot]
d51c566326
chore: version packages (#319)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-04-14 22:15:07 +08:00
Zixuan Chen
8f8d0989ca
ci: fix release-wasm 2024-04-14 22:04:59 +08:00
Zixuan Chen
37311a52c8
feat: awareness (#318)
* feat: awareness

* refactor: new api wrapper for js & fix consistency

* chore: rm redundant file

* refactor: expose it to the rust crate
2024-04-14 20:44:20 +08:00
Zixuan Chen
8752c229f9
chore(js): bump version 2024-04-10 12:30:21 +08:00
Zixuan Chen
1918cd7ac3
refactor: rename stable pos to cursor (#317) 2024-04-10 12:26:12 +08:00
Zixuan Chen
454b4088a6
chore(rs): bump versions of rust crates 2024-04-09 16:23:48 +08:00
Zixuan Chen
095e93b327
chore(wasm): bump version 2024-04-09 16:10:28 +08:00
Zixuan Chen
aca14fda10
fix(ts): types 2024-04-09 16:05:30 +08:00
Zixuan Chen
81ae2abacc
Cursors (#290)
This PR introduces support for retrieving and querying cursors.

## Motivation

Using "index" to denote cursor positions can be unstable, as positions may shift with document edits. To reliably represent a position or range within a document, it is more effective to leverage the unique ID of each item/character in a List CRDT or Text CRDT.

## Updating Cursors

Loro optimizes State metadata by not storing the IDs of deleted elements. This approach, while efficient, complicates tracking cursor positions since they rely on these IDs for precise locations within the document. The solution recalculates position by replaying relevant history to update stable positions accurately. To minimize the performance impact of history replay, the system updates cursor info to reference only the IDs of currently present elements, thereby reducing the need for replay.

Each position has a "Side" information, indicating the actual cursor position is on the left, right, or directly in the center of the target ID.

Note: In JavaScript, the offset returned when querying a Stable Position is based on the UTF-16 index.

# Example

```ts
const loro = new Loro();
const list = loro.getList("list");
list.insert(0, "a");
const pos0 = list.getStablePos(0);
list.insert(1, "b");
{
  const ans = loro.queryStablePos(pos0!);
  expect(ans.offset).toEqual(0);
  expect(ans.side).toEqual(0);
  expect(ans.update).toBeUndefined();
}
list.insert(0, "c");
{
  const ans = loro.queryStablePos(pos0!);
  expect(ans.offset).toEqual(1);
  expect(ans.side).toEqual(0);
  expect(ans.update).toBeUndefined();
}
list.delete(1, 1);
{
  const ans = loro.queryStablePos(pos0!);
  expect(ans.offset).toEqual(1);
  expect(ans.side).toEqual(-1);
  expect(ans.update).toBeDefined();
}
```
2024-04-09 16:01:37 +08:00
Zixuan Chen
205fa94653
chore: bump loro-crdt 2024-04-05 02:25:25 +08:00
Zixuan Chen
9365cc049c
refactor(ts): make method types better (#315)
* refactor(ts): make method types better

* docs: add missing docs omitted by skip_typescript
2024-04-05 01:43:36 +08:00
Zixuan Chen
a215d88c03
refactor: add concrete type for each different container (#313) 2024-04-03 19:24:48 +08:00
Zixuan Chen
7561448323
refactor: replace "local" and "fromCheckout" in event with "triggeredBy" (#312)
* refactor: replace "local" and "fromCheckout" in event with "triggeredBy"

* refactor: simplify the name to `by`
2024-04-03 17:56:01 +08:00
Zixuan Chen
756d7a9404
fix: type error caused by merging 2024-04-01 17:42:02 +08:00
Leon Zhao
51890ff8d8
fix: decode iter return result by updating columnar to 0.3.4 (#309) 2024-04-01 17:29:07 +08:00
Zixuan Chen
3da28459b0
feat: decode import blob meta (#307)
* feat: decode import blob meta

* chore: rm logs
2024-04-01 17:25:43 +08:00
Zixuan Chen
3c124f454b
feat: access value/container by path (#308)
* feat: access elem by path

* fix: parse tree node index by str

* fix: reuse treeid try_from

* chore: rename methods on lib.rs

---------

Co-authored-by: Leon Zhao <leeeon233@gmail.com>
2024-04-01 17:25:12 +08:00
Zixuan Chen
c788ff1727
docs: clarify that peer id should be convertable to a u64 (#306)
#305
2024-04-01 10:06:13 +08:00
Zixuan Chen
25b0f8096e
docs: refine wasm docs (#304) 2024-04-01 09:03:32 +08:00
Zixuan Chen
1015ee33a7
chore: bump loro-crdt 2024-03-31 02:12:06 +08:00
Zixuan Chen
c3d5e92407
refactor: rm isAttached type on containers (#303) 2024-03-31 02:06:57 +08:00
Zixuan Chen
a8c059d96b
fix: type mismatch and add type info for whether a container is attached (#302) 2024-03-31 01:12:08 +08:00
Zixuan Chen
3fe9cc1969
fix: avoid bundler change the classname (#301) 2024-03-31 01:11:55 +08:00
Zixuan Chen
422e442012
chore: bump loro-crdt to 0.13.0 2024-03-30 11:44:18 +08:00
Zixuan Chen
9ecc0a90b1
refactor!: Add prelim support, making creating sub container easier (#300)
This PR includes a BREAKING CHANGE.

It enables you to create containers before attaching them to the document, making the API more intuitive and straightforward.

A container can be either attached to a document or detached. When it's detached, its history/state does not persist. You can attach a container to a document by inserting it into an attached container. Once a container is attached, its state, along with all of its descendants's states, will be recreated in the document. After attaching, the container and its descendants, will each have their corresponding "attached" version of themselves?

When a detached container x is attached to a document, you can use x.getAttached() to obtain the corresponding attached container.
2024-03-30 11:38:24 +08:00
Zixuan Chen
e58e4e3fdd
chore: bump loro-crdt to v0.12.0 2024-03-27 23:53:34 +08:00
Zixuan Chen
673e36a7ba
feat: add getParent for each handler (#297)
* feat: add getParent for each handler

* fix: type err
2024-03-27 18:43:48 +08:00
Zixuan Chen
9a673acfde
feat: add getOrCreate on map (#296) 2024-03-27 17:52:53 +08:00
Zixuan Chen
c8b8694908
refactor: extract common methods on handlers (#295)
Co-authored-by: Leon <leeeon233@gmail.com>
2024-03-25 11:58:51 +08:00
Leon Zhao
83d4950a4e
fix: empty diff emits event (#292) 2024-03-14 20:46:18 +08:00
Zixuan Chen
f7fe0d4b26
test: reduce overall test time by splitting the fuzz 10s (#291) 2024-03-12 21:10:30 +08:00
Leon Zhao
a47cf06712
Refactor fuzzing test (#271)
* feat: new fuzz test

* test: add arbtest

* fix: remove PROPTEST_FACTOR
2024-03-08 16:40:06 +08:00
Zixuan Chen
1233b8df82
refactor: replace debug-log with tracing (#285)
* refactor: replace debug-log with tracing

* chore: fix setDebug in wasm

* chore: rm useless comments
2024-03-04 20:06:24 +08:00
Zixuan Chen
7e07e4dad4
perf: reduce mem usage in fugue span (#283) 2024-03-04 12:02:49 +08:00
Zixuan Chen
08847d6639
refactor: rename client_id in idspan to peer (#287)
* refactor: rename client_id in idspan to peer

* fix: type err
2024-03-02 19:10:33 +08:00
Zixuan Chen
a5fce60883
perf: avoid a few clones in wasm (#288) 2024-03-02 16:26:34 +08:00
Leon Zhao
1db510104e
fix: delete list event hint assert (#289) 2024-03-02 16:25:57 +08:00
Leon Zhao
da782c7659
fix: tree child container index (#284) 2024-03-02 16:21:31 +08:00
Zixuan Chen
71addcb6de
fix: fix a few legacy bugs (#286) 2024-03-02 13:42:50 +08:00
Zixuan Chen
07c11f68b6
Perf make revert faster (#279)
* refactor: include start_id in seq delete span

* Add size benchmark example  (#276)

* test: add size bench example

* chore: update lock file

* refactor: optimize encoding

* perf: make revert ops with the size of m O(m)

* fix: delete span with id merge rule

* fix: fix several bugs related to delete span id
2024-02-29 23:00:02 +08:00
Zixuan Chen
06e3a5420d
refactor: reduce tracker mem usage by using nonmax id (#282) 2024-02-29 22:55:57 +08:00
Zixuan Chen
cadde3cb55
Refactor: include target id for delete seq (#278)
* refactor: include start_id in seq delete span

* Add size benchmark example  (#276)

* test: add size bench example

* chore: update lock file

* refactor: optimize encoding
2024-02-29 20:37:06 +08:00
Zixuan Chen
e9bac5ccab
fix: tracker insert err (#281) 2024-02-29 20:36:45 +08:00
Leon Zhao
80bd6936d2
fix: use TreeID as external event item (#280) 2024-02-29 20:33:06 +08:00
Leon Zhao
d3844ce04c
fix: missing event when checkout (#275)
* fix: refresh depth in diff_calc when checkout

* refactor: replace u16 with Option<NonZero>

---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2024-02-29 11:05:25 +08:00
Zixuan Chen
dbf128959d
Add compression cmp in size bench (#277) 2024-02-28 22:03:43 +08:00
Zixuan Chen
17571ab6e0
Add size benchmark example (#276)
* test: add size bench example

* chore: update lock file
2024-02-28 21:59:20 +08:00
Zixuan Chen
b8eb57f4a5
Refactor ID (#274)
* refactor: add idlp and add lamport info to snapshot enc

* fix: fix warnings

* fix: idlp err due to incorrect merge

* fix: comments

* test: fix fuzz
2024-02-27 23:36:17 +08:00
Leon Zhao
1f4a59e85c
fix: state lock when emit events (#272)
* fix: state lock when emit events

* test: add deadlock test
2024-02-25 12:57:19 +08:00
Zixuan Chen
403eb18fa5
feat: expose timestamp related configures (#270)
* feat: expose timestamp related configures

* fix(wasm): set change merge interval api
2024-02-22 20:22:04 +08:00
Zixuan Chen
bd57eb52b1
refactor: replace i32 with i64 (#269) 2024-02-18 17:27:33 +08:00
Zixuan Chen
751082f307
chore: bump 2024-02-17 14:42:37 +08:00
Leon Zhao
73d5ec5cad
fix: import batch snapshot (#268) 2024-02-17 10:50:00 +08:00
Zixuan Chen
f648b353ad
chore: upgrade rust crates 2024-02-16 11:30:56 +08:00
Zixuan Chen
57287fa6d8
chore: add pkg info 2024-02-16 11:25:12 +08:00
Gentle
68117070dd
add pub LoroDoc::peer_id (#267)
Co-authored-by: Gentle <ramon.klass@gmail.com>
2024-02-16 01:45:16 +08:00
Zixuan Chen
7a75673fb8
chore: bump version of loro-crdt 2024-02-10 22:25:05 +08:00
Zixuan Chen
9c25e6d273
fix: should not reset the state when calling checkout to latest (#265) 2024-02-10 22:19:52 +08:00
Leon Zhao
3a4ed97e0b
fix: only send a event for one import/transaction/checkout (#263)
---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2024-02-08 14:03:15 +08:00
Zixuan Chen
6950e42cae
perf: optimize snapshot encoding (#264)
* perf: optimize snapshot encoding

* perf: rm id_int_map and boost speed 1.4x

Co-authored-by: Leon Zhao <leeeon233@gmail.com>

---------

Co-authored-by: Leon Zhao <leeeon233@gmail.com>
2024-02-04 15:28:08 +08:00
Leon Zhao
dcbdd55195
feat: remove deleted set in tree state and optimize api (#259)
Co-authored-by: Zixuan Chen <me@zxch3n.com>
2024-01-30 09:54:54 +08:00
Zixuan Chen
0bcc3bd56d
chore: upgrade wasm-bindgen to 0.2.90 (#262) 2024-01-29 22:40:33 +08:00
Zixuan Chen
e1f3e7aa9a
docs: add config comment 2024-01-24 23:15:00 +08:00
Zixuan Chen
fd7c37c94e
chore: bump version to 0.10.1 2024-01-24 10:01:30 +08:00
Zixuan Chen
d01c03eb77
fix: rm checking after checkout 2024-01-24 10:00:00 +08:00
Zixuan Chen
af893d2431
docs: refine apply delta doc 2024-01-22 16:00:32 +08:00
Zixuan Chen
e304af05f4
chore: bump loro-crdt 2024-01-22 13:00:42 +08:00
Leon Zhao
f6cc5da0f1
refactor: Optimizing Encoding Representation for Child Container Creation to Reduce Document Size (#247)
* refactor: encoding container id

* fix: container indexing when merged ops in encoding

* chore: add compress encode size for draw example

* fix: do not need cids in encoding

* chore: change name containerIdx to containerType in encoding
2024-01-22 12:19:09 +08:00
Zixuan Chen
680041f3a9
feat: compare frontiers causal order (#257) 2024-01-22 12:03:50 +08:00
Zixuan Chen
0998342001
docs: update docs about rich text style (#258) 2024-01-22 12:03:35 +08:00
Zixuan Chen
dbef6b0a38
chore: bump loro-crdt version 2024-01-21 20:04:31 +08:00
Zixuan Chen
9e57ccbc00
Fix avoid rich text apply diff err when time travel (#256)
* fix: avoid enter invalid richtext state

* fix: only include the style when the doc contains both style start and style end

* fix: iter_range err in richtext state

* fix: richtext state iter range

* fix: iter range err

* fix: iter range

* chore: rm log

* fix: iter range

* fix: get affected range

* fix: return err if given checkout target is invalid
2024-01-21 19:51:27 +08:00
Zixuan Chen
bbea78b9bf
chore: bump version 2024-01-20 00:59:07 +08:00
Zixuan Chen
adf0d54ba6
feat(wasm): get change at lamport (#255) 2024-01-20 00:56:03 +08:00
Zixuan Chen
3573d96a31
refactor: make it more conservative about pub 2024-01-19 23:30:41 +08:00
Zixuan Chen
982a521864
fix: js method should use camel case 2024-01-19 22:26:02 +08:00
Zixuan Chen
2b86783467
chore: bump loro-crdt version 2024-01-19 22:23:24 +08:00
Zixuan Chen
77eb6853b8
fix: time travel back should be able to nullify rich text span (#254) 2024-01-19 22:20:27 +08:00
Zixuan Chen
f2d9152f2d
fix: formalize apply delta method (#252) 2024-01-19 22:20:13 +08:00
Zixuan Chen
b5aa622554
fix: how to find best insert pos for richtext & expand type reverse behavior (#250)
* chore: bump loro-crdt version

* fix: find best insert pos

* fix: style anchors' ExpandType's reverse behavior
2024-01-19 22:19:56 +08:00
Zixuan Chen
3a2c9523cd
chore: bump loro-crdt version 2024-01-18 13:30:26 +08:00
Zixuan Chen
1295ac6d61
(wasm) Extract VersionVector class and fix inconsistent PeerID repr (#249)
* refactor(wasm): extract VersionVector class and fix inconsistent PeerID in wasm

* fix: example type err

* fix: binding err

* fix: peer id repr should be consistent

* test: update tests
2024-01-18 13:28:28 +08:00
Zixuan Chen
ce1ac36b62
chore: bump loro-crdt version 2024-01-17 23:00:50 +08:00
Zixuan Chen
b4701a4de6
refactor: use rich text style config (#246)
* refactor: use rich text style config

* chore: rm log

* feat: support config text style in wasm

* feat: overlapped styles

* chore: add warning style key cannot contain ':'

* test: refine test case for richtext

* test: refine test
2024-01-17 22:55:46 +08:00
Leon Zhao
692c5e3436
feat: group ops (#243) 2024-01-12 16:47:44 +08:00
Leon Zhao
e111c519e3
refactor: setting parent only in state (#245)
* refactor: set parent in state
2024-01-12 16:46:31 +08:00
Zixuan Chen
b8cf4dc4c3
Refine the new encoding schema (#244)
* perf: refine the new encoding schema

* chore: rm auto derived fromprimitive and toprimitive from encode mode
2024-01-11 22:49:18 +08:00
Zixuan Chen
5f1353791d
Remove txn abort and reduce mem usage (#240)
* refactor: rm txn.abort and related undo behavior

* perf: simplify richtext state when there is not styles

* perf: reduce text cost when there is no style

* chore: refine logs

* perf: remove cid in states to reduce mem overhead

* refactor: reduce mem overhead by using a compacter mapvalue

* refactor: rm the box inside richtext state
2024-01-08 17:29:11 +08:00
Zixuan Chen
e2cf29f3a8
Fix time travel issue (#241)
* fix: time travel issue

* docs: refine comment

* fix: fix start vv in diff_calc apply change
2024-01-08 17:02:32 +08:00
Zixuan Chen
08390cb0de
chore: loro-crdt v0.8.0 2024-01-05 16:11:09 +08:00
Zixuan Chen
a30abf7af1
chore: upgrade debug-log to fix type issue 2024-01-05 16:07:47 +08:00
Zixuan Chen
aaec64a503
Update debug-log (#236)
* chore: use new version of debug-log

* fix: rm group_end
2024-01-05 12:12:04 +08:00
Zixuan Chen
92305f8917
chore: add checks for tracker (#238) 2024-01-05 12:10:50 +08:00
Leon Zhao
76e3f97ff9
feat: use string as peer type in wasm (#234) 2024-01-05 12:06:13 +08:00
Zixuan Chen
bf3b442e97
Fix time travel issue in Tracker (#235)
This pull request fixes an issue in the Tracker module where only the target span was forwarded during forwarding instead of forwarding all content from vv to the target opid. This resulted in errors in current_vv. The issue is resolved by updating the forward function in the Tracker module to include the entire range of content to be forwarded.

It also fixed the inconsistent issue in richtext between style anchors and style ranges.

---------

Co-authored-by: leeeon233 <leeeon233@gmail.com>
2024-01-05 12:05:39 +08:00
Zixuan Chen
00f158c0df
Update loro_value! macro and add binary support (#231)
* docs: update loro_value! doc

* fix: type errors
2024-01-04 22:58:21 +08:00
Zixuan Chen
13a3078408
Refactor container states and add consistency checks (#237)
* refactor: make container states can get their ids

* test: add utils to test consistency between the current states and diff calc

* test: add state diff calc consistency check
2024-01-03 21:57:31 +08:00
Zixuan Chen
8be7cf0412
fix: tracker delete err when the update is partially included (#232) 2024-01-02 20:11:36 +08:00
Zixuan Chen
a6be7d2ea6
refactor: make InternalString an internal struct (#233) 2024-01-02 20:11:22 +08:00
Leon zhao
a4c30f7a4b
test: add richtext fuzz (#224)
This PR adds fuzz for richtext, adding new tests covering checkout, event, and time machine
2024-01-02 17:13:18 +08:00
Zixuan Chen
bc27a47531
feat: stabilizing encoding (#219)
This PR implements a new encode schema that is more extendible and more compact. It’s also simpler and takes less binary size and maintaining effort. It is inspired by the [Automerge Encoding Format](https://automerge.org/automerge-binary-format-spec/).

The main motivation is the extensibility. When we integrate a new CRDT algorithm, we don’t want to make a breaking change to the encoding or keep multiple versions of the encoding schema in the code, as it will make our WASM size much larger. We need a stable and extendible encoding schema for our v1.0 version.

This PR also exposes the ops that compose the current container state. For example, now you can make a query about which operation a certain character quickly. This behavior is required in the new snapshot encoding, so it’s included in this PR.

# Encoding Schema

## Header

The header has 22 bytes.

- (0-4 bytes) Magic Bytes: The encoding starts with `loro` as magic bytes.
- (4-20 bytes) Checksum: MD5 checksum of the encoded data, including the header starting from 20th bytes. The checksum is encoded as a 16-byte array. The `checksum` and `magic bytes` fields are trimmed when calculating the checksum.
- (20-21 bytes) Encoding Method (2 bytes, big endian): Multiple encoding methods are available for a specific encoding version.

## Encode Mode: Updates

In this approach, only ops, specifically their historical record, are encoded, while document states are excluded.

Like Automerge's format, we employ columnar encoding for operations and changes.

Previously, operations were ordered by their Operation ID (OpId) before columnar encoding. However, sorting operations based on their respective containers initially enhance compression potential.

## Encode Mode: Snapshot

This mode simultaneously captures document state and historical data. Upon importing a snapshot into a new document, initialization occurs directly from the snapshot, bypassing the need for CRDT-based recalculations.

Unlike previous snapshot encoding methods, the current binary output in snapshot mode is compatible with the updates mode. This enhances the efficiency of importing snapshots into non-empty documents, where initialization via snapshot is infeasible. 

Additionally, when feasible, we leverage the sequence of operations to construct state snapshots. In CRDTs, deducing the specific ops constituting the current container state is feasible. These ops are tagged in relation to the container, facilitating direct state reconstruction from them. This approach, pioneered by Automerge, significantly improves compression efficiency.
2024-01-02 17:03:24 +08:00
Zixuan Chen
727b5c2518
Add benchmark utils that simulate drawing workflow (#229)
* chore: add benchmark utils that simulate drawing workflow

* chore: use markdown as table default style

* chore: init sheet simulating
2023-12-28 18:00:34 +08:00
Zixuan Chen
6a2d0f8fef
test: fix fuzz test config 2023-12-26 18:09:55 +08:00
Zixuan Chen
9477717e3e
chore: bump loro-crdt versions to v0.7.1 2023-12-26 18:01:14 +08:00
Leon zhao
012abe97c3
fix: richtext undo item merge error (#227) 2023-12-26 11:06:27 +08:00
Zixuan Chen
612745aa8c
Fix issue with richtext's applyDelta() behavior (#226)
* fix: [LORO-371] The behavior of richtext's `applyDelta()` is not entirely correct #225

* test: add corresponding test

Fixes #225
2023-12-21 11:40:39 +08:00
Zixuan Chen
c2877e8468
chore: bump version 2023-12-14 10:38:54 +08:00
Leon zhao
442f2561a1
Remove prelim feature (#215)
* chore: remove prelim temporarily
2023-12-13 10:25:00 +08:00
Zixuan Chen
546cadf26c
refactor(wasm): invoke setPanicHook when starting 2023-12-08 16:58:41 +08:00
Zixuan Chen
ce36f8adbd
chore: bump version 2023-12-07 15:27:22 +08:00
Zixuan Chen
699c2c73a5
Fix partial inclusion bug in Tracker (#214)
* fix: partial inclusion bug in Tracker

* fix: rm redundant logs
2023-12-07 15:25:33 +08:00
Zixuan Chen
33d06d5cd8
chore: add a few assert msg #210 2023-12-07 14:23:16 +08:00
Zixuan Chen
b689f5b1cd
chore: bump version 2023-12-06 23:39:55 +08:00
Zixuan Chen
ab64881029
fix: text tracker error #211 (#212)
* fix: text tracker error #211

* chore: rm only

* fix: refine
2023-12-06 23:36:21 +08:00
Zixuan Chen
3c735390e9
chore: put tasks into package.json when possible 2023-12-05 17:42:25 +08:00
Zixuan Chen
bbf8acd767
chore: bump version 2023-12-05 13:58:00 +08:00
Zixuan Chen
e4814aa627
chore: init changesets 2023-12-05 13:38:09 +08:00
Zixuan Chen
f4c6b6dce7
refactor: rm compact bytes (#206) 2023-12-05 11:58:09 +08:00
Zixuan Chen
53a7196c52
fix: [LORO-337] Marking should have no effect when the target key value pair exists #204 (#209) 2023-12-05 11:57:58 +08:00
Leon zhao
47fea50dda
Refactor: use ValueOrContainer for diff event (#202)
* feat: use resolved diff as event

* feat: wasm ValueOrContainer event

* fix: cargo fix

* fix: avoid state clone

* chore: add resolve event bench

* test: add handler in event test

* refactor: use resolved as external diff

* chore: cargo fix

* fix: typescript loro value type

* fix: use Arc::new_cyclic

* refactor: bring back sub container
2023-12-05 11:57:41 +08:00
Zixuan Chen
bf1a792933
refactor: only need shared ref on loro doc now (#203) 2023-12-03 14:54:45 +08:00
Zixuan Chen
e342dfc98a
chore: wasm-snip init 2023-11-29 15:07:39 +08:00
Zixuan Chen
ced4f4d5a5
feat: expose subscription to rust api (#200) 2023-11-29 14:39:07 +08:00
Zixuan Chen
cccb4f3957
perf(wasm): reduce wasm size (#198) 2023-11-29 13:59:39 +08:00
Zixuan Chen
208c673b2d
refactor: list now use the same tracker as text (#197)
Resolve #122
2023-11-29 10:45:00 +08:00
Zixuan Chen
fddcf7a321
chore: publish v0.2.2 with refined doc 2023-11-28 23:23:07 +08:00
Zixuan Chen
cd8be80a6f
docs: refine rust api doc 2023-11-28 23:20:57 +08:00
Zixuan Chen
1eae5ea495
chore: bump loro rust to v0.2.1 2023-11-28 22:22:09 +08:00
Zixuan Chen
22cf71a759
chore: upgrade loro to v0.2.1 2023-11-28 22:18:21 +08:00
Zixuan Chen
0d2314cda1
docs: add docs to rust api 2023-11-28 22:17:40 +08:00
Leon zhao
afc4bfaf62
feat: tree rust api (#194) 2023-11-28 21:32:04 +08:00
Zixuan Chen
564dde7703
chore: publish mvp rust api 2023-11-28 21:29:11 +08:00
Zixuan Chen
6ef1e12d71
chore: rm zerovec 2023-11-28 21:01:01 +08:00
Zixuan Chen
2ad7202e05
Feat-rust-api (#193) 2023-11-28 16:22:43 +08:00
Zixuan Chen
8b6f49f3b3
chore(release): 0.5.0 2023-11-27 17:56:04 +08:00
Zixuan Chen
88218c10bd
(WASM )Refactor wasm interfaces on List and Map (#192)
* refactor: refine wasm interfaces

* docs: update wasm doc
2023-11-27 17:53:02 +08:00
Zixuan Chen
e23ef4362d
fix: keep strong ref to doc in handlers #190 (#191) 2023-11-27 14:09:04 +08:00
Ikko Eltociear Ashimine
83b0e8cc7f
fix: typo in lib.rs (#176)
verison -> version
2023-11-22 10:05:54 +08:00
Leon zhao
dd8bf7719e
refactor: rm loro nodejs (#185) 2023-11-21 23:12:05 +08:00
Leon zhao
899270c6de
fix: remove compress feature (#184)
BREAKING CHANGE: encoding schema is changed
2023-11-21 21:48:25 +08:00
Leon zhao
c04dc344f5
fix: deno dirname in windows (#183) 2023-11-21 21:38:59 +08:00
Zixuan Chen
214418d643
refactor: rm unused code 2023-11-21 21:22:09 +08:00
Zixuan Chen
8e901cf00c
fix: #181 importing should use inherent arena
otherwise, txn, oplog and app state may use different
arena.
2023-11-21 20:29:01 +08:00
Zixuan Chen
3cd79e9b5d
chore(wasm): deno build err 2023-11-21 00:34:20 +08:00
Zixuan Chen
b940214985
fix: from snapshot should enable auto commit 2023-11-17 23:05:20 +08:00
Zixuan Chen
ed5324b506
chore(release): 0.4.3 2023-11-16 22:26:41 +08:00
Zixuan Chen
f799da9abb
fix: avoid i32 overflow 2023-11-16 22:25:37 +08:00
Zixuan Chen
a484484934
chore(release): 0.4.2 2023-11-16 21:53:04 +08:00
Zixuan Chen
1ff1505933
feat: get sub container directly when getting value (#175) 2023-11-16 21:46:57 +08:00
Zixuan Chen
8957b98236
refactor: emit event after a micro task 2023-11-16 21:04:31 +08:00
Zixuan Chen
40d6de3146
Add map methods for getting keys, values, and entries (#173) 2023-11-16 18:40:51 +08:00
Bryan
c4b9cb4b2b
fix: loro-wasm typo (#171) 2023-11-14 23:02:52 +08:00
Zixuan Chen
e54d2ac21b
feat(wasm): add event id 2023-11-13 13:06:37 +08:00
leeeon233
c4b753dfd8 chore: add license 2023-11-12 23:23:12 +08:00
Zixuan Chen
9a6a4e61f1
chore: add build script to loro-wasm 2023-11-12 21:14:21 +08:00
Zixuan Chen
38ad7fbe1b
chore(release): 0.4.1 2023-11-12 21:10:24 +08:00
Zixuan Chen
505ad4275b
Fix encoding of oplog snapshot (#168) 2023-11-12 20:39:00 +08:00
Zixuan Chen
48611c5f15
fix: wasm change peerid should be bigint 2023-11-12 20:36:38 +08:00
Zixuan Chen
e871a6c438
chore: bump loro-wasm loro-crdt version 2023-11-10 20:41:11 +08:00
Leon zhao
7d2826cfe9
Doc: loro-crdt documents in comments (#165)
* doc: wasm

* doc: add wasm example

* doc: typedoc

* fix: merge

* fix: dep

* fix

---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2023-11-10 20:30:54 +08:00
Zixuan Chen
fdd24bd836
feat: add fromCheckout to wasm 2023-11-08 16:22:21 +08:00
Zixuan Chen
08e4ed9d40
feat: add from_checkout mark to event (#164) 2023-11-08 16:15:11 +08:00
Zixuan Chen
116190c817
chore: refine err msg 2023-11-08 14:18:01 +08:00
Zixuan Chen
9b18ff9847
fix: make encoding enhanced simpler 2023-11-08 14:17:43 +08:00
Zixuan Chen
93a52ba55e
fix: commit txn when dropping
it's less confusing
2023-11-08 14:16:10 +08:00
Zixuan Chen
66d74c1e74
feat(wasm): get deep value 2023-11-07 23:59:44 +08:00
Zixuan Chen
7b855c88da
test: add out of bound test 2023-11-07 23:32:07 +08:00
Zixuan Chen
532eee09a4
fix: return Err when index out of bound 2023-11-07 22:48:53 +08:00
Zixuan Chen
83ae5930bc
Fix list get method (#158) 2023-11-07 19:48:16 +08:00
Zixuan Chen
cb8bbefb08
Fix incorrect deletion of emoji in wasm (#154)
This pull request fixes an issue where the emitted utf16 events were wrong when deleting an emoji in wasm. The problem was caused by incorrect calculation of the event range. This PR updates the code to use the correct range and adds a new test case to ensure the issue is fixed.
2023-11-05 16:13:40 +08:00
Zixuan Chen
7ccfd1e91d
feat: expose version and change inspect api to wasm (#156) 2023-11-05 16:06:34 +08:00
Leon zhao
acafc76aff
Feat: diff calc bring back & tree new event and value (#149)
* feat: new tree state

* fix: emit meta event

* fix: semantic tree event

* fix: diff calc bring_back

* chore: clear comments

* fix: merge

* fix: tree snapshot

* fix: filter empty bring back

* feat: tree add external diff

* fix: imported changes were not mergeable (#147)

* fix: imported changes were not mergeable
now the small encoding size is supported in example

* fix: stupid err in richtext checkout

* fix: rle oplog encode err
- support pending changes
- start counters were wrong

* fix: utf16 query err (#151)

* fix: tree movable node lamport

* fix: merge

* perf: bring back

* doc: add deep value meta doc

* refactor: bring back only when record diff

---------

Co-authored-by: Zixuan Chen <remch183@outlook.com>
2023-11-05 15:53:33 +08:00
Zixuan Chen
8bd953e396
refactor: extract text chunk (#153) 2023-11-04 20:03:43 +08:00
Zixuan Chen
b1895bba26
Update Quill editor to fix consistency issues (#152)
* chore: rm logs

* fix: richtext delta event

* fix(quill): move apply delta to editor part

* fix: consistency issue with Quill
- Quill assumes there is always a \n at the end of the line
- Quill assumes \n does not merge with other delta item
- Quill assumes there is no inline format inside {insert: '\n'} delta
  item
2023-11-04 20:03:15 +08:00
Zixuan Chen
5a9baebba0
fix: utf16 query err (#151) 2023-11-04 12:24:05 +08:00
Zixuan Chen
5b65963104
fix: imported changes were not mergeable (#147)
* fix: imported changes were not mergeable
now the small encoding size is supported in example

* fix: stupid err in richtext checkout

* fix: rle oplog encode err
- support pending changes
- start counters were wrong
2023-11-04 12:23:28 +08:00
Zixuan Chen
200a6dd39a
fix: warnings 2023-11-03 22:26:49 +08:00
Zixuan Chen
5cac1ed092
Refactor: make changes mergeable (#146)
- Allow changes to be merged when possible. This makes realtime collaboration more efficient with Loro.
- Refactor the code to make modifications of changes in oplog in one place
- Optimize the diff calculation so that it doesn't have to go back to the beginning of the change.

Note: we still keep the invariants that dependency pointers in Loro always point to the last op in a change
2023-11-03 21:40:34 +08:00
Zixuan Chen
7a19b49acb
Add richtext example using Quill (#145)
* feat: richtext example init

* fix: pass richtext event delta consistency check

* chore: debug history
2023-11-03 16:59:27 +08:00
Zixuan Chen
da16b8a99d
refactor: use better repr for container id (#144) 2023-11-02 17:13:08 +08:00
Zixuan Chen
a40b5c6e4a
feat: support richtext in wasm & mark text with arbitrary value (#142)
- Support mark text with custom value [LORO-299] Allow users to mark text with custom value #139
- Expose richtext in wasm
2023-11-02 14:20:34 +08:00
Zixuan Chen
95e6130d93
Fix: richtext event (#138)
Support rich text event. Now it will emit the delta event correctly in the Quill Delta format.
2023-11-01 20:02:05 +08:00
Zixuan Chen
a52549ea30
fix: g-btree bug, fixed by upgrade dep 2023-10-31 22:04:43 +08:00
Zixuan Chen
bcf81a45eb
fix: g-btree delete leaf err
upgrade generic-btree
2023-10-31 21:08:07 +08:00
Zixuan Chen
e1ab03f30f
feat: create doc from snapshot (#136) 2023-10-31 19:02:52 +08:00
Zixuan Chen
c9cf106338
fix: impl Fugue correctly (#133)
The original content has a reversed comparison for right parents, which causes the interleaving anomalies when inserting text in a backward order.
2023-10-31 17:59:24 +08:00
Zixuan Chen
8235eaaa9b
fix: snapshot encode err (#135)
- allow import snapshot when user has created empty handlers
- fix state snapshot encode err
2023-10-31 17:58:50 +08:00
Zixuan Chen
f72f812086
Refactor: replace collection with single op content in remote op (#132)
* refactor: remove rlevec inside remoteop

* refactor: remove the use of RleVec<[T; 0]> (#131)
2023-10-31 17:58:27 +08:00
Zixuan Chen
74138231aa
refactor: remove the use of RleVec<[T; 0]> (#131) 2023-10-31 17:54:37 +08:00
Zixuan Chen
bf2385efe0
Refactor: remove old encode method (#130)
* refactor: remove old encode method

* chore: rm file

* refactor: mv snapshot encode file
2023-10-31 10:36:21 +08:00
Zixuan Chen
2abc302344
chore: add pending test and new_auto_commit 2023-10-31 10:14:09 +08:00
Zixuan Chen
c1d732b57c
Fix event hint error (#129)
* fix: event hint err

* fix: delete event hint
2023-10-31 10:00:54 +08:00
Zixuan Chen
45490f3370
Perf: reduce mem usage when transaction is large (#128)
* perf: reduce mem usage when txn is large

* test: add diagnose info for id_to_cursor

* perf: make id span easier to merge
2023-10-30 21:56:33 +08:00
Zixuan Chen
8293347334
Feat: autocommit transaction (#127)
* feat: auto commit

* fix: make recursive single thread event work again
2023-10-30 18:32:36 +08:00
Zixuan Chen
734b832c00
Fix checkout event (#126)
* tests: add checkout err tests

* fix: checkout event err when create child
2023-10-30 14:16:50 +08:00
Leon zhao
e01e98411c
feat: movable tree support (#120)
* feat: tree state

* feat: tree value

* feat: tree handler

* fix: tree diff

* test: fuzz tree

* feat: tree snapshot

* fix: tree default value

* fix: test new node

* fix: tree diff

* fix: tree unresolved value

* fix: tree fuzz

* fix: tree fuzz move

* fix: sort by tree id

* fix: tree diff sorted by lamport

* fix: sort roots before tree converted to string

* fix: rebase main

* fix: tree fuzz

* fix: delete undo

* fix: tree to json children sorted

* fix: diff calculate

* fix: diff cycle move

* fix: tree old parent cache

* feat: cache

* fix: local op add tree cache

* fix: don't add same tree move to cache

* fix: need update cache

* feat: new cache

* bench: add checkout bench

* chore: clean

* fix: apply node uncheck

* perf: lamport bound

* fix: calc old parent

* feat: tree wasm

* fix: change tree diff

* fix: tree diff retreat

* fix: tree diff should not apply when add node

* feat: new tree loro value

* chore: typo

* fix: tree deep value

* fix: snapshot tree index -1

* fix: decode tree snapshot use state

* fix: release state lock when emit event

* fix: tree node meta container

* fix: need set map container when covert to local tree op

* fix: tree value add deleted

* fix: more then one op in a change

* fix: tree fuzz deleted equal

* fix: tree calc min lamport

* feat: tree encoding v2

* doc: movable tree

* fix: test tree meta

* test: remove import bytes check

* refactor: diff of text and map

* refactor: del span

* perf: tree state use deleted cache

* fix: some details

* fix: loro js tree create

* feat: add un exist tree node

* bench:  tree depth

* fix: check out should emit event

* refactor: event

* fix: fuzz err

* fix: pass all tests

* fix: fuzz err

* fix: list child cache err

* chore: rm debug code

* fix: encode enhanced err

* fix: encode enchanced

* fix: fix several richtext issue

* fix: richtext anchor err

* chore: rm debug code

* fix: richtext fuzz err

* feat: speedup text snapshot decode

* perf: optimize snapshot encoding

* perf: speed up decode & insert

* fix: fugue span merge err

* perf: speedup delete & id cursor map

* fix: fugue merge err

* chore: update utils

* fix: fix merge

* fix: return err apply op

* fix: fix merge

* fix: get map container as tree meta
2023-10-30 11:13:52 +08:00
Zixuan Chen
4d87725f32
chore: rm needless package 2023-10-29 22:13:59 +08:00
Zixuan Chen
d942e3d7a2
Feat: Peritext-like rich text support (#123)
* feat: richtext wip

* feat: add insert to style range map wip

* feat: richtext state

* fix: fix style state inserting and style map

* fix: tiny vec merge err

* fix: comment err

* refactor: use new generic-btree & refine impl

* feat: fugue tracker

* feat: tracker

* feat: tracker

* fix: fix a few err in impl

* feat: init richtext content state

* feat: refactor arena

* feat: extract anchor_type info out of style flag

* refactor: state apply op more efficiently
we can now reuse the repr in state and op

* fix: new clippy errors

* refactor: use state chunk as delta item

* refactor: use two op to insert style start and style end

* feat: diff calc

* feat: handler

* fix: tracker checkout err

* fix: pass basic richtext handler tests

* fix: pass handler basic marking tests

* fix: pass all peritext criteria

* feat: snapshot encoding for richtext init

* refactor: replace Text with Richtext

* refacotr: rm text code

* fix: richtext checkout err

* refactor: diff of text and map

* refactor: del span

* refactor: event

* fix: fuzz err

* fix: pass all tests

* fix: fuzz err

* fix: list child cache err

* chore: rm debug code

* fix: encode enhanced err

* fix: encode enchanced

* fix: fix several richtext issue

* fix: richtext anchor err

* chore: rm debug code

* fix: richtext fuzz err

* feat: speedup text snapshot decode

* perf: optimize snapshot encoding

* perf: speed up decode & insert

* fix: fugue span merge err

* perf: speedup delete & id cursor map

* fix: fugue merge err

* chore: update utils

* perf: speedup text insert / del

* fix: cursor cache

* perf: reduce conversion by introducing InsertText

* perf: speed up by refined cursor cache

* chore: update gbtree dep

* refactor(wasm): use quill delta format

* chore: fix warnings
2023-10-29 14:02:13 +08:00
Zixuan Chen
fa1286af59
docs: diff calc special behavior 2023-09-25 16:49:17 +08:00
Leon zhao
b09fc48115
Merge pull request #113 from loro-dev/refator-delete-map
refactor: map delete value
2023-09-21 15:59:00 +08:00
leeeon233
d2b8941f06 fix: SnapshotOp map use u32 2023-09-21 08:26:54 +08:00
leeeon233
524ab9dabd chore: visibility & named 2023-09-21 08:04:22 +08:00
leeeon233
caaaa666ae chore: add pending bench 2023-09-20 09:24:46 +08:00
leeeon233
05dc62a31c fix: revert enhanced encoding 2023-09-18 21:42:42 +08:00
leeeon233
a77bf2fcb3 fix: encode enhanced pending changes 2023-09-18 20:36:24 +08:00
leeeon233
c294c61343 fix: op converter 2023-09-18 15:21:38 +08:00
leeeon233
3f3fcc11f3 refactor: map delete value 2023-09-15 13:53:30 +08:00
leeeon233
7b012dec00 fix: empty doc with pending decode snapshot 2023-09-15 11:30:43 +08:00
leeeon233
4a1f4e8647 fix: decode snapshot after pending 2023-09-13 21:23:38 +08:00
leeeon233
80a9d12ccc feat: pending remote changes, todo snapshot 2023-09-13 15:17:58 +08:00
leeeon233
fdacd62828 feat: pending bk 2023-09-12 21:40:56 +08:00
leeeon233
5c0d8b74f4 fix: nodejs patch 2023-09-12 15:57:06 +08:00
leeeon233
331dc6c994 feat: LoroValue Binary 2023-09-12 15:57:06 +08:00
leeeon233
eb8a07641f fix: decode remove unknown 2023-09-12 15:25:45 +08:00
leeeon233
dad768049e fix: new encode format 2023-09-12 14:11:28 +08:00
leeeon233
99c8529559 feat: remove gc 2023-09-12 14:11:28 +08:00
leeeon233
f1adc7d15d chore: use columnar 0.3.2 2023-09-11 14:54:54 +08:00
leeeon233
0b64a567ed fix: columnar iter name 2023-09-08 10:56:51 +08:00
leeeon233
8611509492 perf: snapshot OplogEncoded use iter 2023-09-08 09:17:26 +08:00
leeeon233
a1c3eea4f1 feat: use columnar iterable 2023-09-08 08:21:46 +08:00
leeeon233
5b0f3e3f50 feat: update columnar 2023-09-08 08:21:46 +08:00
Zixuan Chen
1ce5330828
bench: use worst case to bench in encode 2023-09-07 21:42:29 +08:00
Zixuan Chen
be63db444e
Merge branch 'main' into feat-encode-enhance 2023-09-05 17:08:41 +08:00
Zixuan Chen
9be8cad562
test: add more many_actors tests 2023-09-02 23:23:52 +08:00
Zixuan Chen
345b5bbcb9
perf: speedup when there are many peers 2023-09-02 18:19:34 +08:00
Zixuan Chen
4ecd850632
test: add import history data test 2023-08-30 17:27:22 +08:00
Zixuan Chen
1d3cd60873
fix: fix a few import panic 2023-08-30 16:41:04 +08:00
Zixuan Chen
b4b50b369d
refactor: refine internal config 2023-08-30 12:27:23 +08:00
Zixuan Chen
e196e23581
fix: sort change by ord
last commit contains error (not found yet)
2023-08-29 20:05:31 +08:00
Zixuan Chen
ca9325f5ed
perf: refine encode size (can be better) 2023-08-29 19:43:35 +08:00
Zixuan Chen
60201989ec
fix: speed up encode 2023-08-29 17:15:41 +08:00
Zixuan Chen
728002daf7
chore: add encode example to analysis perf 2023-08-29 15:19:01 +08:00
Zixuan Chen
f208744ec1
feat: encode/decode v2 2023-08-29 15:13:52 +08:00
Zixuan Chen
5b6cc28f6b
chore: add encode example to analysis perf 2023-08-28 16:16:40 +08:00
Zixuan Chen
902fe38570
chore: fix warnings and format 2023-08-28 09:41:23 +08:00
Zixuan Chen
8b8743e233 chore: fix deno dep 2023-08-16 14:54:05 +08:00
Zixuan Chen
17d1a9ea82
Feat: compressed rle update encode mode (#107)
* feat: add compressed rle update encode mode

* fix: type err

* chore: update string_cache

* chore: rm needless code
2023-08-16 11:33:55 +08:00
Zixuan Chen
ae730d2b8c fix: return err when changes should be queued 2023-08-12 23:35:49 +08:00
Zixuan Chen
05f802376e fix: checkout result err 2023-08-11 21:49:26 +08:00
Zixuan Chen
fd0cc63cb5 refactor: return result when checkout to a version
err when the specified version is not found
2023-08-11 09:32:34 +08:00
Zixuan Chen
273c0e9c78 test: add version checkout fuzzing test 2023-08-11 08:14:38 +08:00
Zixuan Chen
299f00d90f perf: fix a perf regression 2023-08-07 20:14:01 +08:00
Zixuan Chen
addadcdce5 perf: make map diff faster 2023-08-07 15:00:11 +08:00
Zixuan Chen
e15e207cab fix: diff calc err 2023-08-07 10:43:50 +08:00
Zixuan Chen
c31a4a0239 feat: get timestamp 2023-08-06 15:18:00 +08:00
Zixuan Chen
7d5ee5f6d0 perf: make import remote changes faster 2023-08-06 01:41:22 +08:00
Zixuan Chen
dc5159bf67 perf: speed up op converting 2023-08-06 01:07:08 +08:00
Zixuan Chen
a8b7d65f8a feat: import without state 2023-08-05 23:29:11 +08:00
Zixuan Chen
1b300fdc65 chore: clear logs 2023-08-05 19:51:08 +08:00
Zixuan Chen
3551bc4e99 fix: changes traveler bug
should iter every change between two version, even when
a and b are parallel to each other
2023-08-05 19:47:15 +08:00
Zixuan Chen
7ab8ccff64 refactor: return handler when inserting container 2023-08-05 16:25:31 +08:00
Zixuan Chen
f9764a2d4c
Fix DiffCalculator error when going back in history(#106) 2023-08-05 16:11:41 +08:00
Zixuan Chen
ccee201641 refactor: better interface 2023-08-05 12:44:31 +08:00
Zixuan Chen
a661b776c4
Allow commit with custom timestamp (#105) 2023-08-05 12:43:29 +08:00
Zixuan Chen
b22bd98f6b
feat: make getting child container handler simple (#104) 2023-08-05 10:23:14 +08:00
Zixuan Chen
72cc8c6ed5
fix: map version checkout err (#101) 2023-08-04 22:41:02 +08:00
Zixuan Chen
640828bf26 fix: should be readonly when doc is in detached mode 2023-08-04 14:45:22 +08:00