text: /**
   * Copyright 2013-2014, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   *
   * @providesModule ReactContext
   */
  
  "use strict";
  
  var assign = require("./Object.assign");
  
  /**
   * Keeps track of the current context.
   *
   * The context is automatically passed down the component ownership hierarchy
   * and is accessible via `this.context` on ReactCompositeComponents.
   */
  var ReactContext = {
  
    /**
     * @internal
     * @type {object}
     */
    current: {},
  
    /**
     * Temporarily extends the current context while executing scopedCallback.
     *
     * A typical use case might look like
     *
     *  render: function() {
     *    var children = ReactContext.withContext({foo: 'foo'}, () => (
     *
     *    ));
     *    return <div>{children}</div>;
     *  }
     *
     * @param {object} newContext New context to merge into the existing context
     * @param {function} scopedCallback Callback to run with the new context
     * @return {ReactComponent|array<ReactComponent>}
     */
    withContext: function(newContext, scopedCallback) {
      var result;
      var previousContext = ReactContext.current;
      ReactContext.current = assign({}, previousContext, newContext);
      try {
        result = scopedCallback();
      } finally {
        ReactContext.current = previousContext;
      }
      return result;
    }
  
  };
  
  module.exports = ReactContext;
  