summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Emanuele Stoppa <my.burning@gmail.com> 2024-11-20 11:21:40 +0000
committerGravatar GitHub <noreply@github.com> 2024-11-20 11:21:40 +0000
commitab0580bc94334d7924b5bb0ac808669d9d8930c3 (patch)
treeee92e9d43bbe4aec3fe99a5a56051f806185d952
parentc3b7e7cfa13603c08eb923703f31a92d514e82db (diff)
downloadastro-ab0580bc94334d7924b5bb0ac808669d9d8930c3.tar.gz
astro-ab0580bc94334d7924b5bb0ac808669d9d8930c3.tar.zst
astro-ab0580bc94334d7924b5bb0ac808669d9d8930c3.zip
refactor(build): don't emit `middleware.mjs` (#12479)
-rw-r--r--packages/astro/src/core/build/generate.ts12
-rw-r--r--packages/astro/src/core/build/pipeline.ts16
-rw-r--r--packages/astro/src/core/middleware/vite-plugin.ts15
3 files changed, 12 insertions, 31 deletions
diff --git a/packages/astro/src/core/build/generate.ts b/packages/astro/src/core/build/generate.ts
index 5ba5df366..b854b6ae3 100644
--- a/packages/astro/src/core/build/generate.ts
+++ b/packages/astro/src/core/build/generate.ts
@@ -33,6 +33,7 @@ import { getOutputDirectory } from '../../prerender/utils.js';
import type { SSRManifestI18n } from '../app/types.js';
import { NoPrerenderedRoutesWithDomains } from '../errors/errors-data.js';
import { AstroError, AstroErrorData } from '../errors/index.js';
+import { NOOP_MIDDLEWARE_FN } from '../middleware/noop-middleware.js';
import { getRedirectLocationOrThrow, routeIsRedirect } from '../redirects/index.js';
import { RenderContext } from '../render-context.js';
import { callGetStaticPaths } from '../render/route-cache.js';
@@ -65,14 +66,9 @@ export async function generatePages(options: StaticBuildOptions, internals: Buil
const baseDirectory = getOutputDirectory(options.settings.config);
const renderersEntryUrl = new URL('renderers.mjs', baseDirectory);
const renderers = await import(renderersEntryUrl.toString());
- let middleware: MiddlewareHandler = (_, next) => next();
- try {
- // middleware.mjs is not emitted if there is no user middleware
- // in which case the import fails with ERR_MODULE_NOT_FOUND, and we fall back to a no-op middleware
- middleware = await import(new URL('middleware.mjs', baseDirectory).toString()).then(
- (mod) => mod.onRequest,
- );
- } catch {}
+ const middleware: MiddlewareHandler = internals.middlewareEntryPoint
+ ? await import(internals.middlewareEntryPoint.toString()).then((mod) => mod.onRequest)
+ : NOOP_MIDDLEWARE_FN;
manifest = createBuildManifest(
options.settings,
internals,
diff --git a/packages/astro/src/core/build/pipeline.ts b/packages/astro/src/core/build/pipeline.ts
index 38fd4dfe1..ed32e7e42 100644
--- a/packages/astro/src/core/build/pipeline.ts
+++ b/packages/astro/src/core/build/pipeline.ts
@@ -137,15 +137,13 @@ export class BuildPipeline extends Pipeline {
const renderersEntryUrl = new URL(`renderers.mjs?time=${Date.now()}`, baseDirectory);
const renderers = await import(renderersEntryUrl.toString());
- const middleware = await import(new URL('middleware.mjs', baseDirectory).toString())
- .then((mod) => {
- return function () {
- return { onRequest: mod.onRequest };
- };
- })
- // middleware.mjs is not emitted if there is no user middleware
- // in which case the import fails with ERR_MODULE_NOT_FOUND, and we fall back to a no-op middleware
- .catch(() => manifest.middleware);
+ const middleware = internals.middlewareEntryPoint
+ ? await import(internals.middlewareEntryPoint.toString()).then((mod) => {
+ return function () {
+ return { onRequest: mod.onRequest };
+ };
+ })
+ : manifest.middleware;
if (!renderers) {
throw new Error(
diff --git a/packages/astro/src/core/middleware/vite-plugin.ts b/packages/astro/src/core/middleware/vite-plugin.ts
index 7ac8bf2ed..2579bd93a 100644
--- a/packages/astro/src/core/middleware/vite-plugin.ts
+++ b/packages/astro/src/core/middleware/vite-plugin.ts
@@ -13,7 +13,6 @@ export const MIDDLEWARE_MODULE_ID = '\0astro-internal:middleware';
const NOOP_MIDDLEWARE = '\0noop-middleware';
export function vitePluginMiddleware({ settings }: { settings: AstroSettings }): VitePlugin {
- let isCommandBuild = false;
let resolvedMiddlewareId: string | undefined = undefined;
const hasIntegrationMiddleware =
settings.middlewares.pre.length > 0 || settings.middlewares.post.length > 0;
@@ -21,9 +20,6 @@ export function vitePluginMiddleware({ settings }: { settings: AstroSettings }):
return {
name: '@astro/plugin-middleware',
- config(_, { command }) {
- isCommandBuild = command === 'build';
- },
async resolveId(id) {
if (id === MIDDLEWARE_MODULE_ID) {
const middlewareId = await this.resolve(
@@ -53,15 +49,6 @@ export function vitePluginMiddleware({ settings }: { settings: AstroSettings }):
if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') {
throw new AstroError(MissingMiddlewareForInternationalization);
}
- // In the build, tell Vite to emit this file
- if (isCommandBuild) {
- this.emitFile({
- type: 'chunk',
- preserveSignature: 'strict',
- fileName: 'middleware.mjs',
- id,
- });
- }
const preMiddleware = createMiddlewareImports(settings.middlewares.pre, 'pre');
const postMiddleware = createMiddlewareImports(settings.middlewares.post, 'post');
@@ -124,7 +111,7 @@ export function vitePluginMiddlewareBuild(
writeBundle(_, bundle) {
for (const [chunkName, chunk] of Object.entries(bundle)) {
- if (chunk.type !== 'asset' && chunk.fileName === 'middleware.mjs') {
+ if (chunk.type !== 'asset' && chunk.facadeModuleId === MIDDLEWARE_MODULE_ID) {
const outputDirectory = getOutputDirectory(opts.settings.config);
internals.middlewareEntryPoint = new URL(chunkName, outputDirectory);
}