This commit is contained in:
Kevin Jahns
2020-01-22 16:42:16 +01:00
parent ac8dab1e88
commit 6cd9e2be32
32 changed files with 910 additions and 574 deletions

View File

@@ -24,6 +24,7 @@ export class AbstractStruct {
this.length = length
this.deleted = false
}
/**
* Merge this struct with the item to the right.
* This method is already assuming that `this.id.clock + this.length === this.id.clock`.
@@ -34,6 +35,7 @@ export class AbstractStruct {
mergeWith (right) {
return false
}
/**
* @param {encoding.Encoder} encoder The encoder to write data to.
* @param {number} offset
@@ -43,6 +45,7 @@ export class AbstractStruct {
write (encoder, offset, encodingRef) {
throw error.methodUnimplemented()
}
/**
* @param {Transaction} transaction
*/
@@ -69,6 +72,7 @@ export class AbstractStructRef {
*/
this.id = id
}
/**
* @param {Transaction} transaction
* @return {Array<ID|null>}
@@ -76,6 +80,7 @@ export class AbstractStructRef {
getMissing (transaction) {
return this._missing
}
/**
* @param {Transaction} transaction
* @param {StructStore} store

View File

@@ -18,30 +18,35 @@ export class ContentAny {
*/
this.arr = arr
}
/**
* @return {number}
*/
getLength () {
return this.arr.length
}
/**
* @return {Array<any>}
*/
getContent () {
return this.arr
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentAny}
*/
copy () {
return new ContentAny(this.arr)
}
/**
* @param {number} offset
* @return {ContentAny}
@@ -51,6 +56,7 @@ export class ContentAny {
this.arr = this.arr.slice(0, offset)
return right
}
/**
* @param {ContentAny} right
* @return {boolean}
@@ -59,6 +65,7 @@ export class ContentAny {
this.arr = this.arr.concat(right.arr)
return true
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -84,6 +91,7 @@ export class ContentAny {
encoding.writeAny(encoder, c)
}
}
/**
* @return {number}
*/

View File

@@ -17,30 +17,35 @@ export class ContentBinary {
constructor (content) {
this.content = content
}
/**
* @return {number}
*/
getLength () {
return 1
}
/**
* @return {Array<any>}
*/
getContent () {
return [this.content]
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentBinary}
*/
copy () {
return new ContentBinary(this.content)
}
/**
* @param {number} offset
* @return {ContentBinary}
@@ -48,6 +53,7 @@ export class ContentBinary {
splice (offset) {
throw error.methodUnimplemented()
}
/**
* @param {ContentBinary} right
* @return {boolean}
@@ -55,6 +61,7 @@ export class ContentBinary {
mergeWith (right) {
return false
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -75,6 +82,7 @@ export class ContentBinary {
write (encoder, offset) {
encoding.writeVarUint8Array(encoder, this.content)
}
/**
* @return {number}
*/

View File

@@ -17,30 +17,35 @@ export class ContentDeleted {
constructor (len) {
this.len = len
}
/**
* @return {number}
*/
getLength () {
return this.len
}
/**
* @return {Array<any>}
*/
getContent () {
return []
}
/**
* @return {boolean}
*/
isCountable () {
return false
}
/**
* @return {ContentDeleted}
*/
copy () {
return new ContentDeleted(this.len)
}
/**
* @param {number} offset
* @return {ContentDeleted}
@@ -50,6 +55,7 @@ export class ContentDeleted {
this.len = offset
return right
}
/**
* @param {ContentDeleted} right
* @return {boolean}
@@ -58,6 +64,7 @@ export class ContentDeleted {
this.len += right.len
return true
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -66,6 +73,7 @@ export class ContentDeleted {
addToDeleteSet(transaction.deleteSet, item.id, this.len)
item.deleted = true
}
/**
* @param {Transaction} transaction
*/
@@ -81,6 +89,7 @@ export class ContentDeleted {
write (encoder, offset) {
encoding.writeVarUint(encoder, this.len - offset)
}
/**
* @return {number}
*/

View File

@@ -17,30 +17,35 @@ export class ContentEmbed {
constructor (embed) {
this.embed = embed
}
/**
* @return {number}
*/
getLength () {
return 1
}
/**
* @return {Array<any>}
*/
getContent () {
return [this.embed]
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentEmbed}
*/
copy () {
return new ContentEmbed(this.embed)
}
/**
* @param {number} offset
* @return {ContentEmbed}
@@ -48,6 +53,7 @@ export class ContentEmbed {
splice (offset) {
throw error.methodUnimplemented()
}
/**
* @param {ContentEmbed} right
* @return {boolean}
@@ -55,6 +61,7 @@ export class ContentEmbed {
mergeWith (right) {
return false
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -75,6 +82,7 @@ export class ContentEmbed {
write (encoder, offset) {
encoding.writeVarString(encoder, JSON.stringify(this.embed))
}
/**
* @return {number}
*/

View File

@@ -19,30 +19,35 @@ export class ContentFormat {
this.key = key
this.value = value
}
/**
* @return {number}
*/
getLength () {
return 1
}
/**
* @return {Array<any>}
*/
getContent () {
return []
}
/**
* @return {boolean}
*/
isCountable () {
return false
}
/**
* @return {ContentFormat}
*/
copy () {
return new ContentFormat(this.key, this.value)
}
/**
* @param {number} offset
* @return {ContentFormat}
@@ -50,6 +55,7 @@ export class ContentFormat {
splice (offset) {
throw error.methodUnimplemented()
}
/**
* @param {ContentFormat} right
* @return {boolean}
@@ -57,6 +63,7 @@ export class ContentFormat {
mergeWith (right) {
return false
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -78,6 +85,7 @@ export class ContentFormat {
encoding.writeVarString(encoder, this.key)
encoding.writeVarString(encoder, JSON.stringify(this.value))
}
/**
* @return {number}
*/

View File

@@ -18,30 +18,35 @@ export class ContentJSON {
*/
this.arr = arr
}
/**
* @return {number}
*/
getLength () {
return this.arr.length
}
/**
* @return {Array<any>}
*/
getContent () {
return this.arr
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentJSON}
*/
copy () {
return new ContentJSON(this.arr)
}
/**
* @param {number} offset
* @return {ContentJSON}
@@ -51,6 +56,7 @@ export class ContentJSON {
this.arr = this.arr.slice(0, offset)
return right
}
/**
* @param {ContentJSON} right
* @return {boolean}
@@ -59,6 +65,7 @@ export class ContentJSON {
this.arr = this.arr.concat(right.arr)
return true
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -84,6 +91,7 @@ export class ContentJSON {
encoding.writeVarString(encoder, c === undefined ? 'undefined' : JSON.stringify(c))
}
}
/**
* @return {number}
*/

View File

@@ -18,30 +18,35 @@ export class ContentString {
*/
this.str = str
}
/**
* @return {number}
*/
getLength () {
return this.str.length
}
/**
* @return {Array<any>}
*/
getContent () {
return this.str.split('')
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentString}
*/
copy () {
return new ContentString(this.str)
}
/**
* @param {number} offset
* @return {ContentString}
@@ -51,6 +56,7 @@ export class ContentString {
this.str = this.str.slice(0, offset)
return right
}
/**
* @param {ContentString} right
* @return {boolean}
@@ -59,6 +65,7 @@ export class ContentString {
this.str += right.str
return true
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -79,6 +86,7 @@ export class ContentString {
write (encoder, offset) {
encoding.writeVarString(encoder, offset === 0 ? this.str : this.str.slice(offset))
}
/**
* @return {number}
*/

View File

@@ -49,30 +49,35 @@ export class ContentType {
*/
this.type = type
}
/**
* @return {number}
*/
getLength () {
return 1
}
/**
* @return {Array<any>}
*/
getContent () {
return [this.type]
}
/**
* @return {boolean}
*/
isCountable () {
return true
}
/**
* @return {ContentType}
*/
copy () {
return new ContentType(this.type._copy())
}
/**
* @param {number} offset
* @return {ContentType}
@@ -80,6 +85,7 @@ export class ContentType {
splice (offset) {
throw error.methodUnimplemented()
}
/**
* @param {ContentType} right
* @return {boolean}
@@ -87,6 +93,7 @@ export class ContentType {
mergeWith (right) {
return false
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -94,6 +101,7 @@ export class ContentType {
integrate (transaction, item) {
this.type._integrate(transaction.doc, item)
}
/**
* @param {Transaction} transaction
*/
@@ -121,6 +129,7 @@ export class ContentType {
})
transaction.changed.delete(this.type)
}
/**
* @param {StructStore} store
*/
@@ -139,6 +148,7 @@ export class ContentType {
})
this.type._map = new Map()
}
/**
* @param {encoding.Encoder} encoder
* @param {number} offset
@@ -146,6 +156,7 @@ export class ContentType {
write (encoder, offset) {
this.type._write(encoder)
}
/**
* @return {number}
*/

View File

@@ -69,6 +69,7 @@ export class GCRef extends AbstractStructRef {
*/
this.length = decoding.readVarUint(decoder)
}
/**
* @param {Transaction} transaction
* @param {StructStore} store

View File

@@ -430,6 +430,7 @@ export class Item extends AbstractStruct {
get lastId () {
return createID(this.id.client, this.id.clock + this.length - 1)
}
/**
* Try to merge two items
*
@@ -578,12 +579,14 @@ export class AbstractContent {
getLength () {
throw error.methodUnimplemented()
}
/**
* @return {Array<any>}
*/
getContent () {
throw error.methodUnimplemented()
}
/**
* Should return false if this Item is some kind of meta information
* (e.g. format information).
@@ -596,12 +599,14 @@ export class AbstractContent {
isCountable () {
throw error.methodUnimplemented()
}
/**
* @return {AbstractContent}
*/
copy () {
throw error.methodUnimplemented()
}
/**
* @param {number} offset
* @return {AbstractContent}
@@ -609,6 +614,7 @@ export class AbstractContent {
splice (offset) {
throw error.methodUnimplemented()
}
/**
* @param {AbstractContent} right
* @return {boolean}
@@ -616,6 +622,7 @@ export class AbstractContent {
mergeWith (right) {
throw error.methodUnimplemented()
}
/**
* @param {Transaction} transaction
* @param {Item} item
@@ -623,18 +630,21 @@ export class AbstractContent {
integrate (transaction, item) {
throw error.methodUnimplemented()
}
/**
* @param {Transaction} transaction
*/
delete (transaction) {
throw error.methodUnimplemented()
}
/**
* @param {StructStore} store
*/
gc (store) {
throw error.methodUnimplemented()
}
/**
* @param {encoding.Encoder} encoder
* @param {number} offset
@@ -642,6 +652,7 @@ export class AbstractContent {
write (encoder, offset) {
throw error.methodUnimplemented()
}
/**
* @return {number}
*/
@@ -709,6 +720,7 @@ export class ItemRef extends AbstractStructRef {
this.content = readItemContent(decoder, info)
this.length = this.content.getLength()
}
/**
* @param {Transaction} transaction
* @param {StructStore} store