/** * Copyright 2013-2014 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @typechecks static-only * @providesModule ReactServerRendering */ "use strict"; var ReactComponent = require('ReactComponent'); var ReactInstanceHandles = require('ReactInstanceHandles'); var ReactMarkupChecksum = require('ReactMarkupChecksum'); var ReactServerRenderingTransaction = require('ReactServerRenderingTransaction'); var instantiateReactComponent = require('instantiateReactComponent'); var invariant = require('invariant'); /** * @param {ReactComponent} component * @return {string} the HTML markup */ function renderComponentToString(component) { invariant( ReactComponent.isValidComponent(component), 'renderComponentToString(): You must pass a valid ReactComponent.' ); invariant( !(arguments.length === 2 && typeof arguments[1] === 'function'), 'renderComponentToString(): This function became synchronous and now ' + 'returns the generated markup. Please remove the second parameter.' ); var transaction; try { var id = ReactInstanceHandles.createReactRootID(); transaction = ReactServerRenderingTransaction.getPooled(false); return transaction.perform(function() { var componentInstance = instantiateReactComponent(component); var markup = componentInstance.mountComponent(id, transaction, 0); return ReactMarkupChecksum.addChecksumToMarkup(markup); }, null); } finally { ReactServerRenderingTransaction.release(transaction); } } /** * @param {ReactComponent} component * @return {string} the HTML markup, without the extra React ID and checksum * (for generating static pages) */ function renderComponentToStaticMarkup(component) { invariant( ReactComponent.isValidComponent(component), 'renderComponentToStaticMarkup(): You must pass a valid ReactComponent.' ); var transaction; try { var id = ReactInstanceHandles.createReactRootID(); transaction = ReactServerRenderingTransaction.getPooled(true); return transaction.perform(function() { return component.mountComponent(id, transaction, 0); }, null); } finally { ReactServerRenderingTransaction.release(transaction); } } module.exports = { renderComponentToString: renderComponentToString, renderComponentToStaticMarkup: renderComponentToStaticMarkup };