From 709779425cec16744addb1d184a28dfe85787e14 Mon Sep 17 00:00:00 2001
From: Kevin Jahns <kevin.jahns@rwth-aachen.de>
Date: Wed, 2 Dec 2015 20:04:59 +0100
Subject: [PATCH] make module import safer

---
 dist               |  2 +-
 src/Transaction.js |  2 +-
 src/y.js           | 32 ++++++++++++++------------------
 3 files changed, 16 insertions(+), 20 deletions(-)

diff --git a/dist b/dist
index 5da36f07..08f0702f 160000
--- a/dist
+++ b/dist
@@ -1 +1 @@
-Subproject commit 5da36f07cebfdcad53b845c0c3924c22f4894f2f
+Subproject commit 08f0702fcde82f22663752d3b8e31803f819c094
diff --git a/src/Transaction.js b/src/Transaction.js
index 1c5b6e22..57e14fed 100644
--- a/src/Transaction.js
+++ b/src/Transaction.js
@@ -550,7 +550,7 @@ module.exports = function (Y/* :any */) {
     }
     * addOperation (op) {
       yield* this.os.put(op)
-      if (!this.store.y.connector.isDisconnected() && this.store.forwardAppliedOperations) {
+      if (!this.store.y.connector.isDisconnected() && this.store.forwardAppliedOperations && op.id[0] !== '_') {
         // is connected, and this is not going to be send in addOperation
         this.store.y.connector.broadcast({
           type: 'update',
diff --git a/src/y.js b/src/y.js
index b2d596f7..17b5595b 100644
--- a/src/y.js
+++ b/src/y.js
@@ -25,30 +25,26 @@ function requestModules (modules) {
   // determine if this module was compiled for es5 or es6 (y.js vs. y.es6)
   // if Insert.execute is a Function, then it isnt a generator..
   // then load the es5(.js) files..
-  var extention = Y.Struct.Insert.execute.constructor === Function ? '.js' : '.es6'
+  var extention = typeof regeneratorRuntime !== 'undefined' ? '.js' : '.es6'
   var promises = []
   for (var i = 0; i < modules.length; i++) {
     var modulename = 'y-' + modules[i].toLowerCase()
     if (Y[modules[i]] == null) {
       if (requiringModules[modules[i]] == null) {
-        try {
-          require(modulename)(Y)
-        } catch (e) {
-          // module does not exist
-          if (typeof window !== 'undefined') {
-            var imported = document.createElement('script')
-            imported.src = Y.sourceDir + '/' + modulename + '/' + modulename + extention
-            document.head.appendChild(imported)
+        // module does not exist
+        if (typeof window !== 'undefined' && window.Y !== 'undefined') {
+          var imported = document.createElement('script')
+          imported.src = Y.sourceDir + '/' + modulename + '/' + modulename + extention
+          document.head.appendChild(imported)
 
-            let requireModule = {}
-            requiringModules[modules[i]] = requireModule
-            requireModule.promise = new Promise(function (resolve) {
-              requireModule.resolve = resolve
-            })
-            promises.push(requireModule.promise)
-          } else {
-            throw e
-          }
+          let requireModule = {}
+          requiringModules[modules[i]] = requireModule
+          requireModule.promise = new Promise(function (resolve) {
+            requireModule.resolve = resolve
+          })
+          promises.push(requireModule.promise)
+        } else {
+          require(modulename)(Y)
         }
       } else {
         promises.push(requiringModules[modules[i]].promise)
-- 
GitLab