UNPKG

@luban-cli/cli-plugin-service

Version:
91 lines 4.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.render = exports.generateDocument = void 0; const server_1 = __importDefault(require("react-dom/server")); const react_helmet_1 = __importDefault(require("react-helmet")); const ejs_1 = __importDefault(require("ejs")); const serialize_javascript_1 = __importDefault(require("serialize-javascript")); const serverBundle = require("./server-bundle.js"); const template = require("./server_template.js"); const assetsManifestJson = require("./asset-manifest.json"); const generateInjectedTag = (assetsManifest, path) => { const injectedStyles = []; const injectedScripts = []; const noSlashPath = path.split("/").join("-"); Object.keys(assetsManifest).forEach((item) => { const ext = item.substring(item.lastIndexOf(".")); if (item.includes(noSlashPath)) { if (ext === ".js") { injectedScripts.push(`<script src="${assetsManifest[item]}"></script>`); } if (ext === ".css") { injectedStyles.push(`<link href="${assetsManifest[item]}" rel="stylesheet">`); } } }); return { injectedStyles, injectedScripts }; }; /** * generate html document * @param template * @param context * @param App * @param injectedScripts * @param injectedStyles */ exports.generateDocument = (template, context, App, injectedScripts, injectedStyles) => { let document = ""; if (App) { const content = server_1.default.renderToString(App); const helmet = react_helmet_1.default.renderStatic(); document = ejs_1.default.render(template, { CONTENT: content, __INITIAL_DATA__: serialize_javascript_1.default(context.initProps), __USE_SSR__: true, __INITIAL_STATE__: serialize_javascript_1.default(context.initState), INJECTED_STYLES: injectedStyles, INJECTED_SCRIPTS: injectedScripts, link: helmet.link.toString(), meta: helmet.meta.toString(), script: helmet.script.toString(), style: helmet.style.toString(), title: helmet.title.toString(), }); } return document; }; function render(options) { return __awaiter(this, void 0, void 0, function* () { const context = { url: options.url || "/", path: options.path || "/", initProps: {}, initState: {}, query: options.query || {}, }; const staticRouterContext = { location: Object.assign({ pathname: options.path || "/" }, (options.cachedLocation || {})), }; const store = typeof serverBundle.createStore === "function" ? serverBundle.createStore(options.cachedState || {}) : null; const App = yield serverBundle.default(context, staticRouterContext, store, options.shared || {}); const { injectedStyles, injectedScripts } = generateInjectedTag(assetsManifestJson, options.path || "/"); const document = exports.generateDocument(template, context, App, injectedScripts, injectedStyles); return { document, staticRouterContext }; }); } exports.render = render; //# sourceMappingURL=server.js.map