Skip to content

Commit 41240f5

Browse files
committed
Fix observor getting logic
1 parent 7dac38d commit 41240f5

File tree

3 files changed

+14
-36
lines changed

3 files changed

+14
-36
lines changed

dist/fast-json-patch.js

Lines changed: 11 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -741,10 +741,10 @@ exports.JsonPatchError = helpers_2.PatchError;
741741
exports.deepClone = helpers_2._deepClone;
742742
exports.escapePathComponent = helpers_2.escapePathComponent;
743743
exports.unescapePathComponent = helpers_2.unescapePathComponent;
744-
var beforeDict = [];
744+
var beforeDict = new WeakMap();
745745
var Mirror = (function () {
746746
function Mirror(obj) {
747-
this.observers = [];
747+
this.observers = new Map();
748748
this.obj = obj;
749749
}
750750
return Mirror;
@@ -757,26 +757,13 @@ var ObserverInfo = (function () {
757757
return ObserverInfo;
758758
}());
759759
function getMirror(obj) {
760-
for (var i = 0, length = beforeDict.length; i < length; i++) {
761-
if (beforeDict[i].obj === obj) {
762-
return beforeDict[i];
763-
}
764-
}
760+
return beforeDict.get(obj);
765761
}
766762
function getObserverFromMirror(mirror, callback) {
767-
for (var j = 0, length = mirror.observers.length; j < length; j++) {
768-
if (mirror.observers[j].callback === callback) {
769-
return mirror.observers[j].observer;
770-
}
771-
}
763+
return mirror.observers.get(callback);
772764
}
773765
function removeObserverFromMirror(mirror, observer) {
774-
for (var j = 0, length = mirror.observers.length; j < length; j++) {
775-
if (mirror.observers[j].observer === observer) {
776-
mirror.observers.splice(j, 1);
777-
return;
778-
}
779-
}
766+
mirror.observers.delete(observer.callback);
780767
}
781768
/**
782769
* Detach an observer from an object
@@ -790,15 +777,15 @@ exports.unobserve = unobserve;
790777
*/
791778
function observe(obj, callback) {
792779
var patches = [];
793-
var root = obj;
794780
var observer;
795781
var mirror = getMirror(obj);
796782
if (!mirror) {
797783
mirror = new Mirror(obj);
798-
beforeDict.push(mirror);
784+
beforeDict.set(obj, mirror);
799785
}
800786
else {
801-
observer = getObserverFromMirror(mirror, callback);
787+
var observerInfo = getObserverFromMirror(mirror, callback);
788+
observer = observerInfo && observerInfo.observer;
802789
}
803790
if (observer) {
804791
return observer;
@@ -853,21 +840,15 @@ function observe(obj, callback) {
853840
}
854841
}
855842
};
856-
mirror.observers.push(new ObserverInfo(callback, observer));
843+
mirror.observers.set(callback, new ObserverInfo(callback, observer));
857844
return observer;
858845
}
859846
exports.observe = observe;
860847
/**
861848
* Generate an array of patches from an observer
862849
*/
863850
function generate(observer) {
864-
var mirror;
865-
for (var i = 0, length = beforeDict.length; i < length; i++) {
866-
if (beforeDict[i].obj === observer.object) {
867-
mirror = beforeDict[i];
868-
break;
869-
}
870-
}
851+
var mirror = beforeDict.get(observer.object);
871852
_generate(mirror.value, observer.object, observer.patches, "");
872853
if (observer.patches.length) {
873854
core_1.applyPatch(mirror.value, observer.patches);
@@ -910,14 +891,10 @@ function _generate(mirror, obj, patches, path) {
910891
}
911892
}
912893
}
913-
else if (Array.isArray(mirror) === Array.isArray(obj)) {
894+
else {
914895
patches.push({ op: "remove", path: path + "/" + helpers_1.escapePathComponent(key) });
915896
deleted = true; // property has been deleted
916897
}
917-
else {
918-
patches.push({ op: "replace", path: path, value: obj });
919-
changed = true;
920-
}
921898
}
922899
if (!deleted && newKeys.length == oldKeys.length) {
923900
return;

0 commit comments

Comments
 (0)