diff options
author | 2025-04-03 18:15:24 +0200 | |
---|---|---|
committer | 2025-04-03 18:15:24 +0200 | |
commit | 3323f5c554a3af966463cc95a42d7ca789ba678b (patch) | |
tree | f07f0df9ee8f4286de82699e8a3ae06937809aca | |
parent | 90b0ac1fe1f782adafec07c9c396b829c347686c (diff) | |
download | astro-3323f5c554a3af966463cc95a42d7ca789ba678b.tar.gz astro-3323f5c554a3af966463cc95a42d7ca789ba678b.tar.zst astro-3323f5c554a3af966463cc95a42d7ca789ba678b.zip |
feat: improve rolldown compatibility (#13519)
* feat: improve rolldown compatibility
* chore: remove moduleType
* feat: use object shape
* chore: changeset
21 files changed, 175 insertions, 140 deletions
diff --git a/.changeset/brave-pandas-make.md b/.changeset/brave-pandas-make.md new file mode 100644 index 000000000..ae34a2033 --- /dev/null +++ b/.changeset/brave-pandas-make.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Refactors some internals to improve Rolldown compatibility diff --git a/packages/astro/src/actions/plugins.ts b/packages/astro/src/actions/plugins.ts index b1a071f1c..6c91dd473 100644 --- a/packages/astro/src/actions/plugins.ts +++ b/packages/astro/src/actions/plugins.ts @@ -126,7 +126,7 @@ export function vitePluginActions({ shouldAppendForwardSlash(settings.config.trailingSlash, settings.config.build.format), ), ); - return code; + return { code }; }, }; } diff --git a/packages/astro/src/assets/vite-plugin-assets.ts b/packages/astro/src/assets/vite-plugin-assets.ts index f9dffa2fa..9421ece46 100644 --- a/packages/astro/src/assets/vite-plugin-assets.ts +++ b/packages/astro/src/assets/vite-plugin-assets.ts @@ -117,32 +117,34 @@ export default function assets({ settings }: { settings: AstroSettings }): vite. }, load(id) { if (id === resolvedVirtualModuleId) { - return /* ts */ ` - export { getConfiguredImageService, isLocalService } from "astro/assets"; - import { getImage as getImageInternal } from "astro/assets"; - export { default as Image } from "astro/components/${imageComponentPrefix}Image.astro"; - export { default as Picture } from "astro/components/${imageComponentPrefix}Picture.astro"; - export { inferRemoteSize } from "astro/assets/utils/inferRemoteSize.js"; - - export const imageConfig = ${JSON.stringify({ ...settings.config.image, experimentalResponsiveImages: settings.config.experimental.responsiveImages })}; - // This is used by the @astrojs/node integration to locate images. - // It's unused on other platforms, but on some platforms like Netlify (and presumably also Vercel) - // new URL("dist/...") is interpreted by the bundler as a signal to include that directory - // in the Lambda bundle, which would bloat the bundle with images. - // To prevent this, we mark the URL construction as pure, - // so that it's tree-shaken away for all platforms that don't need it. - export const outDir = /* #__PURE__ */ new URL(${JSON.stringify( - new URL( - settings.buildOutput === 'server' - ? settings.config.build.client - : settings.config.outDir, - ), - )}); - export const assetsDir = /* #__PURE__ */ new URL(${JSON.stringify( - settings.config.build.assets, - )}, outDir); - export const getImage = async (options) => await getImageInternal(options, imageConfig); - `; + return { + code: ` + export { getConfiguredImageService, isLocalService } from "astro/assets"; + import { getImage as getImageInternal } from "astro/assets"; + export { default as Image } from "astro/components/${imageComponentPrefix}Image.astro"; + export { default as Picture } from "astro/components/${imageComponentPrefix}Picture.astro"; + export { inferRemoteSize } from "astro/assets/utils/inferRemoteSize.js"; + + export const imageConfig = ${JSON.stringify({ ...settings.config.image, experimentalResponsiveImages: settings.config.experimental.responsiveImages })}; + // This is used by the @astrojs/node integration to locate images. + // It's unused on other platforms, but on some platforms like Netlify (and presumably also Vercel) + // new URL("dist/...") is interpreted by the bundler as a signal to include that directory + // in the Lambda bundle, which would bloat the bundle with images. + // To prevent this, we mark the URL construction as pure, + // so that it's tree-shaken away for all platforms that don't need it. + export const outDir = /* #__PURE__ */ new URL(${JSON.stringify( + new URL( + settings.buildOutput === 'server' + ? settings.config.build.client + : settings.config.outDir, + ), + )}); + export const assetsDir = /* #__PURE__ */ new URL(${JSON.stringify( + settings.config.build.assets, + )}, outDir); + export const getImage = async (options) => await getImageInternal(options, imageConfig); + `, + }; } }, buildStart() { @@ -151,7 +153,7 @@ export default function assets({ settings }: { settings: AstroSettings }): vite. }, // In build, rewrite paths to ESM imported images in code to their final location async renderChunk(code) { - const assetUrlRE = /__ASTRO_ASSET_IMAGE__([\w$]{8})__(?:_(.*?)__)?/g; + const assetUrlRE = /__ASTRO_ASSET_IMAGE__([\w$]+)__(?:_(.*?)__)?/g; let match; let s; @@ -205,7 +207,7 @@ export default function assets({ settings }: { settings: AstroSettings }): vite. return; } - const emitFile = shouldEmitFile ? this.emitFile : undefined; + const emitFile = shouldEmitFile ? this.emitFile.bind(this) : undefined; const imageMetadata = await emitESMImage( id, this.meta.watchMode, @@ -223,20 +225,24 @@ export default function assets({ settings }: { settings: AstroSettings }): vite. if (settings.config.experimental.svg && /\.svg$/.test(id)) { const { contents, ...metadata } = imageMetadata; // We know that the contents are present, as we only emit this property for SVG files - return makeSvgComponent(metadata, contents!); + return { code: makeSvgComponent(metadata, contents!) }; } // We can only reliably determine if an image is used on the server, as we need to track its usage throughout the entire build. // Since you cannot use image optimization on the client anyway, it's safe to assume that if the user imported // an image on the client, it should be present in the final build. if (options?.ssr) { - return `export default ${getProxyCode( - imageMetadata, - settings.buildOutput === 'server', - )}`; + return { + code: `export default ${getProxyCode( + imageMetadata, + settings.buildOutput === 'server', + )}`, + }; } else { globalThis.astroAsset.referencedImages.add(imageMetadata.fsPath); - return `export default ${JSON.stringify(imageMetadata)}`; + return { + code: `export default ${JSON.stringify(imageMetadata)}`, + }; } } }, diff --git a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts index 7a9295ba5..df84eed5c 100644 --- a/packages/astro/src/content/vite-plugin-content-virtual-mod.ts +++ b/packages/astro/src/content/vite-plugin-content-virtual-mod.ts @@ -141,7 +141,7 @@ export function astroContentVirtualModPlugin({ } if (id === RESOLVED_DATA_STORE_VIRTUAL_ID) { if (!fs.existsSync(dataStoreFile)) { - return 'export default new Map()'; + return { code: 'export default new Map()' }; } const jsonData = await fs.promises.readFile(dataStoreFile, 'utf-8'); @@ -161,18 +161,20 @@ export function astroContentVirtualModPlugin({ if (id === ASSET_IMPORTS_RESOLVED_STUB_ID) { const assetImportsFile = new URL(ASSET_IMPORTS_FILE, settings.dotAstroDir); - if (!fs.existsSync(assetImportsFile)) { - return 'export default new Map()'; - } - return fs.readFileSync(assetImportsFile, 'utf-8'); + return { + code: fs.existsSync(assetImportsFile) + ? fs.readFileSync(assetImportsFile, 'utf-8') + : 'export default new Map()', + }; } if (id === MODULES_MJS_VIRTUAL_ID) { const modules = new URL(MODULES_IMPORTS_FILE, settings.dotAstroDir); - if (!fs.existsSync(modules)) { - return 'export default new Map()'; - } - return fs.readFileSync(modules, 'utf-8'); + return { + code: fs.existsSync(modules) + ? fs.readFileSync(modules, 'utf-8') + : 'export default new Map()', + }; } }, diff --git a/packages/astro/src/core/build/plugins/plugin-component-entry.ts b/packages/astro/src/core/build/plugins/plugin-component-entry.ts index bfa2ce58c..d7fc8aa5e 100644 --- a/packages/astro/src/core/build/plugins/plugin-component-entry.ts +++ b/packages/astro/src/core/build/plugins/plugin-component-entry.ts @@ -64,7 +64,9 @@ export function vitePluginComponentEntry(internals: BuildInternals): VitePlugin const componentId = id.slice(astroEntryPrefix.length); const exportNames = componentToExportNames.get(componentId); if (exportNames) { - return `export { ${exportNames.join(', ')} } from ${JSON.stringify(componentId)}`; + return { + code: `export { ${exportNames.join(', ')} } from ${JSON.stringify(componentId)}`, + }; } } }, diff --git a/packages/astro/src/core/build/plugins/plugin-manifest.ts b/packages/astro/src/core/build/plugins/plugin-manifest.ts index 5c3fa6f4f..cd7f62a82 100644 --- a/packages/astro/src/core/build/plugins/plugin-manifest.ts +++ b/packages/astro/src/core/build/plugins/plugin-manifest.ts @@ -63,7 +63,7 @@ function vitePluginManifest(options: StaticBuildOptions, internals: BuildInterna ]; const exports = [`export { manifest }`]; - return [...imports, ...contents, ...exports].join('\n'); + return { code: [...imports, ...contents, ...exports].join('\n') }; } }, diff --git a/packages/astro/src/core/build/plugins/plugin-pages.ts b/packages/astro/src/core/build/plugins/plugin-pages.ts index 75cbde220..df3966e9e 100644 --- a/packages/astro/src/core/build/plugins/plugin-pages.ts +++ b/packages/astro/src/core/build/plugins/plugin-pages.ts @@ -50,7 +50,7 @@ function vitePluginPages(opts: StaticBuildOptions, internals: BuildInternals): V imports.push(`import { renderers } from "${RENDERERS_MODULE_ID}";`); exports.push(`export { renderers };`); - return `${imports.join('\n')}${exports.join('\n')}`; + return { code: `${imports.join('\n')}${exports.join('\n')}` }; } } } diff --git a/packages/astro/src/core/build/plugins/plugin-prerender.ts b/packages/astro/src/core/build/plugins/plugin-prerender.ts index f915c9270..219c07675 100644 --- a/packages/astro/src/core/build/plugins/plugin-prerender.ts +++ b/packages/astro/src/core/build/plugins/plugin-prerender.ts @@ -57,6 +57,9 @@ function getNonPrerenderOnlyChunks(bundle: Rollup.OutputBundle, internals: Build nonPrerenderOnlyEntryChunks.add(chunk); } + if (chunk.type === 'chunk' && chunk.isDynamicEntry) { + nonPrerenderOnlyEntryChunks.add(chunk); + } } // From the `nonPrerenderedEntryChunks`, we crawl all the imports/dynamicImports to find all diff --git a/packages/astro/src/core/build/plugins/plugin-renderers.ts b/packages/astro/src/core/build/plugins/plugin-renderers.ts index 99fb4e4ce..1b4b8105a 100644 --- a/packages/astro/src/core/build/plugins/plugin-renderers.ts +++ b/packages/astro/src/core/build/plugins/plugin-renderers.ts @@ -37,9 +37,9 @@ export function vitePluginRenderers(opts: StaticBuildOptions): VitePlugin { exports.push(`export const renderers = [${rendererItems}];`); - return `${imports.join('\n')}\n${exports.join('\n')}`; + return { code: `${imports.join('\n')}\n${exports.join('\n')}` }; } else { - return `export const renderers = [];`; + return { code: `export const renderers = [];` }; } } }, diff --git a/packages/astro/src/core/build/plugins/plugin-ssr.ts b/packages/astro/src/core/build/plugins/plugin-ssr.ts index 7dac35194..fdc05026f 100644 --- a/packages/astro/src/core/build/plugins/plugin-ssr.ts +++ b/packages/astro/src/core/build/plugins/plugin-ssr.ts @@ -30,7 +30,7 @@ function vitePluginAdapter(adapter: AstroAdapter): VitePlugin { }, async load(id) { if (id === RESOLVED_ADAPTER_VIRTUAL_MODULE_ID) { - return `export * from ${JSON.stringify(adapter.serverEntrypoint)};`; + return { code: `export * from ${JSON.stringify(adapter.serverEntrypoint)};` }; } }, }; @@ -103,7 +103,7 @@ function vitePluginSSR( const ssrCode = generateSSRCode(adapter, middleware!.id); imports.push(...ssrCode.imports); contents.push(...ssrCode.contents); - return [...imports, ...contents, ...exports].join('\n'); + return { code: [...imports, ...contents, ...exports].join('\n') }; } }, async generateBundle(_opts, bundle) { diff --git a/packages/astro/src/core/middleware/vite-plugin.ts b/packages/astro/src/core/middleware/vite-plugin.ts index 2587c4565..19cb87bc4 100644 --- a/packages/astro/src/core/middleware/vite-plugin.ts +++ b/packages/astro/src/core/middleware/vite-plugin.ts @@ -44,7 +44,7 @@ export function vitePluginMiddleware({ settings }: { settings: AstroSettings }): if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') { throw new AstroError(MissingMiddlewareForInternationalization); } - return 'export const onRequest = (_, next) => next()'; + return { code: 'export const onRequest = (_, next) => next()' }; } else if (id === MIDDLEWARE_MODULE_ID) { if (!userMiddlewareIsPresent && settings.config.i18n?.routing === 'manual') { throw new AstroError(MissingMiddlewareForInternationalization); @@ -53,7 +53,7 @@ export function vitePluginMiddleware({ settings }: { settings: AstroSettings }): const preMiddleware = createMiddlewareImports(settings.middlewares.pre, 'pre'); const postMiddleware = createMiddlewareImports(settings.middlewares.post, 'post'); - const source = ` + const code = ` ${ userMiddlewareIsPresent ? `import { onRequest as userOnRequest } from '${resolvedMiddlewareId}';` @@ -69,7 +69,7 @@ export const onRequest = sequence( ); `.trim(); - return source; + return { code }; } }, }; diff --git a/packages/astro/src/core/server-islands/vite-plugin-server-islands.ts b/packages/astro/src/core/server-islands/vite-plugin-server-islands.ts index 3673df534..8cfbd6996 100644 --- a/packages/astro/src/core/server-islands/vite-plugin-server-islands.ts +++ b/packages/astro/src/core/server-islands/vite-plugin-server-islands.ts @@ -27,7 +27,7 @@ export function vitePluginServerIslands({ settings, logger }: AstroPluginOptions }, load(id) { if (id === RESOLVED_VIRTUAL_ISLAND_MAP_ID) { - return `export const serverIslandMap = ${serverIslandPlaceholder};`; + return { code: `export const serverIslandMap = ${serverIslandPlaceholder};` }; } }, transform(_code, id) { diff --git a/packages/astro/src/env/vite-plugin-env.ts b/packages/astro/src/env/vite-plugin-env.ts index e01d8f3d6..9511827f7 100644 --- a/packages/astro/src/env/vite-plugin-env.ts +++ b/packages/astro/src/env/vite-plugin-env.ts @@ -72,12 +72,12 @@ export function astroEnv({ settings, sync, envLoader }: AstroEnvPluginParams): P load(id, options) { if (id === resolveVirtualModuleId(VIRTUAL_MODULES_IDS.client)) { ensureTemplateAreLoaded(); - return templates!.client; + return { code: templates!.client }; } if (id === resolveVirtualModuleId(VIRTUAL_MODULES_IDS.server)) { if (options?.ssr) { ensureTemplateAreLoaded(); - return templates!.server; + return { code: templates!.server }; } throw new AstroError({ ...AstroErrorData.ServerOnlyModule, @@ -86,7 +86,7 @@ export function astroEnv({ settings, sync, envLoader }: AstroEnvPluginParams): P } if (id === resolveVirtualModuleId(VIRTUAL_MODULES_IDS.internal)) { ensureTemplateAreLoaded(); - return templates!.internal; + return { code: templates!.internal }; } }, }; diff --git a/packages/astro/src/manifest/virtual-module.ts b/packages/astro/src/manifest/virtual-module.ts index 03b856265..f99d120d1 100644 --- a/packages/astro/src/manifest/virtual-module.ts +++ b/packages/astro/src/manifest/virtual-module.ts @@ -42,7 +42,7 @@ export default function virtualModulePlugin({ }); } // There's nothing wrong about using `/client` on the server - return `${serializeClientConfig(manifest)};`; + return { code: serializeClientConfig(manifest) }; } // server else if (id == RESOLVED_VIRTUAL_SERVER_ID) { @@ -58,7 +58,7 @@ export default function virtualModulePlugin({ message: AstroErrorData.ServerOnlyModule.message(VIRTUAL_SERVER_ID), }); } - return `${serializeServerConfig(manifest)};`; + return { code: serializeServerConfig(manifest) }; } }, }; diff --git a/packages/astro/src/prefetch/vite-plugin-prefetch.ts b/packages/astro/src/prefetch/vite-plugin-prefetch.ts index c908e7cc2..8ab23503c 100644 --- a/packages/astro/src/prefetch/vite-plugin-prefetch.ts +++ b/packages/astro/src/prefetch/vite-plugin-prefetch.ts @@ -40,7 +40,7 @@ export default function astroPrefetch({ settings }: { settings: AstroSettings }) load(id) { if (id === resolvedVirtualModuleId) { if (!prefetch) throwPrefetchNotEnabledError(); - return `export { prefetch } from "astro/virtual-modules/prefetch.js";`; + return { code: `export { prefetch } from "astro/virtual-modules/prefetch.js";` }; } }, transform(code, id) { diff --git a/packages/astro/src/toolbar/vite-plugin-dev-toolbar.ts b/packages/astro/src/toolbar/vite-plugin-dev-toolbar.ts index e26df2c55..66989a4e3 100644 --- a/packages/astro/src/toolbar/vite-plugin-dev-toolbar.ts +++ b/packages/astro/src/toolbar/vite-plugin-dev-toolbar.ts @@ -58,61 +58,63 @@ export default function astroDevToolbar({ settings, logger }: AstroPluginOptions }, async load(id) { if (id === resolvedPrivateVirtualModuleId) { - return ` - export const loadDevToolbarApps = async () => { - return (await Promise.all([${settings.devToolbarApps - .map( - (plugin) => - `safeLoadPlugin(${JSON.stringify( - plugin, - )}, async () => (await import(${JSON.stringify( - typeof plugin === 'string' ? plugin : plugin.entrypoint.toString(), - )})).default, ${JSON.stringify( - typeof plugin === 'string' ? plugin : plugin.entrypoint.toString(), - )})`, - ) - .join(',')}])); - }; + return { + code: ` + export const loadDevToolbarApps = async () => { + return (await Promise.all([${settings.devToolbarApps + .map( + (plugin) => + `safeLoadPlugin(${JSON.stringify( + plugin, + )}, async () => (await import(${JSON.stringify( + typeof plugin === 'string' ? plugin : plugin.entrypoint.toString(), + )})).default, ${JSON.stringify( + typeof plugin === 'string' ? plugin : plugin.entrypoint.toString(), + )})`, + ) + .join(',')}])); + }; - async function safeLoadPlugin(appDefinition, importEntrypoint, entrypoint) { - try { - let app; - if (typeof appDefinition === 'string') { - app = await importEntrypoint(); + async function safeLoadPlugin(appDefinition, importEntrypoint, entrypoint) { + try { + let app; + if (typeof appDefinition === 'string') { + app = await importEntrypoint(); - if (typeof app !== 'object' || !app.id || !app.name) { - throw new Error("Apps must default export an object with an id, and a name."); - } - } else { - app = appDefinition; + if (typeof app !== 'object' || !app.id || !app.name) { + throw new Error("Apps must default export an object with an id, and a name."); + } + } else { + app = appDefinition; - if (typeof app !== 'object' || !app.id || !app.name || !app.entrypoint) { - throw new Error("Apps must be an object with an id, a name and an entrypoint."); - } + if (typeof app !== 'object' || !app.id || !app.name || !app.entrypoint) { + throw new Error("Apps must be an object with an id, a name and an entrypoint."); + } - const loadedApp = await importEntrypoint(); + const loadedApp = await importEntrypoint(); - if (typeof loadedApp !== 'object') { - throw new Error("App entrypoint must default export an object."); + if (typeof loadedApp !== 'object') { + throw new Error("App entrypoint must default export an object."); + } + + app = { ...app, ...loadedApp }; } - app = { ...app, ...loadedApp }; - } + return app; + } catch (err) { + console.error(\`Failed to load dev toolbar app from \${entrypoint}: \${err.message}\`); - return app; - } catch (err) { - console.error(\`Failed to load dev toolbar app from \${entrypoint}: \${err.message}\`); + if (import.meta.hot) { + import.meta.hot.send('astro:devtoolbar:error:load', { entrypoint: entrypoint, error: err.message }) + } - if (import.meta.hot) { - import.meta.hot.send('astro:devtoolbar:error:load', { entrypoint: entrypoint, error: err.message }) + return undefined; } return undefined; } - - return undefined; - } - `; + `, + }; } }, }; diff --git a/packages/astro/src/transitions/vite-plugin-transitions.ts b/packages/astro/src/transitions/vite-plugin-transitions.ts index ea0576477..d72eb0dc9 100644 --- a/packages/astro/src/transitions/vite-plugin-transitions.ts +++ b/packages/astro/src/transitions/vite-plugin-transitions.ts @@ -27,26 +27,30 @@ export default function astroTransitions({ settings }: { settings: AstroSettings }, load(id) { if (id === resolvedVirtualModuleId) { - return ` - export * from "astro/virtual-modules/transitions.js"; - export { - default as ViewTransitions, - default as ClientRouter - } from "astro/components/ClientRouter.astro"; - `; + return { + code: ` + export * from "astro/virtual-modules/transitions.js"; + export { + default as ViewTransitions, + default as ClientRouter + } from "astro/components/ClientRouter.astro"; + `, + }; } if (id === resolvedVirtualClientModuleId) { - return ` - export { navigate, supportsViewTransitions, transitionEnabledOnThisPage } from "astro/virtual-modules/transitions-router.js"; - export * from "astro/virtual-modules/transitions-types.js"; - export { - TRANSITION_BEFORE_PREPARATION, isTransitionBeforePreparationEvent, TransitionBeforePreparationEvent, - TRANSITION_AFTER_PREPARATION, - TRANSITION_BEFORE_SWAP, isTransitionBeforeSwapEvent, TransitionBeforeSwapEvent, - TRANSITION_AFTER_SWAP, TRANSITION_PAGE_LOAD - } from "astro/virtual-modules/transitions-events.js"; - export { swapFunctions } from "astro/virtual-modules/transitions-swap-functions.js"; - `; + return { + code: ` + export { navigate, supportsViewTransitions, transitionEnabledOnThisPage } from "astro/virtual-modules/transitions-router.js"; + export * from "astro/virtual-modules/transitions-types.js"; + export { + TRANSITION_BEFORE_PREPARATION, isTransitionBeforePreparationEvent, TransitionBeforePreparationEvent, + TRANSITION_AFTER_PREPARATION, + TRANSITION_BEFORE_SWAP, isTransitionBeforeSwapEvent, TransitionBeforeSwapEvent, + TRANSITION_AFTER_SWAP, TRANSITION_PAGE_LOAD + } from "astro/virtual-modules/transitions-events.js"; + export { swapFunctions } from "astro/virtual-modules/transitions-swap-functions.js"; + `, + }; } }, transform(code, id) { diff --git a/packages/astro/src/vite-plugin-load-fallback/index.ts b/packages/astro/src/vite-plugin-load-fallback/index.ts index 199f15c43..f7cc9cd1c 100644 --- a/packages/astro/src/vite-plugin-load-fallback/index.ts +++ b/packages/astro/src/vite-plugin-load-fallback/index.ts @@ -59,8 +59,10 @@ export default function loadFallbackPlugin({ } }, async load(id) { - const source = await tryLoadModule(id); - return source; + const code = await tryLoadModule(id); + if (code) { + return { code }; + } }, }, { diff --git a/packages/astro/src/vite-plugin-scripts/index.ts b/packages/astro/src/vite-plugin-scripts/index.ts index f87f6a381..f45fd7952 100644 --- a/packages/astro/src/vite-plugin-scripts/index.ts +++ b/packages/astro/src/vite-plugin-scripts/index.ts @@ -30,22 +30,28 @@ export default function astroScriptsPlugin({ settings }: { settings: AstroSettin async load(id) { if (id === BEFORE_HYDRATION_SCRIPT_ID) { - return settings.scripts - .filter((s) => s.stage === 'before-hydration') - .map((s) => s.content) - .join('\n'); + return { + code: settings.scripts + .filter((s) => s.stage === 'before-hydration') + .map((s) => s.content) + .join('\n'), + }; } if (id === PAGE_SCRIPT_ID) { - return settings.scripts - .filter((s) => s.stage === 'page') - .map((s) => s.content) - .join('\n'); + return { + code: settings.scripts + .filter((s) => s.stage === 'page') + .map((s) => s.content) + .join('\n'), + }; } if (id === PAGE_SSR_SCRIPT_ID) { - return settings.scripts - .filter((s) => s.stage === 'page-ssr') - .map((s) => s.content) - .join('\n'); + return { + code: settings.scripts + .filter((s) => s.stage === 'page-ssr') + .map((s) => s.content) + .join('\n'), + }; } return null; }, diff --git a/packages/astro/src/vite-plugin-ssr-manifest/index.ts b/packages/astro/src/vite-plugin-ssr-manifest/index.ts index 05e1f54be..1828a9594 100644 --- a/packages/astro/src/vite-plugin-ssr-manifest/index.ts +++ b/packages/astro/src/vite-plugin-ssr-manifest/index.ts @@ -14,12 +14,13 @@ export function vitePluginSSRManifest(): VitePlugin { }, load(id) { if (id === resolvedManifestVirtualModuleId) { - return `export let manifest = {}; + return { + code: `export let manifest = {}; export function _privateSetManifestDontUseThis(ssrManifest) { manifest = ssrManifest; -}`; +}`, + }; } - return void 0; }, }; } diff --git a/packages/astro/test/test-adapter.js b/packages/astro/test/test-adapter.js index c16ec5e11..15134f230 100644 --- a/packages/astro/test/test-adapter.js +++ b/packages/astro/test/test-adapter.js @@ -46,7 +46,8 @@ export default function ({ }, load(id) { if (id === '@my-ssr') { - return ` + return { + code: ` import { App } from 'astro/app'; import fs from 'fs'; @@ -92,7 +93,8 @@ export default function ({ createApp: (streaming) => new MyApp(manifest, streaming) }; } - `; + `, + }; } }, }, |