this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Early error when Node middleware usage is detected (#978)

authored by

Victor Berchet and committed by
GitHub
d7ad53e6 93f4c8a5

+42 -9
+5
.changeset/metal-items-watch.md
··· 1 + --- 2 + "@opennextjs/cloudflare": patch 3 + --- 4 + 5 + error early when a node middleware is detected
+7
packages/cloudflare/src/cli/build/build.ts
··· 17 17 import { compileSkewProtection } from "./open-next/compile-skew-protection.js"; 18 18 import { compileDurableObjects } from "./open-next/compileDurableObjects.js"; 19 19 import { createServerBundle } from "./open-next/createServerBundle.js"; 20 + import { useNodeMiddleware } from "./utils/middleware.js"; 20 21 import { getVersion } from "./utils/version.js"; 21 22 22 23 /** ··· 56 57 printHeader("Building Next.js app"); 57 58 setStandaloneBuildMode(options); 58 59 buildNextjsApp(options); 60 + } 61 + 62 + // Make sure no Node.js middleware is used 63 + if (useNodeMiddleware(options)) { 64 + logger.error("Node.js middleware is not currently supported. Consider switching to Edge Middleware."); 65 + process.exit(1); 59 66 } 60 67 61 68 // Generate deployable bundle
+4 -9
packages/cloudflare/src/cli/build/open-next/compileDurableObjects.ts
··· 2 2 import path from "node:path"; 3 3 4 4 import { loadBuildId, loadPrerenderManifest } from "@opennextjs/aws/adapters/config/util.js"; 5 - import { type BuildOptions, esbuildSync, getPackagePath } from "@opennextjs/aws/build/helper.js"; 5 + import { type BuildOptions, esbuildSync } from "@opennextjs/aws/build/helper.js"; 6 6 7 7 export function compileDurableObjects(buildOpts: BuildOptions) { 8 8 const _require = createRequire(import.meta.url); ··· 12 12 _require.resolve("@opennextjs/cloudflare/durable-objects/bucket-cache-purge"), 13 13 ]; 14 14 15 - const baseManifestPath = path.join( 16 - buildOpts.outputDir, 17 - "server-functions/default", 18 - getPackagePath(buildOpts), 19 - ".next" 20 - ); 15 + const buildOutputDotNextDir = path.join(buildOpts.appBuildOutputPath, ".next"); 21 16 22 - const prerenderManifest = loadPrerenderManifest(baseManifestPath); 17 + const prerenderManifest = loadPrerenderManifest(buildOutputDotNextDir); 23 18 const previewModeId = prerenderManifest.preview.previewModeId; 24 - const BUILD_ID = loadBuildId(baseManifestPath); 19 + const BUILD_ID = loadBuildId(buildOutputDotNextDir); 25 20 26 21 return esbuildSync( 27 22 {
+26
packages/cloudflare/src/cli/build/utils/middleware.ts
··· 1 + import path from "node:path"; 2 + 3 + import { loadFunctionsConfigManifest, loadMiddlewareManifest } from "@opennextjs/aws/adapters/config/util.js"; 4 + import * as buildHelper from "@opennextjs/aws/build/helper.js"; 5 + 6 + /** 7 + * Returns whether the project is using a Node.js middleware. 8 + * 9 + * @param options 10 + * @returns Whether the project is using a Node.js middleware 11 + */ 12 + export function useNodeMiddleware(options: buildHelper.BuildOptions): boolean { 13 + const buildOutputDotNextDir = path.join(options.appBuildOutputPath, ".next"); 14 + 15 + // Look for the edge middleware 16 + const middlewareManifest = loadMiddlewareManifest(buildOutputDotNextDir); 17 + const edgeMiddleware = middlewareManifest.middleware["/"]; 18 + if (edgeMiddleware) { 19 + // The app uses an edge middleware 20 + return false; 21 + } 22 + 23 + // Look for the node middleware 24 + const functionsConfigManifest = loadFunctionsConfigManifest(buildOutputDotNextDir); 25 + return Boolean(functionsConfigManifest?.functions["/_middleware"]); 26 + }