47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
|
|
import * as ID from './ID.js'
|
|
|
|
/**
|
|
* Stringify an item id.
|
|
*
|
|
* @param {ID.ID | ID.RootID} id
|
|
* @return {string}
|
|
*/
|
|
export const stringifyID = id => id instanceof ID.ID ? `(${id.user},${id.clock})` : `(${id.name},${id.type})`
|
|
|
|
/**
|
|
* Stringify an item as ID. HHere, an item could also be a Yjs instance (e.g. item._parent).
|
|
*
|
|
* @param {Item | Y | null} item
|
|
* @return {string}
|
|
*/
|
|
export const stringifyItemID = item => {
|
|
let result
|
|
if (item === null) {
|
|
result = '()'
|
|
} else if (item._id != null) {
|
|
result = stringifyID(item._id)
|
|
} else {
|
|
// must be a Yjs instance
|
|
// Don't include Y in this module, so we prevent circular dependencies.
|
|
result = 'y'
|
|
}
|
|
return result
|
|
}
|
|
|
|
/**
|
|
* Helper utility to convert an item to a readable format.
|
|
*
|
|
* @param {String} name The name of the item class (YText, ItemString, ..).
|
|
* @param {Item} item The item instance.
|
|
* @param {String} [append] Additional information to append to the returned
|
|
* string.
|
|
* @return {String} A readable string that represents the item object.
|
|
*
|
|
*/
|
|
export const logItemHelper = (name, item, append) => {
|
|
const left = item._left !== null ? stringifyID(item._left._lastId) : '()'
|
|
const origin = item._origin !== null ? stringifyID(item._origin._lastId) : '()'
|
|
return `${name}(id:${stringifyItemID(item)},left:${left},origin:${origin},right:${stringifyItemID(item._right)},parent:${stringifyItemID(item._parent)},parentSub:${item._parentSub}${append !== undefined ? ' - ' + append : ''})`
|
|
}
|