astro 3.0.2 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,8 +33,6 @@ class App {
33
33
  });
34
34
  #baseWithoutTrailingSlash;
35
35
  #pipeline;
36
- #onRequest;
37
- #middlewareLoaded;
38
36
  #adapterLogger;
39
37
  constructor(manifest, streaming = true) {
40
38
  this.#manifest = manifest;
@@ -44,7 +42,6 @@ class App {
44
42
  this.#routeDataToRouteInfo = new Map(manifest.routes.map((route) => [route.routeData, route]));
45
43
  this.#baseWithoutTrailingSlash = removeTrailingForwardSlash(this.#manifest.base);
46
44
  this.#pipeline = new SSRRoutePipeline(this.#createEnvironment(streaming));
47
- this.#middlewareLoaded = false;
48
45
  this.#adapterLogger = new AstroIntegrationLogger(
49
46
  this.#logger.options,
50
47
  this.#manifest.adapterName
@@ -109,19 +106,7 @@ class App {
109
106
  return void 0;
110
107
  return routeData;
111
108
  }
112
- async #getOnRequest() {
113
- if (this.#manifest.middlewareEntryPoint && !this.#middlewareLoaded) {
114
- try {
115
- const middleware = await import(this.#manifest.middlewareEntryPoint);
116
- this.#pipeline.setMiddlewareFunction(middleware.onRequest);
117
- } catch (e) {
118
- this.#logger.warn("SSR", "Couldn't load the middleware entry point");
119
- }
120
- }
121
- this.#middlewareLoaded = true;
122
- }
123
109
  async render(request, routeData, locals) {
124
- await this.#getOnRequest();
125
110
  if (request.url !== collapseDuplicateSlashes(request.url)) {
126
111
  request = new Request(collapseDuplicateSlashes(request.url), request);
127
112
  }
@@ -145,6 +130,9 @@ class App {
145
130
  );
146
131
  let response;
147
132
  try {
133
+ if (mod.onRequest) {
134
+ this.#pipeline.setMiddlewareFunction(mod.onRequest);
135
+ }
148
136
  response = await this.#pipeline.renderRoute(renderContext, pageModule);
149
137
  } catch (err) {
150
138
  if (err instanceof EndpointNotFoundError) {
@@ -246,6 +234,9 @@ class App {
246
234
  status
247
235
  );
248
236
  const page = await mod.page();
237
+ if (mod.onRequest) {
238
+ this.#pipeline.setMiddlewareFunction(mod.onRequest);
239
+ }
249
240
  const response2 = await this.#pipeline.renderRoute(newRenderContext, page);
250
241
  return this.#mergeResponses(response2, originalResponse);
251
242
  } catch {
@@ -42,7 +42,6 @@ export type SSRManifest = {
42
42
  componentMetadata: SSRResult['componentMetadata'];
43
43
  pageModule?: SinglePageBuiltModule;
44
44
  pageMap?: Map<ComponentPath, ImportComponentInstance>;
45
- middlewareEntryPoint: string | undefined;
46
45
  };
47
46
  export type SerializedSSRManifest = Omit<SSRManifest, 'routes' | 'assets' | 'componentMetadata' | 'clientDirectives'> & {
48
47
  routes: SerializedRouteInfo[];
@@ -15,7 +15,6 @@ export declare class BuildPipeline extends Pipeline {
15
15
  getStaticBuildOptions(): Readonly<StaticBuildOptions>;
16
16
  getConfig(): AstroConfig;
17
17
  getManifest(): SSRManifest;
18
- retrieveMiddlewareFunction(): Promise<void>;
19
18
  getLogger(): Logger;
20
19
  /**
21
20
  * The SSR build emits two important files:
@@ -57,12 +57,6 @@ class BuildPipeline extends Pipeline {
57
57
  getManifest() {
58
58
  return this.#manifest;
59
59
  }
60
- async retrieveMiddlewareFunction() {
61
- if (this.#internals.middlewareEntryPoint) {
62
- const middleware = await import(this.#internals.middlewareEntryPoint.toString());
63
- this.setMiddlewareFunction(middleware.onRequest);
64
- }
65
- }
66
60
  getLogger() {
67
61
  return this.getEnvironment().logger;
68
62
  }
@@ -95,7 +95,6 @@ async function generatePages(opts, internals) {
95
95
  );
96
96
  }
97
97
  const pipeline = new BuildPipeline(opts, internals, manifest);
98
- await pipeline.retrieveMiddlewareFunction();
99
98
  const outFolder = ssr ? opts.settings.config.build.server : getOutDirWithinCwd(opts.settings.config.outDir);
100
99
  const logger = pipeline.getLogger();
101
100
  if (ssr && !hasPrerenderedPages(internals)) {
@@ -180,6 +179,10 @@ async function generatePage(pageData, ssrEntry, builtPaths, pipeline) {
180
179
  const scripts = pageInfo?.hoistedScript ?? null;
181
180
  const styles = pageData.styles.sort(cssOrder).map(({ sheet }) => sheet).reduce(mergeInlineCss, []);
182
181
  const pageModulePromise = ssrEntry.page;
182
+ const onRequest = ssrEntry.onRequest;
183
+ if (onRequest) {
184
+ pipeline.setMiddlewareFunction(onRequest);
185
+ }
183
186
  if (!pageModulePromise) {
184
187
  throw new Error(
185
188
  `Unable to find the module for ${pageData.component}. This is unexpected and likely a bug in Astro, please report.`
@@ -439,8 +442,7 @@ function createBuildManifest(settings, internals, renderers) {
439
442
  base: settings.config.base,
440
443
  assetsPrefix: settings.config.build.assetsPrefix,
441
444
  site: settings.config.site ? new URL(settings.config.base, settings.config.site).toString() : settings.config.site,
442
- componentMetadata: internals.componentMetadata,
443
- middlewareEntryPoint: internals.middlewareEntryPoint ? internals.middlewareEntryPoint.toString() : void 0
445
+ componentMetadata: internals.componentMetadata
444
446
  };
445
447
  }
446
448
  export {
@@ -182,10 +182,6 @@ function buildManifest(opts, internals, staticFiles) {
182
182
  if (!(BEFORE_HYDRATION_SCRIPT_ID in entryModules)) {
183
183
  entryModules[BEFORE_HYDRATION_SCRIPT_ID] = "";
184
184
  }
185
- const isEdgeMiddleware = (
186
- // TODO: remove in Astro 4.0
187
- settings.config.build.excludeMiddleware || settings.adapter?.adapterFeatures?.edgeMiddleware
188
- );
189
185
  const ssrManifest = {
190
186
  adapterName: opts.settings.adapter?.name ?? "",
191
187
  routes,
@@ -197,8 +193,7 @@ function buildManifest(opts, internals, staticFiles) {
197
193
  renderers: [],
198
194
  clientDirectives: Array.from(settings.clientDirectives),
199
195
  entryModules,
200
- assets: staticFiles.map(prefixAssetPath),
201
- middlewareEntryPoint: !isEdgeMiddleware ? internals.middlewareEntryPoint?.toString() : void 0
196
+ assets: staticFiles.map(prefixAssetPath)
202
197
  };
203
198
  return ssrManifest;
204
199
  }
@@ -1,5 +1,5 @@
1
1
  import type { InlineConfig, default as vite } from 'vite';
2
- import type { AstroConfig, AstroSettings, ComponentInstance, ManifestData, RouteData, RuntimeMode, SSRLoadedRenderer } from '../../@types/astro';
2
+ import type { AstroConfig, AstroSettings, ComponentInstance, ManifestData, MiddlewareHandler, RouteData, RuntimeMode, SSRLoadedRenderer } from '../../@types/astro';
3
3
  import type { Logger } from '../logger/core';
4
4
  import type { RouteCache } from '../render/route-cache';
5
5
  export type ComponentPath = string;
@@ -48,6 +48,7 @@ export interface SinglePageBuiltModule {
48
48
  /**
49
49
  * The `onRequest` hook exported by the middleware
50
50
  */
51
+ onRequest?: MiddlewareHandler<unknown>;
51
52
  renderers: SSRLoadedRenderer[];
52
53
  }
53
54
  export type ViteBuildReturn = Awaited<ReturnType<typeof vite.build>>;
@@ -1,4 +1,4 @@
1
- const ASTRO_VERSION = "3.0.2";
1
+ const ASTRO_VERSION = "3.0.4";
2
2
  const SUPPORTED_MARKDOWN_FILE_EXTENSIONS = [
3
3
  ".markdown",
4
4
  ".mdown",
@@ -20,7 +20,7 @@ async function dev(inlineConfig) {
20
20
  base: restart.container.settings.config.base
21
21
  })
22
22
  );
23
- const currentVersion = "3.0.2";
23
+ const currentVersion = "3.0.4";
24
24
  if (currentVersion.includes("-")) {
25
25
  logger.warn(null, msg.prerelease({ currentVersion }));
26
26
  }
@@ -50,7 +50,7 @@ function serverStart({
50
50
  base,
51
51
  isRestart = false
52
52
  }) {
53
- const version = "3.0.2";
53
+ const version = "3.0.4";
54
54
  const localPrefix = `${dim("\u2503")} Local `;
55
55
  const networkPrefix = `${dim("\u2503")} Network `;
56
56
  const emptyPrefix = " ".repeat(11);
@@ -235,7 +235,7 @@ function printHelp({
235
235
  message.push(
236
236
  linebreak(),
237
237
  ` ${bgGreen(black(` ${commandName} `))} ${green(
238
- `v${"3.0.2"}`
238
+ `v${"3.0.4"}`
239
239
  )} ${headline}`
240
240
  );
241
241
  }
@@ -7,6 +7,7 @@ const RedirectComponentInstance = {
7
7
  };
8
8
  const RedirectSinglePageBuiltModule = {
9
9
  page: () => Promise.resolve(RedirectComponentInstance),
10
+ onRequest: (_, next) => next(),
10
11
  renderers: []
11
12
  };
12
13
  export {
@@ -40,6 +40,7 @@ async function runHookConfigSetup({
40
40
  let updatedConfig = { ...settings.config };
41
41
  let updatedSettings = { ...settings, config: updatedConfig };
42
42
  let addedClientDirectives = /* @__PURE__ */ new Map();
43
+ let astroJSXRenderer = null;
43
44
  for (const integration of settings.config.integrations) {
44
45
  if (integration.hooks?.["astro:config:setup"]) {
45
46
  let addPageExtension2 = function(...input) {
@@ -63,7 +64,11 @@ async function runHookConfigSetup({
63
64
  if (!renderer.serverEntrypoint) {
64
65
  throw new Error(`Renderer ${bold(renderer.name)} does not provide a serverEntrypoint.`);
65
66
  }
66
- updatedSettings.renderers.push(renderer);
67
+ if (renderer.name === "astro:jsx") {
68
+ astroJSXRenderer = renderer;
69
+ } else {
70
+ updatedSettings.renderers.push(renderer);
71
+ }
67
72
  },
68
73
  injectScript: (stage, content) => {
69
74
  updatedSettings.scripts.push({ stage, content });
@@ -112,6 +117,9 @@ async function runHookConfigSetup({
112
117
  }
113
118
  }
114
119
  }
120
+ if (astroJSXRenderer) {
121
+ updatedSettings.renderers.push(astroJSXRenderer);
122
+ }
115
123
  updatedSettings.config = updatedConfig;
116
124
  return updatedSettings;
117
125
  }
@@ -70,8 +70,7 @@ function createDevelopmentManifest(settings) {
70
70
  base: settings.config.base,
71
71
  assetsPrefix: settings.config.build.assetsPrefix,
72
72
  site: settings.config.site ? new URL(settings.config.base, settings.config.site).toString() : settings.config.site,
73
- componentMetadata: /* @__PURE__ */ new Map(),
74
- middlewareEntryPoint: void 0
73
+ componentMetadata: /* @__PURE__ */ new Map()
75
74
  };
76
75
  }
77
76
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "astro",
3
- "version": "3.0.2",
3
+ "version": "3.0.4",
4
4
  "description": "Astro is a modern site builder with web best practices, performance, and DX front-of-mind.",
5
5
  "type": "module",
6
6
  "author": "withastro",