@nuxt/scripts 1.3.5 → 1.3.7

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.
@@ -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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487961,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802286,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487961,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802286,false]</script></body></html>
@@ -1 +1 @@
1
- {"id":"173480db-0944-415b-962d-d619682f0042","timestamp":1786893482052}
1
+ {"id":"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7","timestamp":1787317796267}
@@ -0,0 +1 @@
1
+ {"id":"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7","timestamp":1787317796267,"prerendered":[]}
@@ -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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487959,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802285,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487960,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802286,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487961,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802286,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"173480db-0944-415b-962d-d619682f0042",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1786893487960,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-scripts/_nuxt/Bf2Kt1P0.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CYUdJFoE.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B551Pnuh.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BKdLzFmX.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CH5oUfNi.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CP7c-Js6.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DK3Fl9T5.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C_v3_O0R.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CC0GKROJ.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B8_EBdhg.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CxN78VhB.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BDNMzG2s.js"><script type="module" src="/__nuxt-scripts/_nuxt/Bf2Kt1P0.js" crossorigin></script><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DMbpbO54.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/qhed-kSA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BgS3c2Ky.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/VbXTXTou.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BZCL-v6S.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.Bq2JQbJs.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DTP8MRtW.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.5E_FOzlc.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/KxC4Q3ev.js"><script>"use strict";(()=>{const o=window,e=document.documentElement,c=["dark","light"],s=getStorageValue("localStorage","nuxt-color-mode")||"system";let r=s==="system"?f():s;const l=e.getAttribute("data-color-mode-forced");l&&(r=l),i(r),o["__NUXT_COLOR_MODE__"]={preference:s,value:r,getColorScheme:f,addColorScheme:i,removeColorScheme:d};function i(t){const a=""+t+"",n="";e.classList?e.classList.add(a):e.className+=" "+a,n&&e.setAttribute("data-"+n,t)}function d(t){const a=""+t+"",n="";e.classList?e.classList.remove(a):e.className=e.className.replace(new RegExp(a,"g"),""),n&&e.removeAttribute("data-"+n)}function u(t){return o.matchMedia("(prefers-color-scheme"+t+")")}function f(){if(o.matchMedia&&u("").media!=="not all"){for(const t of c)if(u(":"+t).matches)return t}return"light"}})();function getStorageValue(o,e){switch(o){case"localStorage":try{return window.localStorage.getItem(e)}catch{return null}case"sessionStorage":try{return window.sessionStorage.getItem(e)}catch{return null}case"cookie":try{return getCookie(e)}catch{return null}default:return null}}function getCookie(o){const c=("; "+window.document.cookie).split("; "+o+"=");if(c.length===2){const s=c.pop();return s?s.split(";").shift():null}}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"3c4ca254-ebb3-4ed7-9255-ef9aa26e9bc7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1787317802286,false]</script></body></html>
package/dist/module.d.mts CHANGED
@@ -32,6 +32,28 @@ interface ResolvedProxySecret {
32
32
  */
33
33
  declare function resolveProxySecret(rootDir: string, isDev: boolean, configSecret?: string, autoGenerate?: boolean): Promise<ResolvedProxySecret | undefined>;
34
34
  declare function isProxyDisabled(registryKey: string, registry?: NuxtConfigScriptRegistry, runtimeConfig?: Record<string, any>): boolean;
35
+ /**
36
+ * Nitro presets with no server runtime: `/_scripts/p/**` cannot be served, so
37
+ * proxy URLs written into bundled scripts would 404/405 in production.
38
+ * Nitro accepts each name in hyphen, underscore, and camelCase form.
39
+ */
40
+ declare const STATIC_PROXY_PRESETS: string[];
41
+ /**
42
+ * Normalize a preset id the way Nitro resolves it: camelCase and underscore
43
+ * spellings (`githubPages`, `github_pages`) map to the hyphen form (`github-pages`).
44
+ */
45
+ declare function normalizeNitroPreset(preset: string): string;
46
+ /**
47
+ * Whether the build targets static output with no Nitro server runtime.
48
+ * `nuxi generate` and `nuxt build --prerender` set `_generate` and `nitro.static`
49
+ * through CLI overrides; static presets arrive via `nitro.preset`, `NITRO_PRESET`,
50
+ * or `SERVER_PRESET` in any of Nitro's accepted spellings.
51
+ */
52
+ declare function isStaticProxyTarget(options: {
53
+ generate?: boolean;
54
+ nitroStatic?: boolean;
55
+ preset?: string;
56
+ }): boolean;
35
57
  declare function applyAutoInject(registry: NuxtConfigScriptRegistry, runtimeConfig: Record<string, any>, proxyPrefix: string, registryKey: string, autoInject: ResolvedProxyAutoInject, alias?: ProxyAliasConfig): void;
36
58
  declare function resolveConfiguredProxyDomains(config: Record<string, any> | undefined, proxyConfig?: Pick<ProxyConfig, 'autoInject' | 'configDomainFields'>): string[];
37
59
  /**
@@ -220,5 +242,5 @@ interface ModuleHooks {
220
242
  }
221
243
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
222
244
 
223
- export { applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
245
+ export { STATIC_PROXY_PRESETS, applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, isStaticProxyTarget, normalizeNitroPreset, resolveConfiguredProxyDomains, resolveProxySecret };
224
246
  export type { ModuleHooks, ModuleOptions, ResolvedProxySecret };
package/dist/module.d.ts CHANGED
@@ -32,6 +32,28 @@ interface ResolvedProxySecret {
32
32
  */
33
33
  declare function resolveProxySecret(rootDir: string, isDev: boolean, configSecret?: string, autoGenerate?: boolean): Promise<ResolvedProxySecret | undefined>;
34
34
  declare function isProxyDisabled(registryKey: string, registry?: NuxtConfigScriptRegistry, runtimeConfig?: Record<string, any>): boolean;
35
+ /**
36
+ * Nitro presets with no server runtime: `/_scripts/p/**` cannot be served, so
37
+ * proxy URLs written into bundled scripts would 404/405 in production.
38
+ * Nitro accepts each name in hyphen, underscore, and camelCase form.
39
+ */
40
+ declare const STATIC_PROXY_PRESETS: string[];
41
+ /**
42
+ * Normalize a preset id the way Nitro resolves it: camelCase and underscore
43
+ * spellings (`githubPages`, `github_pages`) map to the hyphen form (`github-pages`).
44
+ */
45
+ declare function normalizeNitroPreset(preset: string): string;
46
+ /**
47
+ * Whether the build targets static output with no Nitro server runtime.
48
+ * `nuxi generate` and `nuxt build --prerender` set `_generate` and `nitro.static`
49
+ * through CLI overrides; static presets arrive via `nitro.preset`, `NITRO_PRESET`,
50
+ * or `SERVER_PRESET` in any of Nitro's accepted spellings.
51
+ */
52
+ declare function isStaticProxyTarget(options: {
53
+ generate?: boolean;
54
+ nitroStatic?: boolean;
55
+ preset?: string;
56
+ }): boolean;
35
57
  declare function applyAutoInject(registry: NuxtConfigScriptRegistry, runtimeConfig: Record<string, any>, proxyPrefix: string, registryKey: string, autoInject: ResolvedProxyAutoInject, alias?: ProxyAliasConfig): void;
36
58
  declare function resolveConfiguredProxyDomains(config: Record<string, any> | undefined, proxyConfig?: Pick<ProxyConfig, 'autoInject' | 'configDomainFields'>): string[];
37
59
  /**
@@ -220,5 +242,5 @@ interface ModuleHooks {
220
242
  }
221
243
  declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
222
244
 
223
- export { applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
245
+ export { STATIC_PROXY_PRESETS, applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, isStaticProxyTarget, normalizeNitroPreset, resolveConfiguredProxyDomains, resolveProxySecret };
224
246
  export type { ModuleHooks, ModuleOptions, ResolvedProxySecret };
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16"
6
6
  },
7
- "version": "1.3.5",
7
+ "version": "1.3.7",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -2041,6 +2041,22 @@ function isProxyDisabled(registryKey, registry2, runtimeConfig) {
2041
2041
  }
2042
2042
  return false;
2043
2043
  }
2044
+ const STATIC_PROXY_PRESETS = [
2045
+ "static",
2046
+ "github-pages",
2047
+ "gitlab-pages",
2048
+ "cloudflare-pages-static",
2049
+ "netlify-static",
2050
+ "vercel-static",
2051
+ "zeabur-static",
2052
+ "zerops-static"
2053
+ ];
2054
+ function normalizeNitroPreset(preset) {
2055
+ return preset.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`).replace(/_/g, "-");
2056
+ }
2057
+ function isStaticProxyTarget(options) {
2058
+ return !!options.generate || options.nitroStatic === true || STATIC_PROXY_PRESETS.includes(normalizeNitroPreset(options.preset || ""));
2059
+ }
2044
2060
  function applyAutoInject(registry2, runtimeConfig, proxyPrefix, registryKey, autoInject, alias) {
2045
2061
  if (isProxyDisabled(registryKey, registry2, runtimeConfig))
2046
2062
  return;
@@ -2243,7 +2259,16 @@ const module$1 = defineNuxtModule({
2243
2259
  const assetsPrefix = `${scriptsBase}/assets`;
2244
2260
  const proxyConfigs = {};
2245
2261
  const proxyHandlerPath = await resolvePath("./runtime/server/proxy-handler");
2246
- addServerHandler({ route: `${proxyPrefix}/**`, handler: proxyHandlerPath });
2262
+ const staticProxyTarget = isStaticProxyTarget({
2263
+ // `_generate` arrives untyped through the nuxi generate CLI override. Nitro's
2264
+ // preset option already merges CLI args, env, and nuxt.config by module setup.
2265
+ generate: nuxt.options._generate,
2266
+ nitroStatic: nuxt.options.nitro?.static,
2267
+ preset: nuxt.options.nitro?.preset || process.env.NITRO_PRESET || process.env.SERVER_PRESET
2268
+ });
2269
+ if (!staticProxyTarget) {
2270
+ addServerHandler({ route: `${proxyPrefix}/**`, handler: proxyHandlerPath });
2271
+ }
2247
2272
  if (nuxt.options.dev && config.registry?.vercelAnalytics) {
2248
2273
  addServerHandler({
2249
2274
  route: "/_vercel/insights/**",
@@ -2393,6 +2418,7 @@ const module$1 = defineNuxtModule({
2393
2418
  }
2394
2419
  const partytownScripts = /* @__PURE__ */ new Set();
2395
2420
  let anyNeedsProxy = false;
2421
+ const proxyConfiguredKeys = [];
2396
2422
  const registryKeys = Object.keys(config.registry || {});
2397
2423
  for (const key of registryKeys) {
2398
2424
  const script = scriptByKey.get(key);
@@ -2403,8 +2429,10 @@ const module$1 = defineNuxtModule({
2403
2429
  const inputOptions = entry?.[0] || {};
2404
2430
  const mergedOverrides = { ...inputOptions, ...scriptOptions };
2405
2431
  const resolved = resolveCapabilities(script, mergedOverrides);
2406
- if (resolved.proxy)
2432
+ if (resolved.proxy) {
2407
2433
  anyNeedsProxy = true;
2434
+ proxyConfiguredKeys.push(key);
2435
+ }
2408
2436
  if (resolved.partytown) {
2409
2437
  partytownScripts.add(key);
2410
2438
  const forwards = getPartytownForwards(script);
@@ -2420,7 +2448,7 @@ const module$1 = defineNuxtModule({
2420
2448
  }
2421
2449
  const proxyAlias = config.proxy?.alias;
2422
2450
  let domainAliases = {};
2423
- if (anyNeedsProxy) {
2451
+ if (anyNeedsProxy && !staticProxyTarget) {
2424
2452
  const builtConfigs = buildProxyConfigsFromRegistry(registryScripts, scriptByKey);
2425
2453
  Object.assign(proxyConfigs, builtConfigs);
2426
2454
  const domainPrivacy = {};
@@ -2505,15 +2533,6 @@ They will load directly from third-party servers.`
2505
2533
  if (totalDomains > 0 && nuxt.options.dev) {
2506
2534
  logger.success(`Proxy mode enabled for ${registryKeys.length} script(s), ${totalDomains} domain(s) proxied (privacy: ${privacyLabel})`);
2507
2535
  }
2508
- const proxyStaticPresets = ["static", "github-pages", "cloudflare-pages-static", "netlify-static", "azure-static", "firebase-static"];
2509
- const proxyPreset = process.env.NITRO_PRESET || "";
2510
- if (proxyStaticPresets.includes(proxyPreset)) {
2511
- logger.warn(
2512
- `Proxy collection endpoints require a server runtime (detected: ${proxyPreset || "static"}).
2513
- Scripts will be bundled, but collection requests will not be proxied and URL signing will be unavailable.
2514
- Options: configure platform rewrites, switch to server-rendered mode, or disable with proxy: false.`
2515
- );
2516
- }
2517
2536
  if (nuxt.options.dev) {
2518
2537
  nuxt.options.runtimeConfig.public["nuxt-scripts-devtools"] = buildDevtoolsData(proxyPrefix, privacyLabel, devtoolsScripts, aliasToDomain);
2519
2538
  }
@@ -2527,6 +2546,12 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
2527
2546
  logger.warn("[partytown] Custom resolveUrl already set. Add proxy rules to your resolveUrl manually.");
2528
2547
  }
2529
2548
  }
2549
+ } else if (anyNeedsProxy) {
2550
+ logger.warn(
2551
+ `[nuxt-scripts] Static output detected (nuxi generate or a static Nitro preset); the scripts proxy requires a server runtime.
2552
+ Proxying, its privacy anonymization, and proxy URL signing are disabled for: ${proxyConfiguredKeys.join(", ")}. Scripts still bundle, and their requests go directly to their third-party origins.
2553
+ Deploy the Nuxt server output (nuxt build) to enable proxying.`
2554
+ );
2530
2555
  }
2531
2556
  const moduleInstallPromises = /* @__PURE__ */ new Map();
2532
2557
  addBuildPlugin(NuxtScriptsCheckScripts(), {
@@ -2596,17 +2621,14 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
2596
2621
  { endpoints: enabledEndpoints },
2597
2622
  nuxt.options.runtimeConfig.public["nuxt-scripts"]
2598
2623
  );
2599
- const staticPresets = ["static", "github-pages", "cloudflare-pages-static", "netlify-static", "azure-static", "firebase-static"];
2600
- const nitroPreset = process.env.NITRO_PRESET || "";
2601
- const isStaticTarget = staticPresets.includes(nitroPreset);
2602
2624
  const isSpa = nuxt.options.ssr === false;
2603
2625
  if (config.security === false) {
2604
2626
  if (anyHandlerRequiresSigning && !nuxt.options.dev) {
2605
2627
  logger.info("[security] Proxy security disabled via `security: false`. Proxy endpoints will pass requests through without signature verification.");
2606
2628
  }
2607
- } else if (anyHandlerRequiresSigning && (isSpa || isStaticTarget)) {
2629
+ } else if (anyHandlerRequiresSigning && (isSpa || staticProxyTarget)) {
2608
2630
  logger.warn(
2609
- `[security] URL signing requires a server runtime${isStaticTarget ? ` (detected preset: ${nitroPreset})` : " (ssr: false)"}.
2631
+ `[security] URL signing requires a server runtime${staticProxyTarget ? " (static output)" : " (ssr: false)"}.
2610
2632
  Proxy endpoints will work without signature verification.
2611
2633
  To enable signing, deploy with a server-rendered target or configure platform-level rewrites.`
2612
2634
  );
@@ -2641,4 +2663,4 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
2641
2663
  }
2642
2664
  });
2643
2665
 
2644
- export { applyAutoInject, module$1 as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
2666
+ export { STATIC_PROXY_PRESETS, applyAutoInject, module$1 as default, findMissingRequiredFields, isProxyDisabled, isStaticProxyTarget, normalizeNitroPreset, resolveConfiguredProxyDomains, resolveProxySecret };
@@ -62,9 +62,17 @@ export interface GoogleTagManagerApi {
62
62
  }
63
63
  /**
64
64
  * Enhanced window type with GTM
65
+ *
66
+ * `dataLayer` is deliberately NOT declared globally. Its name is configurable through the
67
+ * `l` / `dataLayer` options, so `window.dataLayer` is not guaranteed to exist, and declaring it
68
+ * here makes this package irreconcilable with any other package that declares `Window.dataLayer`
69
+ * (for example `@gtm-support/core`, used by `@gtm-support/vue-gtm`): the two declarations cannot
70
+ * merge, so consumers of both get an unsuppressable TS2430 at every one of their own `Window`
71
+ * augmentations. Read it through the typed proxy returned by `useScriptGoogleTagManager()`
72
+ * instead, which is also the only access path that respects a custom dataLayer name.
65
73
  */
66
74
  declare global {
67
- interface Window extends GoogleTagManagerApi {
75
+ interface Window extends Pick<GoogleTagManagerApi, 'google_tag_manager'> {
68
76
  }
69
77
  }
70
78
  export { GoogleTagManagerOptions };
@@ -57,6 +57,8 @@ export interface CachedBinaryResult extends CachedBinaryResponse {
57
57
  body: Buffer;
58
58
  status: number;
59
59
  }
60
+ /** How long a failed upstream fetch is replayed before the upstream is tried again. */
61
+ export declare const UPSTREAM_FAILURE_MAX_AGE = 60;
60
62
  export declare function isSafeHttpsUrl(url: URL): boolean;
61
63
  /**
62
64
  * Cache upstream binary/image fetches. Returns a helper that restores the
@@ -6,6 +6,10 @@ import { NUXT_SCRIPTS_CACHE_BASE } from "./cache-config.js";
6
6
  import { closePublicNetworkDispatcher, createPublicNetworkDispatcher, isPublicNetworkHostname } from "./network-host.js";
7
7
  const DEFAULT_BINARY_MAX_RESPONSE_BYTES = 10 * 1024 * 1024;
8
8
  const DEFAULT_JSON_MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
9
+ const TIMEOUT_ERROR_NAMES = /* @__PURE__ */ new Set(["AbortError", "BodyTimeoutError", "HeadersTimeoutError", "TimeoutError"]);
10
+ const DEFAULT_UPSTREAM_TIMEOUT_MS = 1e4;
11
+ const MAX_TRACKED_FAILURES = 512;
12
+ export const UPSTREAM_FAILURE_MAX_AGE = 60;
9
13
  export function isSafeHttpsUrl(url) {
10
14
  return url.protocol === "https:" && !url.username && !url.password && (!url.port || url.port === "443") && isPublicNetworkHostname(url.hostname);
11
15
  }
@@ -15,6 +19,51 @@ function upstreamError(message, statusCode, statusMessage, cause) {
15
19
  statusMessage
16
20
  });
17
21
  }
22
+ function asUpstreamError(error) {
23
+ if (typeof error?.statusCode === "number")
24
+ return error;
25
+ const timedOut = isTimeoutError(error);
26
+ return upstreamError(
27
+ `Upstream request failed: ${error?.message || "unknown error"}`,
28
+ timedOut ? 504 : 502,
29
+ timedOut ? "Gateway Timeout" : "Upstream request failed",
30
+ error
31
+ );
32
+ }
33
+ function isTimeoutError(error) {
34
+ const candidate = error;
35
+ const code = candidate?.cause?.code;
36
+ return TIMEOUT_ERROR_NAMES.has(candidate?.name || "") || TIMEOUT_ERROR_NAMES.has(candidate?.cause?.name || "") || typeof code === "string" && code.includes("TIMEOUT");
37
+ }
38
+ function createFailureGate(maxAge) {
39
+ const failures = /* @__PURE__ */ new Map();
40
+ const failureWindow = Math.min(UPSTREAM_FAILURE_MAX_AGE, maxAge) * 1e3;
41
+ return {
42
+ replay(key) {
43
+ const failure = failures.get(key);
44
+ if (!failure)
45
+ return;
46
+ if (Date.now() >= failure.until) {
47
+ failures.delete(key);
48
+ return;
49
+ }
50
+ throw upstreamError(failure.error.message, failure.error.statusCode, failure.error.statusMessage);
51
+ },
52
+ record(key, error) {
53
+ const failure = error;
54
+ if (failures.size >= MAX_TRACKED_FAILURES)
55
+ failures.delete(failures.keys().next().value);
56
+ failures.set(key, {
57
+ until: Date.now() + failureWindow,
58
+ error: {
59
+ message: failure?.message || "Upstream request failed",
60
+ statusCode: failure?.statusCode ?? 502,
61
+ statusMessage: failure?.statusMessage || "Upstream request failed"
62
+ }
63
+ });
64
+ }
65
+ };
66
+ }
18
67
  function resolveMaxResponseBytes(value, fallback) {
19
68
  const maxBytes = value ?? fallback;
20
69
  if (!Number.isSafeInteger(maxBytes) || maxBytes < 0)
@@ -138,10 +187,11 @@ async function fetchBoundedUpstream(url, options) {
138
187
  }
139
188
  }
140
189
  if (!options.ignoreResponseError && response.status >= 400 && response.status < 600) {
190
+ const upstreamFault = response.status >= 500;
141
191
  await rejectResponse(response, upstreamError(
142
192
  `Upstream request failed with status ${response.status}`,
143
- response.status,
144
- response.statusText || "Upstream request failed"
193
+ upstreamFault ? 502 : response.status,
194
+ upstreamFault ? "Upstream request failed" : response.statusText || "Upstream request failed"
145
195
  ));
146
196
  }
147
197
  const contentType = response.headers.get("content-type");
@@ -168,16 +218,35 @@ async function fetchBoundedUpstream(url, options) {
168
218
  return { contentType, data, status: response.status };
169
219
  }
170
220
  } catch (error) {
171
- primaryError = error;
172
- throw error;
221
+ primaryError = asUpstreamError(error);
222
+ throw primaryError;
173
223
  } finally {
174
224
  await closePublicNetworkDispatcher(network, primaryError);
175
225
  }
176
226
  }
177
227
  export function createCachedBinaryFetch(name, maxAge, config = {}) {
178
228
  const maxResponseBytes = resolveMaxResponseBytes(config.maxResponseBytes, DEFAULT_BINARY_MAX_RESPONSE_BYTES);
229
+ const failureGate = createFailureGate(maxAge);
230
+ const cacheKey = (url, opts) => {
231
+ if (!opts)
232
+ return hash(url);
233
+ const parts = [url];
234
+ if (opts.headers) {
235
+ const entries = Object.entries(opts.headers).sort(([a], [b]) => a.localeCompare(b));
236
+ for (const [k, v] of entries)
237
+ parts.push(`${k}=${v}`);
238
+ }
239
+ if (opts.redirect)
240
+ parts.push(`redirect=${opts.redirect}`);
241
+ if (opts.ignoreResponseError !== void 0)
242
+ parts.push(`ignoreResponseError=${opts.ignoreResponseError}`);
243
+ return hash(parts);
244
+ };
245
+ const gateKey = (url, opts) => `${cacheKey(url, opts)}:${opts?.timeout ?? DEFAULT_UPSTREAM_TIMEOUT_MS}`;
179
246
  const cached = defineCachedFunction(
180
247
  async (url, opts) => {
248
+ const key = gateKey(url, opts);
249
+ failureGate.replay(key);
181
250
  const response = await fetchBoundedUpstream(url, {
182
251
  allowContentType: config.allowContentType,
183
252
  allowUrl: config.allowUrl,
@@ -186,7 +255,10 @@ export function createCachedBinaryFetch(name, maxAge, config = {}) {
186
255
  maxRedirects: config.maxRedirects,
187
256
  maxResponseBytes,
188
257
  redirect: opts?.redirect ?? (config.allowUrl ? "follow" : "manual"),
189
- timeoutMs: opts?.timeout ?? 1e4
258
+ timeoutMs: opts?.timeout ?? DEFAULT_UPSTREAM_TIMEOUT_MS
259
+ }).catch((error) => {
260
+ failureGate.record(key, error);
261
+ throw error;
190
262
  });
191
263
  return {
192
264
  base64: response.data.byteLength ? Buffer.from(response.data).toString("base64") : "",
@@ -200,21 +272,7 @@ export function createCachedBinaryFetch(name, maxAge, config = {}) {
200
272
  maxAge,
201
273
  swr: true,
202
274
  staleMaxAge: maxAge,
203
- getKey: (url, opts) => {
204
- if (!opts)
205
- return hash(url);
206
- const parts = [url];
207
- if (opts.headers) {
208
- const entries = Object.entries(opts.headers).sort(([a], [b]) => a.localeCompare(b));
209
- for (const [k, v] of entries)
210
- parts.push(`${k}=${v}`);
211
- }
212
- if (opts.redirect)
213
- parts.push(`redirect=${opts.redirect}`);
214
- if (opts.ignoreResponseError !== void 0)
215
- parts.push(`ignoreResponseError=${opts.ignoreResponseError}`);
216
- return hash(parts);
217
- }
275
+ getKey: cacheKey
218
276
  }
219
277
  );
220
278
  return async (url, opts) => {
@@ -227,8 +285,13 @@ export function createCachedBinaryFetch(name, maxAge, config = {}) {
227
285
  }
228
286
  export function createCachedJsonFetch(name, maxAge, getKey, config) {
229
287
  const maxResponseBytes = resolveMaxResponseBytes(config.maxResponseBytes, DEFAULT_JSON_MAX_RESPONSE_BYTES);
288
+ const failureGate = createFailureGate(maxAge);
289
+ const cacheKey = (url, opts) => hash(getKey(url, opts));
290
+ const gateKey = (url, opts) => `${cacheKey(url, opts)}:${opts?.timeout ?? DEFAULT_UPSTREAM_TIMEOUT_MS}`;
230
291
  return defineCachedFunction(
231
292
  async (url, opts) => {
293
+ const key = gateKey(url, opts);
294
+ failureGate.replay(key);
232
295
  const response = await fetchBoundedUpstream(url, {
233
296
  allowUrl: config.allowUrl,
234
297
  contentTypePrefixes: config.contentTypePrefixes,
@@ -237,7 +300,10 @@ export function createCachedJsonFetch(name, maxAge, getKey, config) {
237
300
  maxRedirects: config.maxRedirects,
238
301
  maxResponseBytes,
239
302
  redirect: "follow",
240
- timeoutMs: opts?.timeout ?? 1e4
303
+ timeoutMs: opts?.timeout ?? DEFAULT_UPSTREAM_TIMEOUT_MS
304
+ }).catch((error) => {
305
+ failureGate.record(key, error);
306
+ throw error;
241
307
  });
242
308
  const text = new TextDecoder().decode(response.data);
243
309
  let data;
@@ -250,7 +316,12 @@ export function createCachedJsonFetch(name, maxAge, getKey, config) {
250
316
  throw upstreamError("Upstream response is not valid JSON", 502, "Invalid upstream response", cause);
251
317
  }
252
318
  }
253
- config.validateResponse?.(data);
319
+ try {
320
+ config.validateResponse?.(data);
321
+ } catch (error) {
322
+ failureGate.record(key, error);
323
+ throw error;
324
+ }
254
325
  return data;
255
326
  },
256
327
  {
@@ -259,7 +330,7 @@ export function createCachedJsonFetch(name, maxAge, getKey, config) {
259
330
  maxAge,
260
331
  swr: true,
261
332
  staleMaxAge: maxAge,
262
- getKey: (url, opts) => hash(getKey(url, opts))
333
+ getKey: cacheKey
263
334
  }
264
335
  );
265
336
  }
package/dist/types.d.mts CHANGED
@@ -6,6 +6,6 @@ declare module '@nuxt/schema' {
6
6
 
7
7
  export { type FirstPartyPrivacy } from '../dist/runtime/types.js'
8
8
 
9
- export { type applyAutoInject, default, type findMissingRequiredFields, type isProxyDisabled, type resolveConfiguredProxyDomains, type resolveProxySecret } from './module.mjs'
9
+ export { type STATIC_PROXY_PRESETS, type applyAutoInject, default, type findMissingRequiredFields, type isProxyDisabled, type isStaticProxyTarget, type normalizeNitroPreset, type resolveConfiguredProxyDomains, type resolveProxySecret } from './module.mjs'
10
10
 
11
11
  export { type ModuleHooks, type ModuleOptions, type ResolvedProxySecret } from './module.mjs'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuxt/scripts",
3
3
  "type": "module",
4
- "version": "1.3.5",
4
+ "version": "1.3.7",
5
5
  "description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -1 +0,0 @@
1
- {"id":"173480db-0944-415b-962d-d619682f0042","timestamp":1786893482052,"prerendered":[]}