text: 
  
  export default (function (fn) {
    var lastArgs = [];
    var frameId = null;
  
    var wrapperFn = function wrapperFn() {
      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }
  
      lastArgs = args;
  
      if (frameId) {
        return frameId;
      }
  
      frameId = requestAnimationFrame(function () {
        frameId = null;
        fn.apply(undefined, lastArgs);
      });
  
      return frameId;
    };
  
    wrapperFn.cancel = function () {
      if (!frameId) {
        return;
      }
  
      cancelAnimationFrame(frameId);
      frameId = null;
    };
  
    var resultFn = wrapperFn;
  
    return resultFn;
  });