Skip to content
Permalink
18061b9716
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time
334 lines (273 sloc) 11.2 KB
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.NextScript = exports.Main = exports.Head = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
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 _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _htmlescape = require('htmlescape');
var _htmlescape2 = _interopRequireDefault(_htmlescape);
var _server = require('styled-jsx/server');
var _server2 = _interopRequireDefault(_server);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Fragment = _react2.default.Fragment || function Fragment(_ref) {
var children = _ref.children;
return _react2.default.createElement(
'div',
null,
children
);
};
var Document = function (_Component) {
(0, _inherits3.default)(Document, _Component);
function Document() {
(0, _classCallCheck3.default)(this, Document);
return (0, _possibleConstructorReturn3.default)(this, (Document.__proto__ || (0, _getPrototypeOf2.default)(Document)).apply(this, arguments));
}
(0, _createClass3.default)(Document, [{
key: 'getChildContext',
value: function getChildContext() {
return { _documentProps: this.props };
}
}, {
key: 'render',
value: function render() {
return _react2.default.createElement(
'html',
null,
_react2.default.createElement(Head, null),
_react2.default.createElement(
'body',
null,
_react2.default.createElement(Main, null),
_react2.default.createElement(NextScript, null)
)
);
}
}], [{
key: 'getInitialProps',
value: function getInitialProps(_ref2) {
var renderPage = _ref2.renderPage;
var _renderPage = renderPage(),
html = _renderPage.html,
head = _renderPage.head,
errorHtml = _renderPage.errorHtml,
chunks = _renderPage.chunks;
var styles = (0, _server2.default)();
return { html: html, head: head, errorHtml: errorHtml, chunks: chunks, styles: styles };
}
}]);
return Document;
}(_react.Component);
Document.childContextTypes = {
_documentProps: _propTypes2.default.any
};
exports.default = Document;
var Head = exports.Head = function (_Component2) {
(0, _inherits3.default)(Head, _Component2);
function Head() {
(0, _classCallCheck3.default)(this, Head);
return (0, _possibleConstructorReturn3.default)(this, (Head.__proto__ || (0, _getPrototypeOf2.default)(Head)).apply(this, arguments));
}
(0, _createClass3.default)(Head, [{
key: 'getChunkPreloadLink',
value: function getChunkPreloadLink(filename) {
var __NEXT_DATA__ = this.context._documentProps.__NEXT_DATA__;
var buildStats = __NEXT_DATA__.buildStats,
assetPrefix = __NEXT_DATA__.assetPrefix,
buildId = __NEXT_DATA__.buildId;
var hash = buildStats ? buildStats[filename].hash : buildId;
return _react2.default.createElement('link', {
key: filename,
rel: 'preload',
href: assetPrefix + '/_next/' + hash + '/' + filename,
as: 'script'
});
}
}, {
key: 'getPreloadMainLinks',
value: function getPreloadMainLinks() {
var dev = this.context._documentProps.dev;
if (dev) {
return [this.getChunkPreloadLink('manifest.js'), this.getChunkPreloadLink('commons.js'), this.getChunkPreloadLink('main.js')];
}
// In the production mode, we have a single asset with all the JS content.
return [this.getChunkPreloadLink('app.js')];
}
}, {
key: 'getPreloadDynamicChunks',
value: function getPreloadDynamicChunks() {
var _context$_documentPro = this.context._documentProps,
chunks = _context$_documentPro.chunks,
__NEXT_DATA__ = _context$_documentPro.__NEXT_DATA__;
var assetPrefix = __NEXT_DATA__.assetPrefix;
return chunks.filenames.map(function (chunk) {
return _react2.default.createElement('link', {
key: chunk,
rel: 'preload',
href: assetPrefix + '/_next/webpack/chunks/' + chunk,
as: 'script'
});
});
}
}, {
key: 'render',
value: function render() {
var _context$_documentPro2 = this.context._documentProps,
head = _context$_documentPro2.head,
styles = _context$_documentPro2.styles,
__NEXT_DATA__ = _context$_documentPro2.__NEXT_DATA__;
var pathname = __NEXT_DATA__.pathname,
buildId = __NEXT_DATA__.buildId,
assetPrefix = __NEXT_DATA__.assetPrefix;
var pagePathname = getPagePathname(pathname);
return _react2.default.createElement(
'head',
this.props,
(head || []).map(function (h, i) {
return _react2.default.cloneElement(h, { key: h.key || i });
}),
_react2.default.createElement('link', { rel: 'preload', href: assetPrefix + '/_next/' + buildId + '/page' + pagePathname, as: 'script' }),
_react2.default.createElement('link', { rel: 'preload', href: assetPrefix + '/_next/' + buildId + '/page/_error.js', as: 'script' }),
this.getPreloadDynamicChunks(),
this.getPreloadMainLinks(),
styles || null,
this.props.children
);
}
}]);
return Head;
}(_react.Component);
Head.contextTypes = {
_documentProps: _propTypes2.default.any
};
var Main = exports.Main = function (_Component3) {
(0, _inherits3.default)(Main, _Component3);
function Main() {
(0, _classCallCheck3.default)(this, Main);
return (0, _possibleConstructorReturn3.default)(this, (Main.__proto__ || (0, _getPrototypeOf2.default)(Main)).apply(this, arguments));
}
(0, _createClass3.default)(Main, [{
key: 'render',
value: function render() {
var _context$_documentPro3 = this.context._documentProps,
html = _context$_documentPro3.html,
errorHtml = _context$_documentPro3.errorHtml;
return _react2.default.createElement(
Fragment,
null,
_react2.default.createElement('div', { id: '__next', dangerouslySetInnerHTML: { __html: html } }),
_react2.default.createElement('div', { id: '__next-error', dangerouslySetInnerHTML: { __html: errorHtml } })
);
}
}]);
return Main;
}(_react.Component);
Main.contextTypes = {
_documentProps: _propTypes2.default.any
};
var NextScript = exports.NextScript = function (_Component4) {
(0, _inherits3.default)(NextScript, _Component4);
function NextScript() {
(0, _classCallCheck3.default)(this, NextScript);
return (0, _possibleConstructorReturn3.default)(this, (NextScript.__proto__ || (0, _getPrototypeOf2.default)(NextScript)).apply(this, arguments));
}
(0, _createClass3.default)(NextScript, [{
key: 'getChunkScript',
value: function getChunkScript(filename) {
var additionalProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var __NEXT_DATA__ = this.context._documentProps.__NEXT_DATA__;
var buildStats = __NEXT_DATA__.buildStats,
assetPrefix = __NEXT_DATA__.assetPrefix,
buildId = __NEXT_DATA__.buildId;
var hash = buildStats ? buildStats[filename].hash : buildId;
return _react2.default.createElement('script', (0, _extends3.default)({
key: filename,
type: 'text/javascript',
src: assetPrefix + '/_next/' + hash + '/' + filename
}, additionalProps));
}
}, {
key: 'getScripts',
value: function getScripts() {
var dev = this.context._documentProps.dev;
if (dev) {
return [this.getChunkScript('manifest.js'), this.getChunkScript('commons.js'), this.getChunkScript('main.js')];
}
// In the production mode, we have a single asset with all the JS content.
// So, we can load the script with async
return [this.getChunkScript('app.js', { async: true })];
}
}, {
key: 'getDynamicChunks',
value: function getDynamicChunks() {
var _context$_documentPro4 = this.context._documentProps,
chunks = _context$_documentPro4.chunks,
__NEXT_DATA__ = _context$_documentPro4.__NEXT_DATA__;
var assetPrefix = __NEXT_DATA__.assetPrefix;
return _react2.default.createElement(
Fragment,
null,
chunks.filenames.map(function (chunk) {
return _react2.default.createElement('script', {
async: true,
key: chunk,
type: 'text/javascript',
src: assetPrefix + '/_next/webpack/chunks/' + chunk
});
})
);
}
}, {
key: 'render',
value: function render() {
var _context$_documentPro5 = this.context._documentProps,
staticMarkup = _context$_documentPro5.staticMarkup,
__NEXT_DATA__ = _context$_documentPro5.__NEXT_DATA__,
chunks = _context$_documentPro5.chunks;
var pathname = __NEXT_DATA__.pathname,
buildId = __NEXT_DATA__.buildId,
assetPrefix = __NEXT_DATA__.assetPrefix;
var pagePathname = getPagePathname(pathname);
__NEXT_DATA__.chunks = chunks.names;
return _react2.default.createElement(
Fragment,
null,
staticMarkup ? null : _react2.default.createElement('script', { nonce: this.props.nonce, dangerouslySetInnerHTML: {
__html: '\n __NEXT_DATA__ = ' + (0, _htmlescape2.default)(__NEXT_DATA__) + '\n module={}\n __NEXT_LOADED_PAGES__ = []\n __NEXT_LOADED_CHUNKS__ = []\n\n __NEXT_REGISTER_PAGE = function (route, fn) {\n __NEXT_LOADED_PAGES__.push({ route: route, fn: fn })\n }\n\n __NEXT_REGISTER_CHUNK = function (chunkName, fn) {\n __NEXT_LOADED_CHUNKS__.push({ chunkName: chunkName, fn: fn })\n }\n '
} }),
_react2.default.createElement('script', { async: true, id: '__NEXT_PAGE__' + pathname, type: 'text/javascript', src: assetPrefix + '/_next/' + buildId + '/page' + pagePathname }),
_react2.default.createElement('script', { async: true, id: '__NEXT_PAGE__/_error', type: 'text/javascript', src: assetPrefix + '/_next/' + buildId + '/page/_error.js' }),
staticMarkup ? null : this.getDynamicChunks(),
staticMarkup ? null : this.getScripts()
);
}
}]);
return NextScript;
}(_react.Component);
NextScript.propTypes = {
nonce: _propTypes2.default.string
};
NextScript.contextTypes = {
_documentProps: _propTypes2.default.any
};
function getPagePathname(pathname) {
if (pathname === '/') {
return '/index.js';
}
return pathname + '.js';
}