diff --git a/src/MessageHandler/integrateRemoteStructs.js b/src/MessageHandler/integrateRemoteStructs.js index 390f0924..802c3af6 100644 --- a/src/MessageHandler/integrateRemoteStructs.js +++ b/src/MessageHandler/integrateRemoteStructs.js @@ -25,7 +25,7 @@ function _integrateRemoteStructHelper (y, struct) { if (y.ss.getState(id.user) > id.clock) { return } - if (struct.constructor === GC || (struct._parent.constructor !== GC && struct._parent._deleted === false)) { + if (!y.gcEnabled || struct.constructor === GC || (struct._parent.constructor !== GC && struct._parent._deleted === false)) { // Is either a GC or Item with an undeleted parent // save to integrate struct._integrate(y) diff --git a/src/Struct/Type.js b/src/Struct/Type.js index 6202454b..c8b63395 100644 --- a/src/Struct/Type.js +++ b/src/Struct/Type.js @@ -217,8 +217,8 @@ export default class Type extends Item { * collect the children of this type. */ _delete (y, createDelete, gcChildren) { - if (gcChildren === undefined) { - gcChildren = y._hasUndoManager === false + if (gcChildren === undefined || !y.gcEnabled) { + gcChildren = y._hasUndoManager === false && y.gcEnabled } super._delete(y, createDelete, gcChildren) y._transaction.changedTypes.delete(this) diff --git a/src/Y.js b/src/Y.js index 7a1ab318..0279cf17 100644 --- a/src/Y.js +++ b/src/Y.js @@ -28,8 +28,9 @@ export { default as DomBinding } from './Bindings/DomBinding/DomBinding.js' * @param {AbstractPersistence} persistence Persistence adapter instance */ export default class Y extends NamedEventHandler { - constructor (room, opts, persistence) { + constructor (room, opts, persistence, conf = {}) { super() + this.gcEnabled = conf.gc || false /** * The room name that this Yjs instance connects to. * @type {String}