rework and document api

This commit is contained in:
Kevin Jahns
2019-05-07 13:44:23 +02:00
parent 77687d94e6
commit 8c36f67f0b
33 changed files with 622 additions and 427 deletions

View File

@@ -17,7 +17,7 @@ import {
getItemType,
getItemCleanEnd,
getItemCleanStart,
YEvent, StructStore, ID, AbstractType, Y, Transaction // eslint-disable-line
YEvent, StructStore, ID, AbstractType, Transaction // eslint-disable-line
} from '../internals.js'
import * as error from 'lib0/error.js'
@@ -153,7 +153,7 @@ export class AbstractItem extends AbstractStruct {
* @private
*/
integrate (transaction) {
const store = transaction.y.store
const store = transaction.doc.store
const id = this.id
const parent = this.parent
const parentSub = this.parentSub
@@ -415,23 +415,19 @@ export class AbstractItem extends AbstractStruct {
}
/**
* @param {Transaction} transaction
* @param {StructStore} store
*
* @private
*/
gcChildren (transaction, store) { }
gcChildren (store) { }
/**
* @todo remove transaction param
*
* @param {Transaction} transaction
* @param {StructStore} store
* @param {boolean} parentGCd
*
* @private
*/
gc (transaction, store, parentGCd) {
gc (store, parentGCd) {
if (!this.deleted) {
throw error.unexpectedCase()
}
@@ -619,12 +615,16 @@ export const computeItemParams = (transaction, store, leftid, rightid, parentid,
case GC:
break
default:
// Edge case: toStruct is called with an offset > 0. In this case left is defined.
// Depending in which order structs arrive, left may be GC'd and the parent not
// deleted. This is why we check if left is GC'd. Strictly we probably don't have
// to check if right is GC'd, but we will in case we run into future issues
if (!parentItem.deleted && (left === null || left.constructor !== GC) && (right === null || right.constructor !== GC)) {
parent = parentItem.type
}
}
} else if (parentYKey !== null) {
parent = transaction.y.get(parentYKey)
parent = transaction.doc.get(parentYKey)
} else if (left !== null) {
if (left.constructor !== GC) {
parent = left.parent

View File

@@ -1,6 +1,6 @@
import {
Y, StructStore, ID, Transaction // eslint-disable-line
StructStore, ID, Transaction // eslint-disable-line
} from '../internals.js'
import * as encoding from 'lib0/encoding.js' // eslint-disable-line

View File

@@ -4,7 +4,7 @@ import {
AbstractStruct,
createID,
addStruct,
Y, StructStore, Transaction, ID // eslint-disable-line
StructStore, Transaction, ID // eslint-disable-line
} from '../internals.js'
import * as decoding from 'lib0/decoding.js'
@@ -48,7 +48,7 @@ export class GC extends AbstractStruct {
* @param {Transaction} transaction
*/
integrate (transaction) {
addStruct(transaction.y.store, this)
addStruct(transaction.doc.store, this)
}
/**

View File

@@ -9,6 +9,7 @@ import {
import * as encoding from 'lib0/encoding.js'
import * as decoding from 'lib0/decoding.js'
import * as buffer from 'lib0/buffer.js'
/**
* @private
@@ -27,7 +28,7 @@ export class ItemBinary extends AbstractItem {
* @param {ID | null} rightOrigin
* @param {AbstractType<any>} parent
* @param {string | null} parentSub
* @param {ArrayBuffer} content
* @param {Uint8Array} content
*/
constructor (id, left, origin, right, rightOrigin, parent, parentSub, content) {
super(id, left, origin, right, rightOrigin, parent, parentSub)
@@ -54,7 +55,7 @@ export class ItemBinary extends AbstractItem {
*/
write (encoder, offset) {
super.write(encoder, offset, structBinaryRefNumber)
encoding.writePayload(encoder, this.content)
encoding.writeVarUint8Array(encoder, this.content)
}
}
@@ -70,9 +71,9 @@ export class ItemBinaryRef extends AbstractItemRef {
constructor (decoder, id, info) {
super(decoder, id, info)
/**
* @type {ArrayBuffer}
* @type {Uint8Array}
*/
this.content = decoding.readPayload(decoder)
this.content = buffer.copyUint8Array(decoding.readVarUint8Array(decoder))
}
/**
* @param {Transaction} transaction

View File

@@ -8,7 +8,7 @@ import {
splitItem,
addToDeleteSet,
mergeItemWith,
Y, StructStore, Transaction, ID, AbstractType // eslint-disable-line
StructStore, Transaction, ID, AbstractType // eslint-disable-line
} from '../internals.js'
import * as encoding from 'lib0/encoding.js'
@@ -87,15 +87,14 @@ export class ItemDeleted extends AbstractItem {
}
/**
* @param {Transaction} transaction
* @param {StructStore} store
* @param {boolean} parentGCd
*
* @private
*/
gc (transaction, store, parentGCd) {
gc (store, parentGCd) {
if (parentGCd) {
super.gc(transaction, store, parentGCd)
super.gc(store, parentGCd)
}
}
/**

View File

@@ -67,7 +67,7 @@ export class ItemEmbedRef extends AbstractItemRef {
constructor (decoder, id, info) {
super(decoder, id, info)
/**
* @type {ArrayBuffer}
* @type {Object}
*/
this.embed = JSON.parse(decoding.readVarString(decoder))
}

View File

@@ -7,7 +7,7 @@ import {
changeItemRefOffset,
GC,
mergeItemWith,
Transaction, StructStore, Y, ID, AbstractType // eslint-disable-line
Transaction, StructStore, ID, AbstractType // eslint-disable-line
} from '../internals.js'
import * as encoding from 'lib0/encoding.js'

View File

@@ -7,7 +7,7 @@ import {
changeItemRefOffset,
GC,
mergeItemWith,
Transaction, StructStore, Y, ID, AbstractType // eslint-disable-line
Transaction, StructStore, ID, AbstractType // eslint-disable-line
} from '../internals.js'
import * as encoding from 'lib0/encoding.js'

View File

@@ -10,7 +10,7 @@ import {
readYXmlFragment,
readYXmlHook,
readYXmlText,
StructStore, Y, GC, Transaction, ID, AbstractType // eslint-disable-line
StructStore, GC, Transaction, ID, AbstractType // eslint-disable-line
} from '../internals.js'
import * as encoding from 'lib0/encoding.js' // eslint-disable-line
@@ -83,7 +83,7 @@ export class ItemType extends AbstractItem {
*/
integrate (transaction) {
super.integrate(transaction)
this.type._integrate(transaction.y, this)
this.type._integrate(transaction.doc, this)
}
/**
* @param {encoding.Encoder} encoder
@@ -129,19 +129,18 @@ export class ItemType extends AbstractItem {
}
/**
* @param {Transaction} transaction
* @param {StructStore} store
*/
gcChildren (transaction, store) {
gcChildren (store) {
let item = this.type._start
while (item !== null) {
item.gc(transaction, store, true)
item.gc(store, true)
item = item.right
}
this.type._start = null
this.type._map.forEach(item => {
while (item !== null) {
item.gc(transaction, store, true)
item.gc(store, true)
// @ts-ignore
item = item.left
}
@@ -150,13 +149,12 @@ export class ItemType extends AbstractItem {
}
/**
* @param {Transaction} transaction
* @param {StructStore} store
* @param {boolean} parentGCd
*/
gc (transaction, store, parentGCd) {
this.gcChildren(transaction, store)
super.gc(transaction, store, parentGCd)
gc (store, parentGCd) {
this.gcChildren(store)
super.gc(store, parentGCd)
}
}