Skip to content

Commit

Permalink
Compile SSR sources
Browse files Browse the repository at this point in the history
  • Loading branch information
Fyzu committed Nov 4, 2017
1 parent d366a3e commit cae18f8
Show file tree
Hide file tree
Showing 19 changed files with 389 additions and 8 deletions.
5 changes: 5 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"presets": [
"@rispa/babel/lib/babelConfig"
]
}
4 changes: 2 additions & 2 deletions src/RenderServerPlugin.js → activator/RenderServerPlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ const {
prepare: prepareConfig
} = require('universal-webpack')
const cookiesMiddleware = require('universal-cookie-express')
const serverConfiguration = require('./configuration/server')
const serverConfiguration = require('./middleware/server')
const settings = require('./configs/universal-webpack-settings')
const clientConfiguration = require('./configuration/client')
const clientConfiguration = require('./middleware/client')
const universalSettings = require('./configs/universal-webpack-settings')

const babelConfig = require('./configs/babel-options')
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module.exports = {
server: {
input: './src/render/entry.js',
input: './lib/entry.js',
output: './build/server.js',
},
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
171 changes: 171 additions & 0 deletions lib/Html.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});

var _stringify = require('babel-runtime/core-js/json/stringify');

var _stringify2 = _interopRequireDefault(_stringify);

var _keys = require('babel-runtime/core-js/object/keys');

var _keys2 = _interopRequireDefault(_keys);

var _values = require('babel-runtime/core-js/object/values');

var _values2 = _interopRequireDefault(_values);

var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');

var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);

var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);

var _createClass2 = require('babel-runtime/helpers/createClass');

var _createClass3 = _interopRequireDefault(_createClass2);

var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');

var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);

var _inherits2 = require('babel-runtime/helpers/inherits');

var _inherits3 = _interopRequireDefault(_inherits2);

var _class, _temp, _class2, _temp2;

var _react = require('react');

var _react2 = _interopRequireDefault(_react);

var _propTypes = require('prop-types');

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var loadChunksOnClient = function loadChunksOnClient() {
var chunks = window.RISPA_CHUNKS;
var loadedChunksCount = 0;

var loadScript = function loadScript(src, handler) {
var script = document.createElement('script');
script.src = src;
script.async = true;
script.onload = handler;
document.body.appendChild(script);
};

var chunkLoadedHandler = function chunkLoadedHandler() {
loadedChunksCount += 1;
if (loadedChunksCount === chunks.length) {
// Schedule application start for next tick for break long frames
setTimeout(window.startApp, 0);
}
};

var loadChunk = function loadChunk(chunk) {
return loadScript(chunk, chunkLoadedHandler);
};

if (chunks.length) {
chunks.forEach(loadChunk);
} else {
setTimeout(window.startApp, 0);
}
};

var InitialState = (_temp = _class = function (_PureComponent) {
(0, _inherits3.default)(InitialState, _PureComponent);

function InitialState() {
(0, _classCallCheck3.default)(this, InitialState);
return (0, _possibleConstructorReturn3.default)(this, (InitialState.__proto__ || (0, _getPrototypeOf2.default)(InitialState)).apply(this, arguments));
}

(0, _createClass3.default)(InitialState, [{
key: 'render',
value: function render() {
return this.props.state ? _react2.default.createElement('script', {
dangerouslySetInnerHTML: {
__html: '\n // <![CDATA[\n window.RISPA_INITIAL_STATE=' + this.props.state + ';\n // ]]>\n '
},
charSet: 'UTF-8'
}) : null;
}
}]);
return InitialState;
}(_react.PureComponent), _class.propTypes = {
state: _propTypes.string
}, _temp);
var Html = (_temp2 = _class2 = function (_PureComponent2) {
(0, _inherits3.default)(Html, _PureComponent2);

function Html() {
(0, _classCallCheck3.default)(this, Html);
return (0, _possibleConstructorReturn3.default)(this, (Html.__proto__ || (0, _getPrototypeOf2.default)(Html)).apply(this, arguments));
}

(0, _createClass3.default)(Html, [{
key: 'render',
value: function render() {
var _props = this.props,
assets = _props.assets,
content = _props.content,
initialState = _props.initialState;


var bootstrapScript = null;
var chunks = [];
(0, _values2.default)(assets.javascript).forEach(function (script) {
if (/bootstrap/.test(script)) {
bootstrapScript = script;
} else {
chunks.push(script);
}
});

return _react2.default.createElement(
'html',
{ lang: 'ru-RU' },
_react2.default.createElement(
'head',
null,
_react2.default.createElement('link', { rel: 'shortcut icon', href: '/favicon.ico' }),
_react2.default.createElement('meta', { name: 'viewport', content: 'width=device-width, initial-scale=1' }),
(0, _keys2.default)(assets.styles).map(function (style) {
return _react2.default.createElement('link', {
href: assets.styles[style],
key: style,
media: 'screen, projection',
rel: 'stylesheet',
type: 'text/css',
charSet: 'UTF-8'
});
})
),
_react2.default.createElement(
'body',
null,
_react2.default.createElement('div', { id: 'root', dangerouslySetInnerHTML: { __html: content || '' } }),
_react2.default.createElement('script', { src: bootstrapScript, charSet: 'UTF-8' }),
_react2.default.createElement('script', {
dangerouslySetInnerHTML: {
__html: '\n // <![CDATA[\n window.RISPA_CHUNKS=' + (0, _stringify2.default)(chunks) + ';\n (' + loadChunksOnClient.toString() + '());\n // ]]>\n '
},
charSet: 'UTF-8'
}),
_react2.default.createElement(InitialState, { state: initialState })
)
);
}
}]);
return Html;
}(_react.PureComponent), _class2.propTypes = {
assets: (0, _propTypes.objectOf)(_propTypes.object),
content: _propTypes.string,
initialState: _propTypes.string
}, _temp2);
exports.default = Html;
29 changes: 29 additions & 0 deletions lib/client.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});

var _react = require('react');

var _react2 = _interopRequireDefault(_react);

var _server = require('react-dom/server');

var _server2 = _interopRequireDefault(_server);

var _Html = require('./Html');

var _Html2 = _interopRequireDefault(_Html);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

var createRender = function createRender(assets) {
return function (req, res) {
var html = '<!doctype html>\n' + _server2.default.renderToStaticMarkup(_react2.default.createElement(_Html2.default, { assets: assets }));

res.send(html);
};
};

exports.default = createRender;
25 changes: 25 additions & 0 deletions lib/entry.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
'use strict';

Object.defineProperty(exports, "__esModule", {
value: true
});

var _server = require('./server');

var _server2 = _interopRequireDefault(_server);

var _client = require('./client');

var _client2 = _interopRequireDefault(_client);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

exports.default = function (parameters) {
var chunks = parameters.chunks();
var cacheConfig = parameters.configuration.cacheConfig;

return {
client: (0, _client2.default)(chunks),
server: (0, _server2.default)(chunks, cacheConfig)
};
};
Loading

0 comments on commit cae18f8

Please sign in to comment.