securityos/node_modules/next/dist/build/entries.js

596 lines
26 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
0 && (module.exports = {
sortByPageExts: null,
getStaticInfoIncludingLayouts: null,
getPageFromPath: null,
getPageFilePath: null,
createPagesMapping: null,
getEdgeServerEntry: null,
getAppEntry: null,
getClientEntry: null,
runDependingOnPageType: null,
createEntrypoints: null,
finalizeEntrypoint: null
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
sortByPageExts: function() {
return sortByPageExts;
},
getStaticInfoIncludingLayouts: function() {
return getStaticInfoIncludingLayouts;
},
getPageFromPath: function() {
return getPageFromPath;
},
getPageFilePath: function() {
return getPageFilePath;
},
createPagesMapping: function() {
return createPagesMapping;
},
getEdgeServerEntry: function() {
return getEdgeServerEntry;
},
getAppEntry: function() {
return getAppEntry;
},
getClientEntry: function() {
return getClientEntry;
},
runDependingOnPageType: function() {
return runDependingOnPageType;
},
createEntrypoints: function() {
return createEntrypoints;
},
finalizeEntrypoint: function() {
return finalizeEntrypoint;
}
});
const _picocolors = require("../lib/picocolors");
const _path = require("path");
const _querystring = require("querystring");
const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
const _constants = require("../lib/constants");
const _isapiroute = require("../lib/is-api-route");
const _isedgeruntime = require("../lib/is-edge-runtime");
const _constants1 = require("../shared/lib/constants");
const _log = require("./output/log");
const _utils = require("./utils");
const _getpagestaticinfo = require("./analysis/get-page-static-info");
const _normalizepathsep = require("../shared/lib/page-path/normalize-path-sep");
const _normalizepagepath = require("../shared/lib/page-path/normalize-page-path");
const _apppaths = require("../shared/lib/router/utils/app-paths");
const _nextmiddlewareloader = require("./webpack/loaders/next-middleware-loader");
const _isapprouteroute = require("../lib/is-app-route-route");
const _getmetadataroute = require("../lib/metadata/get-metadata-route");
const _nextrouteloader = require("./webpack/loaders/next-route-loader");
const _isinternalcomponent = require("../lib/is-internal-component");
const _ismetadataroute = require("../lib/metadata/is-metadata-route");
const _routekind = require("../server/future/route-kind");
const _utils1 = require("./webpack/loaders/utils");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function sortByPageExts(pageExtensions) {
return (a, b)=>{
// prioritize entries according to pageExtensions order
// for consistency as fs order can differ across systems
// NOTE: this is reversed so preferred comes last and
// overrides prior
const aExt = (0, _path.extname)(a);
const bExt = (0, _path.extname)(b);
const aNoExt = a.substring(0, a.length - aExt.length);
const bNoExt = a.substring(0, b.length - bExt.length);
if (aNoExt !== bNoExt) return 0;
// find extension index (skip '.' as pageExtensions doesn't have it)
const aExtIndex = pageExtensions.indexOf(aExt.substring(1));
const bExtIndex = pageExtensions.indexOf(bExt.substring(1));
return bExtIndex - aExtIndex;
};
}
async function getStaticInfoIncludingLayouts({ isInsideAppDir, pageExtensions, pageFilePath, appDir, config, isDev, page }) {
const pageStaticInfo = await (0, _getpagestaticinfo.getPageStaticInfo)({
nextConfig: config,
pageFilePath,
isDev,
page,
pageType: isInsideAppDir ? "app" : "pages"
});
const staticInfo = isInsideAppDir ? {
// TODO-APP: Remove the rsc key altogether. It's no longer required.
rsc: "server"
} : pageStaticInfo;
if (isInsideAppDir && appDir) {
const layoutFiles = [];
const potentialLayoutFiles = pageExtensions.map((ext)=>"layout." + ext);
let dir = (0, _path.dirname)(pageFilePath);
// Uses startsWith to not include directories further up.
while(dir.startsWith(appDir)){
for (const potentialLayoutFile of potentialLayoutFiles){
const layoutFile = (0, _path.join)(dir, potentialLayoutFile);
if (!_fs.default.existsSync(layoutFile)) {
continue;
}
layoutFiles.unshift(layoutFile);
}
// Walk up the directory tree
dir = (0, _path.join)(dir, "..");
}
for (const layoutFile of layoutFiles){
const layoutStaticInfo = await (0, _getpagestaticinfo.getPageStaticInfo)({
nextConfig: config,
pageFilePath: layoutFile,
isDev,
page,
pageType: isInsideAppDir ? "app" : "pages"
});
// Only runtime is relevant here.
if (layoutStaticInfo.runtime) {
staticInfo.runtime = layoutStaticInfo.runtime;
}
if (layoutStaticInfo.preferredRegion) {
staticInfo.preferredRegion = layoutStaticInfo.preferredRegion;
}
}
if (pageStaticInfo.runtime) {
staticInfo.runtime = pageStaticInfo.runtime;
}
if (pageStaticInfo.preferredRegion) {
staticInfo.preferredRegion = pageStaticInfo.preferredRegion;
}
// if it's static metadata route, don't inherit runtime from layout
const relativePath = pageFilePath.replace(appDir, "");
if ((0, _ismetadataroute.isStaticMetadataRouteFile)(relativePath)) {
delete staticInfo.runtime;
delete staticInfo.preferredRegion;
}
}
return staticInfo;
}
function getPageFromPath(pagePath, pageExtensions) {
let page = (0, _normalizepathsep.normalizePathSep)(pagePath.replace(new RegExp(`\\.+(${pageExtensions.join("|")})$`), ""));
page = page.replace(/\/index$/, "");
return page === "" ? "/" : page;
}
function getPageFilePath({ absolutePagePath, pagesDir, appDir, rootDir }) {
if (absolutePagePath.startsWith(_constants.PAGES_DIR_ALIAS) && pagesDir) {
return absolutePagePath.replace(_constants.PAGES_DIR_ALIAS, pagesDir);
}
if (absolutePagePath.startsWith(_constants.APP_DIR_ALIAS) && appDir) {
return absolutePagePath.replace(_constants.APP_DIR_ALIAS, appDir);
}
if (absolutePagePath.startsWith(_constants.ROOT_DIR_ALIAS)) {
return absolutePagePath.replace(_constants.ROOT_DIR_ALIAS, rootDir);
}
return require.resolve(absolutePagePath);
}
function createPagesMapping({ isDev, pageExtensions, pagePaths, pagesType, pagesDir }) {
const isAppRoute = pagesType === "app";
const previousPages = {};
const pages = pagePaths.reduce((result, pagePath)=>{
// Do not process .d.ts files inside the `pages` folder
if (pagePath.endsWith(".d.ts") && pageExtensions.includes("ts")) {
return result;
}
let pageKey = getPageFromPath(pagePath, pageExtensions);
if (isAppRoute) {
pageKey = pageKey.replace(/%5F/g, "_");
pageKey = pageKey.replace(/^\/not-found$/g, "/_not-found");
}
if (pageKey in result) {
(0, _log.warn)(`Duplicate page detected. ${(0, _picocolors.cyan)((0, _path.join)("pages", previousPages[pageKey]))} and ${(0, _picocolors.cyan)((0, _path.join)("pages", pagePath))} both resolve to ${(0, _picocolors.cyan)(pageKey)}.`);
} else {
previousPages[pageKey] = pagePath;
}
const normalizedPath = (0, _normalizepathsep.normalizePathSep)((0, _path.join)(pagesType === "pages" ? _constants.PAGES_DIR_ALIAS : pagesType === "app" ? _constants.APP_DIR_ALIAS : _constants.ROOT_DIR_ALIAS, pagePath));
const route = pagesType === "app" ? (0, _getmetadataroute.normalizeMetadataRoute)(pageKey) : pageKey;
result[route] = normalizedPath;
return result;
}, {});
if (pagesType === "app") {
const hasAppPages = Object.keys(pages).some((page)=>page.endsWith("/page"));
return {
// If there's any app pages existed, add a default not-found page.
// If there's any custom not-found page existed, it will override the default one.
...hasAppPages && {
"/_not-found": "next/dist/client/components/not-found-error"
},
...pages
};
} else if (pagesType === "root") {
return pages;
}
if (isDev) {
delete pages["/_app"];
delete pages["/_error"];
delete pages["/_document"];
}
// In development we always alias these to allow Webpack to fallback to
// the correct source file so that HMR can work properly when a file is
// added or removed.
const root = isDev && pagesDir ? _constants.PAGES_DIR_ALIAS : "next/dist/pages";
return {
"/_app": `${root}/_app`,
"/_error": `${root}/_error`,
"/_document": `${root}/_document`,
...pages
};
}
function getEdgeServerEntry(opts) {
var _opts_config_experimental_sri;
if (opts.pagesType === "app" && (0, _isapprouteroute.isAppRouteRoute)(opts.page) && opts.appDirLoader) {
const loaderParams = {
absolutePagePath: opts.absolutePagePath,
page: opts.page,
appDirLoader: Buffer.from(opts.appDirLoader || "").toString("base64"),
nextConfigOutput: opts.config.output,
preferredRegion: opts.preferredRegion,
middlewareConfig: Buffer.from(JSON.stringify(opts.middlewareConfig || {})).toString("base64")
};
return {
import: `next-edge-app-route-loader?${(0, _querystring.stringify)(loaderParams)}!`,
layer: _constants.WEBPACK_LAYERS.reactServerComponents
};
}
if ((0, _utils.isMiddlewareFile)(opts.page)) {
var _opts_middleware;
const loaderParams = {
absolutePagePath: opts.absolutePagePath,
page: opts.page,
rootDir: opts.rootDir,
matchers: ((_opts_middleware = opts.middleware) == null ? void 0 : _opts_middleware.matchers) ? (0, _nextmiddlewareloader.encodeMatchers)(opts.middleware.matchers) : "",
preferredRegion: opts.preferredRegion,
middlewareConfig: Buffer.from(JSON.stringify(opts.middlewareConfig || {})).toString("base64")
};
return `next-middleware-loader?${(0, _querystring.stringify)(loaderParams)}!`;
}
if ((0, _isapiroute.isAPIRoute)(opts.page)) {
const loaderParams = {
absolutePagePath: opts.absolutePagePath,
page: opts.page,
rootDir: opts.rootDir,
preferredRegion: opts.preferredRegion,
middlewareConfig: Buffer.from(JSON.stringify(opts.middlewareConfig || {})).toString("base64")
};
return `next-edge-function-loader?${(0, _querystring.stringify)(loaderParams)}!`;
}
if ((0, _utils.isInstrumentationHookFile)(opts.page)) {
return {
import: opts.absolutePagePath,
filename: `edge-${_constants.INSTRUMENTATION_HOOK_FILENAME}.js`
};
}
const loaderParams = {
absolute500Path: opts.pages["/500"] || "",
absoluteAppPath: opts.pages["/_app"],
absoluteDocumentPath: opts.pages["/_document"],
absoluteErrorPath: opts.pages["/_error"],
absolutePagePath: opts.absolutePagePath,
buildId: opts.buildId,
dev: opts.isDev,
isServerComponent: opts.isServerComponent,
page: opts.page,
stringifiedConfig: Buffer.from(JSON.stringify(opts.config)).toString("base64"),
pagesType: opts.pagesType,
appDirLoader: Buffer.from(opts.appDirLoader || "").toString("base64"),
sriEnabled: !opts.isDev && !!((_opts_config_experimental_sri = opts.config.experimental.sri) == null ? void 0 : _opts_config_experimental_sri.algorithm),
incrementalCacheHandlerPath: opts.config.experimental.incrementalCacheHandlerPath,
preferredRegion: opts.preferredRegion,
middlewareConfig: Buffer.from(JSON.stringify(opts.middlewareConfig || {})).toString("base64"),
serverActionsBodySizeLimit: opts.config.experimental.serverActionsBodySizeLimit
};
return {
import: `next-edge-ssr-loader?${(0, _querystring.stringify)(loaderParams)}!`,
// The Edge bundle includes the server in its entrypoint, so it has to
// be in the SSR layer — we later convert the page request to the RSC layer
// via a webpack rule.
layer: opts.appDirLoader ? _constants.WEBPACK_LAYERS.serverSideRendering : undefined
};
}
function getAppEntry(opts) {
return {
import: `next-app-loader?${(0, _querystring.stringify)(opts)}!`,
layer: _constants.WEBPACK_LAYERS.reactServerComponents
};
}
function getClientEntry(opts) {
const loaderOptions = {
absolutePagePath: opts.absolutePagePath,
page: opts.page
};
const pageLoader = `next-client-pages-loader?${(0, _querystring.stringify)(loaderOptions)}!`;
// Make sure next/router is a dependency of _app or else chunk splitting
// might cause the router to not be able to load causing hydration
// to fail
return opts.page === "/_app" ? [
pageLoader,
require.resolve("../client/router")
] : pageLoader;
}
function runDependingOnPageType(params) {
if (params.pageType === "root" && (0, _utils.isInstrumentationHookFile)(params.page)) {
params.onServer();
params.onEdgeServer();
return;
}
if ((0, _utils.isMiddlewareFile)(params.page)) {
params.onEdgeServer();
return;
}
if ((0, _isapiroute.isAPIRoute)(params.page)) {
if ((0, _isedgeruntime.isEdgeRuntime)(params.pageRuntime)) {
params.onEdgeServer();
return;
}
params.onServer();
return;
}
if (params.page === "/_document") {
params.onServer();
return;
}
if (params.page === "/_app" || params.page === "/_error" || params.page === "/404" || params.page === "/500") {
params.onClient();
params.onServer();
return;
}
if ((0, _isedgeruntime.isEdgeRuntime)(params.pageRuntime)) {
params.onClient();
params.onEdgeServer();
return;
}
params.onClient();
params.onServer();
return;
}
async function createEntrypoints(params) {
const { config, pages, pagesDir, isDev, rootDir, rootPaths, appDir, appPaths, pageExtensions } = params;
const edgeServer = {};
const server = {};
const client = {};
let middlewareMatchers = undefined;
let appPathsPerRoute = {};
if (appDir && appPaths) {
for(const pathname in appPaths){
const normalizedPath = (0, _apppaths.normalizeAppPath)(pathname);
const actualPath = appPaths[pathname];
if (!appPathsPerRoute[normalizedPath]) {
appPathsPerRoute[normalizedPath] = [];
}
appPathsPerRoute[normalizedPath].push(// TODO-APP: refactor to pass the page path from createPagesMapping instead.
getPageFromPath(actualPath, pageExtensions).replace(_constants.APP_DIR_ALIAS, ""));
}
// Make sure to sort parallel routes to make the result deterministic.
appPathsPerRoute = Object.fromEntries(Object.entries(appPathsPerRoute).map(([k, v])=>[
k,
v.sort()
]));
}
const getEntryHandler = (mappings, pagesType)=>async (page)=>{
const bundleFile = (0, _normalizepagepath.normalizePagePath)(page);
const clientBundlePath = _path.posix.join(pagesType, bundleFile);
const serverBundlePath = pagesType === "pages" ? _path.posix.join("pages", bundleFile) : pagesType === "app" ? _path.posix.join("app", bundleFile) : bundleFile.slice(1);
const absolutePagePath = mappings[page];
// Handle paths that have aliases
const pageFilePath = getPageFilePath({
absolutePagePath,
pagesDir,
appDir,
rootDir
});
const isInsideAppDir = !!appDir && (absolutePagePath.startsWith(_constants.APP_DIR_ALIAS) || absolutePagePath.startsWith(appDir));
const staticInfo = await getStaticInfoIncludingLayouts({
isInsideAppDir,
pageExtensions,
pageFilePath,
appDir,
config,
isDev,
page
});
const isServerComponent = isInsideAppDir && staticInfo.rsc !== _constants1.RSC_MODULE_TYPES.client;
if ((0, _utils.isMiddlewareFile)(page)) {
var _staticInfo_middleware;
middlewareMatchers = ((_staticInfo_middleware = staticInfo.middleware) == null ? void 0 : _staticInfo_middleware.matchers) ?? [
{
regexp: ".*",
originalSource: "/:path*"
}
];
}
runDependingOnPageType({
page,
pageRuntime: staticInfo.runtime,
pageType: pagesType,
onClient: ()=>{
if (isServerComponent || isInsideAppDir) {
// We skip the initial entries for server component pages and let the
// server compiler inject them instead.
} else {
client[clientBundlePath] = getClientEntry({
absolutePagePath,
page
});
}
},
onServer: ()=>{
if (pagesType === "app" && appDir) {
const matchedAppPaths = appPathsPerRoute[(0, _apppaths.normalizeAppPath)(page)];
server[serverBundlePath] = getAppEntry({
page,
name: serverBundlePath,
pagePath: absolutePagePath,
appDir,
appPaths: matchedAppPaths,
pageExtensions,
basePath: config.basePath,
assetPrefix: config.assetPrefix,
nextConfigOutput: config.output,
preferredRegion: staticInfo.preferredRegion,
middlewareConfig: (0, _utils1.encodeToBase64)(staticInfo.middleware || {})
});
} else if ((0, _utils.isInstrumentationHookFile)(page) && pagesType === "root") {
server[serverBundlePath.replace("src/", "")] = {
import: absolutePagePath,
// the '../' is needed to make sure the file is not chunked
filename: `../${_constants.INSTRUMENTATION_HOOK_FILENAME}.js`
};
} else if ((0, _isapiroute.isAPIRoute)(page)) {
server[serverBundlePath] = [
(0, _nextrouteloader.getRouteLoaderEntry)({
kind: _routekind.RouteKind.PAGES_API,
page,
absolutePagePath,
preferredRegion: staticInfo.preferredRegion,
middlewareConfig: staticInfo.middleware || {}
})
];
} else if (!(0, _utils.isMiddlewareFile)(page) && !(0, _isinternalcomponent.isInternalComponent)(absolutePagePath) && !(0, _isinternalcomponent.isNonRoutePagesPage)(page)) {
server[serverBundlePath] = [
(0, _nextrouteloader.getRouteLoaderEntry)({
kind: _routekind.RouteKind.PAGES,
page,
pages,
absolutePagePath,
preferredRegion: staticInfo.preferredRegion,
middlewareConfig: staticInfo.middleware ?? {}
})
];
} else {
server[serverBundlePath] = [
absolutePagePath
];
}
},
onEdgeServer: ()=>{
let appDirLoader = "";
if (pagesType === "app") {
const matchedAppPaths = appPathsPerRoute[(0, _apppaths.normalizeAppPath)(page)];
appDirLoader = getAppEntry({
name: serverBundlePath,
page,
pagePath: absolutePagePath,
appDir: appDir,
appPaths: matchedAppPaths,
pageExtensions,
basePath: config.basePath,
assetPrefix: config.assetPrefix,
nextConfigOutput: config.output,
// This isn't used with edge as it needs to be set on the entry module, which will be the `edgeServerEntry` instead.
// Still passing it here for consistency.
preferredRegion: staticInfo.preferredRegion,
middlewareConfig: Buffer.from(JSON.stringify(staticInfo.middleware || {})).toString("base64")
}).import;
}
const normalizedServerBundlePath = (0, _utils.isInstrumentationHookFile)(page) && pagesType === "root" ? serverBundlePath.replace("src/", "") : serverBundlePath;
edgeServer[normalizedServerBundlePath] = getEdgeServerEntry({
...params,
rootDir,
absolutePagePath: absolutePagePath,
bundlePath: clientBundlePath,
isDev: false,
isServerComponent,
page,
middleware: staticInfo == null ? void 0 : staticInfo.middleware,
pagesType,
appDirLoader,
preferredRegion: staticInfo.preferredRegion,
middlewareConfig: staticInfo.middleware
});
}
});
};
const promises = [];
if (appPaths) {
const entryHandler = getEntryHandler(appPaths, "app");
promises.push(Promise.all(Object.keys(appPaths).map(entryHandler)));
}
if (rootPaths) {
promises.push(Promise.all(Object.keys(rootPaths).map(getEntryHandler(rootPaths, "root"))));
}
promises.push(Promise.all(Object.keys(pages).map(getEntryHandler(pages, "pages"))));
await Promise.all(promises);
return {
client,
server,
edgeServer,
middlewareMatchers
};
}
function finalizeEntrypoint({ name, compilerType, value, isServerComponent, hasAppDir }) {
const entry = typeof value !== "object" || Array.isArray(value) ? {
import: value
} : value;
const isApi = name.startsWith("pages/api/");
switch(compilerType){
case _constants1.COMPILER_NAMES.server:
{
return {
publicPath: isApi ? "" : undefined,
runtime: isApi ? "webpack-api-runtime" : "webpack-runtime",
layer: isApi ? _constants.WEBPACK_LAYERS.api : isServerComponent ? _constants.WEBPACK_LAYERS.reactServerComponents : undefined,
...entry
};
}
case _constants1.COMPILER_NAMES.edgeServer:
{
return {
layer: (0, _utils.isMiddlewareFilename)(name) || isApi ? _constants.WEBPACK_LAYERS.middleware : undefined,
library: {
name: [
"_ENTRIES",
`middleware_[name]`
],
type: "assign"
},
runtime: _constants1.EDGE_RUNTIME_WEBPACK,
asyncChunks: false,
...entry
};
}
case _constants1.COMPILER_NAMES.client:
{
const isAppLayer = hasAppDir && (name === _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP || name === _constants1.APP_CLIENT_INTERNALS || name.startsWith("app/"));
if (// Client special cases
name !== _constants1.CLIENT_STATIC_FILES_RUNTIME_POLYFILLS && name !== _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN && name !== _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP && name !== _constants1.CLIENT_STATIC_FILES_RUNTIME_AMP && name !== _constants1.CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH) {
if (isAppLayer) {
return {
dependOn: _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP,
layer: _constants.WEBPACK_LAYERS.appPagesBrowser,
...entry
};
}
return {
dependOn: name.startsWith("pages/") && name !== "pages/_app" ? "pages/_app" : _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN,
...entry
};
}
if (isAppLayer) {
return {
layer: _constants.WEBPACK_LAYERS.appPagesBrowser,
...entry
};
}
return entry;
}
default:
{
// Should never happen.
throw new Error("Invalid compiler type");
}
}
}
//# sourceMappingURL=entries.js.map