docs: function composeLoader(composition, collectionHandler, items, onUpdate, params) {
      console.log('composeLoader', Array.prototype.slice.call(arguments));
      composition.data = mapKeys(items, function () {
          return _redata.defaultInitialData;
      });
  
      // Create object with keys and respective redatas bound to the params and onUpdate provided to this loader, and wait for
      // the collectionHandler to determine that the redata collection is resolved.
      return collectionHandler(mapKeys(items, function (redata, key) {
          return redata(params, onUpdate.bind(null, key));
      }))
      // collectionHandler determined that composition is over.
      .then(function (data) {
          console.log('collectionHandler.then', data);
          // If composition data and resolved data are shallow equal, then use data, so that the memory reference doesn't change.
          if (!(0, _shallowequal2.default)(data, composition.data)) {
              composition.data = data;
          } else {
              // Merge previous keys from lastData that are not present in new data. These were provided by onUpdate calls.
              composition.data = _extends({}, composition.data, data);
          }
  
          // Resolve composition.
          return composition.data;
      });
  }