merge with upstream

This commit is contained in:
Kevin Jahns 2020-07-12 18:50:32 +02:00
commit b73a720fdc
3 changed files with 47 additions and 2 deletions

View File

@ -169,6 +169,24 @@ export class Doc extends Observable {
return this.get(name, YXmlFragment)
}
/**
* Converts the entire document into a js object, recursively traversing each yjs type
*
* @return {Object<string, any>}
*/
toJSON () {
/**
* @type {Object<string, any>}
*/
const doc = {}
for (const [k, v] of this.share.entries()) {
doc[k] = v.toJSON()
}
return doc
}
/**
* Emit `destroy` event and unregister all event handlers.
*/

View File

@ -30,3 +30,30 @@ export const testGetTypeEmptyId = tc => {
t.assert(doc2.getText().toString() === 'hi')
t.assert(doc2.getText('').toString() === 'hi')
}
/**
* @param {t.TestCase} tc
*/
export const testToJSON = tc => {
const doc = new Y.Doc()
t.compare(doc.toJSON(), {}, 'doc.toJSON yields empty object')
const arr = doc.getArray('array')
arr.push(['test1'])
const map = doc.getMap('map')
map.set('k1', 'v1')
const map2 = new Y.Map()
map.set('k2', map2)
map2.set('m2k1', 'm2v1')
t.compare(doc.toJSON(), {
array: ['test1'],
map: {
k1: 'v1',
k2: {
m2k1: 'm2v1'
}
}
}, 'doc.toJSON has array and recursive map')
}

View File

@ -1,6 +1,6 @@
import * as array from './y-array.tests.js'
import * as map from './y-map.tests.js'
import * as array from './y-array.tests.js'
import * as text from './y-text.tests.js'
import * as xml from './y-xml.tests.js'
import * as encoding from './encoding.tests.js'
@ -16,7 +16,7 @@ if (isBrowser) {
log.createVConsole(document.body)
}
runTests({
map, array, text, xml, doc, encoding, undoredo, compatibility
doc, map, array, text, xml, encoding, undoredo, compatibility
}).then(success => {
/* istanbul ignore next */
if (isNode) {