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