Commit graph

49 commits

Author SHA1 Message Date
Zixuan Chen
205fa94653
chore: bump loro-crdt 2024-04-05 02:25:25 +08:00
Zixuan Chen
a215d88c03
refactor: add concrete type for each different container (#313) 2024-04-03 19:24:48 +08:00
Zixuan Chen
1015ee33a7
chore: bump loro-crdt 2024-03-31 02:12:06 +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
422e442012
chore: bump loro-crdt to 0.13.0 2024-03-30 11:44:18 +08:00
Zixuan Chen
edb0ef75f6
chore: Update VSCode settings and dependencies (#299) 2024-03-30 06:53:22 +08:00
Zixuan Chen
e58e4e3fdd
chore: bump loro-crdt to v0.12.0 2024-03-27 23:53:34 +08:00
Zixuan Chen
751082f307
chore: bump 2024-02-17 14:42:37 +08:00
Zixuan Chen
7a75673fb8
chore: bump version of loro-crdt 2024-02-10 22:25:05 +08:00
Zixuan Chen
fd7c37c94e
chore: bump version to 0.10.1 2024-01-24 10:01:30 +08:00
Zixuan Chen
e304af05f4
chore: bump loro-crdt 2024-01-22 13:00:42 +08:00
Zixuan Chen
dbef6b0a38
chore: bump loro-crdt version 2024-01-21 20:04:31 +08:00
Zixuan Chen
bbea78b9bf
chore: bump version 2024-01-20 00:59:07 +08:00
Zixuan Chen
2b86783467
chore: bump loro-crdt version 2024-01-19 22:23:24 +08:00
Zixuan Chen
3a2c9523cd
chore: bump loro-crdt version 2024-01-18 13:30:26 +08:00
Zixuan Chen
ce1ac36b62
chore: bump loro-crdt version 2024-01-17 23:00:50 +08:00
Zixuan Chen
08390cb0de
chore: loro-crdt v0.8.0 2024-01-05 16:11:09 +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
9477717e3e
chore: bump loro-crdt versions to v0.7.1 2023-12-26 18:01:14 +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
ce36f8adbd
chore: bump version 2023-12-07 15:27:22 +08:00
Zixuan Chen
b689f5b1cd
chore: bump version 2023-12-06 23:39:55 +08:00
Zixuan Chen
4112a28607
chore: bump loro-crdt 2023-12-05 14:53:01 +08:00
Zixuan Chen
aa87a96286
chore: bump loro-crdt js 2023-12-05 14:31:06 +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
8b6f49f3b3
chore(release): 0.5.0 2023-11-27 17:56:04 +08:00
Zixuan Chen
ed5324b506
chore(release): 0.4.3 2023-11-16 22:26:41 +08:00
Zixuan Chen
a484484934
chore(release): 0.4.2 2023-11-16 21:53:04 +08:00
leeeon233
c4b753dfd8 chore: add license 2023-11-12 23:23:12 +08:00
Zixuan Chen
2129421b6a
chore(release): 0.4.1 2023-11-12 21:09:42 +08:00
Zixuan Chen
e871a6c438
chore: bump loro-wasm loro-crdt version 2023-11-10 20:41:11 +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
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
15be521777 feat: event & wasm 2023-07-29 02:03:51 +08:00
Zixuan Chen
794ed42ea4 chore: bump version 2023-05-11 12:19:47 +08:00
Zixuan Chen
bc09a0489f
feat: add typed versions of getMap and getList to Loro class (#96)
* feat: add typed versions of getMap and getList to Loro class

This commit adds `getTypedMap` and `getTypedList` methods to the `Loro` class, which allow for accessing maps and lists with type information. It also adds corresponding `getTyped`, `insertTyped`, and `setTyped` methods to `LoroMap` and `LoroList`. This makes it easier and safer to work with Loro's data structures.

* chore: bump version

* chore: alpha 1

* feat: add size and length to list and map

* chore: update deno test script
2023-05-11 11:59:48 +08:00
Zixuan Chen
023b2ab87d release: loro-crdt 0.2.7 2023-04-07 16:40:01 +08:00
Zixuan Chen
c61f238039 release: 0.2.6 loro-crdt 2023-04-07 16:36:48 +08:00
Zixuan Chen
598f6dbc33 release: loro-crdt v0.2.5 2023-04-07 14:29:18 +08:00
Zixuan Chen
82b5f8dc90
Perf: speed up utf16 and wasm (#90)
* perf: remove unused transact field

* perf: micro optimization

* bench: fix bench

* bench: add utf16 bench

* chore: refine diagnose

* perf: speedup utf16 lookup

* perf: use better utf16 len counter

* refactor: use js to cast Loro/Transaction

* refactor: map and list use __loro and __txn

* test: configure ci vitest

* chore: ci
2023-04-03 09:29:25 +08:00
Zixuan Chen
63cd719393 chore: bump loro-crdt version 2023-03-28 23:23:19 +08:00
Zixuan Chen
abafec9e18 chore: bump versions 2023-03-28 01:05:17 +08:00
Zixuan Chen
49f664dd8f feat: convert event to js & add vitest 2023-03-25 20:11:45 +08:00
Zixuan Chen
606685d42b chore: bump version 2023-03-24 11:50:10 +08:00
Zixuan Chen
aadde5af9e fix: loro-crdt type
Co-authored-by: Leonzhao <leeeon233@gmail.com>
2023-03-24 11:44:32 +08:00
Zixuan Chen
2f74b13e70 feat: extra pkg loro-crdt to wrap loro-wasm 2023-03-24 10:08:11 +08:00