nuxt-og-image 6.4.0 → 6.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/chunks/tw4.cjs +1 -1
  2. package/dist/chunks/tw4.mjs +1 -1
  3. package/dist/chunks/uno.cjs +1 -1
  4. package/dist/chunks/uno.mjs +1 -1
  5. package/dist/devtools/200.html +1 -1
  6. package/dist/devtools/404.html +1 -1
  7. package/dist/devtools/_nuxt/{Bqc0aGFQ.js → B6Dg3dZ6.js} +1 -1
  8. package/dist/devtools/_nuxt/{Dc6eeJGV.js → BMVWkjCo.js} +1 -1
  9. package/dist/devtools/_nuxt/{Dm872wiT.js → BQDcSiMf.js} +1 -1
  10. package/dist/devtools/_nuxt/{BzIf6hz_.js → BsivBvAU.js} +1 -1
  11. package/dist/devtools/_nuxt/{DbpvCpU1.js → CHeKziWa.js} +1 -1
  12. package/dist/devtools/_nuxt/DevtoolsSection.C-PGRg5f.css +1 -0
  13. package/dist/devtools/_nuxt/DevtoolsSnippet.BipAyEUC.css +1 -0
  14. package/dist/devtools/_nuxt/builds/latest.json +1 -1
  15. package/dist/devtools/_nuxt/builds/meta/150c0674-b387-4525-9043-e05dd343db8e.json +1 -0
  16. package/dist/devtools/_nuxt/{entry.BbbigIAW.css → entry.BjD2aghs.css} +1 -1
  17. package/dist/devtools/_nuxt/{pages.Bgwt6-05.css → pages.DO0dnDUs.css} +1 -1
  18. package/dist/devtools/_nuxt/renderer-select.J57nTUNW.css +1 -0
  19. package/dist/devtools/_nuxt/{DjV7IYFt.js → w_tq7NMl.js} +1 -1
  20. package/dist/devtools/_nuxt/{Dxins0lX.js → yBiBpwD7.js} +6 -6
  21. package/dist/devtools/debug/index.html +1 -1
  22. package/dist/devtools/docs/index.html +1 -1
  23. package/dist/devtools/index.html +1 -1
  24. package/dist/devtools/templates/index.html +1 -1
  25. package/dist/module.cjs +1 -1
  26. package/dist/module.json +1 -1
  27. package/dist/module.mjs +1 -1
  28. package/dist/runtime/app/client-utils.d.ts +18 -0
  29. package/dist/runtime/app/client-utils.js +86 -0
  30. package/dist/runtime/app/composables/_defineOgImageRaw.js +4 -1
  31. package/dist/runtime/app/utils.js +23 -12
  32. package/dist/runtime/server/og-image/templates/html.js +2 -3
  33. package/dist/runtime/server/util/cache.js +1 -1
  34. package/dist/shared/{nuxt-og-image.D6dSBPnf.mjs → nuxt-og-image.BK0-aZom.mjs} +29 -21
  35. package/dist/shared/{nuxt-og-image.BRq8WvnV.cjs → nuxt-og-image.C2oXAHiT.cjs} +30 -22
  36. package/package.json +7 -7
  37. package/dist/devtools/_nuxt/DevtoolsSection.BtROL5Ex.css +0 -1
  38. package/dist/devtools/_nuxt/DevtoolsSnippet.BeWnBUTX.css +0 -1
  39. package/dist/devtools/_nuxt/builds/meta/966cadeb-de3b-4c08-b33e-ccf471f25ca9.json +0 -1
  40. package/dist/devtools/_nuxt/renderer-select.BMMQvtBd.css +0 -1
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/Dxins0lX.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BbbigIAW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.BMMQvtBd.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.BtROL5Ex.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dxins0lX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Bqc0aGFQ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dm872wiT.js"><script type="module" src="/__nuxt-og-image/_nuxt/Dxins0lX.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"966cadeb-de3b-4c08-b33e-ccf471f25ca9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776092896540,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190433,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/Dxins0lX.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BbbigIAW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.BMMQvtBd.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.BtROL5Ex.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dxins0lX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Bqc0aGFQ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dm872wiT.js"><script type="module" src="/__nuxt-og-image/_nuxt/Dxins0lX.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"966cadeb-de3b-4c08-b33e-ccf471f25ca9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776092896542,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/Dxins0lX.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BbbigIAW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.BMMQvtBd.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.BtROL5Ex.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dxins0lX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Bqc0aGFQ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dm872wiT.js"><script type="module" src="/__nuxt-og-image/_nuxt/Dxins0lX.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT_SITE_CONFIG__={_priority:{env:-15,url:-3},env:"production",url:"https:\u002F\u002Fnuxtseo.com"}</script><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"966cadeb-de3b-4c08-b33e-ccf471f25ca9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776092896542,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT_SITE_CONFIG__={_priority:{env:-15,url:-3},env:"production",url:"https:\u002F\u002Fnuxtseo.com"}</script><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/Dxins0lX.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BbbigIAW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.BMMQvtBd.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.BtROL5Ex.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dxins0lX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Bqc0aGFQ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Dm872wiT.js"><script type="module" src="/__nuxt-og-image/_nuxt/Dxins0lX.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"966cadeb-de3b-4c08-b33e-ccf471f25ca9",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776092896542,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/yBiBpwD7.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BjD2aghs.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/renderer-select.J57nTUNW.css" crossorigin><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/DevtoolsSection.C-PGRg5f.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/yBiBpwD7.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CP0tQR2M.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DmsY5seq.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Cy0omYQh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BWm573-p.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DDRo8-tD.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6Dg3dZ6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BQDcSiMf.js"><script type="module" src="/__nuxt-og-image/_nuxt/yBiBpwD7.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"150c0674-b387-4525-9043-e05dd343db8e",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1776225190434,false]</script></body></html>
package/dist/module.cjs CHANGED
@@ -9,7 +9,7 @@ require('nuxt-site-config/kit');
9
9
  require('ohash');
10
10
  require('pathe');
11
11
  require('pkg-types');
12
- const module$1 = require('./shared/nuxt-og-image.BRq8WvnV.cjs');
12
+ const module$1 = require('./shared/nuxt-og-image.C2oXAHiT.cjs');
13
13
  require('nuxtseo-shared/kit');
14
14
  require('../dist/runtime/logger.js');
15
15
  require('node:crypto');
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "nuxt": ">=3.16.0"
5
5
  },
6
6
  "configKey": "ogImage",
7
- "version": "6.4.0",
7
+ "version": "6.4.2",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -7,7 +7,7 @@ import 'nuxt-site-config/kit';
7
7
  import 'ohash';
8
8
  import 'pathe';
9
9
  import 'pkg-types';
10
- export { m as default } from './shared/nuxt-og-image.D6dSBPnf.mjs';
10
+ export { m as default } from './shared/nuxt-og-image.BK0-aZom.mjs';
11
11
  import 'nuxtseo-shared/kit';
12
12
  import '../dist/runtime/logger.js';
13
13
  import 'node:crypto';
@@ -0,0 +1,18 @@
1
+ import type { RouteLocationNormalizedLoaded } from 'vue-router';
2
+ import type { DefineOgImageInput } from '../types.js';
3
+ /**
4
+ * Client-side processing for SPA navigations: registers a `useHead` entry pointing
5
+ * at the correct og:image URL for the current route so iOS share sheet, devtools
6
+ * and any other DOM reader see the current page's image instead of the initial
7
+ * page's (#567).
8
+ *
9
+ * Strategy by deployment:
10
+ * - SSR (any flavour): point at the `/_og/r/<path>` resolver. Re-fetches the
11
+ * target page server-side and redirects to whatever og:image SSR emits, so the
12
+ * client URL always matches the server's (including useSeoMeta-injected titles
13
+ * and strict HMAC-signed URLs, without exposing the secret).
14
+ * - Pure SSG (no runtime server): rebuild the URL directly from defaults. If the
15
+ * page relies on useSeoMeta auto-injection the rebuilt URL won't include those
16
+ * values; the resolver can't help without a server.
17
+ */
18
+ export declare function clientProcessOgImageOptions(input: DefineOgImageInput | DefineOgImageInput[], route: RouteLocationNormalizedLoaded, basePath: string): string[];
@@ -0,0 +1,86 @@
1
+ import { componentNames } from "#build/nuxt-og-image/components.mjs";
2
+ import { defu } from "defu";
3
+ import { useHead, useRuntimeConfig } from "nuxt/app";
4
+ import { joinURL, withQuery } from "ufo";
5
+ import { toValue } from "vue";
6
+ import { buildOgImageUrl, generateMeta, separateProps } from "../shared.js";
7
+ function resolveReactiveOptions(input) {
8
+ const options = toValue(input);
9
+ if (options === false)
10
+ return false;
11
+ const opts = options;
12
+ if (opts.width)
13
+ opts.width = toValue(opts.width);
14
+ if (opts.height)
15
+ opts.height = toValue(opts.height);
16
+ if (opts.alt)
17
+ opts.alt = toValue(opts.alt);
18
+ if (opts.url)
19
+ opts.url = toValue(opts.url);
20
+ if (opts.props) {
21
+ opts.props = { ...opts.props };
22
+ for (const key in opts.props) {
23
+ opts.props[key] = toValue(opts.props[key]);
24
+ }
25
+ }
26
+ return opts;
27
+ }
28
+ function buildResolverUrl(baseURL, basePath, ogKey, query) {
29
+ const resolverUrl = `${joinURL("/", baseURL, "_og/r", basePath)}.png`;
30
+ const queryObj = {};
31
+ if (query) {
32
+ for (const [k, v] of Object.entries(query)) {
33
+ if (!k.startsWith("_og_"))
34
+ queryObj[k] = v;
35
+ }
36
+ }
37
+ if (ogKey === "twitter")
38
+ queryObj._og_key = "twitter";
39
+ return Object.keys(queryObj).length ? withQuery(resolverUrl, queryObj) : resolverUrl;
40
+ }
41
+ export function clientProcessOgImageOptions(input, route, basePath) {
42
+ const inputs = Array.isArray(input) ? input : [input];
43
+ const rc = useRuntimeConfig();
44
+ const baseURL = rc.app.baseURL;
45
+ const publicCfg = rc.public?.["nuxt-og-image"] || {};
46
+ const defaults = publicCfg.defaults || {};
47
+ const paths = [];
48
+ for (const rawInput of inputs) {
49
+ const resolved = resolveReactiveOptions(rawInput);
50
+ if (resolved === false)
51
+ continue;
52
+ const validOptions = resolved;
53
+ for (const key in defaults) {
54
+ if (validOptions[key] === void 0)
55
+ validOptions[key] = defaults[key];
56
+ }
57
+ if (route.query)
58
+ validOptions._query = route.query;
59
+ if (validOptions.url) {
60
+ const url = validOptions.url;
61
+ useHead({ meta: generateMeta(url, validOptions) }, { tagPriority: "high" });
62
+ paths.push(url);
63
+ continue;
64
+ }
65
+ if (publicCfg.hasServerRuntime) {
66
+ const ogKey = validOptions.key || "og";
67
+ const finalUrl2 = buildResolverUrl(baseURL, basePath, ogKey, route.query);
68
+ useHead({ meta: generateMeta(finalUrl2, validOptions) }, { tagPriority: 35 });
69
+ paths.push(finalUrl2);
70
+ continue;
71
+ }
72
+ const opts = separateProps(defu(validOptions, defaults));
73
+ const extension = opts.extension || defaults?.extension || "png";
74
+ const urlOpts = { ...opts, _path: basePath };
75
+ const componentName = opts.component || componentNames?.[0]?.pascalName;
76
+ const component = componentNames?.find((c) => c.pascalName === componentName || c.kebabName === componentName);
77
+ if (component?.hash)
78
+ urlOpts._componentHash = component.hash;
79
+ const result = buildOgImageUrl(urlOpts, extension, true, defaults, void 0);
80
+ const resolvedUrl = joinURL("/", baseURL, result.url);
81
+ const finalUrl = opts._query && Object.keys(opts._query).length ? withQuery(resolvedUrl, { _query: opts._query }) : resolvedUrl;
82
+ useHead({ meta: generateMeta(finalUrl, opts) }, { processTemplateParams: true, tagPriority: 35 });
83
+ paths.push(finalUrl);
84
+ }
85
+ return paths;
86
+ }
@@ -1,5 +1,6 @@
1
1
  import { createError, injectHead, useError, useNuxtApp, useRequestEvent, useRoute, useState } from "nuxt/app";
2
2
  import { toValue } from "vue";
3
+ import { clientProcessOgImageOptions } from "../client-utils.js";
3
4
  import { createOgImageMeta, getOgImagePath, setHeadOgImagePrebuilt, useOgImageRuntimeConfig } from "../utils.js";
4
5
  export function defineOgImageRaw(_options = {}) {
5
6
  const nuxtApp = useNuxtApp();
@@ -15,7 +16,9 @@ export function defineOgImageRaw(_options = {}) {
15
16
  throw createError({ message: "You are using a defineOgImage() function in a client-only context. You must call this function within your root component setup, see https://github.com/nuxt-modules/og-image/pull/293." });
16
17
  }
17
18
  }
18
- return [];
19
+ if (nuxtApp.isHydrating)
20
+ return [];
21
+ return clientProcessOgImageOptions(_options, route, basePath);
19
22
  }
20
23
  const paths = [];
21
24
  if (Array.isArray(_options)) {
@@ -1,12 +1,25 @@
1
1
  import { componentNames } from "#build/nuxt-og-image/components.mjs";
2
- import { resolveUnrefHeadInput } from "@unhead/vue";
3
2
  import { defu } from "defu";
4
3
  import { stringify } from "devalue";
5
4
  import { useHead, useRuntimeConfig } from "nuxt/app";
6
5
  import { joinURL, withQuery } from "ufo";
7
- import { toValue } from "vue";
8
- import { logger } from "../logger.js";
6
+ import { isRef, toValue } from "vue";
9
7
  import { buildOgImageUrl, generateMeta, separateProps } from "../shared.js";
8
+ function resolveUnrefHeadInput(input) {
9
+ if (input == null)
10
+ return input;
11
+ if (isRef(input) || typeof input === "function")
12
+ return resolveUnrefHeadInput(toValue(input));
13
+ if (Array.isArray(input))
14
+ return input.map(resolveUnrefHeadInput);
15
+ if (typeof input === "object") {
16
+ const result = {};
17
+ for (const k in input)
18
+ result[k] = resolveUnrefHeadInput(input[k]);
19
+ return result;
20
+ }
21
+ return input;
22
+ }
10
23
  const RE_RENDERER_SUFFIX = /(Satori|Browser|Takumi)$/;
11
24
  function extractHeadSeoProps(head) {
12
25
  const result = {};
@@ -29,7 +42,7 @@ function extractHeadSeoProps(head) {
29
42
  }
30
43
  } catch (e) {
31
44
  if (import.meta.dev)
32
- logger.warn("Failed to extract SEO props from head entries", e);
45
+ console.warn("[nuxt-og-image] Failed to extract SEO props from head entries", e);
33
46
  }
34
47
  return result;
35
48
  }
@@ -134,7 +147,7 @@ export function createOgImageMeta(src, input, ssrContext, pagePath, head) {
134
147
  payload.component = resolveComponentName(payload.component);
135
148
  } else if (payload.component) {
136
149
  if (import.meta.dev)
137
- logger.warn(`defineOgImage() received a non-string component value (${typeof payload.component}). Pass the component name as a plain string.`);
150
+ console.warn(`[nuxt-og-image] defineOgImage() received a non-string component value (${typeof payload.component}). Pass the component name as a plain string.`);
138
151
  delete payload.component;
139
152
  }
140
153
  payload.key = key;
@@ -218,11 +231,9 @@ export function getOgImagePath(_pagePath, _options) {
218
231
  }
219
232
  export function useOgImageRuntimeConfig() {
220
233
  const c = useRuntimeConfig();
221
- return {
222
- defaults: {},
223
- ...c["nuxt-og-image"],
224
- app: {
225
- baseURL: c.app.baseURL
226
- }
227
- };
234
+ const serverCfg = c["nuxt-og-image"] || {};
235
+ const publicCfg = c.public?.["nuxt-og-image"] || {};
236
+ const merged = { defaults: {}, ...publicCfg, ...serverCfg };
237
+ merged.app = { baseURL: c.app.baseURL };
238
+ return merged;
228
239
  }
@@ -1,6 +1,5 @@
1
1
  import resolvedFonts from "#og-image/fonts";
2
- import { createHeadCore } from "@unhead/vue";
3
- import { renderSSRHead } from "@unhead/vue/server";
2
+ import { createHead, renderSSRHead } from "@unhead/vue/server";
4
3
  import { createError } from "h3";
5
4
  import { fetchIsland } from "../../util/kit.js";
6
5
  import { applyEmojis } from "../core/transforms/emojis/index.js";
@@ -15,7 +14,7 @@ export async function html(ctx) {
15
14
  });
16
15
  }
17
16
  const island = await fetchIsland(ctx.e, ctx.options.component, typeof ctx.options.props !== "undefined" ? ctx.options.props : ctx.options);
18
- const head = createHeadCore();
17
+ const head = createHead();
19
18
  head.push(island.head);
20
19
  let defaultFontFamily = "sans-serif";
21
20
  const firstFont = fonts[0];
@@ -80,7 +80,7 @@ export async function useOgImageBufferCache(ctx, options) {
80
80
  "Vary": "accept-encoding, host",
81
81
  "etag": `W/"${digest(value)}"`,
82
82
  "last-modified": (/* @__PURE__ */ new Date()).toUTCString(),
83
- "cache-control": `public, max-age=${maxAge}, s-maxage=${maxAge}, stale-while-revalidate=${maxAge}, stale-if-error=${maxAge}`
83
+ "cache-control": `public, max-age=${maxAge}, s-maxage=${maxAge}, immutable`
84
84
  };
85
85
  setHeaders(ctx.e, headers);
86
86
  await cache.setItem(key, {
@@ -4742,13 +4742,21 @@ ${familyInfo}`);
4742
4742
  });
4743
4743
  if (!nuxt.options.dev) {
4744
4744
  nuxt.options.routeRules = nuxt.options.routeRules || {};
4745
- if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
4745
+ const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4746
+ if (ttl > 0) {
4747
+ const dynamicCacheControl = `public, max-age=${ttl}, s-maxage=${ttl}, immutable`;
4746
4748
  const ogDynamicRule = nuxt.options.routeRules["/_og/d/**"];
4747
4749
  if (!ogDynamicRule?.swr && !ogDynamicRule?.isr && !ogDynamicRule?.cache && !ogDynamicRule?.headers) {
4748
- const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4749
4750
  nuxt.options.routeRules["/_og/d/**"] = defu(
4750
4751
  nuxt.options.routeRules["/_og/d/**"] || {},
4751
- { swr: ttl }
4752
+ { headers: { "cache-control": dynamicCacheControl } }
4753
+ );
4754
+ }
4755
+ const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
4756
+ if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
4757
+ nuxt.options.routeRules["/_og/r/**"] = defu(
4758
+ nuxt.options.routeRules["/_og/r/**"] || {},
4759
+ { headers: { "cache-control": dynamicCacheControl } }
4752
4760
  );
4753
4761
  }
4754
4762
  }
@@ -4759,20 +4767,8 @@ ${familyInfo}`);
4759
4767
  { headers: { "cache-control": "public, max-age=31536000, immutable" } }
4760
4768
  );
4761
4769
  }
4762
- if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
4763
- const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
4764
- if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
4765
- const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4766
- nuxt.options.routeRules["/_og/r/**"] = defu(
4767
- nuxt.options.routeRules["/_og/r/**"] || {},
4768
- { swr: ttl }
4769
- );
4770
- }
4771
- }
4772
- }
4773
- if (!nuxt.options.dev) {
4774
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
4775
4770
  }
4771
+ nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
4776
4772
  [
4777
4773
  "defineOgImage",
4778
4774
  "defineOgImageComponent",
@@ -4789,11 +4785,6 @@ ${familyInfo}`);
4789
4785
  name,
4790
4786
  from: resolve(`./runtime/app/composables/${name}`)
4791
4787
  });
4792
- if (!nuxt.options.dev) {
4793
- nuxt.options.optimization.treeShake.composables.client = nuxt.options.optimization.treeShake.composables.client || {};
4794
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] || [];
4795
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(name);
4796
- }
4797
4788
  });
4798
4789
  addImports({
4799
4790
  name: "getOgImagePath",
@@ -5244,6 +5235,23 @@ export const rootDir = ${JSON.stringify(nuxt.options.rootDir)}`;
5244
5235
  }
5245
5236
  nuxt.hooks.callHook("nuxt-og-image:runtime-config", runtimeConfig);
5246
5237
  nuxt.options.runtimeConfig["nuxt-og-image"] = runtimeConfig;
5238
+ nuxt.options.runtimeConfig.public = {
5239
+ ...nuxt.options.runtimeConfig.public,
5240
+ "nuxt-og-image": {
5241
+ defaults: runtimeConfig.defaults,
5242
+ hasServerRuntime: !nuxt.options._generate && !nuxt.options.nitro?.static
5243
+ }
5244
+ };
5245
+ });
5246
+ nuxt.hook("nitro:init", (nitro) => {
5247
+ const pub = nuxt.options.runtimeConfig.public["nuxt-og-image"] || {};
5248
+ nuxt.options.runtimeConfig.public = {
5249
+ ...nuxt.options.runtimeConfig.public,
5250
+ "nuxt-og-image": {
5251
+ ...pub,
5252
+ hasServerRuntime: !nitro.options.static && !nuxt.options._generate
5253
+ }
5254
+ };
5247
5255
  });
5248
5256
  const getDetectedRenderers = () => ogImageComponentCtx.detectedRenderers;
5249
5257
  if (nuxt.options.dev) {
@@ -4316,7 +4316,7 @@ const module$1 = kit.defineNuxtModule({
4316
4316
  await onUpgrade(nuxt, options, previousVersion);
4317
4317
  },
4318
4318
  async setup(config, nuxt) {
4319
- const _resolver = kit.createResolver((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('shared/nuxt-og-image.BRq8WvnV.cjs', document.baseURI).href)));
4319
+ const _resolver = kit.createResolver((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('shared/nuxt-og-image.C2oXAHiT.cjs', document.baseURI).href)));
4320
4320
  const fixSharedPath = (p) => {
4321
4321
  if (p.includes("/shared/runtime/"))
4322
4322
  return p.replace("/shared/runtime/", "/runtime/");
@@ -4762,13 +4762,21 @@ ${familyInfo}`);
4762
4762
  });
4763
4763
  if (!nuxt.options.dev) {
4764
4764
  nuxt.options.routeRules = nuxt.options.routeRules || {};
4765
- if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
4765
+ const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4766
+ if (ttl > 0) {
4767
+ const dynamicCacheControl = `public, max-age=${ttl}, s-maxage=${ttl}, immutable`;
4766
4768
  const ogDynamicRule = nuxt.options.routeRules["/_og/d/**"];
4767
4769
  if (!ogDynamicRule?.swr && !ogDynamicRule?.isr && !ogDynamicRule?.cache && !ogDynamicRule?.headers) {
4768
- const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4769
4770
  nuxt.options.routeRules["/_og/d/**"] = defu.defu(
4770
4771
  nuxt.options.routeRules["/_og/d/**"] || {},
4771
- { swr: ttl }
4772
+ { headers: { "cache-control": dynamicCacheControl } }
4773
+ );
4774
+ }
4775
+ const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
4776
+ if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
4777
+ nuxt.options.routeRules["/_og/r/**"] = defu.defu(
4778
+ nuxt.options.routeRules["/_og/r/**"] || {},
4779
+ { headers: { "cache-control": dynamicCacheControl } }
4772
4780
  );
4773
4781
  }
4774
4782
  }
@@ -4779,20 +4787,8 @@ ${familyInfo}`);
4779
4787
  { headers: { "cache-control": "public, max-age=31536000, immutable" } }
4780
4788
  );
4781
4789
  }
4782
- if (config.runtimeCacheStorage !== false && !nuxt.options.test) {
4783
- const ogResolveRule = nuxt.options.routeRules["/_og/r/**"];
4784
- if (!ogResolveRule?.swr && !ogResolveRule?.isr && !ogResolveRule?.cache && !ogResolveRule?.headers) {
4785
- const ttl = config.cacheMaxAgeSeconds ?? config.defaults?.cacheMaxAgeSeconds ?? 60 * 60 * 24 * 3;
4786
- nuxt.options.routeRules["/_og/r/**"] = defu.defu(
4787
- nuxt.options.routeRules["/_og/r/**"] || {},
4788
- { swr: ttl }
4789
- );
4790
- }
4791
- }
4792
- }
4793
- if (!nuxt.options.dev) {
4794
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
4795
4790
  }
4791
+ nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
4796
4792
  [
4797
4793
  "defineOgImage",
4798
4794
  "defineOgImageComponent",
@@ -4809,11 +4805,6 @@ ${familyInfo}`);
4809
4805
  name,
4810
4806
  from: resolve(`./runtime/app/composables/${name}`)
4811
4807
  });
4812
- if (!nuxt.options.dev) {
4813
- nuxt.options.optimization.treeShake.composables.client = nuxt.options.optimization.treeShake.composables.client || {};
4814
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] || [];
4815
- nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(name);
4816
- }
4817
4808
  });
4818
4809
  kit.addImports({
4819
4810
  name: "getOgImagePath",
@@ -5264,6 +5255,23 @@ export const rootDir = ${JSON.stringify(nuxt.options.rootDir)}`;
5264
5255
  }
5265
5256
  nuxt.hooks.callHook("nuxt-og-image:runtime-config", runtimeConfig);
5266
5257
  nuxt.options.runtimeConfig["nuxt-og-image"] = runtimeConfig;
5258
+ nuxt.options.runtimeConfig.public = {
5259
+ ...nuxt.options.runtimeConfig.public,
5260
+ "nuxt-og-image": {
5261
+ defaults: runtimeConfig.defaults,
5262
+ hasServerRuntime: !nuxt.options._generate && !nuxt.options.nitro?.static
5263
+ }
5264
+ };
5265
+ });
5266
+ nuxt.hook("nitro:init", (nitro) => {
5267
+ const pub = nuxt.options.runtimeConfig.public["nuxt-og-image"] || {};
5268
+ nuxt.options.runtimeConfig.public = {
5269
+ ...nuxt.options.runtimeConfig.public,
5270
+ "nuxt-og-image": {
5271
+ ...pub,
5272
+ hasServerRuntime: !nitro.options.static && !nuxt.options._generate
5273
+ }
5274
+ };
5267
5275
  });
5268
5276
  const getDetectedRenderers = () => ogImageComponentCtx.detectedRenderers;
5269
5277
  if (nuxt.options.dev) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-og-image",
3
3
  "type": "module",
4
- "version": "6.4.0",
4
+ "version": "6.4.2",
5
5
  "description": "Enlightened OG Image generation for Nuxt.",
6
6
  "author": {
7
7
  "website": "https://harlanzw.com",
@@ -52,7 +52,7 @@
52
52
  "@resvg/resvg-wasm": "^2.6.0",
53
53
  "@takumi-rs/core": "^1.0.0-beta.3",
54
54
  "@takumi-rs/wasm": "^1.0.0-beta.3",
55
- "@unhead/vue": "^2.0.5",
55
+ "@unhead/vue": "^2.0.5 || ^3.0.0",
56
56
  "fontless": "^0.2.0",
57
57
  "playwright-core": "^1.50.0",
58
58
  "satori": ">=0.19.2",
@@ -134,7 +134,7 @@
134
134
  "@iconify-json/ri": "^1.2.10",
135
135
  "@iconify-json/tabler": "^1.2.33",
136
136
  "@img/sharp-linux-x64": "^0.34.5",
137
- "@nuxt/content": "^3.12.0",
137
+ "@nuxt/content": "^3.13.0",
138
138
  "@nuxt/devtools": "4.0.0-alpha.4",
139
139
  "@nuxt/devtools-kit": "4.0.0-alpha.4",
140
140
  "@nuxt/fonts": "^0.14.0",
@@ -152,8 +152,8 @@
152
152
  "@shikijs/langs": "^4.0.2",
153
153
  "@shikijs/themes": "^4.0.2",
154
154
  "@tailwindcss/vite": "^4.2.2",
155
- "@takumi-rs/core": "^1.0.7",
156
- "@takumi-rs/wasm": "^1.0.7",
155
+ "@takumi-rs/core": "^1.0.9",
156
+ "@takumi-rs/wasm": "^1.0.9",
157
157
  "@unocss/nuxt": "^66.6.8",
158
158
  "@vitejs/plugin-vue": "^6.0.6",
159
159
  "@vueuse/nuxt": "^14.2.1",
@@ -164,7 +164,7 @@
164
164
  "fontless": "^0.2.1",
165
165
  "get-image-colors": "^4.0.1",
166
166
  "globby": "^16.2.0",
167
- "happy-dom": "^20.8.9",
167
+ "happy-dom": "^20.9.0",
168
168
  "jest-image-snapshot": "^6.5.2",
169
169
  "lightningcss": "^1.32.0",
170
170
  "nuxt": "^4.4.2",
@@ -181,7 +181,7 @@
181
181
  "unocss": "^66.6.8",
182
182
  "vitest": "^4.1.4",
183
183
  "vue-tsc": "^3.2.6",
184
- "wrangler": "^4.82.1",
184
+ "wrangler": "^4.82.2",
185
185
  "yoga-wasm-web": "^0.3.3"
186
186
  },
187
187
  "scripts": {
@@ -1 +0,0 @@
1
- .section-block[data-v-0af7c2b0]{background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);transition:border-color .2s;overflow:hidden}.section-block[data-v-0af7c2b0]:hover{border-color:var(--color-neutral-300)}.dark .section-block[data-v-0af7c2b0]:hover{border-color:var(--color-neutral-700)}.section-header[data-v-0af7c2b0]{cursor:pointer;-webkit-user-select:none;user-select:none;padding:.875rem 1rem;list-style:none;transition:background .15s}.section-header[data-v-0af7c2b0]::-webkit-details-marker{display:none}.section-header[data-v-0af7c2b0]:hover{background:var(--color-surface-sunken)}details[open] .section-header[data-v-0af7c2b0]{border-bottom:1px solid var(--color-border)}.section-title[data-v-0af7c2b0]{align-items:center;gap:.625rem;transition:opacity .15s;display:flex}.section-icon[data-v-0af7c2b0]{color:var(--color-text-muted);flex-shrink:0;font-size:1.125rem}.section-label[data-v-0af7c2b0]{color:var(--color-text);font-size:.875rem;font-weight:600}.section-description[data-v-0af7c2b0]{color:var(--color-text-muted);margin-top:.125rem;font-size:.75rem}.chevron[data-v-0af7c2b0]{color:var(--color-text-subtle);flex-shrink:0;font-size:.875rem;transition:transform .2s cubic-bezier(.22,1,.36,1)}details[open] .chevron[data-v-0af7c2b0]{color:var(--color-text-muted);transform:rotate(180deg)}.section-content[data-v-0af7c2b0]{background:var(--color-surface-sunken);flex-direction:column;gap:.75rem;padding:1rem;display:flex}
@@ -1 +0,0 @@
1
- .devtools-snippet[data-v-b3d419fb]{margin:.5rem .75rem}.devtools-snippet-header[data-v-b3d419fb]{justify-content:space-between;align-items:center;margin-bottom:.375rem;display:flex}.devtools-snippet-label[data-v-b3d419fb]{color:var(--color-text-muted);font-family:var(--font-mono);letter-spacing:-.01em;font-size:.6875rem;font-weight:500}.devtools-snippet-block[data-v-b3d419fb]{border-radius:var(--radius-sm);max-height:300px;font-size:.6875rem;line-height:1.6;overflow-y:auto;padding:.5rem .625rem!important}
@@ -1 +0,0 @@
1
- {"id":"966cadeb-de3b-4c08-b33e-ccf471f25ca9","timestamp":1776092889087,"prerendered":[]}
@@ -1 +0,0 @@
1
- .devtools-alert[data-v-301cc3ed]{border-bottom:1px solid var(--color-border);align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.8125rem;display:flex}.devtools-alert-icon[data-v-301cc3ed]{flex-shrink:0}.devtools-alert-content[data-v-301cc3ed]{flex:1;min-width:0}.devtools-alert-action[data-v-301cc3ed]{flex-shrink:0;margin-left:auto}.devtools-alert-info[data-v-301cc3ed]{color:oklch(55% .12 230);background:oklch(85% .1 230/.1);border-bottom-color:oklch(75% .1 230/.2)}.dark .devtools-alert-info[data-v-301cc3ed]{color:oklch(80% .1 230);background:oklch(45% .1 230/.15)}.devtools-alert-error[data-v-301cc3ed]{color:oklch(52% .18 25);background:oklch(65% .18 25/.1);border-bottom-color:oklch(55% .15 25/.25)}.dark .devtools-alert-error[data-v-301cc3ed]{color:oklch(75% .14 25);background:oklch(40% .14 25/.18)}.devtools-alert-warning[data-v-301cc3ed]{color:oklch(55% .15 85);background:oklch(85% .12 85/.1);border-bottom-color:oklch(75% .12 85/.2)}.dark .devtools-alert-warning[data-v-301cc3ed]{color:oklch(80% .12 85);background:oklch(45% .12 85/.15)}.devtools-alert-success[data-v-301cc3ed]{color:oklch(50% .15 145);background:oklch(75% .15 145/.12);border-bottom-color:oklch(65% .12 145/.2)}.dark .devtools-alert-success[data-v-301cc3ed]{color:oklch(75% .18 145);background:oklch(50% .15 145/.15)}.devtools-alert-production[data-v-301cc3ed]{color:oklch(45% .15 145);background:oklch(85% .12 145/.1);border-bottom-color:oklch(75% .12 145/.2)}.dark .devtools-alert-production[data-v-301cc3ed]{color:oklch(75% .12 145);background:oklch(35% .08 145/.15)}