summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Emanuele Stoppa <my.burning@gmail.com> 2023-07-20 15:45:10 +0100
committerGravatar GitHub <noreply@github.com> 2023-07-20 15:45:10 +0100
commitc102c4a054a00720025b1528e6a8a2223699f54e (patch)
tree4e4475ca8d3c956286066859c200a737b417cc15
parentd8bae784b4a3b555c213febe6334373d89c7e089 (diff)
downloadastro-c102c4a054a00720025b1528e6a8a2223699f54e.tar.gz
astro-c102c4a054a00720025b1528e6a8a2223699f54e.tar.zst
astro-c102c4a054a00720025b1528e6a8a2223699f54e.zip
refactor: move dev rendering logic inside vite plugin (#7728)
-rw-r--r--packages/astro/src/content/vite-plugin-content-assets.ts4
-rw-r--r--packages/astro/src/core/build/plugins/plugin-css.ts2
-rw-r--r--packages/astro/src/core/endpoint/dev/index.ts3
-rw-r--r--packages/astro/src/core/render/dev/index.ts55
-rw-r--r--packages/astro/src/core/render/environment.ts10
-rw-r--r--packages/astro/src/core/render/index.ts23
-rw-r--r--packages/astro/src/prerender/routing.ts3
-rw-r--r--packages/astro/src/vite-plugin-astro-server/css.ts (renamed from packages/astro/src/core/render/dev/css.ts)7
-rw-r--r--packages/astro/src/vite-plugin-astro-server/environment.ts (renamed from packages/astro/src/core/render/dev/environment.ts)19
-rw-r--r--packages/astro/src/vite-plugin-astro-server/index.ts35
-rw-r--r--packages/astro/src/vite-plugin-astro-server/metadata.ts (renamed from packages/astro/src/core/render/dev/metadata.ts)10
-rw-r--r--packages/astro/src/vite-plugin-astro-server/plugin.ts2
-rw-r--r--packages/astro/src/vite-plugin-astro-server/request.ts2
-rw-r--r--packages/astro/src/vite-plugin-astro-server/resolve.ts (renamed from packages/astro/src/core/render/dev/resolve.ts)4
-rw-r--r--packages/astro/src/vite-plugin-astro-server/route.ts17
-rw-r--r--packages/astro/src/vite-plugin-astro-server/scripts.ts (renamed from packages/astro/src/core/render/dev/scripts.ts)11
-rw-r--r--packages/astro/src/vite-plugin-astro-server/util.ts (renamed from packages/astro/src/core/render/dev/util.ts)0
-rw-r--r--packages/astro/src/vite-plugin-astro-server/vite.ts (renamed from packages/astro/src/core/render/dev/vite.ts)7
-rw-r--r--packages/astro/test/units/dev/styles.test.js2
-rw-r--r--packages/astro/test/units/routing/route-matching.test.js2
20 files changed, 111 insertions, 107 deletions
diff --git a/packages/astro/src/content/vite-plugin-content-assets.ts b/packages/astro/src/content/vite-plugin-content-assets.ts
index bbd9749a8..38e1bdc44 100644
--- a/packages/astro/src/content/vite-plugin-content-assets.ts
+++ b/packages/astro/src/content/vite-plugin-content-assets.ts
@@ -9,8 +9,8 @@ import type { StaticBuildOptions } from '../core/build/types';
import type { ModuleLoader } from '../core/module-loader/loader.js';
import { createViteLoader } from '../core/module-loader/vite.js';
import { joinPaths, prependForwardSlash } from '../core/path.js';
-import { getStylesForURL } from '../core/render/dev/css.js';
-import { getScriptsForURL } from '../core/render/dev/scripts.js';
+import { getStylesForURL } from '../vite-plugin-astro-server/css.js';
+import { getScriptsForURL } from '../vite-plugin-astro-server/scripts.js';
import {
CONTENT_RENDER_FLAG,
LINKS_PLACEHOLDER,
diff --git a/packages/astro/src/core/build/plugins/plugin-css.ts b/packages/astro/src/core/build/plugins/plugin-css.ts
index f254b0fe0..87b52cbdb 100644
--- a/packages/astro/src/core/build/plugins/plugin-css.ts
+++ b/packages/astro/src/core/build/plugins/plugin-css.ts
@@ -2,7 +2,7 @@ import * as crypto from 'node:crypto';
import * as npath from 'node:path';
import type { GetModuleInfo } from 'rollup';
import { type ResolvedConfig, type Plugin as VitePlugin } from 'vite';
-import { isBuildableCSSRequest } from '../../render/dev/util.js';
+import { isBuildableCSSRequest } from '../../../vite-plugin-astro-server/util.js';
import type { BuildInternals } from '../internal';
import type { AstroBuildPlugin } from '../plugin';
import type { PageBuildData, StaticBuildOptions, StylesheetAsset } from '../types';
diff --git a/packages/astro/src/core/endpoint/dev/index.ts b/packages/astro/src/core/endpoint/dev/index.ts
index afbc28291..79e5c1fd5 100644
--- a/packages/astro/src/core/endpoint/dev/index.ts
+++ b/packages/astro/src/core/endpoint/dev/index.ts
@@ -1,6 +1,5 @@
import type { EndpointHandler } from '../../../@types/astro';
-import type { SSROptions } from '../../render/dev';
-import { createRenderContext } from '../../render/index.js';
+import { createRenderContext, type SSROptions } from '../../render/index.js';
import { callEndpoint } from '../index.js';
export async function call(options: SSROptions) {
diff --git a/packages/astro/src/core/render/dev/index.ts b/packages/astro/src/core/render/dev/index.ts
deleted file mode 100644
index 40bda5556..000000000
--- a/packages/astro/src/core/render/dev/index.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import type { AstroMiddlewareInstance, ComponentInstance, RouteData } from '../../../@types/astro';
-import { enhanceViteSSRError } from '../../errors/dev/index.js';
-import { AggregateError, CSSError, MarkdownError } from '../../errors/index.js';
-import { viteID } from '../../util.js';
-import { loadRenderers } from '../index.js';
-import type { DevelopmentEnvironment } from './environment';
-export { createDevelopmentEnvironment } from './environment.js';
-export type { DevelopmentEnvironment };
-
-export interface SSROptions {
- /** The environment instance */
- env: DevelopmentEnvironment;
- /** location of file on disk */
- filePath: URL;
- /** the web request (needed for dynamic routes) */
- pathname: string;
- /** The runtime component instance */
- preload: ComponentInstance;
- /** Request */
- request: Request;
- /** optional, in case we need to render something outside of a dev server */
- route?: RouteData;
- /**
- * Optional middlewares
- */
- middleware?: AstroMiddlewareInstance<unknown>;
-}
-
-export async function preload({
- env,
- filePath,
-}: {
- env: DevelopmentEnvironment;
- filePath: URL;
-}): Promise<ComponentInstance> {
- // Important: This needs to happen first, in case a renderer provides polyfills.
- const renderers = await loadRenderers(env.settings, env.loader);
- // Override the environment's renderers. This ensures that if renderers change (HMR)
- // The new instances are passed through.
- env.renderers = renderers;
-
- try {
- // Load the module from the Vite SSR Runtime.
- const mod = (await env.loader.import(viteID(filePath))) as ComponentInstance;
-
- return mod;
- } catch (error) {
- // If the error came from Markdown or CSS, we already handled it and there's no need to enhance it
- if (MarkdownError.is(error) || CSSError.is(error) || AggregateError.is(error)) {
- throw error;
- }
-
- throw enhanceViteSSRError({ error, filePath, loader: env.loader });
- }
-}
diff --git a/packages/astro/src/core/render/environment.ts b/packages/astro/src/core/render/environment.ts
index f38773cfc..4a8c2c1f7 100644
--- a/packages/astro/src/core/render/environment.ts
+++ b/packages/astro/src/core/render/environment.ts
@@ -1,12 +1,13 @@
import type { MarkdownRenderingOptions } from '@astrojs/markdown-remark';
-import type { RuntimeMode, SSRLoadedRenderer } from '../../@types/astro';
+import type { RuntimeMode, SSRLoadedRenderer, AstroSettings } from '../../@types/astro';
import type { LogOptions } from '../logger/core.js';
import type { RouteCache } from './route-cache.js';
+import type { ModuleLoader } from '../module-loader';
/**
* An environment represents the static parts of rendering that do not change
* between requests. These are mostly known when the server first starts up and do not change.
- * Thus they can be created once and passed through to renderPage on each request.
+ * Thus, they can be created once and passed through to renderPage on each request.
*/
export interface Environment {
/**
@@ -42,3 +43,8 @@ export type CreateEnvironmentArgs = Environment;
export function createEnvironment(options: CreateEnvironmentArgs): Environment {
return options;
}
+
+export type DevelopmentEnvironment = Environment & {
+ loader: ModuleLoader;
+ settings: AstroSettings;
+};
diff --git a/packages/astro/src/core/render/index.ts b/packages/astro/src/core/render/index.ts
index cd0aedbb2..ac8fb7593 100644
--- a/packages/astro/src/core/render/index.ts
+++ b/packages/astro/src/core/render/index.ts
@@ -1,3 +1,6 @@
+import type { DevelopmentEnvironment } from './environment';
+import type { AstroMiddlewareInstance, ComponentInstance, RouteData } from '../../@types/astro';
+
export { createRenderContext } from './context.js';
export type { RenderContext } from './context.js';
export { tryRenderRoute } from './core.js';
@@ -5,3 +8,23 @@ export type { Environment } from './environment';
export { createEnvironment } from './environment.js';
export { getParamsAndProps } from './params-and-props.js';
export { loadRenderer, loadRenderers } from './renderer.js';
+export type { DevelopmentEnvironment };
+
+export interface SSROptions {
+ /** The environment instance */
+ env: DevelopmentEnvironment;
+ /** location of file on disk */
+ filePath: URL;
+ /** the web request (needed for dynamic routes) */
+ pathname: string;
+ /** The runtime component instance */
+ preload: ComponentInstance;
+ /** Request */
+ request: Request;
+ /** optional, in case we need to render something outside of a dev server */
+ route?: RouteData;
+ /**
+ * Optional middlewares
+ */
+ middleware?: AstroMiddlewareInstance<unknown>;
+}
diff --git a/packages/astro/src/prerender/routing.ts b/packages/astro/src/prerender/routing.ts
index 0282a12b4..beac0b841 100644
--- a/packages/astro/src/prerender/routing.ts
+++ b/packages/astro/src/prerender/routing.ts
@@ -1,7 +1,8 @@
import type { AstroSettings, ComponentInstance, RouteData } from '../@types/astro';
import { RedirectComponentInstance, routeIsRedirect } from '../core/redirects/index.js';
-import { preload, type DevelopmentEnvironment } from '../core/render/dev/index.js';
+import { preload } from '../vite-plugin-astro-server/index.js';
import { getPrerenderStatus } from './metadata.js';
+import type { DevelopmentEnvironment } from '../core/render';
type GetSortedPreloadedMatchesParams = {
env: DevelopmentEnvironment;
diff --git a/packages/astro/src/core/render/dev/css.ts b/packages/astro/src/vite-plugin-astro-server/css.ts
index 1d80a8526..41f803acd 100644
--- a/packages/astro/src/core/render/dev/css.ts
+++ b/packages/astro/src/vite-plugin-astro-server/css.ts
@@ -1,7 +1,6 @@
-import type { ModuleLoader } from '../../module-loader/index';
-
-import type { RuntimeMode } from '../../../@types/astro.js';
-import { viteID } from '../../util.js';
+import type { ModuleLoader } from '../core/module-loader';
+import type { RuntimeMode } from '../@types/astro.js';
+import { viteID } from '../core/util.js';
import { isBuildableCSSRequest } from './util.js';
import { crawlGraph } from './vite.js';
diff --git a/packages/astro/src/core/render/dev/environment.ts b/packages/astro/src/vite-plugin-astro-server/environment.ts
index 6d797b521..0c98878ff 100644
--- a/packages/astro/src/core/render/dev/environment.ts
+++ b/packages/astro/src/vite-plugin-astro-server/environment.ts
@@ -1,16 +1,11 @@
-import type { AstroSettings, RuntimeMode, SSRManifest } from '../../../@types/astro';
-import { isServerLikeOutput } from '../../../prerender/utils.js';
-import type { LogOptions } from '../../logger/core.js';
-import type { ModuleLoader } from '../../module-loader/index';
-import type { Environment } from '../index';
-import { createEnvironment } from '../index.js';
-import { RouteCache } from '../route-cache.js';
import { createResolve } from './resolve.js';
-
-export type DevelopmentEnvironment = Environment & {
- loader: ModuleLoader;
- settings: AstroSettings;
-};
+import type { ModuleLoader } from '../core/module-loader';
+import type { AstroSettings, RuntimeMode, SSRManifest } from '../@types/astro.js';
+import type { LogOptions } from '../core/logger/core.js';
+import { RouteCache } from '../core/render/route-cache.js';
+import { isServerLikeOutput } from '../prerender/utils.js';
+import type { DevelopmentEnvironment } from '../core/render';
+import { createEnvironment } from '../core/render/index.js';
export function createDevelopmentEnvironment(
manifest: SSRManifest,
diff --git a/packages/astro/src/vite-plugin-astro-server/index.ts b/packages/astro/src/vite-plugin-astro-server/index.ts
index 14172e8ae..95512c408 100644
--- a/packages/astro/src/vite-plugin-astro-server/index.ts
+++ b/packages/astro/src/vite-plugin-astro-server/index.ts
@@ -1,3 +1,38 @@
+import type { ComponentInstance } from '../@types/astro.js';
+import { loadRenderers } from '../core/render/index.js';
+import { viteID } from '../core/util.js';
+import { AggregateError, CSSError, MarkdownError } from '../core/errors/index.js';
+import { enhanceViteSSRError } from '../core/errors/dev/index.js';
+import type { DevelopmentEnvironment } from '../core/render/environment';
+
+export async function preload({
+ env,
+ filePath,
+}: {
+ env: DevelopmentEnvironment;
+ filePath: URL;
+}): Promise<ComponentInstance> {
+ // Important: This needs to happen first, in case a renderer provides polyfills.
+ const renderers = await loadRenderers(env.settings, env.loader);
+ // Override the environment's renderers. This ensures that if renderers change (HMR)
+ // The new instances are passed through.
+ env.renderers = renderers;
+
+ try {
+ // Load the module from the Vite SSR Runtime.
+ const mod = (await env.loader.import(viteID(filePath))) as ComponentInstance;
+
+ return mod;
+ } catch (error) {
+ // If the error came from Markdown or CSS, we already handled it and there's no need to enhance it
+ if (MarkdownError.is(error) || CSSError.is(error) || AggregateError.is(error)) {
+ throw error;
+ }
+
+ throw enhanceViteSSRError({ error, filePath, loader: env.loader });
+ }
+}
+
export { createController, runWithErrorHandling } from './controller.js';
export { default as vitePluginAstroServer } from './plugin.js';
export { handleRequest } from './request.js';
diff --git a/packages/astro/src/core/render/dev/metadata.ts b/packages/astro/src/vite-plugin-astro-server/metadata.ts
index bd0205bd9..9ac6e73fe 100644
--- a/packages/astro/src/core/render/dev/metadata.ts
+++ b/packages/astro/src/vite-plugin-astro-server/metadata.ts
@@ -1,10 +1,8 @@
-import type { SSRComponentMetadata, SSRResult } from '../../../@types/astro';
-
-import type { ModuleInfo, ModuleLoader } from '../../module-loader/index';
-
-import { getAstroMetadata } from '../../../vite-plugin-astro/index.js';
-import { viteID } from '../../util.js';
import { crawlGraph } from './vite.js';
+import type { ModuleLoader, ModuleInfo } from '../core/module-loader';
+import { viteID } from '../core/util.js';
+import { getAstroMetadata } from '../vite-plugin-astro/index.js';
+import type { SSRComponentMetadata, SSRResult } from '../@types/astro';
export async function getComponentMetadata(
filePath: URL,
diff --git a/packages/astro/src/vite-plugin-astro-server/plugin.ts b/packages/astro/src/vite-plugin-astro-server/plugin.ts
index 69e2186a5..713b88e4d 100644
--- a/packages/astro/src/vite-plugin-astro-server/plugin.ts
+++ b/packages/astro/src/vite-plugin-astro-server/plugin.ts
@@ -4,7 +4,7 @@ import type { AstroSettings, ManifestData, SSRManifest } from '../@types/astro';
import { patchOverlay } from '../core/errors/overlay.js';
import type { LogOptions } from '../core/logger/core.js';
import { createViteLoader } from '../core/module-loader/index.js';
-import { createDevelopmentEnvironment } from '../core/render/dev/index.js';
+import { createDevelopmentEnvironment } from './environment.js';
import { createRouteManifest } from '../core/routing/index.js';
import { baseMiddleware } from './base.js';
import { createController } from './controller.js';
diff --git a/packages/astro/src/vite-plugin-astro-server/request.ts b/packages/astro/src/vite-plugin-astro-server/request.ts
index b0696adc5..e334f42fd 100644
--- a/packages/astro/src/vite-plugin-astro-server/request.ts
+++ b/packages/astro/src/vite-plugin-astro-server/request.ts
@@ -1,7 +1,7 @@
import type http from 'node:http';
import type { ManifestData, SSRManifest } from '../@types/astro';
-import type { DevelopmentEnvironment } from '../core/render/dev/index';
import type { DevServerController } from './controller';
+import type { DevelopmentEnvironment } from '../core/render/index';
import { collectErrorMetadata } from '../core/errors/dev/index.js';
import { createSafeError } from '../core/errors/index.js';
diff --git a/packages/astro/src/core/render/dev/resolve.ts b/packages/astro/src/vite-plugin-astro-server/resolve.ts
index 1c8204591..f67d83576 100644
--- a/packages/astro/src/core/render/dev/resolve.ts
+++ b/packages/astro/src/vite-plugin-astro-server/resolve.ts
@@ -1,5 +1,5 @@
-import type { ModuleLoader } from '../../module-loader/index';
-import { resolveIdToUrl } from '../../util.js';
+import type { ModuleLoader } from '../core/module-loader';
+import { resolveIdToUrl } from '../core/util.js';
export function createResolve(loader: ModuleLoader, root: URL) {
// Resolves specifiers in the inline hydrated scripts, such as:
diff --git a/packages/astro/src/vite-plugin-astro-server/route.ts b/packages/astro/src/vite-plugin-astro-server/route.ts
index 61c85d692..6160eab71 100644
--- a/packages/astro/src/vite-plugin-astro-server/route.ts
+++ b/packages/astro/src/vite-plugin-astro-server/route.ts
@@ -12,12 +12,17 @@ import { attachToResponse } from '../core/cookies/index.js';
import { AstroErrorData, isAstroError } from '../core/errors/index.js';
import { warn } from '../core/logger/core.js';
import { loadMiddleware } from '../core/middleware/loadMiddleware.js';
-import { getStylesForURL } from '../core/render/dev/css.js';
-import type { DevelopmentEnvironment, SSROptions } from '../core/render/dev/index';
-import { preload } from '../core/render/dev/index.js';
-import { getComponentMetadata } from '../core/render/dev/metadata.js';
-import { getScriptsForURL } from '../core/render/dev/scripts.js';
-import { createRenderContext, getParamsAndProps, tryRenderRoute } from '../core/render/index.js';
+import { getStylesForURL } from './css.js';
+import { preload } from './index.js';
+import { getComponentMetadata } from './metadata.js';
+import { getScriptsForURL } from './scripts.js';
+import {
+ createRenderContext,
+ type DevelopmentEnvironment,
+ type SSROptions,
+ getParamsAndProps,
+ tryRenderRoute,
+} from '../core/render/index.js';
import { createRequest } from '../core/request.js';
import { matchAllRoutes } from '../core/routing/index.js';
import { isPage, resolveIdToUrl, viteID } from '../core/util.js';
diff --git a/packages/astro/src/core/render/dev/scripts.ts b/packages/astro/src/vite-plugin-astro-server/scripts.ts
index 186332ab2..9e6c587d0 100644
--- a/packages/astro/src/core/render/dev/scripts.ts
+++ b/packages/astro/src/vite-plugin-astro-server/scripts.ts
@@ -1,10 +1,9 @@
-import type { SSRElement } from '../../../@types/astro';
-import type { PluginMetadata as AstroPluginMetadata } from '../../../vite-plugin-astro/types';
-import type { ModuleInfo, ModuleLoader } from '../../module-loader/index';
-
-import { rootRelativePath, viteID } from '../../util.js';
-import { createModuleScriptElementWithSrc } from '../ssr-element.js';
+import type { PluginMetadata as AstroPluginMetadata } from '../vite-plugin-astro/types';
import { crawlGraph } from './vite.js';
+import type { ModuleLoader, ModuleInfo } from '../core/module-loader';
+import type { SSRElement } from '../@types/astro';
+import { rootRelativePath, viteID } from '../core/util.js';
+import { createModuleScriptElementWithSrc } from '../core/render/ssr-element.js';
export async function getScriptsForURL(
filePath: URL,
diff --git a/packages/astro/src/core/render/dev/util.ts b/packages/astro/src/vite-plugin-astro-server/util.ts
index fe4b29294..fe4b29294 100644
--- a/packages/astro/src/core/render/dev/util.ts
+++ b/packages/astro/src/vite-plugin-astro-server/util.ts
diff --git a/packages/astro/src/core/render/dev/vite.ts b/packages/astro/src/vite-plugin-astro-server/vite.ts
index 252d50fa2..ac8659982 100644
--- a/packages/astro/src/core/render/dev/vite.ts
+++ b/packages/astro/src/vite-plugin-astro-server/vite.ts
@@ -1,9 +1,8 @@
-import type { ModuleLoader, ModuleNode } from '../../module-loader/index';
-
+import type { ModuleLoader, ModuleNode } from '../core/module-loader/index';
import npath from 'node:path';
-import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from '../../constants.js';
-import { unwrapId } from '../../util.js';
import { isCSSRequest } from './util.js';
+import { unwrapId } from '../core/util.js';
+import { SUPPORTED_MARKDOWN_FILE_EXTENSIONS } from '../core/constants.js';
/**
* List of file extensions signalling we can (and should) SSR ahead-of-time
diff --git a/packages/astro/test/units/dev/styles.test.js b/packages/astro/test/units/dev/styles.test.js
index ba27a1c8b..76b38dd43 100644
--- a/packages/astro/test/units/dev/styles.test.js
+++ b/packages/astro/test/units/dev/styles.test.js
@@ -1,6 +1,6 @@
import { expect } from 'chai';
-import { getStylesForURL } from '../../../dist/core/render/dev/css.js';
+import { getStylesForURL } from '../../../dist/vite-plugin-astro-server/css.js';
import { viteID } from '../../../dist/core/util.js';
const root = new URL('../../fixtures/alias/', import.meta.url);
diff --git a/packages/astro/test/units/routing/route-matching.test.js b/packages/astro/test/units/routing/route-matching.test.js
index 78714202a..50b8d58c9 100644
--- a/packages/astro/test/units/routing/route-matching.test.js
+++ b/packages/astro/test/units/routing/route-matching.test.js
@@ -3,12 +3,12 @@ import { createFs, createRequestAndResponse, defaultLogging } from '../test-util
import { createRouteManifest, matchAllRoutes } from '../../../dist/core/routing/index.js';
import { fileURLToPath } from 'node:url';
import { createViteLoader } from '../../../dist/core/module-loader/vite.js';
-import { createDevelopmentEnvironment } from '../../../dist/core/render/dev/environment.js';
import { expect } from 'chai';
import { createContainer } from '../../../dist/core/dev/container.js';
import * as cheerio from 'cheerio';
import testAdapter from '../../test-adapter.js';
import { getSortedPreloadedMatches } from '../../../dist/prerender/routing.js';
+import { createDevelopmentEnvironment } from '../../../dist/vite-plugin-astro-server/environment.js';
import { createDevelopmentManifest } from '../../../dist/vite-plugin-astro-server/plugin.js';
const root = new URL('../../fixtures/alias/', import.meta.url);