From f29aa5f5f2a250ebe2e71954ea9d6a30afc274d0 Mon Sep 17 00:00:00 2001
From: Alvaro Cabrera <pateketrueke@gmail.com>
Date: Mon, 28 Nov 2016 12:04:52 -0600
Subject: [PATCH] Fix: restore clean() for pruning empty objects

---
 lib/core/traverse.js | Bin 2583 -> 2622 bytes
 ts/core/clean.ts     |  67 +++++++++++++++++++++++++++++++++++++++++++
 ts/core/traverse.ts  |   3 +-
 3 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 ts/core/clean.ts

diff --git a/lib/core/traverse.js b/lib/core/traverse.js
index ee263e57516aca4dde6bc4ec78f65b79db6c021f..379910ec781847cd02fc9f6f035c95bd558a5a3d 100644
GIT binary patch
delta 68
zcmbO(vQI=uskAs%p}3?dGr2^`nyW0aNFg~VH8D@YR-q`hur#wMRYOTnA1tJ#xsm53
SCl^RoBRRjIQgiYTPI&+o&KE2I

delta 29
kcmdldGF^m6skAs%p}3?dGr2@*qs~iC=KO-n$?{zC0GOEx*#H0l

diff --git a/ts/core/clean.ts b/ts/core/clean.ts
new file mode 100644
index 00000000..4e8e8acf
--- /dev/null
+++ b/ts/core/clean.ts
@@ -0,0 +1,67 @@
+// TODO: tsify
+
+function isArray(obj) {
+  return obj && Array.isArray(obj);
+}
+
+function isObject(obj) {
+  return obj && obj !== null && typeof obj === 'object';
+}
+
+function hasNothing(obj) {
+  if (isArray(obj)) {
+    return obj.length === 0;
+  }
+
+  if (isObject(obj)) {
+    return Object.keys(obj).length === 0;
+  }
+
+  return typeof obj === 'undefined' || obj === null;
+}
+
+function removeProps(obj, key?, parent?) {
+  var i,
+      value,
+      isFullyEmpty = true;
+
+  if (isArray(obj)) {
+    for (i = 0; i < obj.length; ++i) {
+      value = obj[i];
+
+      if (isObject(value)) {
+        removeProps(value, i, obj);
+      }
+
+      if (hasNothing(value)) {
+        obj.splice(i--, 1);
+      } else {
+        isFullyEmpty = false;
+      }
+    }
+  } else {
+    for (i in obj) {
+      value = obj[i];
+
+      if (isObject(value)) {
+        removeProps(value, i, obj);
+      }
+
+      if (hasNothing(value)) {
+        delete obj[i];
+      } else {
+        isFullyEmpty = false;
+      }
+    }
+  }
+
+  if (typeof key !== 'undefined' && isFullyEmpty) {
+    delete parent[key];
+    removeProps(obj);
+  }
+}
+
+export = function(obj: any) {
+  removeProps(obj);
+  return obj;
+};
diff --git a/ts/core/traverse.ts b/ts/core/traverse.ts
index 8ceb630b..4883f0f9 100644
--- a/ts/core/traverse.ts
+++ b/ts/core/traverse.ts
@@ -1,3 +1,4 @@
+import clean = require('./clean');
 import random = require('./random');
 import ParseError = require('./error');
 import inferType = require('./infer');
@@ -91,7 +92,7 @@ function traverse(schema: JsonSchema, path: SchemaPath, resolve: Function) {
     }
   }
 
-  return copy;
+  return clean(copy);
 }
 
 export = traverse;
-- 
GitLab