Y.Text snapshot support (toDelta)

This commit is contained in:
Kevin Jahns
2019-08-31 22:42:18 +02:00
parent e78d84ee59
commit 8bcff6138c
5 changed files with 153 additions and 38 deletions

View File

@@ -1,9 +1,17 @@
import {
isDeleted,
DeleteSet, Item // eslint-disable-line
createDeleteSetFromStructStore,
getStateVector,
getItemCleanStart,
createID,
iterateDeletedStructs,
Transaction, Doc, DeleteSet, Item // eslint-disable-line
} from '../internals.js'
import * as map from 'lib0/map.js'
import * as set from 'lib0/set.js'
export class Snapshot {
/**
* @param {DeleteSet} ds
@@ -27,9 +35,16 @@ export class Snapshot {
/**
* @param {DeleteSet} ds
* @param {Map<number,number>} sm
* @return {Snapshot}
*/
export const createSnapshot = (ds, sm) => new Snapshot(ds, sm)
/**
* @param {Doc} doc
* @return {Snapshot}
*/
export const createSnapshotFromDoc = doc => createSnapshot(createDeleteSetFromStructStore(doc.store), getStateVector(doc.store))
/**
* @param {Item} item
* @param {Snapshot|undefined} snapshot
@@ -40,3 +55,20 @@ export const createSnapshot = (ds, sm) => new Snapshot(ds, sm)
export const isVisible = (item, snapshot) => snapshot === undefined ? !item.deleted : (
snapshot.sm.has(item.id.client) && (snapshot.sm.get(item.id.client) || 0) > item.id.clock && !isDeleted(snapshot.ds, item.id)
)
/**
* @param {Transaction} transaction
* @param {Snapshot} snapshot
*/
export const splitSnapshotAffectedStructs = (transaction, snapshot) => {
const meta = map.setIfUndefined(transaction.meta, splitSnapshotAffectedStructs, set.create)
const store = transaction.doc.store
// check if we already split for this snapshot
if (!meta.has(snapshot)) {
snapshot.sm.forEach((clock, client) => {
getItemCleanStart(transaction, store, createID(client, clock))
})
iterateDeletedStructs(transaction, snapshot.ds, store, item => {})
meta.add(snapshot)
}
}

View File

@@ -90,6 +90,11 @@ export class Transaction {
* @type {any}
*/
this.origin = origin
/**
* Stores meta information on the transaction
* @type {Map<any,any>}
*/
this.meta = new Map()
}
}