121 lines
4.9 KiB
JavaScript
121 lines
4.9 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
0 && (module.exports = {
|
||
|
ExportedAppPageFiles: null,
|
||
|
generatePrefetchRsc: null,
|
||
|
exportAppPage: null
|
||
|
});
|
||
|
function _export(target, all) {
|
||
|
for(var name in all)Object.defineProperty(target, name, {
|
||
|
enumerable: true,
|
||
|
get: all[name]
|
||
|
});
|
||
|
}
|
||
|
_export(exports, {
|
||
|
ExportedAppPageFiles: function() {
|
||
|
return ExportedAppPageFiles;
|
||
|
},
|
||
|
generatePrefetchRsc: function() {
|
||
|
return generatePrefetchRsc;
|
||
|
},
|
||
|
exportAppPage: function() {
|
||
|
return exportAppPage;
|
||
|
}
|
||
|
});
|
||
|
const _approuterheaders = require("../../client/components/app-router-headers");
|
||
|
const _isdynamicusageerror = require("../helpers/is-dynamic-usage-error");
|
||
|
const _constants = require("../../lib/constants");
|
||
|
const _ciinfo = require("../../telemetry/ci-info");
|
||
|
const _modulerender = require("../../server/future/route-modules/app-page/module.render");
|
||
|
var ExportedAppPageFiles;
|
||
|
(function(ExportedAppPageFiles) {
|
||
|
ExportedAppPageFiles["HTML"] = "HTML";
|
||
|
ExportedAppPageFiles["FLIGHT"] = "FLIGHT";
|
||
|
ExportedAppPageFiles["META"] = "META";
|
||
|
ExportedAppPageFiles["POSTPONED"] = "POSTPONED";
|
||
|
})(ExportedAppPageFiles || (ExportedAppPageFiles = {}));
|
||
|
async function generatePrefetchRsc(req, path, res, pathname, htmlFilepath, renderOpts, fileWriter) {
|
||
|
req.headers[_approuterheaders.RSC.toLowerCase()] = "1";
|
||
|
req.headers[_approuterheaders.NEXT_URL.toLowerCase()] = path;
|
||
|
req.headers[_approuterheaders.NEXT_ROUTER_PREFETCH.toLowerCase()] = "1";
|
||
|
renderOpts.supportsDynamicHTML = true;
|
||
|
renderOpts.isPrefetch = true;
|
||
|
delete renderOpts.isRevalidate;
|
||
|
const prefetchRenderResult = await (0, _modulerender.lazyRenderAppPage)(req, res, pathname, {}, renderOpts);
|
||
|
prefetchRenderResult.pipe(res);
|
||
|
await res.hasStreamed;
|
||
|
const prefetchRscData = Buffer.concat(res.buffers);
|
||
|
if (renderOpts.store.staticPrefetchBailout) return;
|
||
|
await fileWriter("FLIGHT", htmlFilepath.replace(/\.html$/, ".prefetch.rsc"), prefetchRscData);
|
||
|
}
|
||
|
async function exportAppPage(req, res, page, path, pathname, query, renderOpts, htmlFilepath, debugOutput, isDynamicError, isAppPrefetch, fileWriter) {
|
||
|
// If the page is `/_not-found`, then we should update the page to be `/404`.
|
||
|
if (page === "/_not-found") {
|
||
|
pathname = "/404";
|
||
|
}
|
||
|
try {
|
||
|
if (isAppPrefetch) {
|
||
|
await generatePrefetchRsc(req, path, res, pathname, htmlFilepath, renderOpts, fileWriter);
|
||
|
return {
|
||
|
revalidate: 0
|
||
|
};
|
||
|
}
|
||
|
const result = await (0, _modulerender.lazyRenderAppPage)(req, res, pathname, query, renderOpts);
|
||
|
const html = result.toUnchunkedString();
|
||
|
const { metadata } = result;
|
||
|
const flightData = metadata.pageData;
|
||
|
const revalidate = metadata.revalidate ?? false;
|
||
|
if (revalidate === 0) {
|
||
|
if (isDynamicError) {
|
||
|
throw new Error(`Page with dynamic = "error" encountered dynamic data method on ${path}.`);
|
||
|
}
|
||
|
if (!renderOpts.store.staticPrefetchBailout) {
|
||
|
await generatePrefetchRsc(req, path, res, pathname, htmlFilepath, renderOpts, fileWriter);
|
||
|
}
|
||
|
const { staticBailoutInfo = {} } = metadata;
|
||
|
if (revalidate === 0 && debugOutput && (staticBailoutInfo == null ? void 0 : staticBailoutInfo.description)) {
|
||
|
const err = new Error(`Static generation failed due to dynamic usage on ${path}, reason: ${staticBailoutInfo.description}`);
|
||
|
// Update the stack if it was provided via the bailout info.
|
||
|
const { stack } = staticBailoutInfo;
|
||
|
if (stack) {
|
||
|
err.stack = err.message + stack.substring(stack.indexOf("\n"));
|
||
|
}
|
||
|
console.warn(err);
|
||
|
}
|
||
|
return {
|
||
|
revalidate: 0
|
||
|
};
|
||
|
}
|
||
|
let headers;
|
||
|
if (metadata.fetchTags) {
|
||
|
headers = {
|
||
|
[_constants.NEXT_CACHE_TAGS_HEADER]: metadata.fetchTags
|
||
|
};
|
||
|
}
|
||
|
// Writing static HTML to a file.
|
||
|
await fileWriter("HTML", htmlFilepath, html ?? "", "utf8");
|
||
|
// Writing the request metadata to a file.
|
||
|
const meta = {
|
||
|
headers
|
||
|
};
|
||
|
await fileWriter("META", htmlFilepath.replace(/\.html$/, ".meta"), JSON.stringify(meta));
|
||
|
// Writing the RSC payload to a file.
|
||
|
await fileWriter("FLIGHT", htmlFilepath.replace(/\.html$/, ".rsc"), flightData);
|
||
|
return {
|
||
|
// Only include the metadata if the environment has next support.
|
||
|
metadata: _ciinfo.hasNextSupport ? meta : undefined,
|
||
|
revalidate
|
||
|
};
|
||
|
} catch (err) {
|
||
|
if (!(0, _isdynamicusageerror.isDynamicUsageError)(err)) {
|
||
|
throw err;
|
||
|
}
|
||
|
return {
|
||
|
revalidate: 0
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//# sourceMappingURL=app-page.js.map
|