From 89bdc76265669a44b63c38475d4db70895a52f85 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Fri, 22 Nov 2024 16:08:58 -0700 Subject: [PATCH] fix: improve tags api support (#170) --- .changeset/fair-cherries-remember.md | 5 +++ src/render-assets-runtime.ts | 13 ++++++ src/server-entry-template.ts | 63 +++++++++++++--------------- 3 files changed, 47 insertions(+), 34 deletions(-) create mode 100644 .changeset/fair-cherries-remember.md diff --git a/.changeset/fair-cherries-remember.md b/.changeset/fair-cherries-remember.md new file mode 100644 index 0000000..ca14cf7 --- /dev/null +++ b/.changeset/fair-cherries-remember.md @@ -0,0 +1,5 @@ +--- +"@marko/vite": patch +--- + +Improve support for tags api. diff --git a/src/render-assets-runtime.ts b/src/render-assets-runtime.ts index 1c74913..e50471e 100644 --- a/src/render-assets-runtime.ts +++ b/src/render-assets-runtime.ts @@ -11,6 +11,19 @@ if (typeof base !== "string") throw new Error("${opts.basePathVar} must be defin if (!base.endsWith("/")) throw new Error("${opts.basePathVar} must end with a '/' when using basePathVar.");` : "const base = import.meta.env.BASE_URL;" } + +export function getPrepend(g) { + return ( + g.___viteRenderAssets("head-prepend") + + g.___viteRenderAssets("head") + + g.___viteRenderAssets("body-prepend") + ); +} +export function getAppend(g) { + return ( + g.___viteRenderAssets("body-prepend") + ); +} export function addAssets(g, newEntries) { const entries = g.___viteEntries; if (entries) { diff --git a/src/server-entry-template.ts b/src/server-entry-template.ts index 35c37dd..792e9be 100644 --- a/src/server-entry-template.ts +++ b/src/server-entry-template.ts @@ -7,46 +7,41 @@ export default async (opts: { basePathVar?: string; tagsAPI?: boolean; }): Promise => { - const addAssetsCall = `addAssets($global, [${opts.entryData.join(",")}])`; const fileNameStr = JSON.stringify(`./${path.basename(opts.fileName)}`); - return `import template from ${fileNameStr}; -export * from ${fileNameStr}; -import { addAssets } from "${renderAssetsRuntimeId}"; - -${opts.tagsAPI ? `` : `$ const writeSync = ${addAssetsCall};`} - -${opts.tagsAPI ? "" : ""} - $!{ - $global.___viteRenderAssets("head-prepend") + - $global.___viteRenderAssets("head") + - $global.___viteRenderAssets("body-prepend") - } - - - <__flush_here_and_after__> - $!{ - $global.___viteRenderAssets("head-prepend") + - $global.___viteRenderAssets("head") + - $global.___viteRenderAssets("body-prepend") - } - - -<\${template} ...input/>${ - opts.tagsAPI - ? "" - : ` - -` + if (opts.tagsAPI) { + return `import Template from ${fileNameStr}; +export * from ${fileNameStr}; +import { addAssets, getPrepend, getAppend } from "${renderAssetsRuntimeId}"; +static function flush($global, html) { + return getPrepend($global) + html + getAppend($global); +} +static function setFlush($global) { + $global.__flush__ = flush; +} +static const assets = [${opts.entryData.join(",")}]; + +-- $!{writeSync && getPrepend($global)} +