docs: function processChildren(componentDisplayName, children, childComponentsMap) {
      var newChildComponents = [];
      var newChildComponentsMap = {};
  
      // A component's *key* represents its identity. If a component in *children* and a
      // component in *childComponentsMap* have the same *key*, then they are assumed to
      // represent the same component.
  
      React.Children.forEach(children, function (component) {
          if (component) {
              if (component.ref) {
                  console.warn(
                      "ref prop (" + component.ref + ") will not work on " +
                      component.type.displayName + " component because it is inside " +
                      "of a " + componentDisplayName + " component"
                  );
              }
  
              if (component.key === null) {
                  console.error(
                      component.type.displayName + " component requires a key " +
                      "when inside of a " + componentDisplayName + " component"
                  );
              } else {
                  var winjsChildComponent = childComponentsMap[component.key];
                  if (winjsChildComponent) {
                      if (winjsChildComponent.type === component.type) {
                          winjsChildComponent.update(component);
                      } else {
                          // If a component's *type* has changed then the component must be
                          // recreated from scratch rather than updated. The reason is that
                          // the tagName of the underlying DOM element may have changed. The
                          // only way to change the tagName of the underlying DOM element is
                          // to instantiate a new react-winjs component.
                          winjsChildComponent.dispose();
                          winjsChildComponent = new WinJSChildComponent(component);
                      }
                  } else {
                      winjsChildComponent = new WinJSChildComponent(component);
                  }
                  newChildComponents.push(winjsChildComponent);
                  newChildComponentsMap[component.key] = winjsChildComponent;
              }
          }
      });
  
      Object.keys(childComponentsMap).forEach(function (key) {
          if (!newChildComponentsMap.hasOwnProperty(key)) {
              childComponentsMap[key].dispose();
          }
      });
  
      return {
          childComponents: newChildComponents,
          childComponentsMap: newChildComponentsMap
      };
  }