176 lines
7.5 KiB
JavaScript
176 lines
7.5 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
Object.defineProperty(exports, "default", {
|
||
|
enumerable: true,
|
||
|
get: function() {
|
||
|
return _default;
|
||
|
}
|
||
|
});
|
||
|
const _getmodulebuildinfo = require("../get-module-build-info");
|
||
|
const _constants = require("../../../../lib/constants");
|
||
|
const _stringifyrequest = require("../../stringify-request");
|
||
|
const _routekind = require("../../../../server/future/route-kind");
|
||
|
const _normalizepagepath = require("../../../../shared/lib/page-path/normalize-page-path");
|
||
|
/*
|
||
|
For pages SSR'd at the edge, we bundle them with the ESM version of Next in order to
|
||
|
benefit from the better tree-shaking and thus, smaller bundle sizes.
|
||
|
|
||
|
The absolute paths for _app, _error and _document, used in this loader, link to the regular CJS modules.
|
||
|
They are generated in `createPagesMapping` where we don't have access to `isEdgeRuntime`,
|
||
|
so we have to do it here. It's not that bad because it keeps all references to ESM modules magic in this place.
|
||
|
*/ function swapDistFolderWithEsmDistFolder(path) {
|
||
|
return path.replace("next/dist/pages", "next/dist/esm/pages");
|
||
|
}
|
||
|
function getRouteModuleOptions(page) {
|
||
|
const options = {
|
||
|
definition: {
|
||
|
kind: _routekind.RouteKind.PAGES,
|
||
|
page: (0, _normalizepagepath.normalizePagePath)(page),
|
||
|
pathname: page,
|
||
|
// The following aren't used in production.
|
||
|
bundlePath: "",
|
||
|
filename: ""
|
||
|
}
|
||
|
};
|
||
|
return options;
|
||
|
}
|
||
|
const edgeSSRLoader = function edgeSSRLoader() {
|
||
|
const { dev, page, buildId, absolutePagePath, absoluteAppPath, absoluteDocumentPath, absolute500Path, absoluteErrorPath, isServerComponent, stringifiedConfig: stringifiedConfigBase64, appDirLoader: appDirLoaderBase64, pagesType, sriEnabled, incrementalCacheHandlerPath, preferredRegion, middlewareConfig: middlewareConfigBase64, serverActionsBodySizeLimit } = this.getOptions();
|
||
|
const middlewareConfig = JSON.parse(Buffer.from(middlewareConfigBase64, "base64").toString());
|
||
|
const stringifiedConfig = Buffer.from(stringifiedConfigBase64 || "", "base64").toString();
|
||
|
const appDirLoader = Buffer.from(appDirLoaderBase64 || "", "base64").toString();
|
||
|
const isAppDir = pagesType === "app";
|
||
|
const buildInfo = (0, _getmodulebuildinfo.getModuleBuildInfo)(this._module);
|
||
|
buildInfo.nextEdgeSSR = {
|
||
|
// @ts-expect-error === 'true' is correct because loader options are serialized as searchParams. Type needs to be fixed somehow.
|
||
|
isServerComponent: isServerComponent === "true",
|
||
|
page: page,
|
||
|
isAppDir
|
||
|
};
|
||
|
buildInfo.route = {
|
||
|
page,
|
||
|
absolutePagePath,
|
||
|
preferredRegion,
|
||
|
middlewareConfig
|
||
|
};
|
||
|
const stringifiedPagePath = (0, _stringifyrequest.stringifyRequest)(this, absolutePagePath);
|
||
|
const stringifiedAppPath = (0, _stringifyrequest.stringifyRequest)(this, swapDistFolderWithEsmDistFolder(absoluteAppPath));
|
||
|
const stringifiedErrorPath = (0, _stringifyrequest.stringifyRequest)(this, swapDistFolderWithEsmDistFolder(absoluteErrorPath));
|
||
|
const stringifiedDocumentPath = (0, _stringifyrequest.stringifyRequest)(this, swapDistFolderWithEsmDistFolder(absoluteDocumentPath));
|
||
|
const stringified500Path = absolute500Path ? (0, _stringifyrequest.stringifyRequest)(this, absolute500Path) : null;
|
||
|
const pageModPath = `${appDirLoader}${stringifiedPagePath.substring(1, stringifiedPagePath.length - 1)}${isAppDir ? `?${_constants.WEBPACK_RESOURCE_QUERIES.edgeSSREntry}` : ""}`;
|
||
|
const transformed = `
|
||
|
import 'next/dist/esm/server/web/globals'
|
||
|
import { adapter } from 'next/dist/esm/server/web/adapter'
|
||
|
import { getRender } from 'next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render'
|
||
|
import { IncrementalCache } from 'next/dist/esm/server/lib/incremental-cache'
|
||
|
|
||
|
const pagesType = ${JSON.stringify(pagesType)}
|
||
|
${isAppDir ? `
|
||
|
import { renderToHTMLOrFlight as renderToHTML } from 'next/dist/esm/server/app-render/app-render'
|
||
|
import * as pageMod from ${JSON.stringify(pageModPath)}
|
||
|
const Document = null
|
||
|
const appMod = null
|
||
|
const errorMod = null
|
||
|
const error500Mod = null
|
||
|
` : `
|
||
|
import Document from ${stringifiedDocumentPath}
|
||
|
import * as appMod from ${stringifiedAppPath}
|
||
|
import * as userlandPage from ${stringifiedPagePath}
|
||
|
import * as userlandErrorPage from ${stringifiedErrorPath}
|
||
|
${stringified500Path ? `import * as userland500Page from ${stringified500Path}` : ""}
|
||
|
|
||
|
// TODO: re-enable this once we've refactored to use implicit matches
|
||
|
// const renderToHTML = undefined
|
||
|
|
||
|
import { renderToHTML } from 'next/dist/esm/server/render'
|
||
|
import RouteModule from "next/dist/esm/server/future/route-modules/pages/module"
|
||
|
|
||
|
const pageMod = {
|
||
|
...userlandPage,
|
||
|
routeModule: new RouteModule({
|
||
|
...${JSON.stringify(getRouteModuleOptions(page))},
|
||
|
components: {
|
||
|
App: appMod.default,
|
||
|
Document,
|
||
|
},
|
||
|
userland: userlandPage,
|
||
|
}),
|
||
|
}
|
||
|
|
||
|
const errorMod = {
|
||
|
...userlandErrorPage,
|
||
|
routeModule: new RouteModule({
|
||
|
...${JSON.stringify(getRouteModuleOptions("/_error"))},
|
||
|
components: {
|
||
|
App: appMod.default,
|
||
|
Document,
|
||
|
},
|
||
|
userland: userlandErrorPage,
|
||
|
}),
|
||
|
}
|
||
|
|
||
|
const error500Mod = ${stringified500Path ? `{
|
||
|
...userland500Page,
|
||
|
routeModule: new RouteModule({
|
||
|
...${JSON.stringify(getRouteModuleOptions("/500"))},
|
||
|
components: {
|
||
|
App: appMod.default,
|
||
|
Document,
|
||
|
},
|
||
|
userland: userland500Page,
|
||
|
}),
|
||
|
}` : "null"}`}
|
||
|
|
||
|
${incrementalCacheHandlerPath ? `import incrementalCacheHandler from ${JSON.stringify(incrementalCacheHandlerPath)}` : "const incrementalCacheHandler = null"}
|
||
|
|
||
|
const maybeJSONParse = (str) => str ? JSON.parse(str) : undefined
|
||
|
|
||
|
const buildManifest = self.__BUILD_MANIFEST
|
||
|
const prerenderManifest = maybeJSONParse(self.__PRERENDER_MANIFEST)
|
||
|
const reactLoadableManifest = maybeJSONParse(self.__REACT_LOADABLE_MANIFEST)
|
||
|
const rscManifest = self.__RSC_MANIFEST?.[${JSON.stringify(page)}]
|
||
|
const rscServerManifest = maybeJSONParse(self.__RSC_SERVER_MANIFEST)
|
||
|
const subresourceIntegrityManifest = ${sriEnabled ? "maybeJSONParse(self.__SUBRESOURCE_INTEGRITY_MANIFEST)" : "undefined"}
|
||
|
const nextFontManifest = maybeJSONParse(self.__NEXT_FONT_MANIFEST)
|
||
|
|
||
|
const render = getRender({
|
||
|
pagesType,
|
||
|
dev: ${dev},
|
||
|
page: ${JSON.stringify(page)},
|
||
|
appMod,
|
||
|
pageMod,
|
||
|
errorMod,
|
||
|
error500Mod,
|
||
|
Document,
|
||
|
buildManifest,
|
||
|
isAppPath: ${!!isAppDir},
|
||
|
prerenderManifest,
|
||
|
renderToHTML,
|
||
|
reactLoadableManifest,
|
||
|
clientReferenceManifest: ${isServerComponent} ? rscManifest : null,
|
||
|
serverActionsManifest: ${isServerComponent} ? rscServerManifest : null,
|
||
|
serverActionsBodySizeLimit: ${isServerComponent} ? ${typeof serverActionsBodySizeLimit === "undefined" ? "undefined" : JSON.stringify(serverActionsBodySizeLimit)} : undefined,
|
||
|
subresourceIntegrityManifest,
|
||
|
config: ${stringifiedConfig},
|
||
|
buildId: ${JSON.stringify(buildId)},
|
||
|
nextFontManifest,
|
||
|
incrementalCacheHandler,
|
||
|
})
|
||
|
|
||
|
export const ComponentMod = pageMod
|
||
|
|
||
|
export default function nHandler (opts, event) {
|
||
|
return adapter({
|
||
|
...opts,
|
||
|
IncrementalCache,
|
||
|
handler: render
|
||
|
})
|
||
|
}`;
|
||
|
return transformed;
|
||
|
};
|
||
|
const _default = edgeSSRLoader;
|
||
|
|
||
|
//# sourceMappingURL=index.js.map
|