main repo

This commit is contained in:
Basilosaurusrex
2025-11-24 18:09:40 +01:00
parent b636ee5e70
commit f027651f9b
34146 changed files with 4436636 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
import type webpack from 'webpack';
import type { SizeLimit } from '../../../../../types';
export type EdgeSSRLoaderQuery = {
absolute500Path: string;
absoluteAppPath: string;
absoluteDocumentPath: string;
absoluteErrorPath: string;
absolutePagePath: string;
buildId: string;
dev: boolean;
isServerComponent: boolean;
page: string;
stringifiedConfig: string;
appDirLoader?: string;
pagesType: 'app' | 'pages' | 'root';
sriEnabled: boolean;
incrementalCacheHandlerPath?: string;
preferredRegion: string | string[] | undefined;
middlewareConfig: string;
serverActionsBodySizeLimit?: SizeLimit;
};
declare const edgeSSRLoader: webpack.LoaderDefinitionFunction<EdgeSSRLoaderQuery>;
export default edgeSSRLoader;

View File

@@ -0,0 +1,176 @@
"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(opts) {
return adapter({
...opts,
IncrementalCache,
handler: render
})
}`;
return transformed;
};
const _default = edgeSSRLoader;
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../../src/build/webpack/loaders/next-edge-ssr-loader/index.ts"],"names":["swapDistFolderWithEsmDistFolder","path","replace","getRouteModuleOptions","page","options","definition","kind","RouteKind","PAGES","normalizePagePath","pathname","bundlePath","filename","edgeSSRLoader","dev","buildId","absolutePagePath","absoluteAppPath","absoluteDocumentPath","absolute500Path","absoluteErrorPath","isServerComponent","stringifiedConfig","stringifiedConfigBase64","appDirLoader","appDirLoaderBase64","pagesType","sriEnabled","incrementalCacheHandlerPath","preferredRegion","middlewareConfig","middlewareConfigBase64","serverActionsBodySizeLimit","getOptions","JSON","parse","Buffer","from","toString","isAppDir","buildInfo","getModuleBuildInfo","_module","nextEdgeSSR","route","stringifiedPagePath","stringifyRequest","stringifiedAppPath","stringifiedErrorPath","stringifiedDocumentPath","stringified500Path","pageModPath","substring","length","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","transformed","stringify"],"mappings":"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"}

View File

@@ -0,0 +1,31 @@
import type { NextConfigComplete } from '../../../../server/config-shared';
import type { DocumentType } from '../../../../shared/lib/utils';
import type { BuildManifest } from '../../../../server/get-page-files';
import type { ReactLoadableManifest } from '../../../../server/load-components';
import type { ClientReferenceManifest } from '../../plugins/flight-manifest-plugin';
import type { NextFontManifest } from '../../plugins/next-font-manifest-plugin';
import { PrerenderManifest } from '../../..';
import { SizeLimit } from '../../../../../types';
export declare function getRender({ dev, page, appMod, pageMod, errorMod, error500Mod, pagesType, Document, buildManifest, prerenderManifest, reactLoadableManifest, renderToHTML, clientReferenceManifest, subresourceIntegrityManifest, serverActionsManifest, serverActionsBodySizeLimit, config, buildId, nextFontManifest, incrementalCacheHandler, }: {
pagesType: 'app' | 'pages' | 'root';
dev: boolean;
page: string;
appMod: any;
pageMod: any;
errorMod: any;
error500Mod: any;
renderToHTML?: any;
Document: DocumentType;
buildManifest: BuildManifest;
prerenderManifest: PrerenderManifest;
reactLoadableManifest: ReactLoadableManifest;
subresourceIntegrityManifest?: Record<string, string>;
clientReferenceManifest?: ClientReferenceManifest;
serverActionsManifest: any;
serverActionsBodySizeLimit?: SizeLimit;
appServerMod: any;
config: NextConfigComplete;
buildId: string;
nextFontManifest: NextFontManifest;
incrementalCacheHandler?: any;
}): (request: Request) => Promise<Response>;

View File

@@ -0,0 +1,106 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "getRender", {
enumerable: true,
get: function() {
return getRender;
}
});
const _webserver = /*#__PURE__*/ _interop_require_default(require("../../../../server/web-server"));
const _web = require("../../../../server/base-http/web");
const _constants = require("../../../../lib/constants");
const _apppaths = require("../../../../shared/lib/router/utils/app-paths");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function getRender({ dev, page, appMod, pageMod, errorMod, error500Mod, pagesType, Document, buildManifest, prerenderManifest, reactLoadableManifest, renderToHTML, clientReferenceManifest, subresourceIntegrityManifest, serverActionsManifest, serverActionsBodySizeLimit, config, buildId, nextFontManifest, incrementalCacheHandler }) {
const isAppPath = pagesType === "app";
const baseLoadComponentResult = {
dev,
buildManifest,
reactLoadableManifest,
subresourceIntegrityManifest,
Document,
App: appMod == null ? void 0 : appMod.default,
clientReferenceManifest
};
const server = new _webserver.default({
dev,
conf: config,
minimalMode: true,
webServerConfig: {
page,
pathname: isAppPath ? (0, _apppaths.normalizeAppPath)(page) : page,
pagesType,
prerenderManifest,
extendRenderOpts: {
buildId,
runtime: _constants.SERVER_RUNTIME.experimentalEdge,
supportsDynamicHTML: true,
disableOptimizedLoading: true,
serverActionsManifest,
serverActionsBodySizeLimit,
nextFontManifest
},
renderToHTML,
incrementalCacheHandler,
loadComponent: async (inputPage)=>{
if (inputPage === page) {
return {
...baseLoadComponentResult,
Component: pageMod.default,
pageConfig: pageMod.config || {},
getStaticProps: pageMod.getStaticProps,
getServerSideProps: pageMod.getServerSideProps,
getStaticPaths: pageMod.getStaticPaths,
ComponentMod: pageMod,
isAppPath: !!pageMod.__next_app__,
page: inputPage,
routeModule: pageMod.routeModule
};
}
// If there is a custom 500 page, we need to handle it separately.
if (inputPage === "/500" && error500Mod) {
return {
...baseLoadComponentResult,
Component: error500Mod.default,
pageConfig: error500Mod.config || {},
getStaticProps: error500Mod.getStaticProps,
getServerSideProps: error500Mod.getServerSideProps,
getStaticPaths: error500Mod.getStaticPaths,
ComponentMod: error500Mod,
page: inputPage,
routeModule: error500Mod.routeModule
};
}
if (inputPage === "/_error") {
return {
...baseLoadComponentResult,
Component: errorMod.default,
pageConfig: errorMod.config || {},
getStaticProps: errorMod.getStaticProps,
getServerSideProps: errorMod.getServerSideProps,
getStaticPaths: errorMod.getStaticPaths,
ComponentMod: errorMod,
page: inputPage,
routeModule: errorMod.routeModule
};
}
return null;
}
}
});
const handler = server.getRequestHandler();
return async function render(request) {
const extendedReq = new _web.WebNextRequest(request);
const extendedRes = new _web.WebNextResponse();
handler(extendedReq, extendedRes);
return await extendedRes.toResponse();
};
}
//# sourceMappingURL=render.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["../../../../../src/build/webpack/loaders/next-edge-ssr-loader/render.ts"],"names":["getRender","dev","page","appMod","pageMod","errorMod","error500Mod","pagesType","Document","buildManifest","prerenderManifest","reactLoadableManifest","renderToHTML","clientReferenceManifest","subresourceIntegrityManifest","serverActionsManifest","serverActionsBodySizeLimit","config","buildId","nextFontManifest","incrementalCacheHandler","isAppPath","baseLoadComponentResult","App","default","server","WebServer","conf","minimalMode","webServerConfig","pathname","normalizeAppPath","extendRenderOpts","runtime","SERVER_RUNTIME","experimentalEdge","supportsDynamicHTML","disableOptimizedLoading","loadComponent","inputPage","Component","pageConfig","getStaticProps","getServerSideProps","getStaticPaths","ComponentMod","__next_app__","routeModule","handler","getRequestHandler","render","request","extendedReq","WebNextRequest","extendedRes","WebNextResponse","toResponse"],"mappings":";;;;+BAkBgBA;;;eAAAA;;;kEAVM;qBAIf;2BACwB;0BAEE;;;;;;AAG1B,SAASA,UAAU,EACxBC,GAAG,EACHC,IAAI,EACJC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,WAAW,EACXC,SAAS,EACTC,QAAQ,EACRC,aAAa,EACbC,iBAAiB,EACjBC,qBAAqB,EACrBC,YAAY,EACZC,uBAAuB,EACvBC,4BAA4B,EAC5BC,qBAAqB,EACrBC,0BAA0B,EAC1BC,MAAM,EACNC,OAAO,EACPC,gBAAgB,EAChBC,uBAAuB,EAuBxB;IACC,MAAMC,YAAYd,cAAc;IAChC,MAAMe,0BAA0B;QAC9BrB;QACAQ;QACAE;QACAG;QACAN;QACAe,GAAG,EAAEpB,0BAAAA,OAAQqB,OAAO;QACpBX;IACF;IAEA,MAAMY,SAAS,IAAIC,kBAAS,CAAC;QAC3BzB;QACA0B,MAAMV;QACNW,aAAa;QACbC,iBAAiB;YACf3B;YACA4B,UAAUT,YAAYU,IAAAA,0BAAgB,EAAC7B,QAAQA;YAC/CK;YACAG;YACAsB,kBAAkB;gBAChBd;gBACAe,SAASC,yBAAc,CAACC,gBAAgB;gBACxCC,qBAAqB;gBACrBC,yBAAyB;gBACzBtB;gBACAC;gBACAG;YACF;YACAP;YACAQ;YACAkB,eAAe,OAAOC;gBACpB,IAAIA,cAAcrC,MAAM;oBACtB,OAAO;wBACL,GAAGoB,uBAAuB;wBAC1BkB,WAAWpC,QAAQoB,OAAO;wBAC1BiB,YAAYrC,QAAQa,MAAM,IAAI,CAAC;wBAC/ByB,gBAAgBtC,QAAQsC,cAAc;wBACtCC,oBAAoBvC,QAAQuC,kBAAkB;wBAC9CC,gBAAgBxC,QAAQwC,cAAc;wBACtCC,cAAczC;wBACdiB,WAAW,CAAC,CAACjB,QAAQ0C,YAAY;wBACjC5C,MAAMqC;wBACNQ,aAAa3C,QAAQ2C,WAAW;oBAClC;gBACF;gBAEA,kEAAkE;gBAClE,IAAIR,cAAc,UAAUjC,aAAa;oBACvC,OAAO;wBACL,GAAGgB,uBAAuB;wBAC1BkB,WAAWlC,YAAYkB,OAAO;wBAC9BiB,YAAYnC,YAAYW,MAAM,IAAI,CAAC;wBACnCyB,gBAAgBpC,YAAYoC,cAAc;wBAC1CC,oBAAoBrC,YAAYqC,kBAAkB;wBAClDC,gBAAgBtC,YAAYsC,cAAc;wBAC1CC,cAAcvC;wBACdJ,MAAMqC;wBACNQ,aAAazC,YAAYyC,WAAW;oBACtC;gBACF;gBAEA,IAAIR,cAAc,WAAW;oBAC3B,OAAO;wBACL,GAAGjB,uBAAuB;wBAC1BkB,WAAWnC,SAASmB,OAAO;wBAC3BiB,YAAYpC,SAASY,MAAM,IAAI,CAAC;wBAChCyB,gBAAgBrC,SAASqC,cAAc;wBACvCC,oBAAoBtC,SAASsC,kBAAkB;wBAC/CC,gBAAgBvC,SAASuC,cAAc;wBACvCC,cAAcxC;wBACdH,MAAMqC;wBACNQ,aAAa1C,SAAS0C,WAAW;oBACnC;gBACF;gBAEA,OAAO;YACT;QACF;IACF;IAEA,MAAMC,UAAUvB,OAAOwB,iBAAiB;IAExC,OAAO,eAAeC,OAAOC,OAAgB;QAC3C,MAAMC,cAAc,IAAIC,mBAAc,CAACF;QACvC,MAAMG,cAAc,IAAIC,oBAAe;QAEvCP,QAAQI,aAAaE;QAErB,OAAO,MAAMA,YAAYE,UAAU;IACrC;AACF"}