123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.getPageFromPath = getPageFromPath;
- exports.createPagesMapping = createPagesMapping;
- exports.getEdgeServerEntry = getEdgeServerEntry;
- exports.getAppEntry = getAppEntry;
- exports.getServerlessEntry = getServerlessEntry;
- exports.getClientEntry = getClientEntry;
- exports.runDependingOnPageType = runDependingOnPageType;
- exports.createEntrypoints = createEntrypoints;
- exports.finalizeEntrypoint = finalizeEntrypoint;
- var _chalk = _interopRequireDefault(require("next/dist/compiled/chalk"));
- var _path = require("path");
- var _querystring = require("querystring");
- var _constants = require("../lib/constants");
- var _constants1 = require("../shared/lib/constants");
- var _utils = require("../server/utils");
- var _log = require("./output/log");
- var _utils1 = require("./utils");
- var _getPageStaticInfo = require("./analysis/get-page-static-info");
- var _normalizePathSep = require("../shared/lib/page-path/normalize-path-sep");
- var _normalizePagePath = require("../shared/lib/page-path/normalize-page-path");
- var _appPaths = require("../shared/lib/router/utils/app-paths");
- var _nextMiddlewareLoader = require("./webpack/loaders/next-middleware-loader");
- function _interopRequireDefault(obj) {
- return obj && obj.__esModule ? obj : {
- default: obj
- };
- }
- function getPageFromPath(pagePath, pageExtensions) {
- let page = (0, _normalizePathSep).normalizePathSep(pagePath.replace(new RegExp(`\\.+(${pageExtensions.join("|")})$`), ""));
- page = page.replace(/\/index$/, "");
- return page === "" ? "/" : page;
- }
- function createPagesMapping({ isDev , pageExtensions , pagePaths , pagesType , pagesDir }) {
- 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;
- }
- const pageKey = getPageFromPath(pagePath, pageExtensions);
- if (pageKey in result) {
- (0, _log).warn(`Duplicate page detected. ${_chalk.default.cyan((0, _path).join("pages", previousPages[pageKey]))} and ${_chalk.default.cyan((0, _path).join("pages", pagePath))} both resolve to ${_chalk.default.cyan(pageKey)}.`);
- } else {
- previousPages[pageKey] = pagePath;
- }
- result[pageKey] = (0, _normalizePathSep).normalizePathSep((0, _path).join(pagesType === "pages" ? _constants.PAGES_DIR_ALIAS : pagesType === "app" ? _constants.APP_DIR_ALIAS : _constants.ROOT_DIR_ALIAS, pagePath));
- return result;
- }, {});
- if (pagesType !== "pages") {
- 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 ref;
- if ((0, _utils1).isMiddlewareFile(opts.page)) {
- var ref1;
- const loaderParams = {
- absolutePagePath: opts.absolutePagePath,
- page: opts.page,
- rootDir: opts.rootDir,
- matchers: ((ref1 = opts.middleware) == null ? void 0 : ref1.matchers) ? (0, _nextMiddlewareLoader).encodeMatchers(opts.middleware.matchers) : ""
- };
- return `next-middleware-loader?${(0, _querystring).stringify(loaderParams)}!`;
- }
- if (opts.page.startsWith("/api/") || opts.page === "/api") {
- const loaderParams = {
- absolutePagePath: opts.absolutePagePath,
- page: opts.page,
- rootDir: opts.rootDir
- };
- return `next-edge-function-loader?${(0, _querystring).stringify(loaderParams)}!`;
- }
- 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: JSON.stringify(opts.config),
- pagesType: opts.pagesType,
- appDirLoader: Buffer.from(opts.appDirLoader || "").toString("base64"),
- sriEnabled: !opts.isDev && !!((ref = opts.config.experimental.sri) == null ? void 0 : ref.algorithm)
- };
- return {
- import: `next-edge-ssr-loader?${(0, _querystring).stringify(loaderParams)}!`,
- layer: opts.isServerComponent ? _constants.WEBPACK_LAYERS.server : undefined
- };
- }
- function getAppEntry(opts) {
- return {
- import: `next-app-loader?${(0, _querystring).stringify(opts)}!`,
- layer: _constants.WEBPACK_LAYERS.server
- };
- }
- function getServerlessEntry(opts) {
- const loaderParams = {
- absolute404Path: opts.pages["/404"] || "",
- absoluteAppPath: opts.pages["/_app"],
- absoluteDocumentPath: opts.pages["/_document"],
- absoluteErrorPath: opts.pages["/_error"],
- absolutePagePath: opts.absolutePagePath,
- assetPrefix: opts.config.assetPrefix,
- basePath: opts.config.basePath,
- buildId: opts.buildId,
- canonicalBase: opts.config.amp.canonicalBase || "",
- distDir: _constants.DOT_NEXT_ALIAS,
- generateEtags: opts.config.generateEtags ? "true" : "",
- i18n: opts.config.i18n ? JSON.stringify(opts.config.i18n) : "",
- // base64 encode to make sure contents don't break webpack URL loading
- loadedEnvFiles: Buffer.from(JSON.stringify(opts.envFiles)).toString("base64"),
- page: opts.page,
- poweredByHeader: opts.config.poweredByHeader ? "true" : "",
- previewProps: JSON.stringify(opts.previewMode),
- runtimeConfig: Object.keys(opts.config.publicRuntimeConfig).length > 0 || Object.keys(opts.config.serverRuntimeConfig).length > 0 ? JSON.stringify({
- publicRuntimeConfig: opts.config.publicRuntimeConfig,
- serverRuntimeConfig: opts.config.serverRuntimeConfig
- }) : ""
- };
- return `next-serverless-loader?${(0, _querystring).stringify(loaderParams)}!`;
- }
- 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;
- }
- async function runDependingOnPageType(params) {
- if ((0, _utils1).isMiddlewareFile(params.page)) {
- await params.onEdgeServer();
- return;
- }
- if (params.page.match(_constants.API_ROUTE)) {
- if (params.pageRuntime === _constants.SERVER_RUNTIME.edge) {
- await params.onEdgeServer();
- return;
- }
- await params.onServer();
- return;
- }
- if (params.page === "/_document") {
- await params.onServer();
- return;
- }
- if (params.page === "/_app" || params.page === "/_error" || params.page === "/404" || params.page === "/500") {
- await Promise.all([
- params.onClient(),
- params.onServer()
- ]);
- return;
- }
- if (params.pageRuntime === _constants.SERVER_RUNTIME.edge) {
- await Promise.all([
- params.onClient(),
- params.onEdgeServer()
- ]);
- return;
- }
- await Promise.all([
- params.onClient(),
- params.onServer()
- ]);
- return;
- }
- async function createEntrypoints(params) {
- const { config , pages , pagesDir , isDev , rootDir , rootPaths , target , appDir , appPaths , pageExtensions , } = params;
- const edgeServer = {};
- const server = {};
- const client = {};
- const nestedMiddleware = [];
- let middlewareMatchers = undefined;
- let appPathsPerRoute = {};
- if (appDir && appPaths) {
- for(const pathname in appPaths){
- const normalizedPath = (0, _appPaths).normalizeAppPath(pathname) || "/";
- if (!appPathsPerRoute[normalizedPath]) {
- appPathsPerRoute[normalizedPath] = [];
- }
- appPathsPerRoute[normalizedPath].push(pathname);
- }
- // 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)=>{
- return 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 = (()=>{
- 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);
- })();
- /**
- * When we find a middleware file that is not in the ROOT_DIR we fail.
- * There is no need to check on `dev` as this should only happen when
- * building for production.
- */ if (!absolutePagePath.startsWith(_constants.ROOT_DIR_ALIAS) && /[\\\\/]_middleware$/.test(page)) {
- nestedMiddleware.push(page);
- }
- const isInsideAppDir = !!appDir && (absolutePagePath.startsWith(_constants.APP_DIR_ALIAS) || absolutePagePath.startsWith(appDir));
- const staticInfo = await (0, _getPageStaticInfo).getPageStaticInfo({
- nextConfig: config,
- pageFilePath,
- isDev,
- page
- });
- const isServerComponent = isInsideAppDir && staticInfo.rsc !== _constants1.RSC_MODULE_TYPES.client;
- if ((0, _utils1).isMiddlewareFile(page)) {
- var ref;
- var ref2;
- middlewareMatchers = (ref2 = (ref = staticInfo.middleware) == null ? void 0 : ref.matchers) != null ? ref2 : [
- {
- regexp: ".*"
- },
- ];
- if (target === "serverless") {
- throw new _utils1.MiddlewareInServerlessTargetError();
- }
- }
- await runDependingOnPageType({
- page,
- pageRuntime: staticInfo.runtime,
- 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: mappings[page],
- page
- });
- }
- },
- onServer: ()=>{
- if (pagesType === "app" && appDir) {
- const matchedAppPaths = appPathsPerRoute[(0, _appPaths).normalizeAppPath(page) || "/"];
- server[serverBundlePath] = getAppEntry({
- name: serverBundlePath,
- pagePath: mappings[page],
- appDir,
- appPaths: matchedAppPaths,
- pageExtensions
- });
- } else if ((0, _utils).isTargetLikeServerless(target)) {
- if (page !== "/_app" && page !== "/_document") {
- server[serverBundlePath] = getServerlessEntry({
- ...params,
- absolutePagePath: mappings[page],
- page
- });
- }
- } else {
- server[serverBundlePath] = [
- mappings[page]
- ];
- }
- },
- onEdgeServer: ()=>{
- let appDirLoader = "";
- if (pagesType === "app") {
- const matchedAppPaths = appPathsPerRoute[(0, _appPaths).normalizeAppPath(page) || "/"];
- appDirLoader = getAppEntry({
- name: serverBundlePath,
- pagePath: mappings[page],
- appDir: appDir,
- appPaths: matchedAppPaths,
- pageExtensions
- }).import;
- }
- edgeServer[serverBundlePath] = getEdgeServerEntry({
- ...params,
- rootDir,
- absolutePagePath: mappings[page],
- bundlePath: clientBundlePath,
- isDev: false,
- isServerComponent,
- page,
- middleware: staticInfo == null ? void 0 : staticInfo.middleware,
- pagesType,
- appDirLoader
- });
- }
- });
- };
- };
- if (appDir && appPaths) {
- const entryHandler = getEntryHandler(appPaths, "app");
- await Promise.all(Object.keys(appPaths).map(entryHandler));
- }
- if (rootPaths) {
- await Promise.all(Object.keys(rootPaths).map(getEntryHandler(rootPaths, "root")));
- }
- await Promise.all(Object.keys(pages).map(getEntryHandler(pages, "pages")));
- if (nestedMiddleware.length > 0) {
- throw new _utils1.NestedMiddlewareError(nestedMiddleware, rootDir, pagesDir);
- }
- return {
- client,
- server,
- edgeServer,
- middlewareMatchers
- };
- }
- function finalizeEntrypoint({ name , compilerType , value , isServerComponent , appDir }) {
- const entry = typeof value !== "object" || Array.isArray(value) ? {
- import: value
- } : value;
- const isApi = name.startsWith("pages/api/");
- if (compilerType === _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.server : undefined,
- ...entry
- };
- }
- if (compilerType === _constants1.COMPILER_NAMES.edgeServer) {
- return {
- layer: (0, _utils1).isMiddlewareFilename(name) || isApi ? _constants.WEBPACK_LAYERS.middleware : undefined,
- library: {
- name: [
- "_ENTRIES",
- `middleware_[name]`
- ],
- type: "assign"
- },
- runtime: _constants1.EDGE_RUNTIME_WEBPACK,
- asyncChunks: false,
- ...entry
- };
- }
- 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) {
- // TODO-APP: this is a temporary fix. @shuding is going to change the handling of server components
- if (appDir && entry.import.includes("flight")) {
- return {
- dependOn: _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN_APP,
- ...entry
- };
- }
- return {
- dependOn: name.startsWith("pages/") && name !== "pages/_app" ? "pages/_app" : _constants1.CLIENT_STATIC_FILES_RUNTIME_MAIN,
- ...entry
- };
- }
- return entry;
- }
- //# sourceMappingURL=entries.js.map
|