From bdb3782f8f6b27db9b90bc601a3763e46781aa7e Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Wed, 2 May 2018 18:42:18 +0200
Subject: [PATCH] add option to disable gc (compatible with older versions)

---
 src/MessageHandler/integrateRemoteStructs.js | 2 +-
 src/Struct/Type.js                           | 4 ++--
 src/Y.js                                     | 3 ++-
 3 files changed, 5 insertions(+), 4 deletions(-)

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}