function capitalizeFirstLetter (string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}

export default (vueElement, leafletElement, props, options) => {
  const keys = Object.keys(props);
  for (var i = 0; i < keys.length; i++) {
    const key = keys[i];
    const setMethodName = 'set' + capitalizeFirstLetter(key);
    if (!vueElement[setMethodName] && !leafletElement[setMethodName]) {
      return;
    }
    const deepValue = (props[key].type === Object) ||
      (props[key].type === Array) ||
      (Array.isArray(props[key].type));
    if (props[key].custom) {
      vueElement.$watch(key, (newVal, oldVal) => {
        vueElement[setMethodName](newVal, oldVal);
      }, {
        deep: deepValue
      });
    } else if (setMethodName === 'setOptions') {
      vueElement.$watch(key, (newVal, oldVal) => {
        L.setOptions(leafletElement, newVal);
      }, {
        deep: deepValue
      });
    } else {
      vueElement.$watch(key, (newVal, oldVal) => {
        leafletElement[setMethodName](newVal);
      }, {
        deep: deepValue
      });
    }
  }
};

@@ -164,16 +164,21 @@
  =%3E %7B%0A  
+for (
 const ke
@@ -182,252 +182,82 @@
  key
-s = Object.keys(props);%0A  for (var i = 0; i %3C keys.length; i++) %7B%0A    const key = keys%5Bi%5D;%0A    const setMethodName = 'set' + capitalizeFirstLetter(key);%0A    if (!vueElement%5BsetMethodName%5D && !leafletElement%5BsetMethodName%5D) %7B%0A      return;%0A    %7D
+ in props) %7B%0A    const setMethodName = 'set' + capitalizeFirstLetter(key);
 %0A   
@@ -409,16 +409,45 @@
 %5D.custom
+ && vueElement%5BsetMethodName%5D
 ) %7B%0A    
@@ -790,16 +790,51 @@
   %7D else
+ if (leafletElement%5BsetMethodName%5D)
  %7B%0A     

refactor propsBinder