code: function Debounce(delay=300, options={leading: true, trailing: false}) {
      let d = (methodDescriptor, args)=>{
          let {descriptor} = methodDescriptor;
  
          let fn = descriptor.value;
          descriptor.value = debounce(fn, ...args);
  
          return {
              ...methodDescriptor,
              descriptor,
          };
      };
  
      if (typeof delay === 'object') {
          d(delay, [300, {leading: true, trailing: false}]);
      } else {
          return (m)=>d(m, [delay, options]);
      }
  }
docs: debounce function with delay.
  @param {number} [delay=300]
  @param {Object} [options={leading: true, trailing: false}]
  @return {any}