Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/thick-windows-fetch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@opennextjs/aws": patch
---

Make `NEXT_BUILD_ID` and `NEXT_PREVIEW_MODE_ID` always available on `process.env`
3 changes: 3 additions & 0 deletions packages/open-next/src/adapters/config/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,6 @@ export const AppPathRoutesManifest =

export const FunctionsConfigManifest =
/* @__PURE__ */ loadFunctionsConfigManifest(NEXT_DIR);

process.env.NEXT_BUILD_ID = BuildId;
process.env.NEXT_PREVIEW_MODE_ID = PrerenderManifest?.preview?.previewModeId;
9 changes: 7 additions & 2 deletions packages/open-next/src/adapters/config/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,15 @@ export function loadConfigHeaders(nextDir: string) {
return routesManifest.headers;
}

export function loadPrerenderManifest(nextDir: string) {
export function loadPrerenderManifest(
nextDir: string,
): PrerenderManifest | undefined {
const filePath = path.join(nextDir, "prerender-manifest.json");
if (!fs.existsSync(filePath)) {
return undefined;
}
const json = fs.readFileSync(filePath, "utf-8");
return JSON.parse(json) as PrerenderManifest;
return JSON.parse(json);
}

export function loadAppPathsManifest(nextDir: string) {
Expand Down
11 changes: 0 additions & 11 deletions packages/open-next/src/adapters/server-adapter.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
// We load every config here so that they are only loaded once
// and during cold starts
import { BuildId } from "config/index.js";

import { createMainHandler } from "../core/createMainHandler.js";
import { setNodeEnv } from "./util.js";

// We load every config here so that they are only loaded once
// and during cold starts
setNodeEnv();
setBuildIdEnv();
setNextjsServerWorkingDirectory();

// Because next is messing with fetch, we have to make sure that we use an untouched version of fetch
Expand All @@ -29,9 +24,3 @@ function setNextjsServerWorkingDirectory() {
// See https://opennext.js.org/aws/v2/advanced/workaround#workaround-set-nextserver-working-directory-aws-specific
process.chdir(__dirname);
}

function setBuildIdEnv() {
// This allows users to access the CloudFront invalidating path when doing on-demand
// invalidations. ie. `/_next/data/${process.env.NEXT_BUILD_ID}/foo.json`
process.env.NEXT_BUILD_ID = BuildId;
}
2 changes: 1 addition & 1 deletion packages/open-next/src/build/copyTracedFiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ File ${serverPath} does not exist
const staticFiles: Array<string> = Object.values(pagesManifest);
// Then we need to get all fallback: true dynamic routes html
const locales = config.i18n?.locales;
Object.values(prerenderManifest.dynamicRoutes).forEach((route) => {
Object.values(prerenderManifest?.dynamicRoutes ?? {}).forEach((route) => {
if (typeof route.fallback === "string") {
if (locales) {
locales.forEach((locale) => {
Expand Down
8 changes: 5 additions & 3 deletions packages/open-next/src/core/routing/cacheInterceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ async function computeCacheControl(
) {
let finalRevalidate = CACHE_ONE_YEAR;

const existingRoute = Object.entries(PrerenderManifest.routes).find(
const existingRoute = Object.entries(PrerenderManifest?.routes ?? {}).find(
(p) => p[0] === path,
)?.[1];
if (revalidate === undefined && existingRoute) {
Expand Down Expand Up @@ -259,8 +259,10 @@ export async function cacheInterceptor(
debug("Checking cache for", localizedPath, PrerenderManifest);

const isISR =
Object.keys(PrerenderManifest.routes).includes(localizedPath ?? "/") ||
Object.values(PrerenderManifest.dynamicRoutes).some((dr) =>
Object.keys(PrerenderManifest?.routes ?? {}).includes(
localizedPath ?? "/",
) ||
Object.values(PrerenderManifest?.dynamicRoutes ?? {}).some((dr) =>
new RegExp(dr.routeRegex).test(localizedPath),
);
debug("isISR", isISR);
Expand Down
4 changes: 2 additions & 2 deletions packages/open-next/src/core/routing/matcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -422,10 +422,10 @@ export function fixDataPage(

export function handleFallbackFalse(
internalEvent: InternalEvent,
prerenderManifest: PrerenderManifest,
prerenderManifest?: PrerenderManifest,
): { event: InternalEvent; isISR: boolean } {
const { rawPath } = internalEvent;
const { dynamicRoutes, routes } = prerenderManifest;
const { dynamicRoutes = {}, routes = {} } = prerenderManifest ?? {};
const prerenderedFallbackRoutes = Object.entries(dynamicRoutes).filter(
([, { fallback }]) => fallback === false,
);
Expand Down
2 changes: 1 addition & 1 deletion packages/open-next/src/core/routing/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export async function handleMiddleware(
if (
headers["x-isr"] &&
headers["x-prerender-revalidate"] ===
PrerenderManifest.preview.previewModeId
PrerenderManifest?.preview?.previewModeId
)
return internalEvent;

Expand Down
2 changes: 1 addition & 1 deletion packages/open-next/src/plugins/edge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,8 @@ ${contents}
export const FunctionsConfigManifest = ${JSON.stringify(FunctionsConfigManifest)};
export const PagesManifest = ${JSON.stringify(PagesManifest)};


process.env.NEXT_BUILD_ID = BuildId;
process.env.NEXT_PREVIEW_MODE_ID = PrerenderManifest?.preview?.previewModeId;
`;
return { contents };
},
Expand Down
Loading