UNPKG

phenomic

Version:

Modern website generator based on the React and Webpack ecosystem.

115 lines (89 loc) 3.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // eslint-disable-next-line import/no-namespace exports.setPageData = setPageData; exports.forgetPageData = forgetPageData; exports.writeHTMLFile = writeHTMLFile; exports.writeAllHTMLFiles = writeAllHTMLFiles; var _path = require("path"); var _path2 = _interopRequireDefault(_path); var _fsPromise = require("fs-promise"); var _fsPromise2 = _interopRequireDefault(_fsPromise); var _urlify = require("../_utils/urlify"); var _urlify2 = _interopRequireDefault(_urlify); var _pages = require("../redux/modules/pages"); var pagesActions = _interopRequireWildcard(_pages); var _routesToUrls = require("./routes-to-urls"); var _routesToUrls2 = _interopRequireDefault(_routesToUrls); var _urlAsHtml = require("./url-as-html"); var _urlAsHtml2 = _interopRequireDefault(_urlAsHtml); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } if (pagesActions.SET === undefined) { throw new Error("pages SET action is undefined"); } if (pagesActions.FORGET === undefined) { throw new Error("pages FORGET action is undefined"); } function setPageData(url, collection, store) { var json = collection.find(function (item) { return item.__url === url; }); if (json) { // prepare page data store.dispatch({ type: pagesActions.SET, page: url, response: { json: json } }); } } function forgetPageData(url, store) { // forget page data to avoid having all pages data in all pages store.dispatch({ type: pagesActions.FORGET, page: url }); } function writeHTMLFile(filename, html) { return _fsPromise2.default.mkdirs(_path2.default.dirname(filename)).then(function () { return Promise.all([_fsPromise2.default.writeFile(filename, html)]); }).then(function () { return filename; }); } function writeAllHTMLFiles(options, testing) { var routes = options.routes, collection = options.collection, destination = options.destination, store = options.store, Html = options.Html, setPageData = options.setPageData, forgetPageData = options.forgetPageData, writeHTMLFile = options.writeHTMLFile; var urls = (0, _routesToUrls2.default)(routes, collection); // create all html files return Promise.all(urls.map(function (url) { var item = collection.find(function (item) { return item.__url === url; }); var filename = decodeURIComponent(item ? _path2.default.join(destination, item.__resourceUrl) : _path2.default.join(destination, (0, _urlify2.default)(url, true))); setPageData(url, collection, store); return (0, _urlAsHtml2.default)(url, options, Html, testing).then(function (html) { return writeHTMLFile(filename, html); }).then(function (filename) { forgetPageData(url, store); return filename; }); })); } exports.default = function (options, testing) { return writeAllHTMLFiles(_extends({}, options, { setPageData: setPageData, forgetPageData: forgetPageData, writeHTMLFile: writeHTMLFile }), testing); };