UNPKG

react-static

Version:

A progressive static site generator for React

186 lines (142 loc) 14.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _os = _interopRequireDefault(require("os")); var _child_process = require("child_process"); var _chalk = _interopRequireDefault(require("chalk")); var _utils = require("../utils"); var _fetchSiteData = _interopRequireDefault(require("./fetchSiteData")); var _fetchRoutes = _interopRequireDefault(require("./fetchRoutes")); var _plugins = _interopRequireDefault(require("./plugins")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var cores = Math.max(_os["default"].cpus().length, 1); var _default = /*#__PURE__*/function () { var _exportRoutes = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(state) { return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _fetchSiteData["default"])(state); case 2: state = _context.sent; _context.next = 5; return (0, _fetchRoutes["default"])(state); case 5: state = _context.sent; _context.next = 8; return buildHTML(state); case 8: state = _context.sent; _context.next = 11; return _plugins["default"].afterExport(state); case 11: state = _context.sent; return _context.abrupt("return", state); case 13: case "end": return _context.stop(); } } }, _callee); })); function exportRoutes(_x) { return _exportRoutes.apply(this, arguments); } return exportRoutes; }(); exports["default"] = _default; function buildHTML(_x2) { return _buildHTML.apply(this, arguments); } function _buildHTML() { _buildHTML = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(state) { var routes, _state$config, paths, maxThreads, threads, htmlProgress, exporters, i, exporterRoutes; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: routes = state.routes, _state$config = state.config, paths = _state$config.paths, maxThreads = _state$config.maxThreads; (0, _utils.time)(_chalk["default"].green("[\u2713] HTML Exported")); // in case of an absolute path for DIST we must tell node to load the modules // from our project root if (!paths.DIST.startsWith(paths.ROOT)) { process.env.NODE_PATH = paths.NODE_MODULES; require('module').Module._initPaths(); } // Single threaded export if (!(maxThreads <= 1)) { _context2.next = 9; break; } console.log('Exporting HTML...'); _context2.next = 7; return require('./exportRoutes.sync')["default"](state); case 7: _context2.next = 18; break; case 9: // Multi-threaded export threads = Math.min(cores, maxThreads); htmlProgress = (0, _utils.progress)(routes.length); console.log("Exporting HTML across ".concat(threads, " threads...")); exporters = []; for (i = 0; i < threads; i++) { exporters.push((0, _child_process.fork)(require.resolve('./exportRoutes.threaded'), [], { env: _objectSpread(_objectSpread({}, process.env), {}, { REACT_STATIC_THREAD: 'true' }), stdio: 'inherit' })); } exporterRoutes = exporters.map(function () { return []; }); routes.forEach(function (route, i) { exporterRoutes[i % exporterRoutes.length].push(route); }); _context2.next = 18; return Promise.all(exporters.map(function (exporter, i) { var routes = exporterRoutes[i]; return new Promise(function (resolve, reject) { exporter.send(_objectSpread(_objectSpread({}, state), {}, { routes: routes })); exporter.on('message', function (_ref) { var type = _ref.type, payload = _ref.payload; if (type === 'error') { reject(payload); } if (type === 'log') { var _console; (_console = console).log.apply(_console, (0, _toConsumableArray2["default"])(payload)); } if (type === 'tick') { htmlProgress.tick(); } if (type === 'done') { resolve(); } }); }); })); case 18: (0, _utils.timeEnd)(_chalk["default"].green("[\u2713] HTML Exported")); return _context2.abrupt("return", state); case 20: case "end": return _context2.stop(); } } }, _callee2); })); return _buildHTML.apply(this, arguments); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdGF0aWMvZXhwb3J0Um91dGVzLmpzIl0sIm5hbWVzIjpbImNvcmVzIiwiTWF0aCIsIm1heCIsIk9TIiwiY3B1cyIsImxlbmd0aCIsInN0YXRlIiwiYnVpbGRIVE1MIiwicGx1Z2lucyIsImFmdGVyRXhwb3J0IiwiZXhwb3J0Um91dGVzIiwicm91dGVzIiwiY29uZmlnIiwicGF0aHMiLCJtYXhUaHJlYWRzIiwiY2hhbGsiLCJncmVlbiIsIkRJU1QiLCJzdGFydHNXaXRoIiwiUk9PVCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX1BBVEgiLCJOT0RFX01PRFVMRVMiLCJyZXF1aXJlIiwiTW9kdWxlIiwiX2luaXRQYXRocyIsImNvbnNvbGUiLCJsb2ciLCJ0aHJlYWRzIiwibWluIiwiaHRtbFByb2dyZXNzIiwiZXhwb3J0ZXJzIiwiaSIsInB1c2giLCJyZXNvbHZlIiwiUkVBQ1RfU1RBVElDX1RIUkVBRCIsInN0ZGlvIiwiZXhwb3J0ZXJSb3V0ZXMiLCJtYXAiLCJmb3JFYWNoIiwicm91dGUiLCJQcm9taXNlIiwiYWxsIiwiZXhwb3J0ZXIiLCJyZWplY3QiLCJzZW5kIiwib24iLCJ0eXBlIiwicGF5bG9hZCIsInRpY2siXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEtBQUssR0FBR0MsSUFBSSxDQUFDQyxHQUFMLENBQVNDLGVBQUdDLElBQUgsR0FBVUMsTUFBbkIsRUFBMkIsQ0FBM0IsQ0FBZDs7O29HQUVnQixpQkFBNEJDLEtBQTVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUNBLCtCQUFjQSxLQUFkLENBREE7O0FBQUE7QUFDZEEsWUFBQUEsS0FEYztBQUFBO0FBQUEsbUJBRUEsNkJBQVlBLEtBQVosQ0FGQTs7QUFBQTtBQUVkQSxZQUFBQSxLQUZjO0FBQUE7QUFBQSxtQkFHQUMsU0FBUyxDQUFDRCxLQUFELENB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QTtBQUZGO0FBSUFpQyxnQkFBQUEsUUFBUSxDQUFDRyxFQUFULENBQVksU0FBWixFQUF1QixnQkFBdUI7QUFBQSxzQkFBcEJDLElBQW9CLFFBQXBCQSxJQUFvQjtBQUFBLHNCQUFkQyxPQUFjLFFBQWRBLE9BQWM7O0FBQzVDLHNCQUFJRCxJQUFJLEtBQUssT0FBYixFQUFzQjtBQUNwQkgsb0JBQUFBLE1BQU0sQ0FBQ0ksT0FBRCxDQUFOO0FBQ0Q7O0FBQ0Qsc0JBQUlELElBQUksS0FBSyxLQUFiLEVBQW9CO0FBQUE7O0FBQ2xCLGdDQUFBckIsT0FBTyxFQUFDQyxHQUFSLHFEQUFlcUIsT0FBZjtBQUNEOztBQUNELHNCQUFJRCxJQUFJLEtBQUssTUFBYixFQUFxQjtBQUNuQmpCLG9CQUFBQSxZQUFZLENBQUNtQixJQUFiO0FBQ0Q7O0FBQ0Qsc0JBQUlGLElBQUksS0FBSyxNQUFiLEVBQXFCO0FBQ25CYixvQkFBQUEsT0FBTztBQUNSO0FBQ0YsaUJBYkQ7QUFjRCxlQW5CTSxDQUFQO0FBb0JELGFBdEJELENBREksQ0E3Q1Y7O0FBQUE7QUF3RUUsZ0NBQVFwQixrQkFBTUMsS0FBTixDQUFZLHdCQUFaLENBQVI7QUF4RUYsOENBMEVTVixLQTFFVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9TIGZyb20gJ29zJ1xuaW1wb3J0IHsgZm9yayB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5cbmltcG9ydCB7IHByb2dyZXNzLCB0aW1lLCB0aW1lRW5kIH0gZnJvbSAnLi4vdXRpbHMnXG5pbXBvcnQgZmV0Y2hTaXRlRGF0YSBmcm9tICcuL2ZldGNoU2l0ZURhdGEnXG5pbXBvcnQgZmV0Y2hSb3V0ZXMgZnJvbSAnLi9mZXRjaFJvdXRlcydcbmltcG9ydCBwbHVnaW5zIGZyb20gJy4vcGx1Z2lucydcblxuY29uc3QgY29yZXMgPSBNYXRoLm1heChPUy5jcHVzKCkubGVuZ3RoLCAxKVxuXG5leHBvcnQgZGVmYXVsdCAoYXN5bmMgZnVuY3Rpb24gZXhwb3J0Um91dGVzKHN0YXRlKSB7XG4gIHN0YXRlID0gYXdhaXQgZmV0Y2hTaXRlRGF0YShzdGF0ZSlcbiAgc3RhdGUgPSBhd2FpdCBmZXRjaFJvdXRlcyhzdGF0ZSlcbiAgc3RhdGUgPSBhd2FpdCBidWlsZEhUTUwoc3RhdGUpXG4gIHN0YXRlID0gYXdhaXQgcGx1Z2lucy5hZnRlckV4cG9ydChzdGF0ZSlcbiAgcmV0dXJuIHN0YXRlXG59KVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZEhUTUwoc3RhdGUpIHtcbiAgY29uc3Qge1xuICAgIHJvdXRlcyxcbiAgICBjb25maWc6IHsgcGF0aHMsIG1heFRocmVhZHMgfSxcbiAgfSA9IHN0YXRlXG5cbiAgdGltZShjaGFsay5ncmVlbignW1xcdTI3MTNdIEhUTUwgRXhwb3J0ZWQnKSlcblxuICAvLyBpbiBjYXNlIG9mIGFuIGFic29sdXRlIHBhdGggZm9yIERJU1Qgd2UgbXVzdCB0ZWxsIG5vZGUgdG8gbG9hZCB0aGUgbW9kdWxlc1xuICAvLyBmcm9tIG91ciBwcm9qZWN0IHJvb3RcbiAgaWYgKCFwYXRocy5ESVNULnN0YXJ0c1dpdGgocGF0aHMuUk9PVCkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBwYXRocy5OT0RFX01PRFVMRVNcbiAgICByZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpXG4gIH1cblxuICAvLyBTaW5nbGUgdGhyZWFkZWQgZXhwb3J0XG4gIGlmIChtYXhUaHJlYWRzIDw9IDEpIHtcbiAgICBjb25zb2xlLmxvZygnRXhwb3J0aW5nIEhUTUwuLi4nKVxuICAgIGF3YWl0IHJlcXVpcmUoJy4vZXhwb3J0Um91dGVzLnN5bmMnKS5kZWZhdWx0KHN0YXRlKVxuICB9IGVsc2Uge1xuICAgIC8vIE11bHRpLXRocmVhZGVkIGV4cG9ydFxuICAgIGNvbnN0IHRocmVhZHMgPSBNYXRoLm1pbihjb3JlcywgbWF4VGhyZWFkcylcbiAgICBjb25zdCBodG1sUHJvZ3Jlc3MgPSBwcm9ncmVzcyhyb3V0ZXMubGVuZ3RoKVxuXG4gICAgY29uc29sZS5sb2coYEV4cG9ydGluZyBIVE1MIGFjcm9zcyAke3RocmVhZHN9IHRocmVhZHMuLi5gKVxuXG4gICAgY29uc3QgZXhwb3J0ZXJzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocmVhZHM7IGkrKykge1xuICAgICAgZXhwb3J0ZXJzLnB1c2goXG4gICAgICAgIGZvcmsocmVxdWlyZS5yZXNvbHZlKCcuL2V4cG9ydFJvdXRlcy50aHJlYWRlZCcpLCBbXSwge1xuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBSRUFDVF9TVEFUSUNfVEhSRUFEOiAndHJ1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGRpbzogJ2luaGVyaXQnLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydGVyUm91dGVzID0gZXhwb3J0ZXJzLm1hcCgoKSA9PiBbXSlcblxuICAgIHJvdXRlcy5mb3JFYWNoKChyb3V0ZSwgaSkgPT4ge1xuICAgICAgZXhwb3J0ZXJSb3V0ZXNbaSAlIGV4cG9ydGVyUm91dGVzLmxlbmd0aF0ucHVzaChyb3V0ZSlcbiAgICB9KVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBleHBvcnRlcnMubWFwKChleHBvcnRlciwgaSkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSBleHBvcnRlclJvdXRlc1tpXVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGV4cG9ydGVyLnNlbmQoe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgICBleHBvcnRlci5vbignbWVzc2FnZScsICh7IHR5cGUsIHBheWxvYWQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KHBheWxvYWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2xvZycpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coLi4ucGF5bG9hZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlID09PSAndGljaycpIHtcbiAgICAgICAgICAgICAgaHRtbFByb2dyZXNzLnRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkb25lJykge1xuICAgICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICB0aW1lRW5kKGNoYWxrLmdyZWVuKCdbXFx1MjcxM10gSFRNTCBFeHBvcnRlZCcpKVxuXG4gIHJldHVybiBzdGF0ZVxufVxuIl19