UNPKG

next

Version:

The React Framework

175 lines (174 loc) • 8.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "createMetadataComponents", { enumerable: true, get: function() { return createMetadataComponents; } }); const _jsxruntime = require("react/jsx-runtime"); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _searchparams = require("../../server/request/search-params"); const _pathname = require("../../server/request/pathname"); const _resolvemetadataparallel = require("./resolve-metadata-parallel"); const _metadataelements = require("./metadata-elements"); const _boundarycomponents = require("../framework/boundary-components"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function createMetadataComponents({ tree, pathname, parsedQuery, metadataContext, interpolatedParams, errorType, serveStreamingMetadata }) { const searchParams = (0, _searchparams.createServerSearchParamsForMetadata)(parsedQuery); const pathnameForMetadata = (0, _pathname.createServerPathnameForMetadata)(pathname); async function Viewport() { const tags = await getMetadataResolution(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, errorType).then(async (resolution)=>{ const selected = await resolution.selectedViewport; if (selected.status === 'resolved') { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { children: (0, _metadataelements.createViewportElements)(selected.value) }); } if (!errorType && (selected.status === 'not-found' || selected.status === 'forbidden' || selected.status === 'unauthorized')) { const convention = await getViewportForBranch(tree, pathnameForMetadata, searchParams, selected.status, interpolatedParams, metadataContext, resolution.selectedKeyPath); if (convention.status === 'resolved') { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { children: (0, _metadataelements.createViewportElements)(convention.value) }); } } return null; }).catch(()=>{ // We're going to throw the error from the metadata outlet so we just render null here instead return null; }); return tags; } Viewport.displayName = 'Next.Viewport'; function ViewportWrapper() { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.ViewportBoundary, { children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Viewport, {}) }); } // Metadata resolution must start while rendering so it observes the current // work unit store. function getSelectedMetadata() { return getResolvedParallelMetadata(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, errorType).catch(()=>{ // We're going to throw the error from the metadata outlet so we just render null here instead return null; }); } async function Metadata() { return await getSelectedMetadata(); } Metadata.displayName = 'Next.Metadata'; function MetadataBlocker() { return serveStreamingMetadata ? null : getSelectedMetadata().then(()=>null); } function MetadataWrapper() { // Keep the same component structure in streaming and blocking renders. // The blocker only holds the shell open when metadata must not stream. // React requires top-level suspenseful metadata to be nested under a host // element. Otherwise it becomes part of the document preamble and blocks // shell flushing instead of streaming. Metadata tags are hoisted out, so // this hidden wrapper remains empty. return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_boundarycomponents.MetadataBoundary, { children: [ /*#__PURE__*/ (0, _jsxruntime.jsx)("div", { hidden: true, children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, { name: "Next.Metadata", children: /*#__PURE__*/ (0, _jsxruntime.jsx)(Metadata, {}) }) }), /*#__PURE__*/ (0, _jsxruntime.jsx)(MetadataBlocker, {}) ] }); } function MetadataOutlet({ tree: outletTree }) { const metadataResolution = getMetadataResolution(tree, pathnameForMetadata, searchParams, interpolatedParams, metadataContext, errorType); const pendingOutlet = metadataResolution.then((resolution)=>resolution.outlets.get(outletTree) ?? null); if (!serveStreamingMetadata) { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.OutletBoundary, { children: pendingOutlet }); } return /*#__PURE__*/ (0, _jsxruntime.jsx)(_boundarycomponents.OutletBoundary, { children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Suspense, { name: "Next.MetadataOutlet", children: pendingOutlet }) }); } MetadataOutlet.displayName = 'Next.MetadataOutlet'; return { Viewport: ViewportWrapper, Metadata: MetadataWrapper, MetadataOutlet }; } const getResolvedParallelMetadata = (0, _react.cache)(getResolvedParallelMetadataImpl); async function getResolvedParallelMetadataImpl(tree, pathname, searchParams, interpolatedParams, metadataContext, errorType) { const resolution = await getMetadataResolution(tree, pathname, searchParams, interpolatedParams, metadataContext, errorType); const selected = await resolution.selectedMetadata; if (selected.status === 'resolved') { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { children: (0, _metadataelements.createMetadataElements)(selected.value) }); } if (!errorType && (selected.status === 'not-found' || selected.status === 'forbidden' || selected.status === 'unauthorized')) { const convention = await getMetadataForBranch(tree, pathname, searchParams, selected.status, interpolatedParams, metadataContext, resolution.selectedKeyPath); if (convention.status === 'resolved') { return /*#__PURE__*/ (0, _jsxruntime.jsx)(_jsxruntime.Fragment, { children: (0, _metadataelements.createMetadataElements)(convention.value) }); } } return null; } const getMetadataResolution = (0, _react.cache)(resolveMetadataResolutionImpl); async function resolveMetadataResolutionImpl(tree, pathname, searchParams, interpolatedParams, metadataContext, errorType) { const errorConvention = errorType === 'redirect' ? undefined : errorType; return (0, _resolvemetadataparallel.resolveMetadataResolution)(tree, pathname, searchParams, errorConvention, interpolatedParams, metadataContext); } const getMetadataForBranch = (0, _react.cache)(_resolvemetadataparallel.resolveMetadataForBranch); const getViewportForBranch = (0, _react.cache)(_resolvemetadataparallel.resolveViewportForBranch); //# sourceMappingURL=metadata-parallel.js.map