{"version":3,"sources":["../../../../../src/build/webpack/loaders/next-edge-ssr-loader/index.ts"],"sourcesContent":["import type webpack from 'webpack'\nimport type { SizeLimit } from '../../../../types'\nimport type { PagesRouteModuleOptions } from '../../../../server/route-modules/pages/module'\nimport type { MiddlewareConfig } from '../../../analysis/get-page-static-info'\n\nimport { getModuleBuildInfo } from '../get-module-build-info'\nimport { WEBPACK_RESOURCE_QUERIES } from '../../../../lib/constants'\nimport { RouteKind } from '../../../../server/route-kind'\nimport { normalizePagePath } from '../../../../shared/lib/page-path/normalize-page-path'\nimport { loadEntrypoint } from '../../../load-entrypoint'\nimport type { PAGE_TYPES } from '../../../../lib/page-types'\n\nexport type EdgeSSRLoaderQuery = {\n  absolute500Path: string\n  absoluteAppPath: string\n  absoluteDocumentPath: string\n  absoluteErrorPath: string\n  absolutePagePath: string\n  dev: boolean\n  isServerComponent: boolean\n  page: string\n  stringifiedConfig: string\n  appDirLoader?: string\n  pagesType: PAGE_TYPES\n  sriEnabled: boolean\n  cacheHandler?: string\n  cacheHandlers?: string\n  preferredRegion: string | string[] | undefined\n  middlewareConfig: string\n  serverActions?: {\n    bodySizeLimit?: SizeLimit\n    allowedOrigins?: string[]\n  }\n}\n\n/*\nFor pages SSR'd at the edge, we bundle them with the ESM version of Next in order to\nbenefit from the better tree-shaking and thus, smaller bundle sizes.\n\nThe absolute paths for _app, _error and _document, used in this loader, link to the regular CJS modules.\nThey are generated in `createPagesMapping` where we don't have access to `isEdgeRuntime`,\nso we have to do it here. It's not that bad because it keeps all references to ESM modules magic in this place.\n*/\nfunction swapDistFolderWithEsmDistFolder(path: string) {\n  return path.replace('next/dist/pages', 'next/dist/esm/pages')\n}\n\nfunction getRouteModuleOptions(page: string) {\n  const options: Omit<PagesRouteModuleOptions, 'userland' | 'components'> = {\n    definition: {\n      kind: RouteKind.PAGES,\n      page: normalizePagePath(page),\n      pathname: page,\n      // The following aren't used in production.\n      bundlePath: '',\n      filename: '',\n    },\n    // edge runtime doesn't read from distDir or projectDir\n    distDir: '',\n    relativeProjectDir: '',\n  }\n\n  return options\n}\n\nconst edgeSSRLoader: webpack.LoaderDefinitionFunction<EdgeSSRLoaderQuery> =\n  async function edgeSSRLoader(this) {\n    const {\n      page,\n      absolutePagePath,\n      absoluteAppPath,\n      absoluteDocumentPath,\n      absolute500Path,\n      absoluteErrorPath,\n      isServerComponent,\n      stringifiedConfig: stringifiedConfigBase64,\n      appDirLoader: appDirLoaderBase64,\n      pagesType,\n      cacheHandler,\n      cacheHandlers: cacheHandlersStringified,\n      preferredRegion,\n      middlewareConfig: middlewareConfigBase64,\n    } = this.getOptions()\n\n    const cacheHandlers = JSON.parse(cacheHandlersStringified || '{}')\n\n    if (!cacheHandlers.default) {\n      cacheHandlers.default = require.resolve(\n        '../../../../server/lib/cache-handlers/default.external'\n      )\n    }\n\n    const middlewareConfig: MiddlewareConfig = JSON.parse(\n      Buffer.from(middlewareConfigBase64, 'base64').toString()\n    )\n\n    const stringifiedConfig = Buffer.from(\n      stringifiedConfigBase64 || '',\n      'base64'\n    ).toString()\n    const appDirLoader = Buffer.from(\n      appDirLoaderBase64 || '',\n      'base64'\n    ).toString()\n    const isAppDir = pagesType === 'app'\n\n    const buildInfo = getModuleBuildInfo(this._module as any)\n    buildInfo.nextEdgeSSR = {\n      isServerComponent,\n      page: page,\n      isAppDir,\n    }\n    buildInfo.route = {\n      page,\n      absolutePagePath,\n      preferredRegion,\n      middlewareConfig,\n    }\n\n    const pagePath = this.utils.contextify(\n      this.context || this.rootContext,\n      absolutePagePath\n    )\n    const appPath = this.utils.contextify(\n      this.context || this.rootContext,\n      swapDistFolderWithEsmDistFolder(absoluteAppPath)\n    )\n    const errorPath = this.utils.contextify(\n      this.context || this.rootContext,\n      swapDistFolderWithEsmDistFolder(absoluteErrorPath)\n    )\n    const documentPath = this.utils.contextify(\n      this.context || this.rootContext,\n      swapDistFolderWithEsmDistFolder(absoluteDocumentPath)\n    )\n    const userland500Path = absolute500Path\n      ? this.utils.contextify(\n          this.context || this.rootContext,\n          swapDistFolderWithEsmDistFolder(absolute500Path)\n        )\n      : null\n\n    const stringifiedPagePath = JSON.stringify(pagePath)\n\n    const pageModPath = `${appDirLoader}${stringifiedPagePath.substring(\n      1,\n      stringifiedPagePath.length - 1\n    )}${isAppDir ? `?${WEBPACK_RESOURCE_QUERIES.edgeSSREntry}` : ''}`\n\n    if (isAppDir) {\n      return await loadEntrypoint(\n        'edge-ssr-app',\n        {\n          VAR_USERLAND: pageModPath,\n          VAR_PAGE: page,\n        },\n        {\n          nextConfig: stringifiedConfig,\n        },\n        {\n          incrementalCacheHandler: cacheHandler ?? null,\n        }\n      )\n    } else {\n      return await loadEntrypoint(\n        'edge-ssr',\n        {\n          VAR_USERLAND: pageModPath,\n          VAR_PAGE: page,\n          VAR_MODULE_DOCUMENT: documentPath,\n          VAR_MODULE_APP: appPath,\n          VAR_MODULE_GLOBAL_ERROR: errorPath,\n        },\n        {\n          nextConfig: stringifiedConfig,\n          pageRouteModuleOptions: JSON.stringify(getRouteModuleOptions(page)),\n          errorRouteModuleOptions: JSON.stringify(\n            getRouteModuleOptions('/_error')\n          ),\n          user500RouteModuleOptions: JSON.stringify(\n            getRouteModuleOptions('/500')\n          ),\n        },\n        {\n          userland500Page: userland500Path,\n          incrementalCacheHandler: cacheHandler ?? null,\n        }\n      )\n    }\n  }\nexport default edgeSSRLoader\n"],"names":["swapDistFolderWithEsmDistFolder","path","replace","getRouteModuleOptions","page","options","definition","kind","RouteKind","PAGES","normalizePagePath","pathname","bundlePath","filename","distDir","relativeProjectDir","edgeSSRLoader","absolutePagePath","absoluteAppPath","absoluteDocumentPath","absolute500Path","absoluteErrorPath","isServerComponent","stringifiedConfig","stringifiedConfigBase64","appDirLoader","appDirLoaderBase64","pagesType","cacheHandler","cacheHandlers","cacheHandlersStringified","preferredRegion","middlewareConfig","middlewareConfigBase64","getOptions","JSON","parse","default","require","resolve","Buffer","from","toString","isAppDir","buildInfo","getModuleBuildInfo","_module","nextEdgeSSR","route","pagePath","utils","contextify","context","rootContext","appPath","errorPath","documentPath","userland500Path","stringifiedPagePath","stringify","pageModPath","substring","length","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","loadEntrypoint","VAR_USERLAND","VAR_PAGE","nextConfig","incrementalCacheHandler","VAR_MODULE_DOCUMENT","VAR_MODULE_APP","VAR_MODULE_GLOBAL_ERROR","pageRouteModuleOptions","errorRouteModuleOptions","user500RouteModuleOptions","userland500Page"],"mappings":"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","ignoreList":[0]}