@tdb/web
Version:
Common condiguration for serving a web-site and testing web-based UI components.
356 lines (277 loc) • 11.9 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime-corejs2/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
var _getIterator2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/get-iterator"));
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
var _del = _interopRequireDefault(require("del"));
var _recursiveCopy = _interopRequireDefault(require("recursive-copy"));
var _mkdirpThen = _interopRequireDefault(require("mkdirp-then"));
var _path = require("path");
var _fs = require("fs");
var _config = _interopRequireDefault(require("../server/config"));
var _constants = require("../lib/constants");
var _render = require("../server/render");
var _asset = require("../lib/asset");
var envConfig = _interopRequireWildcard(require("../lib/runtime-config"));
function _default(_x, _x2, _x3) {
return _ref.apply(this, arguments);
}
function _ref() {
_ref = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee2(dir, options, configuration) {
var log, nextConfig, distDir, buildId, pagesManifest, pages, defaultPathMap, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, page, outDir, renderOpts, serverRuntimeConfig, publicRuntimeConfig, exportPathMap, exportPaths, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, path, _exportPathMap$path, _page, _exportPathMap$path$q, query, req, res, htmlFilename, baseDir, htmlFilepath, html;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
log = function _ref3(message) {
if (options.silent) return;
console.log(message);
};
dir = (0, _path.resolve)(dir);
nextConfig = configuration || (0, _config.default)(_constants.PHASE_EXPORT, dir);
distDir = (0, _path.join)(dir, nextConfig.distDir);
log("> using build directory: ".concat(distDir));
if ((0, _fs.existsSync)(distDir)) {
_context2.next = 7;
break;
}
throw new Error("Build directory ".concat(distDir, " does not exist. Make sure you run \"next build\" before running \"next start\" or \"next export\"."));
case 7:
buildId = (0, _fs.readFileSync)((0, _path.join)(distDir, _constants.BUILD_ID_FILE), 'utf8');
pagesManifest = require((0, _path.join)(distDir, _constants.SERVER_DIRECTORY, _constants.PAGES_MANIFEST));
pages = (0, _keys.default)(pagesManifest);
defaultPathMap = {};
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context2.prev = 14;
_iterator = (0, _getIterator2.default)(pages);
case 16:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context2.next = 27;
break;
}
page = _step.value;
if (!(page === '/_document' || page === '/_app')) {
_context2.next = 20;
break;
}
return _context2.abrupt("continue", 24);
case 20:
if (!(page === '/_error')) {
_context2.next = 23;
break;
}
defaultPathMap['/404'] = {
page: page
};
return _context2.abrupt("continue", 24);
case 23:
defaultPathMap[page] = {
page: page
};
case 24:
_iteratorNormalCompletion = true;
_context2.next = 16;
break;
case 27:
_context2.next = 33;
break;
case 29:
_context2.prev = 29;
_context2.t0 = _context2["catch"](14);
_didIteratorError = true;
_iteratorError = _context2.t0;
case 33:
_context2.prev = 33;
_context2.prev = 34;
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
case 36:
_context2.prev = 36;
if (!_didIteratorError) {
_context2.next = 39;
break;
}
throw _iteratorError;
case 39:
return _context2.finish(36);
case 40:
return _context2.finish(33);
case 41:
// Initialize the output directory
outDir = options.outdir;
_context2.next = 44;
return (0, _del.default)((0, _path.join)(outDir, '*'));
case 44:
_context2.next = 46;
return (0, _mkdirpThen.default)((0, _path.join)(outDir, '_next', buildId));
case 46:
if (!(0, _fs.existsSync)((0, _path.join)(dir, 'static'))) {
_context2.next = 50;
break;
}
log(' copying "static" directory');
_context2.next = 50;
return (0, _recursiveCopy.default)((0, _path.join)(dir, 'static'), (0, _path.join)(outDir, 'static'), {
expand: true
});
case 50:
if (!(0, _fs.existsSync)((0, _path.join)(distDir, _constants.CLIENT_STATIC_FILES_PATH))) {
_context2.next = 54;
break;
}
log(' copying "static build" directory');
_context2.next = 54;
return (0, _recursiveCopy.default)((0, _path.join)(distDir, _constants.CLIENT_STATIC_FILES_PATH), (0, _path.join)(outDir, '_next', _constants.CLIENT_STATIC_FILES_PATH));
case 54:
// Get the exportPathMap from the config file
if (typeof nextConfig.exportPathMap !== 'function') {
console.log("> No \"exportPathMap\" found in \"".concat(_constants.CONFIG_FILE, "\". Generating map from \"./pages\""));
nextConfig.exportPathMap =
/*#__PURE__*/
function () {
var _ref2 = (0, _asyncToGenerator2.default)(
/*#__PURE__*/
_regenerator.default.mark(function _callee(defaultMap) {
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
return _context.abrupt("return", defaultMap);
case 1:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
return function (_x4) {
return _ref2.apply(this, arguments);
};
}();
} // Start the rendering process
renderOpts = {
dir: dir,
buildId: buildId,
nextExport: true,
assetPrefix: nextConfig.assetPrefix.replace(/\/$/, ''),
distDir: distDir,
dev: false,
staticMarkup: false,
hotReloader: null
};
serverRuntimeConfig = nextConfig.serverRuntimeConfig, publicRuntimeConfig = nextConfig.publicRuntimeConfig;
if (publicRuntimeConfig) {
renderOpts.runtimeConfig = publicRuntimeConfig;
}
envConfig.setConfig({
serverRuntimeConfig: serverRuntimeConfig,
publicRuntimeConfig: publicRuntimeConfig
}); // set the assetPrefix to use for 'next/asset'
(0, _asset.setAssetPrefix)(renderOpts.assetPrefix); // We need this for server rendering the Link component.
global.__NEXT_DATA__ = {
nextExport: true
};
_context2.next = 63;
return nextConfig.exportPathMap(defaultPathMap, {
dev: false,
dir: dir,
outDir: outDir,
distDir: distDir,
buildId: buildId
});
case 63:
exportPathMap = _context2.sent;
exportPaths = (0, _keys.default)(exportPathMap);
_iteratorNormalCompletion2 = true;
_didIteratorError2 = false;
_iteratorError2 = undefined;
_context2.prev = 68;
_iterator2 = (0, _getIterator2.default)(exportPaths);
case 70:
if (_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done) {
_context2.next = 91;
break;
}
path = _step2.value;
log("> exporting path: ".concat(path));
if (path.startsWith('/')) {
_context2.next = 75;
break;
}
throw new Error("path \"".concat(path, "\" doesn't start with a backslash"));
case 75:
_exportPathMap$path = exportPathMap[path], _page = _exportPathMap$path.page, _exportPathMap$path$q = _exportPathMap$path.query, query = _exportPathMap$path$q === void 0 ? {} : _exportPathMap$path$q;
req = {
url: path
};
res = {};
htmlFilename = "".concat(path).concat(_path.sep, "index.html");
if ((0, _path.extname)(path) !== '') {
// If the path has an extension, use that as the filename instead
htmlFilename = path;
} else if (path === '/') {
// If the path is the root, just use index.html
htmlFilename = 'index.html';
}
baseDir = (0, _path.join)(outDir, (0, _path.dirname)(htmlFilename));
htmlFilepath = (0, _path.join)(outDir, htmlFilename);
_context2.next = 84;
return (0, _mkdirpThen.default)(baseDir);
case 84:
_context2.next = 86;
return (0, _render.renderToHTML)(req, res, _page, query, renderOpts);
case 86:
html = _context2.sent;
(0, _fs.writeFileSync)(htmlFilepath, html, 'utf8');
case 88:
_iteratorNormalCompletion2 = true;
_context2.next = 70;
break;
case 91:
_context2.next = 97;
break;
case 93:
_context2.prev = 93;
_context2.t1 = _context2["catch"](68);
_didIteratorError2 = true;
_iteratorError2 = _context2.t1;
case 97:
_context2.prev = 97;
_context2.prev = 98;
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
_iterator2.return();
}
case 100:
_context2.prev = 100;
if (!_didIteratorError2) {
_context2.next = 103;
break;
}
throw _iteratorError2;
case 103:
return _context2.finish(100);
case 104:
return _context2.finish(97);
case 105:
// Add an empty line to the console for the better readability.
log('');
case 106:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[14, 29, 33, 41], [34,, 36, 40], [68, 93, 97, 105], [98,, 100, 104]]);
}));
return _ref.apply(this, arguments);
}