code: function customOverrider (a, b, propertyName) {
    if (b == null) {
      return a
    }
  
    if (a == null) {
      // Invoke default overrider
      return undefined
    }
  
    // Some objects have custom overriders
    if (b._customize_custom_overrider && b._customize_custom_overrider instanceof Function) {
      return b._customize_custom_overrider(a, b, propertyName)
    }
  
    // Arrays should be concatenated
    if (Array.isArray(a)) {
      return a.concat(b)
    }
  
    // Merge values resolving promises, if they are not leaf-promises
    if (isPromiseAlike(a) || isPromiseAlike(b)) {
      return Promise.all([a, b]).then(function ([_a, _b]) {
        // Merge the promise results
        return mergeWith({}, { x: _a }, { x: _b }, customOverrider).x
      })
    }
    // None of these options apply. Implicit "undefined" return value to invoke default overrider.
  }
docs: Customize has predefined override rules for merging configs.
  
  * If the overriding object has a `_customize_custom_overrider` function-property,
  it isk called to perform the merger.
  * Arrays are concatenated
  * Promises are resolved and the results are merged
  
  
  @param a the overridden value
  @param b the overriding value
  @param propertyName the property name
  @returns {*} the merged value
  @private
  @readonly