function addKnockoutArrayMutators(ko, array, subscribable, signal) {
  var fnNames = ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'];
  fnNames.forEach(function(fnName) {
    // Make it a non-enumerable property for consistency with standard Array
    // functions
    Object.defineProperty(array, fnName, {
      enumerable: false,
      value: function() {
        var result;

        // These additional array mutators are built using the underlying
        // push/pop/etc. mutators, which are wrapped to trigger notifications.
        // But we don't want to trigger multiple notifications, so pause the
        // push/pop/etc. wrappers and delivery only one notification at the end
        // of the process.
        signal.pause = true;
        try {
          // Creates a temporary observableArray that can perform the operation.
          var fn = ko.observableArray.fn[fnName];
          result = fn.apply(ko.observableArray(array), arguments);
        }
        finally {
          signal.pause = false;
        }

        subscribable.notifySubscribers(array);
        return result;
      }
    });
  });
}
function addKnockoutArrayMutators(ko, array, subscribable, signal) {
  var fnNames = ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'];
  fnNames.forEach(function(fnName) {
    
    
    Object.defineProperty(array, fnName, {
      enumerable: false,
      value: function() {
        var result;

        
        
        
        
        
        signal.pause = true;
        try {
          
          var fn = ko.observableArray.fn[fnName];
          result = fn.apply(ko.observableArray(array), arguments);
        }
        finally {
          signal.pause = false;
        }

        subscribable.notifySubscribers(array);
        return result;
      }
    });
  });
}
function addKnockoutArrayMutators ( ko , array , subscribable , signal ) { var fnNames = [ 'remove' , 'removeAll' , 'destroy' , 'destroyAll' , 'replace' ] ; fnNames . forEach ( function ( fnName ) { // Make it a non-enumerable property for consistency with standard Array // functions Object . defineProperty ( array , fnName , { enumerable : false , value : function ( ) { var result ; // These additional array mutators are built using the underlying // push/pop/etc. mutators, which are wrapped to trigger notifications. // But we don't want to trigger multiple notifications, so pause the // push/pop/etc. wrappers and delivery only one notification at the end // of the process. signal . pause = true ; try { // Creates a temporary observableArray that can perform the operation. var fn = ko . observableArray . fn [ fnName ] ; result = fn . apply ( ko . observableArray ( array ) , arguments ) ; } finally { signal . pause = false ; } subscribable . notifySubscribers ( array ) ; return result ; } } ) ; } ) ; }
Adds Knockout's additional array mutation functions to the array
Adds Knockout s additional array mutation functions to the array