text: 'use strict'
  
  var mergeDescriptors = require('merge-descriptors')
  var isObject = require('is-object')
  var hasOwnProperty = Object.prototype.hasOwnProperty
  
  function fill (destination, source, merge) {
    if (destination && (isObject(source) || isFunction(source))) {
      merge(destination, source, false)
      if (isFunction(destination) && isFunction(source)) {
        merge(destination.prototype, source.prototype, false)
      }
    }
    return destination
  }
  
  exports = module.exports = function fillKeys (destination, source) {
    return fill(destination, source, mergeDescriptors)
  }
  
  exports.es3 = function fillKeysEs3 (destination, source) {
    return fill(destination, source, es3Merge)
  }
  
  function es3Merge (destination, source) {
    for (var key in source) {
      if (!hasOwnProperty.call(destination, key)) {
        destination[key] = source[key]
      }
    }
    return destination
  }
  
  function isFunction (value) {
    return typeof value === 'function'
  }
  