From 97df714f6e7fe82365f88d20f081b51a0e0dd7b5 Mon Sep 17 00:00:00 2001 From: Andrew Kingston Date: Thu, 13 Mar 2025 15:48:19 +0000 Subject: [PATCH] Add SSR'd app scripts to preview apps --- .../src/api/controllers/static/index.ts | 20 ++++++++++++++++++- .../controllers/static/templates/preview.hbs | 5 ++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/packages/server/src/api/controllers/static/index.ts b/packages/server/src/api/controllers/static/index.ts index 6b8ecda0d9..facc1ebf06 100644 --- a/packages/server/src/api/controllers/static/index.ts +++ b/packages/server/src/api/controllers/static/index.ts @@ -262,6 +262,21 @@ export const serveApp = async function (ctx: UserCtx) { } } +const getAppScriptHTML = ( + app: App, + location: "Head" | "Body", + nonce: string +) => { + if (!app.scripts?.length) { + return "" + } + return app.scripts + .filter(script => script.location === location && script.html?.length) + .map(script => script.html) + .join("\n") + .replaceAll(" ) { @@ -273,9 +288,12 @@ export const serveBuilderPreview = async function ( const templateLoc = join(__dirname, "templates") const previewLoc = fs.existsSync(templateLoc) ? templateLoc : __dirname const previewHbs = loadHandlebarsFile(join(previewLoc, "preview.hbs")) + const nonce = ctx.state.nonce || "" ctx.body = await processString(previewHbs, { clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version), - nonce: ctx.state.nonce, + nonce, + headAppScripts: getAppScriptHTML(appInfo, "Head", nonce), + bodyAppScripts: getAppScriptHTML(appInfo, "Body", nonce), }) } else { // just return the app info for jest to assert on diff --git a/packages/server/src/api/controllers/static/templates/preview.hbs b/packages/server/src/api/controllers/static/templates/preview.hbs index fc6de9a28c..31495bae8b 100644 --- a/packages/server/src/api/controllers/static/templates/preview.hbs +++ b/packages/server/src/api/controllers/static/templates/preview.hbs @@ -108,6 +108,9 @@ window.addEventListener("message", receiveMessage) window.parent.postMessage({ type: "ready" }) + {{ headAppScripts }} - + + {{ bodyAppScripts }} +