Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_helmet_1 = __importDefault(require("react-helmet"));
var react_1 = __importDefault(require("react"));
var server_1 = require("react-dom/server");
// import { ServerStyleSheet } from 'view-container/styles/styled-components'
var styleh_components_1 = require("styleh-components");
// import { ServerStyleSheet } from 'view-container'
var react_router_dom_1 = require("react-router-dom");
var react_apollo_1 = require("react-apollo");
var mobx_react_1 = require("xmobx/mobx-react");
var cacheMiddleware_1 = require("../../../middleware/cacheMiddleware");
var responders_1 = require("../../responders");
var HTML_1 = require("../../HTML");
var renderFinalString_1 = require("./renderFinalString");
var ServerSideRenderMaster = /** @class */ (function () {
    function ServerSideRenderMaster(context) {
        var _this = this;
        this.onSuccess = function () {
            var _a = _this.context, req = _a.req, res = _a.res, reactRouterContext = _a.reactRouterContext, htmlView = _a.htmlView;
            cacheMiddleware_1.cacheIfNeeded(req, res, htmlView);
            /**
             * Check if the router context contains a redirect, if so we need to set
             * the specific status and redirect header and end the res.
             */
            var url = reactRouterContext.url, status = reactRouterContext.status;
            if (url) {
                responders_1.respondRedirect(res, url);
            }
            else {
                responders_1.respondHyperText(res, status, htmlView);
            }
        };
        this.onError = function (apolloRenderingError) {
            console.error('[EXCEPTION_ALERT] [ssr] APOLLO ERROR', apolloRenderingError);
            responders_1.respondError(_this.context.res, apolloRenderingError);
        };
        this.context = context;
    }
    ServerSideRenderMaster.prototype.walk = function () {
        return react_apollo_1.getDataFromTree(this.context.appView);
    };
    ServerSideRenderMaster.prototype.setup = function () {
        /**
         * Create the job context for our provider,
         * this grants us the ability to track the resolved jobs
         * so we can send it back to the client.
         */
        this.context.store = this.context.OmniStore.create();
    };
    ServerSideRenderMaster.prototype.renderApp = function () {
        var _a = this.context, req = _a.req, reactRouterContext = _a.reactRouterContext, store = _a.store, client = _a.client, App = _a.App;
        /**
         * @description Declare our React application.
         * @see https://www.apollographql.com/docs/react/recipes/server-side-rendering.html
         */
        this.context.appView = (react_1.default.createElement(react_router_dom_1.StaticRouter, { location: req.url, context: reactRouterContext },
            react_1.default.createElement(react_apollo_1.ApolloProvider, { client: client },
                react_1.default.createElement(mobx_react_1.Provider, { store: store },
                    react_1.default.createElement(App, null)))));
    };
    /**
     * @see https://github.com/styled-components/styled-components/issues/378
     * @todo https://github.com/nfl/react-helmet/issues/216
     * @see https://www.apollographql.com/docs/react/features/server-side-rendering.html#server-initialization
     */
    ServerSideRenderMaster.prototype.renderToString = function () {
        var _a = this.context, req = _a.req, appView = _a.appView, nonce = _a.nonce, store = _a.store, reactRouterContext = _a.reactRouterContext, client = _a.client;
        var serializableExtractedApolloState = client.extract();
        var sheet = new styleh_components_1.ServerStyleSheet();
        var styledView = sheet.collectStyles(appView);
        var appString = server_1.renderToString(styledView);
        var styledTags = sheet.getStyleElement();
        var htmlView = (react_1.default.createElement(HTML_1.ServerHTML, { isCached: req.SHOULD_CACHE_SSR, reactAppString: appString, nonce: nonce, helmet: react_helmet_1.default.rewind(), styledTags: styledTags, apolloState: serializableExtractedApolloState, storeState: store, routerState: reactRouterContext }));
        return renderFinalString_1.renderFinalString(htmlView);
    };
    return ServerSideRenderMaster;
}());
exports.ServerSideRenderMaster = ServerSideRenderMaster;
//# sourceMappingURL=ServerSideRenderMaster.js.map