mobservable
Advanced tools
Comparing version 1.1.0 to 1.1.1
@@ -0,1 +1,5 @@ | ||
# 1.1.1 | ||
* `toJSON` now serializes object trees with cycles as well. If you know the object tree is acyclic, pass in `false` as second parameter for a performance gain. | ||
# 1.1.0 | ||
@@ -2,0 +6,0 @@ |
@@ -22,3 +22,3 @@ import { Lambda, IObservableArray, IObservableValue, IContextInfoStruct, IArrayChange, IArraySplice, IObjectChange } from './interfaces'; | ||
export declare function extendObservable<A extends Object, B extends Object>(target: A, ...properties: B[]): A & B; | ||
export declare function toJSON(source: any): any; | ||
export declare function toJSON(source: any, detectCycles?: boolean, __alreadySeen?: [any, any][]): any; | ||
export declare function getStrict(): boolean; | ||
@@ -25,0 +25,0 @@ export declare function withStrict(newStrict: boolean, func: Lambda): void; |
@@ -238,21 +238,38 @@ /** | ||
} | ||
function toJSON(source) { | ||
function toJSON(source, detectCycles, __alreadySeen) { | ||
if (detectCycles === void 0) { detectCycles = true; } | ||
if (__alreadySeen === void 0) { __alreadySeen = null; } | ||
function cache(value) { | ||
if (detectCycles) | ||
__alreadySeen.push([source, value]); | ||
return value; | ||
} | ||
if (detectCycles && __alreadySeen === null) | ||
__alreadySeen = []; | ||
if (detectCycles && source !== null && typeof source === "object") { | ||
for (var i = 0, l = __alreadySeen.length; i < l; i++) | ||
if (__alreadySeen[i][0] === source) | ||
return __alreadySeen[i][1]; | ||
} | ||
if (!source) | ||
return source; | ||
if (Array.isArray(source) || source instanceof observablearray_1.ObservableArray) | ||
return source.map(toJSON); | ||
if (Array.isArray(source) || source instanceof observablearray_1.ObservableArray) { | ||
var res = cache([]); | ||
res.push.apply(res, source.map(function (value) { return toJSON(value, detectCycles, __alreadySeen); })); | ||
return res; | ||
} | ||
if (source instanceof observablemap_1.ObservableMap) { | ||
var res_1 = {}; | ||
source.forEach(function (value, key) { return res_1[key] = value; }); | ||
return res_1; | ||
var res = cache({}); | ||
source.forEach(function (value, key) { return res[key] = toJSON(value, detectCycles, __alreadySeen); }); | ||
return res; | ||
} | ||
if (typeof source === "object" && utils_1.isPlainObject(source)) { | ||
var res = {}; | ||
var res = cache({}); | ||
for (var key in source) | ||
if (source.hasOwnProperty(key)) | ||
res[key] = toJSON(source[key]); | ||
res[key] = toJSON(source[key], detectCycles, __alreadySeen); | ||
return res; | ||
} | ||
if (isObservable(source) && source.$mobservable instanceof observablevalue_1.ObservableValue) | ||
return source(); | ||
return toJSON(source(), detectCycles, __alreadySeen); | ||
return source; | ||
@@ -259,0 +276,0 @@ } |
{ | ||
"name": "mobservable", | ||
"version": "1.1.0", | ||
"version": "1.1.1", | ||
"description": "Observable data. Reactive functions. Simple code.", | ||
@@ -5,0 +5,0 @@ "main": "lib/index.js", |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
170209
2075