json-dry
Advanced tools
Comparing version 1.0.3 to 1.0.4
@@ -0,1 +1,5 @@ | ||
## 1.0.4 (2018-06-18) | ||
* Fix circular references that were incorrectly passed to an undrier | ||
## 1.0.3 (2018-02-06) | ||
@@ -2,0 +6,0 @@ |
@@ -347,3 +347,2 @@ "use strict"; | ||
if (constructor && typeof constructor.unDry === 'function') { | ||
//value.undried = constructor.unDry(value.value); | ||
value.unDryConstructor = constructor; | ||
@@ -364,3 +363,2 @@ } else { | ||
if (undriers[value.dry]) { | ||
//value.undried = undriers[value.dry].fnc(this, key, value.value); | ||
value.unDryFunction = undriers[value.dry].fnc; | ||
@@ -655,7 +653,7 @@ } else { | ||
* @since 0.1.4 | ||
* @version 1.0.0 | ||
* @version 1.0.4 | ||
* | ||
* @return {Array} | ||
*/ | ||
function regenerateArray(root, current, seen, retrieve, undry_paths, old) { | ||
function regenerateArray(root, holder, current, seen, retrieve, undry_paths, old) { | ||
@@ -668,3 +666,3 @@ var length = current.length, | ||
if (!seen.get(current[i])) { | ||
current[i] = regenerate(root, current[i], seen, retrieve, undry_paths, old); | ||
current[i] = regenerate(root, current, current[i], seen, retrieve, undry_paths, old); | ||
} | ||
@@ -681,7 +679,7 @@ } | ||
* @since 0.1.4 | ||
* @version 1.0.0 | ||
* @version 1.0.4 | ||
* | ||
* @return {Object} | ||
*/ | ||
function regenerateObject(root, current, seen, retrieve, undry_paths, old) { | ||
function regenerateObject(root, holder, current, seen, retrieve, undry_paths, old) { | ||
@@ -694,3 +692,3 @@ var key; | ||
if (!seen.get(current[key])) { | ||
current[key] = regenerate(root, current[key], seen, retrieve, undry_paths, old); | ||
current[key] = regenerate(root, current, current[key], seen, retrieve, undry_paths, old); | ||
} | ||
@@ -708,7 +706,7 @@ } | ||
* @since 0.1.4 | ||
* @version 1.0.3 | ||
* @version 1.0.4 | ||
* | ||
* @return {Mixed} | ||
*/ | ||
function regenerate(root, current, seen, retrieve, undry_paths, old) { | ||
function regenerate(root, holder, current, seen, retrieve, undry_paths, old) { | ||
@@ -722,3 +720,3 @@ var temp; | ||
if (current instanceof Array) { | ||
return regenerateArray(root, current, seen, retrieve, undry_paths, old); | ||
return regenerateArray(root, holder, current, seen, retrieve, undry_paths, old); | ||
} | ||
@@ -731,3 +729,15 @@ | ||
if (undry_paths.get(current)) { | ||
if (temp = undry_paths.get(current)) { | ||
if (typeof temp.undried != 'undefined') { | ||
return temp.undried; | ||
} | ||
if (!holder) { | ||
throw new Error('Unable to resolve recursive reference'); | ||
} | ||
undry_paths.extra_pass.push([holder, temp]); | ||
return temp; | ||
return undry_paths.get(current).undried; | ||
@@ -755,3 +765,3 @@ } | ||
// (We have to create a new instance, because it's already been "seen") | ||
temp = retrieve[current] = regenerate(root, new String(temp), seen, retrieve, undry_paths, old); | ||
temp = retrieve[current] = regenerate(root, holder, new String(temp), seen, retrieve, undry_paths, old); | ||
} | ||
@@ -765,3 +775,3 @@ | ||
return regenerateObject(root, current, seen, retrieve, undry_paths, old); | ||
return regenerateObject(root, holder, current, seen, retrieve, undry_paths, old); | ||
} | ||
@@ -993,3 +1003,3 @@ | ||
* @since 1.0.0 | ||
* @version 1.0.2 | ||
* @version 1.0.4 | ||
* | ||
@@ -1006,5 +1016,8 @@ * @param {Object} value | ||
result, | ||
holder, | ||
entry, | ||
temp, | ||
seen, | ||
path, | ||
key, | ||
old = {}; | ||
@@ -1032,2 +1045,5 @@ | ||
// Maybe paths need another round of undrying | ||
undry_paths.extra_pass = []; | ||
// Iterate over all the values that require some kind of function to be revived | ||
@@ -1039,3 +1055,3 @@ undry_paths.forEach(function eachEntry(entry, path) { | ||
// Regenerate this replacement wrapper first | ||
regenerate(result, entry, seen, retrieve, undry_paths, old); | ||
regenerate(result, null, entry, seen, retrieve, undry_paths, old); | ||
@@ -1059,4 +1075,17 @@ if (entry.unDryConstructor) { | ||
for (var i = 0; i < undry_paths.extra_pass.length; i++) { | ||
entry = undry_paths.extra_pass[i]; | ||
holder = entry[0]; | ||
temp = entry[1]; | ||
for (key in holder) { | ||
if (holder[key] == temp) { | ||
holder[key] = temp.undried; | ||
break; | ||
} | ||
} | ||
} | ||
// Only now we can resolve paths | ||
result = regenerate(result, result, seen, retrieve, undry_paths, old); | ||
result = regenerate(result, result, result, seen, retrieve, undry_paths, old); | ||
@@ -1063,0 +1092,0 @@ if (result.undried != null && result.dry) { |
{ | ||
"name": "json-dry", | ||
"description": "Don't repeat yourself, JSON: Add support for (circular) references, class instances, ...", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"author": "Jelle De Loecker <jelle@develry.be>", | ||
@@ -6,0 +6,0 @@ "keywords": [ |
35805
896