@@ -741,10 +741,10 @@ exports.JsonPatchError = helpers_2.PatchError;
741741exports . deepClone = helpers_2 . _deepClone ;
742742exports . escapePathComponent = helpers_2 . escapePathComponent ;
743743exports . unescapePathComponent = helpers_2 . unescapePathComponent ;
744- var beforeDict = [ ] ;
744+ var beforeDict = new WeakMap ( ) ;
745745var 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} ( ) ) ;
759759function 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}
766762function 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}
773765function 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 */
791778function 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}
859846exports . observe = observe ;
860847/**
861848 * Generate an array of patches from an observer
862849 */
863850function 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