Skip to content

Commit 78427eb

Browse files
authored
Merge branch 'main' into arpan-#12356-locale404
2 parents a4878d5 + 28dd3ce commit 78427eb

File tree

9 files changed

+25
-53
lines changed

9 files changed

+25
-53
lines changed

.changeset/early-scissors-beg.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'astro': patch
3+
---
4+
5+
Removes the default throw behavior in `astro:env`

.changeset/olive-garlics-marry.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'astro': patch
3+
---
4+
5+
Fixes an issue where a server island hydration script might fail case the island ID misses from the DOM.

packages/astro/src/core/app/pipeline.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ export class AppPipeline extends Pipeline {
5454
undefined,
5555
undefined,
5656
undefined,
57-
false,
5857
defaultRoutes,
5958
);
6059
pipeline.#manifestData = manifestData;

packages/astro/src/core/base-pipeline.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export abstract class Pipeline {
5757
* Used for `Astro.site`.
5858
*/
5959
readonly site = manifest.site ? new URL(manifest.site) : undefined,
60-
readonly callSetGetEnv = true,
6160
/**
6261
* Array of built-in, internal, routes.
6362
* Used to find the route module
@@ -71,13 +70,6 @@ export abstract class Pipeline {
7170
createI18nMiddleware(i18n, manifest.base, manifest.trailingSlash, manifest.buildFormat),
7271
);
7372
}
74-
// In SSR, getSecret should fail by default. Setting it here will run before the
75-
// adapter override.
76-
if (callSetGetEnv && manifest.experimentalEnvGetSecretEnabled) {
77-
setGetEnv(() => {
78-
throw new AstroError(AstroErrorData.EnvUnsupportedGetSecret);
79-
}, true);
80-
}
8173
}
8274

8375
abstract headElements(routeData: RouteData): Promise<HeadElements> | HeadElements;

packages/astro/src/core/build/generate.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { getOutputDirectory } from '../../prerender/utils.js';
3333
import type { SSRManifestI18n } from '../app/types.js';
3434
import { NoPrerenderedRoutesWithDomains } from '../errors/errors-data.js';
3535
import { AstroError, AstroErrorData } from '../errors/index.js';
36+
import { NOOP_MIDDLEWARE_FN } from '../middleware/noop-middleware.js';
3637
import { getRedirectLocationOrThrow, routeIsRedirect } from '../redirects/index.js';
3738
import { RenderContext } from '../render-context.js';
3839
import { callGetStaticPaths } from '../render/route-cache.js';
@@ -65,14 +66,9 @@ export async function generatePages(options: StaticBuildOptions, internals: Buil
6566
const baseDirectory = getOutputDirectory(options.settings.config);
6667
const renderersEntryUrl = new URL('renderers.mjs', baseDirectory);
6768
const renderers = await import(renderersEntryUrl.toString());
68-
let middleware: MiddlewareHandler = (_, next) => next();
69-
try {
70-
// middleware.mjs is not emitted if there is no user middleware
71-
// in which case the import fails with ERR_MODULE_NOT_FOUND, and we fall back to a no-op middleware
72-
middleware = await import(new URL('middleware.mjs', baseDirectory).toString()).then(
73-
(mod) => mod.onRequest,
74-
);
75-
} catch {}
69+
const middleware: MiddlewareHandler = internals.middlewareEntryPoint
70+
? await import(internals.middlewareEntryPoint.toString()).then((mod) => mod.onRequest)
71+
: NOOP_MIDDLEWARE_FN;
7672
manifest = createBuildManifest(
7773
options.settings,
7874
internals,

packages/astro/src/core/build/pipeline.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,13 @@ export class BuildPipeline extends Pipeline {
137137
const renderersEntryUrl = new URL(`renderers.mjs?time=${Date.now()}`, baseDirectory);
138138
const renderers = await import(renderersEntryUrl.toString());
139139

140-
const middleware = await import(new URL('middleware.mjs', baseDirectory).toString())
141-
.then((mod) => {
142-
return function () {
143-
return { onRequest: mod.onRequest };
144-
};
145-
})
146-
// middleware.mjs is not emitted if there is no user middleware
147-
// in which case the import fails with ERR_MODULE_NOT_FOUND, and we fall back to a no-op middleware
148-
.catch(() => manifest.middleware);
140+
const middleware = internals.middlewareEntryPoint
141+
? await import(internals.middlewareEntryPoint.toString()).then((mod) => {
142+
return function () {
143+
return { onRequest: mod.onRequest };
144+
};
145+
})
146+
: manifest.middleware;
149147

150148
if (!renderers) {
151149
throw new Error(

packages/astro/src/core/errors/errors-data.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,17 +1174,6 @@ export const EnvInvalidVariables = {
11741174
`The following environment variables defined in \`experimental.env.schema\` are invalid:\n\n${errors.map((err) => `- ${err}`).join('\n')}\n`,
11751175
} satisfies ErrorData;
11761176

1177-
/**
1178-
* @docs
1179-
* @description
1180-
* The `astro:env/server` exported function `getSecret()` is not supported by your adapter.
1181-
*/
1182-
export const EnvUnsupportedGetSecret = {
1183-
name: 'EnvUnsupportedGetSecret',
1184-
title: 'Unsupported astro:env getSecret',
1185-
message: '`astro:env/server` exported function `getSecret` is not supported by your adapter.',
1186-
} satisfies ErrorData;
1187-
11881177
/**
11891178
* @docs
11901179
* @description

packages/astro/src/core/middleware/vite-plugin.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,13 @@ export const MIDDLEWARE_MODULE_ID = '\0astro-internal:middleware';
1313
const NOOP_MIDDLEWARE = '\0noop-middleware';
1414

1515
export function vitePluginMiddleware({ settings }: { settings: AstroSettings }): VitePlugin {
16-
let isCommandBuild = false;
1716
let resolvedMiddlewareId: string | undefined = undefined;
1817
const hasIntegrationMiddleware =
1918
settings.middlewares.pre.length > 0 || settings.middlewares.post.length > 0;
2019
let userMiddlewareIsPresent = false;
2120

2221
return {
2322
name: '@astro/plugin-middleware',
24-
config(_, { command }) {
25-
isCommandBuild = command === 'build';
26-
},
2723
async resolveId(id) {
2824
if (id === MIDDLEWARE_MODULE_ID) {
2925
const middlewareId = await this.resolve(
@@ -53,15 +49,6 @@ export function vitePluginMiddleware({ settings }: { settings: AstroSettings }):
5349
if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') {
5450
throw new AstroError(MissingMiddlewareForInternationalization);
5551
}
56-
// In the build, tell Vite to emit this file
57-
if (isCommandBuild) {
58-
this.emitFile({
59-
type: 'chunk',
60-
preserveSignature: 'strict',
61-
fileName: 'middleware.mjs',
62-
id,
63-
});
64-
}
6552

6653
const preMiddleware = createMiddlewareImports(settings.middlewares.pre, 'pre');
6754
const postMiddleware = createMiddlewareImports(settings.middlewares.post, 'post');
@@ -124,7 +111,7 @@ export function vitePluginMiddlewareBuild(
124111

125112
writeBundle(_, bundle) {
126113
for (const [chunkName, chunk] of Object.entries(bundle)) {
127-
if (chunk.type !== 'asset' && chunk.fileName === 'middleware.mjs') {
114+
if (chunk.type !== 'asset' && chunk.facadeModuleId === MIDDLEWARE_MODULE_ID) {
128115
const outputDirectory = getOutputDirectory(opts.settings.config);
129116
internals.middlewareEntryPoint = new URL(chunkName, outputDirectory);
130117
}

packages/astro/src/runtime/server/render/server-islands.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ let response = await fetch('${serverIslandUrl}', {
8181
method: 'POST',
8282
body: JSON.stringify(data),
8383
});
84-
85-
if(response.status === 200 && response.headers.get('content-type') === 'text/html') {
84+
if (script) {
85+
if(response.status === 200 && response.headers.get('content-type') === 'text/html') {
8686
let html = await response.text();
8787
8888
// Swap!
@@ -97,6 +97,7 @@ if(response.status === 200 && response.headers.get('content-type') === 'text/htm
9797
script.before(frag);
9898
}
9999
script.remove();
100+
}
100101
</script>`);
101102
},
102103
};

0 commit comments

Comments
 (0)