From 3dc68e148e05a36694cb5759f44cc5349bd66294 Mon Sep 17 00:00:00 2001 From: Pascal Schilp Date: Wed, 11 May 2022 16:53:53 +0200 Subject: [PATCH] fix: inject script for ssr mode (#3339) * fix: inject script for ssr mode * chore: changeset --- .changeset/heavy-adults-obey.md | 5 +++++ packages/astro/src/core/app/index.ts | 14 +++++++++++++- packages/astro/src/core/app/types.ts | 2 +- packages/astro/src/core/build/vite-plugin-ssr.ts | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 .changeset/heavy-adults-obey.md diff --git a/.changeset/heavy-adults-obey.md b/.changeset/heavy-adults-obey.md new file mode 100644 index 000000000..af35b5825 --- /dev/null +++ b/.changeset/heavy-adults-obey.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +fixes injectscript in ssr mode diff --git a/packages/astro/src/core/app/index.ts b/packages/astro/src/core/app/index.ts index 261d8f385..b963b5794 100644 --- a/packages/astro/src/core/app/index.ts +++ b/packages/astro/src/core/app/index.ts @@ -78,7 +78,19 @@ export class App { const renderers = manifest.renderers; const info = this.#routeDataToRouteInfo.get(routeData!)!; const links = createLinkStylesheetElementSet(info.links, manifest.site); - const scripts = createModuleScriptElementWithSrcSet(info.scripts, manifest.site); + + const filteredScripts = info.scripts.filter(script => typeof script !== 'string' && script?.stage !== 'head-inline') as string[]; + const scripts = createModuleScriptElementWithSrcSet(filteredScripts, manifest.site); + + // Add all injected scripts to the page. + for (const script of info.scripts) { + if (typeof script !== 'string' && script.stage === 'head-inline') { + scripts.add({ + props: {}, + children: script.children, + }); + } + } const result = await render({ links, diff --git a/packages/astro/src/core/app/types.ts b/packages/astro/src/core/app/types.ts index aa4481141..6a5b55760 100644 --- a/packages/astro/src/core/app/types.ts +++ b/packages/astro/src/core/app/types.ts @@ -12,7 +12,7 @@ export interface RouteInfo { routeData: RouteData; file: string; links: string[]; - scripts: string[]; + scripts: Array; } export type SerializedRouteInfo = Omit & { diff --git a/packages/astro/src/core/build/vite-plugin-ssr.ts b/packages/astro/src/core/build/vite-plugin-ssr.ts index faf6a94d8..38b30b3df 100644 --- a/packages/astro/src/core/build/vite-plugin-ssr.ts +++ b/packages/astro/src/core/build/vite-plugin-ssr.ts @@ -109,7 +109,7 @@ function buildManifest( routes.push({ file: '', links: Array.from(pageData.css), - scripts, + scripts: [...scripts, ...astroConfig._ctx.scripts.filter(script => script.stage === 'head-inline').map(({stage, content}) => ({stage, children: content}))], routeData: serializeRouteData(pageData.route), }); }