code: function mergeComposable(dstDescriptor, srcComposable) {
    // Check if it's a stamp or something else.
    const srcDescriptor = isStamp(srcComposable) ? srcComposable.compose : srcComposable;
    // Ignore everything but things we can merge.
    if (!isDescriptor(srcDescriptor)) return dstDescriptor;
  
    const combineProperty = (propName, action) => {
      // Do not create destination properties if there is no need.
      if (!isDescriptor(srcDescriptor[propName])) return;
      // Check if the destination is malformed, fix the problem if any.
      if (!isDescriptor(dstDescriptor[propName])) dstDescriptor[propName] = {};
      // Deep merge or shallow assign objects.
      action(dstDescriptor[propName], srcDescriptor[propName]);
    };
  
    combineProperty('methods', assign);
    combineProperty('properties', assign);
    combineProperty('deepProperties', mergeDescriptor);
    combineProperty('propertyDescriptors', assign);
    combineProperty('staticProperties', assign);
    combineProperty('staticDeepProperties', mergeDescriptor);
    combineProperty('staticPropertyDescriptors', assign);
    combineProperty('configuration', assign);
    combineProperty('deepConfiguration', mergeDescriptor);
  
    if (isArray(srcDescriptor.initializers)) {
      // Initializers must be concatenated. '.concat' will also create a new array instance.
      const dstInitializers = (dstDescriptor.initializers || []).concat(srcDescriptor.initializers);
      // The resulting initializers array must contain functions only, and
      // must not have duplicate initializers - the first occurrence wins.
      dstDescriptor.initializers = uniq(dstInitializers.filter(isFunction));
    }
  
    return dstDescriptor;
  }
docs: Mutates the dstDescriptor by merging the srcComposable data into it.
  @param {object} dstDescriptor The descriptor object to merge into.
  @param {object} [srcComposable] The composable (either descriptor or stamp) to merge data form.
  @returns {object} Returns the dstDescriptor argument.