We are very excited to announce the release of Loro v1.0, which is a major milestone. It has stable encoding format, faster document import and export speed, better version control capabilities and history gc feature. For more information, please check the blog.
The following are the specific API changes:
New
LoroDoc
getChange(id: ID)
: getChangeMeta
byID
.setDetachedEditing(flag: boolean)
: Enables editing in detached mode, which is disabled by default.isDetachedEditingEnabled()
: Whether the editing is enabled in detached mode.setNextCommitMessage(msg: string)
: Set the commit message of the next commit.shallowSinceVV()
: The doc only contains the history since this version.shallowSinceFrontiers()
: The doc only contains the history since this version.export(mode: ExportMode)
: Export the document based on the specified ExportMode. see more details here.getDeepValueWithID()
: Get deep value of the document with container id.subscribeLocalUpdates(callback:(bytes: Uint8Array) => void)
: Subscribe to updates from local edits.getPathToContainer(id: ContainerID)
: Get the path from the root to the container.JSONPath(jsonPath: string)
: Evaluate JSONPath against a LoroDoc.forkAt(frontiers: Frontiers): LoroDoc
: Creates a new LoroDoc at a specified version (Frontiers)getPendingTxnLength():number
: Get the number of operations in the pending transaction.travelChangeAncestors(ids: ID[], callback: (meta: ChangeMeta)->bool)
: Iterate over all changes including the input id in order, and stop iterating if the callback returns false.
LoroText
updateByLine(text: string)
: Update the current text based on the provided text line by line like git.
LoroList
toArray(): ValueOrContainer[]
: Get elements of the list. If the value is a child container, the correspondingContainer
will be returned.clear()
: Delete all elements in the list.
LoroMovableList
toArray(): ValueOrContainer[]
: Get elements of the list. If the value is a child container, the correspondingContainer
will be returned.clear()
: Delete all elements in the list.
LoroMap
clear()
: Delete all key-value pairs in the map.
LoroTree
enableFractionalIndex(jitter: number)
: Set whether to generate fractional index for Tree Position.disableFractionalIndex()
: Disable the fractional index generation for Tree Position when you don't need the Tree's siblings to be sorted. The fractional index will be always default.isFractionalIndexEnabled()
: Whether the tree enables the fractional index generation.isNodeDeleted(id: TreeID)
: Returnundefined
if the node is not exist, otherwise returntrue
if the node is deleted.getNodes(prop: getNodesProp): LoroTreeNode[]
: Get the flat array of the forest. Ifwith_deleted
is true, the deleted nodes will be included.
UndoManager
clear()
: Clear the Undo and Redo stack ofUndoManager
Changes
LoroDoc
- Move
setFractionalIndexJitter()
toLoroTree
, you can set whether to enable or disable it for eachTree Container
. import()
,importWith()
andimportJsonUpdates
will returnImportStatus
for indicating which ops have been successfully applied and which ops are pending.- New Subscription for event.
- In Loro 1.0,
doc.version()
doc.frontiers()
doc.oplogVersion()
anddoc.oplogFrontiers()
even if ops has not been committed, it indicates the latest version of all operations. - rename
Loro
toLoroDoc
.
LoroTree
contains(id: TreeID)
: Return true even if the node exists in the internal state and has been deleted.nodes()
: deleted nodes will be included now, you can useisDeleted()
to filter.toJSON()
: Now use the hierarchical approach to express the tree structure.
Deprecation
LoroDoc
exportFrom(version)
andexportSnapshot()
are deprecated, useexport(mode: ExportMode)
instead.