UNPKG

next

Version:

The React Framework

62 lines (61 loc) 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "createServerInsertedMetadata", { enumerable: true, get: function() { return createServerInsertedMetadata; } }); const _jsxruntime = require("react/jsx-runtime"); const _react = /*#__PURE__*/ _interop_require_default(require("react")); const _serveredge = require("react-dom/server.edge"); const _serverinsertedmetadatasharedruntime = require("../../../shared/lib/server-inserted-metadata.shared-runtime"); const _rendertostring = require("../render-to-string"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * For chromium based browsers (Chrome, Edge, etc.) and Safari, * icons need to stay under <head> to be picked up by the browser. * */ const REINSERT_ICON_SCRIPT = `\ document.querySelectorAll('body link[rel="icon"], body link[rel="apple-touch-icon"]').forEach(el => document.head.appendChild(el))`; function createServerInsertedMetadata(nonce) { let metadataResolver = null; let metadataToFlush = null; const setMetadataResolver = (resolver)=>{ metadataResolver = resolver; }; return { ServerInsertedMetadataProvider: ({ children })=>{ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_serverinsertedmetadatasharedruntime.ServerInsertedMetadataContext.Provider, { value: setMetadataResolver, children: children }); }, async getServerInsertedMetadata () { if (!metadataResolver || metadataToFlush) { return ''; } metadataToFlush = metadataResolver(); const html = await (0, _rendertostring.renderToString)({ renderToReadableStream: _serveredge.renderToReadableStream, element: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, { children: [ metadataToFlush, /*#__PURE__*/ (0, _jsxruntime.jsx)("script", { nonce: nonce, children: REINSERT_ICON_SCRIPT }) ] }) }); return html; } }; } //# sourceMappingURL=create-server-inserted-metadata.js.map