text: /**
   * Copyright 2014-2015, 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 ReactServerRenderingTransaction
   * @typechecks
   */
  
  'use strict';
  
  var PooledClass = require('./PooledClass');
  var CallbackQueue = require('./CallbackQueue');
  var Transaction = require('./Transaction');
  
  var assign = require('./Object.assign');
  var emptyFunction = require('fbjs/lib/emptyFunction');
  
  /**
   * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
   * during the performing of the transaction.
   */
  var ON_DOM_READY_QUEUEING = {
    /**
     * Initializes the internal `onDOMReady` queue.
     */
    initialize: function () {
      this.reactMountReady.reset();
    },
  
    close: emptyFunction
  };
  
  /**
   * Executed within the scope of the `Transaction` instance. Consider these as
   * being member methods, but with an implied ordering while being isolated from
   * each other.
   */
  var TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];
  
  /**
   * @class ReactServerRenderingTransaction
   * @param {boolean} renderToStaticMarkup
   */
  function ReactServerRenderingTransaction(renderToStaticMarkup) {
    this.reinitializeTransaction();
    this.renderToStaticMarkup = renderToStaticMarkup;
    this.reactMountReady = CallbackQueue.getPooled(null);
  }
  
  var Mixin = {
    /**
     * @see Transaction
     * @abstract
     * @final
     * @return {array} Empty list of operation wrap procedures.
     */
    getTransactionWrappers: function () {
      return TRANSACTION_WRAPPERS;
    },
  
    /**
     * @return {object} The queue to collect `onDOMReady` callbacks with.
     */
    getReactMountReady: function () {
      return this.reactMountReady;
    },
  
    /**
     * `PooledClass` looks for this, and will invoke this before allowing this
     * instance to be reused.
     */
    destructor: function () {
      CallbackQueue.release(this.reactMountReady);
      this.reactMountReady = null;
    }
  };
  
  assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);
  
  PooledClass.addPoolingTo(ReactServerRenderingTransaction);
  
  module.exports = ReactServerRenderingTransaction;