@nuxt/scripts 1.0.6 → 1.1.1
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.
- package/dist/devtools-client/200.html +1 -1
- package/dist/devtools-client/404.html +1 -1
- package/dist/devtools-client/_nuxt/B-0LGYiZ.js +188 -0
- package/dist/devtools-client/_nuxt/BHdEFiuu.js +1 -0
- package/dist/devtools-client/_nuxt/CZLtBO2f.js +1 -0
- package/dist/devtools-client/_nuxt/CpUjVpvL.js +1 -0
- package/dist/devtools-client/_nuxt/CpodaK4k.js +1 -0
- package/dist/devtools-client/_nuxt/DkOU4Aaf.js +1 -0
- package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
- package/dist/devtools-client/_nuxt/builds/meta/7cf30d77-8399-4375-9a20-302132331b02.json +1 -0
- package/dist/devtools-client/_nuxt/d96VI30H.js +1 -0
- package/dist/devtools-client/_nuxt/{entry.XOvcedFq.css → entry.DFx-MLUa.css} +1 -1
- package/dist/devtools-client/_nuxt/error-404.aORtIbIE.css +1 -0
- package/dist/devtools-client/_nuxt/error-500.FkAdJQFV.css +1 -0
- package/dist/devtools-client/_nuxt/{first-party.C8Ha4JLM.css → first-party.D_SBdnka.css} +1 -1
- package/dist/devtools-client/_nuxt/index.DIj4bh55.css +1 -0
- package/dist/devtools-client/_nuxt/{registry.B9lnjF_b.css → registry.CDbTq1x3.css} +1 -1
- package/dist/devtools-client/docs/index.html +1 -1
- package/dist/devtools-client/first-party/index.html +1 -1
- package/dist/devtools-client/index.html +1 -1
- package/dist/devtools-client/registry/index.html +1 -1
- package/dist/module.d.mts +12 -2
- package/dist/module.d.ts +12 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +271 -35
- package/dist/registry.mjs +76 -5
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +36 -5
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +2 -2
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +2 -2
- package/dist/runtime/components/ScriptCalendlyInlineWidget.d.vue.ts +59 -0
- package/dist/runtime/components/ScriptCalendlyInlineWidget.vue +79 -0
- package/dist/runtime/components/ScriptCalendlyInlineWidget.vue.d.ts +59 -0
- package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +1 -1
- package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +1 -1
- package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +1 -1
- package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +1 -1
- package/dist/runtime/composables/useScript.js +48 -0
- package/dist/runtime/debug.d.ts +1 -0
- package/dist/runtime/debug.js +1 -0
- package/dist/runtime/devtools-standalone-bridge.client.js +3 -1
- package/dist/runtime/logger.js +4 -0
- package/dist/runtime/registry/_gcm-consent.d.ts +14 -0
- package/dist/runtime/registry/_gcm-consent.js +24 -0
- package/dist/runtime/registry/ahrefs-analytics.d.ts +39 -0
- package/dist/runtime/registry/ahrefs-analytics.js +18 -0
- package/dist/runtime/registry/calendly.d.ts +76 -0
- package/dist/runtime/registry/calendly.js +63 -0
- package/dist/runtime/registry/google-analytics.d.ts +5 -6
- package/dist/runtime/registry/google-analytics.js +4 -10
- package/dist/runtime/registry/google-tag-manager.d.ts +5 -6
- package/dist/runtime/registry/google-tag-manager.js +13 -18
- package/dist/runtime/registry/linkedin-insight.d.ts +35 -0
- package/dist/runtime/registry/linkedin-insight.js +49 -0
- package/dist/runtime/registry/schemas.d.ts +124 -0
- package/dist/runtime/registry/schemas.js +115 -2
- package/dist/runtime/registry/tiktok-pixel.d.ts +79 -14
- package/dist/runtime/registry/tiktok-pixel.js +62 -28
- package/dist/runtime/registry/usercentrics.d.ts +85 -0
- package/dist/runtime/registry/usercentrics.js +54 -0
- package/dist/runtime/server/proxy-handler.js +13 -4
- package/dist/runtime/types.d.ts +36 -1
- package/dist/runtime/utils.d.ts +8 -2
- package/dist/runtime/utils.js +5 -1
- package/dist/stats.mjs +19 -0
- package/dist/types-source.mjs +291 -11
- package/dist/types.d.mts +1 -1
- package/package.json +9 -6
- package/dist/devtools-client/_nuxt/CZp-OuKP.js +0 -1
- package/dist/devtools-client/_nuxt/Djr8-0jV.js +0 -1
- package/dist/devtools-client/_nuxt/DtB6K90V.js +0 -188
- package/dist/devtools-client/_nuxt/DyyF3uw_.js +0 -1
- package/dist/devtools-client/_nuxt/GzJXdFDa.js +0 -1
- package/dist/devtools-client/_nuxt/W-xcwSaJ.js +0 -1
- package/dist/devtools-client/_nuxt/YlRaZkPa.js +0 -1
- package/dist/devtools-client/_nuxt/builds/meta/57f43375-6c5e-40af-a5bc-9479e5286aac.json +0 -1
- package/dist/devtools-client/_nuxt/error-404.DsZYSkA7.css +0 -1
- package/dist/devtools-client/_nuxt/error-500.Cqipl6_j.css +0 -1
- package/dist/devtools-client/_nuxt/index.DZD1lwyI.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-28cd7d03]{display:grid}.mb-2[data-v-28cd7d03]{margin-bottom:.5rem}.mb-4[data-v-28cd7d03]{margin-bottom:1rem}.max-w-520px[data-v-28cd7d03]{max-width:520px}.min-h-screen[data-v-28cd7d03]{min-height:100vh}.w-full[data-v-28cd7d03]{width:100%}.flex[data-v-28cd7d03]{display:flex}.place-content-center[data-v-28cd7d03]{place-content:center}.items-center[data-v-28cd7d03]{align-items:center}.justify-center[data-v-28cd7d03]{justify-content:center}.overflow-hidden[data-v-28cd7d03]{overflow:hidden}.bg-white[data-v-28cd7d03]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-28cd7d03]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-28cd7d03]{text-align:center}.text-\[80px\][data-v-28cd7d03]{font-size:80px}.text-2xl[data-v-28cd7d03]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-28cd7d03]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-28cd7d03]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-28cd7d03]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-28cd7d03]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-28cd7d03]{font-weight:500}.font-semibold[data-v-28cd7d03]{font-weight:600}.leading-none[data-v-28cd7d03]{line-height:1}.tracking-wide[data-v-28cd7d03]{letter-spacing:.025em}.font-sans[data-v-28cd7d03]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-28cd7d03]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-28cd7d03]{text-decoration-line:underline}.underline-offset-3[data-v-28cd7d03]{text-underline-offset:3px}.antialiased[data-v-28cd7d03]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-28cd7d03]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-28cd7d03]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:text-\[110px\][data-v-28cd7d03]{font-size:110px}.sm\:text-3xl[data-v-28cd7d03]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-67b43ecc]{display:grid}.mb-2[data-v-67b43ecc]{margin-bottom:.5rem}.mb-4[data-v-67b43ecc]{margin-bottom:1rem}.max-w-520px[data-v-67b43ecc]{max-width:520px}.min-h-screen[data-v-67b43ecc]{min-height:100vh}.place-content-center[data-v-67b43ecc]{place-content:center}.overflow-hidden[data-v-67b43ecc]{overflow:hidden}.bg-white[data-v-67b43ecc]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-67b43ecc]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-67b43ecc]{text-align:center}.text-\[80px\][data-v-67b43ecc]{font-size:80px}.text-2xl[data-v-67b43ecc]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-67b43ecc]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-67b43ecc]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-67b43ecc]{font-weight:600}.leading-none[data-v-67b43ecc]{line-height:1}.tracking-wide[data-v-67b43ecc]{letter-spacing:.025em}.font-sans[data-v-67b43ecc]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-67b43ecc]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-67b43ecc]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-67b43ecc]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-67b43ecc]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media(min-width:640px){.sm\:text-\[110px\][data-v-67b43ecc]{font-size:110px}.sm\:text-3xl[data-v-67b43ecc]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.stat-card[data-v-97e4a274]{background:var(--color-surface-elevated);border:1px solid var(--color-border);
|
|
1
|
+
.stat-card[data-v-97e4a274]{flex:1;min-width:5.5rem;padding:.625rem .875rem;border-radius:var(--radius-md);background:var(--color-surface-elevated);border:1px solid var(--color-border);transition:border-color .2s}.stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-300)}.dark .stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-700)}.stat-label[data-v-97e4a274]{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-subtle);margin-bottom:.125rem}.stat-value[data-v-97e4a274]{font-size:1.125rem;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--color-text)}.stat-dot[data-v-97e4a274]{width:7px;height:7px;border-radius:50%}.stat-dot-active[data-v-97e4a274]{background:#11ad32;box-shadow:0 0 8px #11ad3280;animation:pulse-dot-97e4a274 2s ease-in-out infinite}@keyframes pulse-dot-97e4a274{0%,to{opacity:1}50%{opacity:.4}}.privacy-flag[data-v-97e4a274]{width:1.625rem;height:1.625rem;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all .15s}.privacy-flag-on[data-v-97e4a274]{background:#6bc6701f;color:#107823}.dark .privacy-flag-on[data-v-97e4a274]{background:#10782326;color:#75d079}.privacy-flag-off[data-v-97e4a274]{background:var(--color-surface-sunken);color:var(--color-text-subtle);opacity:.5}.fp-badge[data-v-97e4a274]{display:inline-flex;align-items:center;gap:.25rem;padding:.0625rem .4375rem;font-size:.625rem;font-weight:600;letter-spacing:.01em;border-radius:9999px;border:1px solid transparent;white-space:nowrap}.privacy-full[data-v-97e4a274]{background:#6bc6701a;border-color:#4aa65126;color:#006818;color:oklch(45% .15 145)}.dark .privacy-full[data-v-97e4a274]{background:#1078231f;border-color:#3e834333;color:#85cc87}.privacy-partial[data-v-97e4a274]{background:#e0b7711a;border-color:#bf975226;color:#825b00;color:oklch(50% .12 80)}.dark .privacy-partial[data-v-97e4a274]{background:#67522d1f;border-color:#846e4926;color:#cfa761}.privacy-none[data-v-97e4a274]{background:#ce706914;border-color:#bd615b1f;color:#9c433f}.dark .privacy-none[data-v-97e4a274]{background:#843c381f;border-color:#8b504c26;color:#dc8c85}.mechanism-bundle[data-v-97e4a274]{background:#a890d414;border-color:#8972b31f;color:#694b96}.dark .mechanism-bundle[data-v-97e4a274]{background:#4e3d6c1f;border-color:#6a588a26;color:#b7a0e4}.mechanism-config[data-v-97e4a274]{background:#71bad114;border-color:#529bb11f;color:#006880;color:oklch(48% .1 220)}.dark .mechanism-config[data-v-97e4a274]{background:#1a4f5e1f;border-color:#386b7b26;color:#71bad1}.fp-badge-info[data-v-97e4a274]{background:#7cb3eb14;border-color:#5e93ca1f;color:#1a609e}.dark .fp-badge-info[data-v-97e4a274]{background:#224a711f;color:#7cb3eb}.fp-badge-warn[data-v-97e4a274]{background:#eeae7b1a;border-color:#cc8f5c1f;color:#925000;color:oklch(50% .12 60)}.dark .fp-badge-warn[data-v-97e4a274]{background:#6e4d321f;color:#dd9f6b}.fp-badge-muted[data-v-97e4a274]{background:var(--color-surface-sunken);border-color:var(--color-border-subtle);color:var(--color-text-subtle)}.matrix-dot-on[data-v-97e4a274]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-300)}.dark .matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-700)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.script-status[data-v-5cf865ba]{display:inline-flex;align-items:center;gap:.375rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:600;letter-spacing:.01em;border-radius:9999px;line-height:1.4}.script-status-dot[data-v-5cf865ba]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.status-loaded[data-v-5cf865ba]{background:#6bc6701f;color:#006818;color:oklch(45% .15 145)}.status-loaded .script-status-dot[data-v-5cf865ba]{background:#11ad32;box-shadow:0 0 6px #11ad3280}.dark .status-loaded[data-v-5cf865ba]{background:#10782326;color:#75d079}.status-loading[data-v-5cf865ba]{background:#70b3f71a;color:#0065b0;color:oklch(50% .15 250)}.status-loading .script-status-dot[data-v-5cf865ba]{background:#0083e0;background:oklch(60% .18 250);animation:pulse-dot-5cf865ba 1.5s ease-in-out infinite}.dark .status-loading[data-v-5cf865ba]{background:#23588a26;color:#70b3f7}.status-awaiting[data-v-5cf865ba]{background:#d9b9821a;color:#946900;color:oklch(55% .12 80)}.status-awaiting .script-status-dot[data-v-5cf865ba]{background:#cd9200;background:oklch(70% .15 80)}.dark .status-awaiting[data-v-5cf865ba]{background:#67522d26;color:#cfa761}.status-error[data-v-5cf865ba]{background:#ce70691a;color:#a83634}.status-error .script-status-dot[data-v-5cf865ba]{background:#de3b3d}.dark .status-error[data-v-5cf865ba]{background:#843c3826;color:#e6857e}.status-validation[data-v-5cf865ba]{background:#a890d41a;color:#6e519d}.status-validation .script-status-dot[data-v-5cf865ba]{background:#8f68cb}.dark .status-validation[data-v-5cf865ba]{background:#4e3d6c26;color:#b7a0e4}.status-unknown[data-v-5cf865ba]{background:var(--color-surface-sunken);color:var(--color-text-muted)}.status-unknown .script-status-dot[data-v-5cf865ba]{background:var(--color-neutral-400)}@keyframes pulse-dot-5cf865ba{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.script-metric[data-v-b147450b]{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;font-family:var(--font-mono);letter-spacing:-.01em;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-muted);border:1px solid var(--color-border-subtle)}.script-metric[data-v-c6837c50]{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;font-family:var(--font-mono);letter-spacing:-.01em;border-radius:9999px;background:#6bc67014;color:#2f7434;border:1px solid oklch(65% .15 145/.12)}.dark .script-metric[data-v-c6837c50]{background:#2c63301f;color:#85cc87;border-color:#49814c26}.ui-tooltip-panel[data-v-16948115]{padding:.5rem .75rem;font-size:.75rem;font-weight:400;white-space:normal;line-height:1.4;border-radius:var(--radius-md);background:var(--color-surface-elevated);color:var(--color-text);border:1px solid var(--color-border);pointer-events:none;box-shadow:0 4px 12px #0000001a}.dark .ui-tooltip-panel[data-v-16948115]{box-shadow:0 4px 12px #0000004d}.waterfall-container[data-v-d16c88db]{padding:.75rem;display:flex;flex-direction:column;gap:.5rem}.waterfall-stats[data-v-d16c88db]{display:flex;align-items:center;gap:.5rem;font-size:.6875rem}.waterfall-stat[data-v-d16c88db]{display:inline-flex;align-items:baseline;gap:.25rem;font-variant-numeric:tabular-nums}.waterfall-stat-value[data-v-d16c88db]{font-weight:700;color:var(--color-text)}.waterfall-stat-label[data-v-d16c88db]{color:var(--color-text-subtle)}.waterfall-sep[data-v-d16c88db]{width:3px;height:3px;border-radius:50%;background:var(--color-text-subtle);opacity:.3}.waterfall-proxied-badge[data-v-d16c88db]{display:inline-flex;align-items:center;gap:.25rem;color:#107823}.dark .waterfall-proxied-badge[data-v-d16c88db]{color:#85cc87}.domain-pill[data-v-d16c88db]{display:inline-flex;align-items:center;gap:.125rem;font-family:var(--font-mono);font-size:.625rem;padding:.0625rem .375rem;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-subtle);border:1px solid var(--color-border-subtle)}.domain-pill-proxied[data-v-d16c88db]{background:#6bc67014;border-color:#4aa6511f;color:#2f7434}.dark .domain-pill-proxied[data-v-d16c88db]{background:#2f74341a;color:#8fc990}.waterfall-table[data-v-d16c88db]{border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);overflow:hidden;background:var(--color-surface-elevated)}.waterfall-legend[data-v-d16c88db]{display:flex;align-items:center;gap:.75rem;padding:.25rem .5rem;border-bottom:1px solid var(--color-border-subtle);background:var(--color-surface-sunken)}.waterfall-legend-item[data-v-d16c88db]{display:flex;align-items:center;gap:.25rem;font-size:.5625rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-subtle)}.waterfall-legend-dot[data-v-d16c88db]{width:5px;height:5px;border-radius:2px}.waterfall-row[data-v-d16c88db]{display:flex;align-items:center;gap:.375rem;padding:.1875rem .5rem;font-size:.6875rem;transition:background .1s;cursor:default}.waterfall-row[data-v-d16c88db]:hover{background:var(--color-surface-sunken)}.waterfall-row-proxied[data-v-d16c88db]{background:#6bc67008}.waterfall-row-proxied[data-v-d16c88db]:hover{background:#6bc6700f}.waterfall-status[data-v-d16c88db]{flex-shrink:0;width:1.5rem;text-align:center;font-size:.625rem;font-family:var(--font-mono);font-weight:600;line-height:1;padding:.125rem 0;border-radius:3px}.waterfall-status-200[data-v-d16c88db]{color:#107823;background:#6bc6701a}.dark .waterfall-status-200[data-v-d16c88db]{color:#85cc87;background:#2f74341f}.waterfall-status-304[data-v-d16c88db]{color:#946900;color:oklch(55% .12 80);background:#d9b9821a}.dark .waterfall-status-304[data-v-d16c88db]{color:#cfa761;background:#75603b1f}.waterfall-row-icon[data-v-d16c88db]{flex-shrink:0;font-size:.625rem;color:var(--color-text-subtle);opacity:.4}.waterfall-row-icon-proxied[data-v-d16c88db]{color:#278733;opacity:1}.dark .waterfall-row-icon-proxied[data-v-d16c88db]{color:#85cc87}.waterfall-url[data-v-d16c88db]{flex-shrink:0;width:15rem;font-family:var(--font-mono);font-size:.625rem;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waterfall-bar-track[data-v-d16c88db]{flex:1;height:.875rem;position:relative;background:var(--color-surface-sunken);border-radius:3px;overflow:hidden}.waterfall-bar[data-v-d16c88db]{position:absolute;height:100%;display:flex;border-radius:3px;overflow:hidden}.waterfall-duration[data-v-d16c88db]{flex-shrink:0;width:2.5rem;text-align:right;font-family:var(--font-mono);font-size:.625rem;font-variant-numeric:tabular-nums;color:var(--color-text-subtle)}.devtools-snippet[data-v-265ccc31]{margin:.5rem .75rem}.devtools-snippet-header[data-v-265ccc31]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375rem}.devtools-snippet-label[data-v-265ccc31]{font-family:var(--font-mono);font-size:.6875rem;font-weight:500;color:var(--color-text-muted);letter-spacing:-.01em}.devtools-snippet-block[data-v-265ccc31]{border-radius:var(--radius-sm);font-size:.6875rem;line-height:1.6;padding:.5rem .625rem!important;max-height:300px;overflow-y:auto}.filter-bar[data-v-1d33b8c9]{display:flex;align-items:center;gap:.25rem;padding:0 .25rem;margin-bottom:.75rem}.filter-chip[data-v-1d33b8c9]{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;font-size:.6875rem;font-weight:500;color:var(--color-text-subtle);background:transparent;border:1px solid var(--color-border-subtle);border-radius:9999px;cursor:pointer;transition:all .15s}.filter-chip[data-v-1d33b8c9]:hover{color:var(--color-text-muted);border-color:var(--color-border)}.filter-chip-active[data-v-1d33b8c9]{color:var(--color-text);background:var(--color-surface-sunken);border-color:var(--color-border)}.filter-chip-count[data-v-1d33b8c9]{font-size:.625rem;font-variant-numeric:tabular-nums;padding:0 .25rem;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-subtle);min-width:1.25rem;text-align:center}.filter-chip-active .filter-chip-count[data-v-1d33b8c9]{background:var(--color-surface-elevated)}.sub-tab[data-v-1d33b8c9]{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;font-size:.75rem;font-weight:500;color:var(--color-text-subtle);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s;cursor:pointer}.sub-tab[data-v-1d33b8c9]:hover{color:var(--color-text-muted)}.sub-tab-active[data-v-1d33b8c9]{color:var(--color-text);border-bottom-color:var(--seo-green)}.event-timeline[data-v-1d33b8c9]{display:flex;flex-direction:column;gap:.125rem}.event-row[data-v-1d33b8c9]{display:flex;align-items:center;gap:.625rem;padding:.25rem .375rem;border-radius:var(--radius-sm);font-size:.6875rem;transition:background .1s}.event-row[data-v-1d33b8c9]:hover{background:var(--color-surface-sunken)}.event-time[data-v-1d33b8c9]{color:var(--color-text-subtle);font-family:var(--font-mono);font-size:.625rem;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:5.5rem}.event-badge[data-v-1d33b8c9]{display:inline-flex;padding:.0625rem .375rem;border-radius:9999px;font-size:.625rem;font-weight:600;letter-spacing:.01em;white-space:nowrap}.event-fn[data-v-1d33b8c9]{font-family:var(--font-mono);font-size:.6875rem;padding:.0625rem .5rem;border-radius:var(--radius-sm);background:var(--color-surface-sunken);color:var(--color-text-muted);border:1px solid var(--color-border-subtle);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-badge-loaded[data-v-1d33b8c9]{background:#6bc6701f;color:#006818;color:oklch(45% .15 145)}.dark .status-badge-loaded[data-v-1d33b8c9]{background:#10782326;color:#75d079}.status-badge-loading[data-v-1d33b8c9]{background:#d9b9821f;color:#946900;color:oklch(55% .12 80)}.dark .status-badge-loading[data-v-1d33b8c9]{background:#67522d26;color:#cfa761}.status-badge-awaiting[data-v-1d33b8c9]{background:var(--color-surface-sunken);color:var(--color-text-muted)}.status-badge-error[data-v-1d33b8c9]{background:#ce70691a;color:#a83634}.dark .status-badge-error[data-v-1d33b8c9]{background:#843c3826;color:#e6857e}.status-badge-validation[data-v-1d33b8c9]{background:#a890d41a;color:#6e519d}.dark .status-badge-validation[data-v-1d33b8c9]{background:#4e3d6c26;color:#b7a0e4}.status-badge-default[data-v-1d33b8c9]{background:var(--color-surface-sunken);color:var(--color-text-subtle)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.registry-row[data-v-3f8fca8a]{
|
|
1
|
+
.registry-row[data-v-3f8fca8a]{border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);background:var(--color-surface-elevated);transition:border-color .2s,box-shadow .2s}.registry-row[data-v-3f8fca8a]:hover{border-color:var(--color-border);box-shadow:0 2px 12px #0000000a}.dark .registry-row[data-v-3f8fca8a]:hover{box-shadow:0 2px 12px #0003}.cap-indicator[data-v-3f8fca8a]{width:1.625rem;height:1.625rem;border-radius:var(--radius-sm);border:1px solid transparent;display:flex;align-items:center;justify-content:center;transition:all .15s}.cap-active[data-v-3f8fca8a]{background:#6bc6701f;border-color:#4aa65133;color:#107823}.dark .cap-active[data-v-3f8fca8a]{background:#10782326;border-color:#3e834333;color:#75d079}.cap-available[data-v-3f8fca8a]{background:#d9b98214;border-color:#bf975226;border-style:dashed;color:#906a21}.dark .cap-available[data-v-3f8fca8a]{background:#67522d1a;border-color:#997b4626;color:#c9a973}.cap-off[data-v-3f8fca8a]{opacity:.15;color:var(--color-text-subtle)}.cap-dot[data-v-3f8fca8a]{width:.5rem;height:.5rem;border-radius:50%;transition:all .15s}.cap-dot-active[data-v-3f8fca8a]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.cap-dot-available[data-v-3f8fca8a]{background:transparent;border:2px dashed oklch(70% .12 80/.6)}.cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-300);opacity:.3}.dark .cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-600)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.DFx-MLUa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B-0LGYiZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/B-0LGYiZ.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-scripts",buildId:"7cf30d77-8399-4375-9a20-302132331b02",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779346491022,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"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.DFx-MLUa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B-0LGYiZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/B-0LGYiZ.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-scripts",buildId:"7cf30d77-8399-4375-9a20-302132331b02",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779346491023,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"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.DFx-MLUa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B-0LGYiZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/B-0LGYiZ.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-scripts",buildId:"7cf30d77-8399-4375-9a20-302132331b02",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779346491024,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"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.DFx-MLUa.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B-0LGYiZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/B-0LGYiZ.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-scripts",buildId:"7cf30d77-8399-4375-9a20-302132331b02",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779346491023,false]</script></body></html>
|
package/dist/module.d.mts
CHANGED
|
@@ -23,6 +23,12 @@ declare function resolveProxySecret(rootDir: string, isDev: boolean, configSecre
|
|
|
23
23
|
declare function isProxyDisabled(registryKey: string, registry?: NuxtConfigScriptRegistry, runtimeConfig?: Record<string, any>): boolean;
|
|
24
24
|
declare function applyAutoInject(registry: NuxtConfigScriptRegistry, runtimeConfig: Record<string, any>, proxyPrefix: string, registryKey: string, autoInject: ResolvedProxyAutoInject): void;
|
|
25
25
|
declare function resolveConfiguredProxyDomains(config: Record<string, any> | undefined, proxyConfig?: Pick<ProxyConfig, 'autoInject' | 'configDomainFields'>): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Compute missing required fields for a registry entry, using the merged
|
|
28
|
+
* runtimeConfig as source of truth so that env vars and runtimeConfig.public.scripts
|
|
29
|
+
* count toward satisfying the schema.
|
|
30
|
+
*/
|
|
31
|
+
declare function findMissingRequiredFields(requiredFields: string[], rawInput: Record<string, any> | undefined, mergedPublicScript: Record<string, any> | undefined): string[];
|
|
26
32
|
interface ModuleOptions {
|
|
27
33
|
/**
|
|
28
34
|
* Base path prefix for all script endpoints (proxy and bundled assets).
|
|
@@ -101,8 +107,12 @@ interface ModuleOptions {
|
|
|
101
107
|
*
|
|
102
108
|
* The secret must be deterministic across deployments so that prerendered URLs
|
|
103
109
|
* remain valid. Set it via `NUXT_SCRIPTS_PROXY_SECRET` or `security.secret`.
|
|
110
|
+
*
|
|
111
|
+
* Set to `false` to disable proxy security entirely: no secret is resolved or
|
|
112
|
+
* auto-generated, no page token is injected into the SSR payload, and proxy
|
|
113
|
+
* endpoints pass requests through without signature verification.
|
|
104
114
|
*/
|
|
105
|
-
security?: {
|
|
115
|
+
security?: false | {
|
|
106
116
|
/**
|
|
107
117
|
* HMAC secret used to sign proxy URLs.
|
|
108
118
|
*
|
|
@@ -182,5 +192,5 @@ interface ModuleHooks {
|
|
|
182
192
|
}
|
|
183
193
|
declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
|
|
184
194
|
|
|
185
|
-
export { applyAutoInject, _default as default, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|
|
195
|
+
export { applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|
|
186
196
|
export type { ModuleHooks, ModuleOptions, ResolvedProxySecret };
|
package/dist/module.d.ts
CHANGED
|
@@ -23,6 +23,12 @@ declare function resolveProxySecret(rootDir: string, isDev: boolean, configSecre
|
|
|
23
23
|
declare function isProxyDisabled(registryKey: string, registry?: NuxtConfigScriptRegistry, runtimeConfig?: Record<string, any>): boolean;
|
|
24
24
|
declare function applyAutoInject(registry: NuxtConfigScriptRegistry, runtimeConfig: Record<string, any>, proxyPrefix: string, registryKey: string, autoInject: ResolvedProxyAutoInject): void;
|
|
25
25
|
declare function resolveConfiguredProxyDomains(config: Record<string, any> | undefined, proxyConfig?: Pick<ProxyConfig, 'autoInject' | 'configDomainFields'>): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Compute missing required fields for a registry entry, using the merged
|
|
28
|
+
* runtimeConfig as source of truth so that env vars and runtimeConfig.public.scripts
|
|
29
|
+
* count toward satisfying the schema.
|
|
30
|
+
*/
|
|
31
|
+
declare function findMissingRequiredFields(requiredFields: string[], rawInput: Record<string, any> | undefined, mergedPublicScript: Record<string, any> | undefined): string[];
|
|
26
32
|
interface ModuleOptions {
|
|
27
33
|
/**
|
|
28
34
|
* Base path prefix for all script endpoints (proxy and bundled assets).
|
|
@@ -101,8 +107,12 @@ interface ModuleOptions {
|
|
|
101
107
|
*
|
|
102
108
|
* The secret must be deterministic across deployments so that prerendered URLs
|
|
103
109
|
* remain valid. Set it via `NUXT_SCRIPTS_PROXY_SECRET` or `security.secret`.
|
|
110
|
+
*
|
|
111
|
+
* Set to `false` to disable proxy security entirely: no secret is resolved or
|
|
112
|
+
* auto-generated, no page token is injected into the SSR payload, and proxy
|
|
113
|
+
* endpoints pass requests through without signature verification.
|
|
104
114
|
*/
|
|
105
|
-
security?: {
|
|
115
|
+
security?: false | {
|
|
106
116
|
/**
|
|
107
117
|
* HMAC secret used to sign proxy URLs.
|
|
108
118
|
*
|
|
@@ -182,5 +192,5 @@ interface ModuleHooks {
|
|
|
182
192
|
}
|
|
183
193
|
declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
|
|
184
194
|
|
|
185
|
-
export { applyAutoInject, _default as default, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|
|
195
|
+
export { applyAutoInject, _default as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|
|
186
196
|
export type { ModuleHooks, ModuleOptions, ResolvedProxySecret };
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { useNuxt, addDevServerHandler, extendRouteRules, tryUseNuxt, createResol
|
|
|
4
4
|
import { defu } from 'defu';
|
|
5
5
|
import { join, resolve } from 'pathe';
|
|
6
6
|
import { resolvePackageJSON, readPackageJSON } from 'pkg-types';
|
|
7
|
-
import { lazyEventHandler, eventHandler, createError } from 'h3';
|
|
7
|
+
import { lazyEventHandler, eventHandler, createError, setHeader } from 'h3';
|
|
8
8
|
import { fetch, $fetch } from 'ofetch';
|
|
9
9
|
import { joinURL, parseURL, parseQuery, hasProtocol } from 'ufo';
|
|
10
10
|
import { createStorage } from 'unstorage';
|
|
@@ -42,6 +42,7 @@ function setupPublicAssetStrategy(assetsBaseURL) {
|
|
|
42
42
|
const scriptDescriptor = renderedScript.get(join(assetsBaseURL, cleanPath));
|
|
43
43
|
if (!scriptDescriptor || scriptDescriptor instanceof Error)
|
|
44
44
|
throw createError({ statusCode: 404 });
|
|
45
|
+
setHeader(event, "content-type", "application/javascript; charset=utf-8");
|
|
45
46
|
if (scriptDescriptor.content) {
|
|
46
47
|
return scriptDescriptor.content;
|
|
47
48
|
}
|
|
@@ -739,6 +740,21 @@ function rewriteScriptUrlsAST(content, filename, rewrites, sdkPatches, options)
|
|
|
739
740
|
}
|
|
740
741
|
}
|
|
741
742
|
}
|
|
743
|
+
if (sdkPatches?.some((p) => p.type === "replace-new-url-origin") && node.type === "MemberExpression" && !node.computed) {
|
|
744
|
+
const obj = node.object;
|
|
745
|
+
const prop = node.property;
|
|
746
|
+
if (prop?.type === "Identifier" && prop.name === "origin" && obj?.type === "NewExpression" && obj.callee?.type === "Identifier" && obj.callee.name === "URL" && obj.arguments?.length >= 1) {
|
|
747
|
+
for (const patch of sdkPatches) {
|
|
748
|
+
if (patch.type !== "replace-new-url-origin")
|
|
749
|
+
continue;
|
|
750
|
+
const rewrite = rewrites.find((r) => r.from === patch.fromDomain);
|
|
751
|
+
if (!rewrite)
|
|
752
|
+
continue;
|
|
753
|
+
s.overwrite(node.start, node.end, `${needsLeadingSpace(node.start)}(self.location.origin+"${rewrite.to}")`);
|
|
754
|
+
break;
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
}
|
|
742
758
|
if (node.type === "NewExpression" && !options?.skipApiRewrites) {
|
|
743
759
|
const callee = node.callee;
|
|
744
760
|
if (callee?.type === "Identifier" && callee.name === "XMLHttpRequest") {
|
|
@@ -1159,17 +1175,25 @@ function registerTypeTemplates({ config, newScripts }) {
|
|
|
1159
1175
|
addTypeTemplate({
|
|
1160
1176
|
filename: "types/nuxt-scripts-augments.d.ts",
|
|
1161
1177
|
getContents: () => {
|
|
1178
|
+
const globalsKeys = Object.keys(config.globals || {});
|
|
1162
1179
|
let augments = `// Generated by @nuxt/scripts
|
|
1163
1180
|
declare module '#app' {
|
|
1164
1181
|
interface NuxtApp {
|
|
1165
|
-
$scripts: Record<${[...[...
|
|
1182
|
+
$scripts: Record<${[...[...globalsKeys, ...Object.keys(config.registry || {})].map((k) => `'${k}'`), ...["string"]].join(" | ")}, import('#nuxt-scripts/types').UseScriptContext<any> | undefined>
|
|
1166
1183
|
_scripts: Record<string, import('#nuxt-scripts/types').NuxtDevToolsScriptInstance>
|
|
1167
1184
|
}
|
|
1168
1185
|
interface RuntimeNuxtHooks {
|
|
1169
1186
|
'scripts:updated': (ctx: { scripts: Record<string, import('#nuxt-scripts/types').NuxtDevToolsScriptInstance> }) => void | Promise<void>
|
|
1170
1187
|
}
|
|
1171
1188
|
}
|
|
1172
|
-
|
|
1189
|
+
${globalsKeys.length ? `declare module '@nuxt/schema' {
|
|
1190
|
+
interface PublicRuntimeConfig {
|
|
1191
|
+
scriptsGlobals?: {
|
|
1192
|
+
${globalsKeys.map((k) => ` ${JSON.stringify(k)}?: Record<string, any>`).join("\n")}
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
` : ""}`;
|
|
1173
1197
|
if (newScripts.length) {
|
|
1174
1198
|
augments += `
|
|
1175
1199
|
declare module '#nuxt-scripts/types' {
|
|
@@ -1269,41 +1293,57 @@ function templatePlugin(config, registry) {
|
|
|
1269
1293
|
inits.push(`const ${k} = ${importDefinition.import.name}(${argsJson})`);
|
|
1270
1294
|
}
|
|
1271
1295
|
}
|
|
1296
|
+
const hasGlobals = Object.keys(config.globals || {}).length > 0;
|
|
1272
1297
|
for (const [k, c] of Object.entries(config.globals || {})) {
|
|
1298
|
+
let buildInput;
|
|
1299
|
+
let extraOptions;
|
|
1273
1300
|
if (typeof c === "string") {
|
|
1274
|
-
|
|
1301
|
+
buildInput = { src: c };
|
|
1275
1302
|
} else if (Array.isArray(c) && c.length === 2) {
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
if (triggerResolved) {
|
|
1279
|
-
if (triggerResolved.includes("useScriptTriggerIdleTimeout"))
|
|
1280
|
-
needsIdleTimeoutImport = true;
|
|
1281
|
-
if (triggerResolved.includes("useScriptTriggerInteraction"))
|
|
1282
|
-
needsInteractionImport = true;
|
|
1283
|
-
if (triggerResolved.includes("useScriptTriggerServiceWorker"))
|
|
1284
|
-
needsServiceWorkerImport = true;
|
|
1285
|
-
const resolvedOptions = { ...options, trigger: "__TRIGGER_PLACEHOLDER__" };
|
|
1286
|
-
const optionsJson = JSON.stringify(resolvedOptions).replace(TRIGGER_PLACEHOLDER_RE, triggerResolved);
|
|
1287
|
-
inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...typeof c[0] === "string" ? { src: c[0] } : c[0] })}, { ...${optionsJson}, use: () => ({ ${k}: window.${k} }) })`);
|
|
1288
|
-
} else {
|
|
1289
|
-
inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...typeof c[0] === "string" ? { src: c[0] } : c[0] })}, { ...${JSON.stringify(c[1])}, use: () => ({ ${k}: window.${k} }) })`);
|
|
1290
|
-
}
|
|
1303
|
+
buildInput = typeof c[0] === "string" ? { src: c[0] } : { ...c[0] };
|
|
1304
|
+
extraOptions = c[1];
|
|
1291
1305
|
} else if (typeof c === "object" && c !== null) {
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1306
|
+
buildInput = { ...c };
|
|
1307
|
+
} else {
|
|
1308
|
+
continue;
|
|
1309
|
+
}
|
|
1310
|
+
const inputTrigger = buildInput.trigger;
|
|
1311
|
+
const inputTriggerResolved = resolveTriggerForTemplate(inputTrigger);
|
|
1312
|
+
if (inputTriggerResolved)
|
|
1313
|
+
buildInput.trigger = "__TRIGGER_PLACEHOLDER__";
|
|
1314
|
+
let buildInputJson = JSON.stringify(buildInput);
|
|
1315
|
+
if (inputTriggerResolved)
|
|
1316
|
+
buildInputJson = buildInputJson.replace(TRIGGER_PLACEHOLDER_RE, inputTriggerResolved);
|
|
1317
|
+
const inputExpr = `Object.assign({ key: ${JSON.stringify(k)} }, ${buildInputJson}, __scriptsGlobals[${JSON.stringify(k)}] || {})`;
|
|
1318
|
+
let optionsJson = "";
|
|
1319
|
+
if (extraOptions && Object.keys(extraOptions).length > 0) {
|
|
1320
|
+
const optsCopy = { ...extraOptions };
|
|
1321
|
+
const optsTriggerResolved = resolveTriggerForTemplate(optsCopy.trigger);
|
|
1322
|
+
if (optsTriggerResolved)
|
|
1323
|
+
optsCopy.trigger = "__TRIGGER_PLACEHOLDER__";
|
|
1324
|
+
optionsJson = JSON.stringify(optsCopy);
|
|
1325
|
+
if (optsTriggerResolved)
|
|
1326
|
+
optionsJson = optionsJson.replace(TRIGGER_PLACEHOLDER_RE, optsTriggerResolved);
|
|
1327
|
+
if (optsTriggerResolved) {
|
|
1328
|
+
if (optsTriggerResolved.includes("useScriptTriggerIdleTimeout"))
|
|
1295
1329
|
needsIdleTimeoutImport = true;
|
|
1296
|
-
if (
|
|
1330
|
+
if (optsTriggerResolved.includes("useScriptTriggerInteraction"))
|
|
1297
1331
|
needsInteractionImport = true;
|
|
1298
|
-
if (
|
|
1332
|
+
if (optsTriggerResolved.includes("useScriptTriggerServiceWorker"))
|
|
1299
1333
|
needsServiceWorkerImport = true;
|
|
1300
|
-
const resolvedOptions = { ...c, trigger: "__TRIGGER_PLACEHOLDER__" };
|
|
1301
|
-
const argsJson = JSON.stringify({ key: k, ...resolvedOptions }).replace(TRIGGER_PLACEHOLDER_RE, triggerResolved);
|
|
1302
|
-
inits.push(`const ${k} = useScript(${argsJson}, { use: () => ({ ${k}: window.${k} }) })`);
|
|
1303
|
-
} else {
|
|
1304
|
-
inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...c })}, { use: () => ({ ${k}: window.${k} }) })`);
|
|
1305
1334
|
}
|
|
1306
1335
|
}
|
|
1336
|
+
if (inputTriggerResolved) {
|
|
1337
|
+
if (inputTriggerResolved.includes("useScriptTriggerIdleTimeout"))
|
|
1338
|
+
needsIdleTimeoutImport = true;
|
|
1339
|
+
if (inputTriggerResolved.includes("useScriptTriggerInteraction"))
|
|
1340
|
+
needsInteractionImport = true;
|
|
1341
|
+
if (inputTriggerResolved.includes("useScriptTriggerServiceWorker"))
|
|
1342
|
+
needsServiceWorkerImport = true;
|
|
1343
|
+
}
|
|
1344
|
+
const useFn = `use: () => ({ ${k}: window.${k} })`;
|
|
1345
|
+
const optionsArg = optionsJson ? `{ ...${optionsJson}, ${useFn} }` : `{ ${useFn} }`;
|
|
1346
|
+
inits.push(`const ${k} = useScript(${inputExpr}, ${optionsArg})`);
|
|
1307
1347
|
}
|
|
1308
1348
|
const triggerImports = [];
|
|
1309
1349
|
if (needsIdleTimeoutImport) {
|
|
@@ -1315,9 +1355,14 @@ function templatePlugin(config, registry) {
|
|
|
1315
1355
|
if (needsServiceWorkerImport) {
|
|
1316
1356
|
triggerImports.push(`import { useScriptTriggerServiceWorker } from '#nuxt-scripts/composables/useScriptTriggerServiceWorker'`);
|
|
1317
1357
|
}
|
|
1358
|
+
const setupBody = [];
|
|
1359
|
+
if (hasGlobals)
|
|
1360
|
+
setupBody.push(` const __scriptsGlobals = useRuntimeConfig().public.scriptsGlobals || {}`);
|
|
1361
|
+
setupBody.push(...inits.map((i) => ` ${i}`));
|
|
1362
|
+
setupBody.push(` return { provide: { scripts: { ${[...Object.keys(config.globals || {}), ...resolvedRegistryKeys].join(", ")} } } }`);
|
|
1318
1363
|
return [
|
|
1319
1364
|
`import { useScript } from '#nuxt-scripts/composables/useScript'`,
|
|
1320
|
-
`import { defineNuxtPlugin } from 'nuxt/app'`,
|
|
1365
|
+
`import { defineNuxtPlugin${hasGlobals ? ", useRuntimeConfig" : ""} } from 'nuxt/app'`,
|
|
1321
1366
|
...triggerImports,
|
|
1322
1367
|
...imports,
|
|
1323
1368
|
"",
|
|
@@ -1326,13 +1371,164 @@ function templatePlugin(config, registry) {
|
|
|
1326
1371
|
` env: { islands: false },`,
|
|
1327
1372
|
` parallel: true,`,
|
|
1328
1373
|
` setup() {`,
|
|
1329
|
-
...
|
|
1330
|
-
` return { provide: { scripts: { ${[...Object.keys(config.globals || {}), ...resolvedRegistryKeys].join(", ")} } } }`,
|
|
1374
|
+
...setupBody,
|
|
1331
1375
|
` }`,
|
|
1332
1376
|
`})`
|
|
1333
1377
|
].join("\n");
|
|
1334
1378
|
}
|
|
1335
1379
|
|
|
1380
|
+
const UPPER_RE$1 = /([A-Z])/g;
|
|
1381
|
+
const toScreamingSnake$1 = (s) => s.replace(UPPER_RE$1, "_$1").toUpperCase();
|
|
1382
|
+
const ENV_PREFIX = "NUXT_PUBLIC_SCRIPTS_";
|
|
1383
|
+
const GLOBALS_ENV_PREFIX = "NUXT_PUBLIC_SCRIPTS_GLOBALS_";
|
|
1384
|
+
function levenshtein(a, b) {
|
|
1385
|
+
if (a === b)
|
|
1386
|
+
return 0;
|
|
1387
|
+
if (!a.length)
|
|
1388
|
+
return b.length;
|
|
1389
|
+
if (!b.length)
|
|
1390
|
+
return a.length;
|
|
1391
|
+
const prev = [];
|
|
1392
|
+
for (let j = 0; j <= b.length; j++) prev.push(j);
|
|
1393
|
+
for (let i = 1; i <= a.length; i++) {
|
|
1394
|
+
let prevDiag = prev[0];
|
|
1395
|
+
prev[0] = i;
|
|
1396
|
+
for (let j = 1; j <= b.length; j++) {
|
|
1397
|
+
const tmp = prev[j];
|
|
1398
|
+
prev[j] = a[i - 1] === b[j - 1] ? prevDiag : Math.min(prevDiag, prev[j], prev[j - 1]) + 1;
|
|
1399
|
+
prevDiag = tmp;
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
return prev[b.length];
|
|
1403
|
+
}
|
|
1404
|
+
function validateScriptsEnvVars(scripts, enabledRegistryKeys, logger, globalsKeys = []) {
|
|
1405
|
+
const validGlobalsByScreaming = /* @__PURE__ */ new Map();
|
|
1406
|
+
for (const k of globalsKeys)
|
|
1407
|
+
validGlobalsByScreaming.set(toScreamingSnake$1(k), k);
|
|
1408
|
+
const validByKey = /* @__PURE__ */ new Map();
|
|
1409
|
+
for (const s of scripts) {
|
|
1410
|
+
if (!s.registryKey || !s.envDefaults || !Object.keys(s.envDefaults).length)
|
|
1411
|
+
continue;
|
|
1412
|
+
const screaming = toScreamingSnake$1(s.registryKey);
|
|
1413
|
+
const fields = new Set(Object.keys(s.envDefaults).map(toScreamingSnake$1));
|
|
1414
|
+
validByKey.set(screaming, { camel: s.registryKey, fields });
|
|
1415
|
+
}
|
|
1416
|
+
if (!validByKey.size && !validGlobalsByScreaming.size)
|
|
1417
|
+
return;
|
|
1418
|
+
const allValidEnvKeys = [];
|
|
1419
|
+
for (const [screaming, { fields }] of validByKey) {
|
|
1420
|
+
for (const f of fields)
|
|
1421
|
+
allValidEnvKeys.push(`${ENV_PREFIX}${screaming}_${f}`);
|
|
1422
|
+
}
|
|
1423
|
+
for (const envKey of Object.keys(process.env)) {
|
|
1424
|
+
if (!envKey.startsWith(ENV_PREFIX))
|
|
1425
|
+
continue;
|
|
1426
|
+
if (envKey.startsWith(GLOBALS_ENV_PREFIX)) {
|
|
1427
|
+
if (!validGlobalsByScreaming.size)
|
|
1428
|
+
continue;
|
|
1429
|
+
const segment2 = envKey.slice(GLOBALS_ENV_PREFIX.length);
|
|
1430
|
+
const segmentParts2 = segment2.split("_");
|
|
1431
|
+
let matched = false;
|
|
1432
|
+
for (const [screaming] of validGlobalsByScreaming) {
|
|
1433
|
+
const keyParts = screaming.split("_");
|
|
1434
|
+
if (segmentParts2.length > keyParts.length && keyParts.every((p, i) => segmentParts2[i] === p)) {
|
|
1435
|
+
matched = true;
|
|
1436
|
+
break;
|
|
1437
|
+
}
|
|
1438
|
+
}
|
|
1439
|
+
if (matched)
|
|
1440
|
+
continue;
|
|
1441
|
+
let best;
|
|
1442
|
+
for (const [screaming, camel] of validGlobalsByScreaming) {
|
|
1443
|
+
const head = segmentParts2.slice(0, screaming.split("_").length).join("_");
|
|
1444
|
+
const d = levenshtein(head, screaming);
|
|
1445
|
+
if (!best || d < best.dist)
|
|
1446
|
+
best = { screaming, camel, dist: d };
|
|
1447
|
+
}
|
|
1448
|
+
const suggestion2 = best && best.dist <= Math.max(2, Math.floor(best.screaming.length / 2)) ? ` Did you mean globals key \`${best.camel}\` (\`${GLOBALS_ENV_PREFIX}${best.screaming}_*\`)?` : ` Configured globals: ${[...validGlobalsByScreaming.values()].map((k) => `\`${k}\``).join(", ")}.`;
|
|
1449
|
+
logger.warn(
|
|
1450
|
+
`[scripts] env var \`${envKey}\` does not map to any configured \`scripts.globals\` key.${suggestion2}`
|
|
1451
|
+
);
|
|
1452
|
+
continue;
|
|
1453
|
+
}
|
|
1454
|
+
if (allValidEnvKeys.includes(envKey))
|
|
1455
|
+
continue;
|
|
1456
|
+
const segment = envKey.slice(ENV_PREFIX.length);
|
|
1457
|
+
let matchedKey;
|
|
1458
|
+
for (const [screaming, info] of validByKey) {
|
|
1459
|
+
if (segment === screaming || segment.startsWith(`${screaming}_`)) {
|
|
1460
|
+
matchedKey = { screaming, ...info };
|
|
1461
|
+
break;
|
|
1462
|
+
}
|
|
1463
|
+
}
|
|
1464
|
+
if (matchedKey) {
|
|
1465
|
+
const field = segment.slice(matchedKey.screaming.length + 1);
|
|
1466
|
+
logger.warn(
|
|
1467
|
+
`[scripts] env var \`${envKey}\` does not match any option on \`${matchedKey.camel}\`. Valid fields: ${[...matchedKey.fields].map((f) => `\`${ENV_PREFIX}${matchedKey.screaming}_${f}\``).join(", ")}.${field ? ` Got: \`${field}\`.` : ""}`
|
|
1468
|
+
);
|
|
1469
|
+
continue;
|
|
1470
|
+
}
|
|
1471
|
+
const segmentParts = segment.split("_");
|
|
1472
|
+
let substringMatch;
|
|
1473
|
+
for (const [screaming, info] of validByKey) {
|
|
1474
|
+
const keyParts = screaming.split("_");
|
|
1475
|
+
for (let i = 0; i <= segmentParts.length - keyParts.length; i++) {
|
|
1476
|
+
let ok = true;
|
|
1477
|
+
for (let j = 0; j < keyParts.length; j++) {
|
|
1478
|
+
if (segmentParts[i + j] !== keyParts[j]) {
|
|
1479
|
+
ok = false;
|
|
1480
|
+
break;
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
if (ok) {
|
|
1484
|
+
substringMatch = {
|
|
1485
|
+
screaming,
|
|
1486
|
+
camel: info.camel,
|
|
1487
|
+
fields: info.fields,
|
|
1488
|
+
remainder: segmentParts.slice(i + keyParts.length).join("_")
|
|
1489
|
+
};
|
|
1490
|
+
break;
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
if (substringMatch)
|
|
1494
|
+
break;
|
|
1495
|
+
}
|
|
1496
|
+
let suggestion = "";
|
|
1497
|
+
if (substringMatch) {
|
|
1498
|
+
if (substringMatch.remainder && substringMatch.fields.has(substringMatch.remainder)) {
|
|
1499
|
+
suggestion = ` Did you mean \`${ENV_PREFIX}${substringMatch.screaming}_${substringMatch.remainder}\` (registry key \`${substringMatch.camel}\`)?`;
|
|
1500
|
+
} else {
|
|
1501
|
+
suggestion = ` Did you mean registry key \`${substringMatch.camel}\` (\`${ENV_PREFIX}${substringMatch.screaming}_*\`)?`;
|
|
1502
|
+
}
|
|
1503
|
+
} else {
|
|
1504
|
+
let best;
|
|
1505
|
+
for (const [screaming, info] of validByKey) {
|
|
1506
|
+
const head = segmentParts.slice(0, screaming.split("_").length).join("_");
|
|
1507
|
+
const d = levenshtein(head, screaming);
|
|
1508
|
+
if (!best || d < best.dist)
|
|
1509
|
+
best = { key: screaming, camel: info.camel, dist: d };
|
|
1510
|
+
}
|
|
1511
|
+
if (best && best.dist <= Math.max(2, Math.floor(best.key.length / 2)))
|
|
1512
|
+
suggestion = ` Did you mean registry key \`${best.camel}\` (\`${ENV_PREFIX}${best.key}_*\`)?`;
|
|
1513
|
+
}
|
|
1514
|
+
logger.warn(
|
|
1515
|
+
`[scripts] env var \`${envKey}\` does not map to any registered script.${suggestion}`
|
|
1516
|
+
);
|
|
1517
|
+
}
|
|
1518
|
+
for (const [screaming, info] of validByKey) {
|
|
1519
|
+
if (enabledRegistryKeys.has(info.camel))
|
|
1520
|
+
continue;
|
|
1521
|
+
for (const field of info.fields) {
|
|
1522
|
+
const envKey = `${ENV_PREFIX}${screaming}_${field}`;
|
|
1523
|
+
if (process.env[envKey] !== void 0) {
|
|
1524
|
+
logger.warn(
|
|
1525
|
+
`[scripts] env var \`${envKey}\` is set but \`${info.camel}\` is not registered in \`scripts.registry\`. Add \`registry: { ${info.camel}: {} }\` to your nuxt.config for it to take effect.`
|
|
1526
|
+
);
|
|
1527
|
+
}
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1336
1532
|
const SELF_CLOSING_SCRIPT_RE = /<((?:Script[A-Z]|script-)\w[\w-]*)\b([^>]*?)\/\s*>/g;
|
|
1337
1533
|
function fixSelfClosingScriptComponents(nuxt) {
|
|
1338
1534
|
function expandTags(content) {
|
|
@@ -1483,6 +1679,10 @@ function resolveConfiguredProxyDomains(config, proxyConfig) {
|
|
|
1483
1679
|
}
|
|
1484
1680
|
return [...domains].sort();
|
|
1485
1681
|
}
|
|
1682
|
+
function findMissingRequiredFields(requiredFields, rawInput, mergedPublicScript) {
|
|
1683
|
+
const { scriptOptions: _, ...effectiveInput } = mergedPublicScript ?? rawInput ?? {};
|
|
1684
|
+
return requiredFields.filter((f) => !effectiveInput[f]);
|
|
1685
|
+
}
|
|
1486
1686
|
const module$1 = defineNuxtModule({
|
|
1487
1687
|
meta: {
|
|
1488
1688
|
name: "@nuxt/scripts",
|
|
@@ -1573,6 +1773,12 @@ const module$1 = defineNuxtModule({
|
|
|
1573
1773
|
registryWithDefaults
|
|
1574
1774
|
);
|
|
1575
1775
|
}
|
|
1776
|
+
validateScriptsEnvVars(
|
|
1777
|
+
scripts,
|
|
1778
|
+
new Set(Object.keys(config.registry || {}).filter((k) => config.registry?.[k] !== false)),
|
|
1779
|
+
logger,
|
|
1780
|
+
Object.keys(config.globals || {})
|
|
1781
|
+
);
|
|
1576
1782
|
const googleMapsEnabled = config.googleStaticMapsProxy?.enabled || !!config.registry?.googleMaps;
|
|
1577
1783
|
nuxt.options.runtimeConfig["nuxt-scripts"] = {
|
|
1578
1784
|
version,
|
|
@@ -1587,6 +1793,11 @@ const module$1 = defineNuxtModule({
|
|
|
1587
1793
|
// Only expose enabled and cacheMaxAge to client, not apiKey
|
|
1588
1794
|
googleStaticMapsProxy: googleMapsEnabled ? { enabled: true, cacheMaxAge: config.googleStaticMapsProxy?.cacheMaxAge ?? 3600 } : void 0
|
|
1589
1795
|
};
|
|
1796
|
+
const debugConst = JSON.stringify(!!config.debug);
|
|
1797
|
+
nuxt.options.vite ||= {};
|
|
1798
|
+
nuxt.options.vite.define = { ...nuxt.options.vite.define, __NUXT_SCRIPTS_DEBUG__: debugConst };
|
|
1799
|
+
nuxt.options.nitro ||= {};
|
|
1800
|
+
nuxt.options.nitro.replace = { ...nuxt.options.nitro.replace, __NUXT_SCRIPTS_DEBUG__: debugConst };
|
|
1590
1801
|
const scriptsBase = config.prefix || "/_scripts";
|
|
1591
1802
|
const proxyPrefix = `${scriptsBase}/p`;
|
|
1592
1803
|
const assetsPrefix = `${scriptsBase}/assets`;
|
|
@@ -1659,7 +1870,8 @@ const module$1 = defineNuxtModule({
|
|
|
1659
1870
|
const willAutoLoad = scriptOptions && "trigger" in scriptOptions && scriptOptions.trigger !== false;
|
|
1660
1871
|
if (willAutoLoad) {
|
|
1661
1872
|
const requiredFields = extractRequiredFields(script.schema);
|
|
1662
|
-
const
|
|
1873
|
+
const publicScripts = nuxt.options.runtimeConfig.public?.scripts ?? {};
|
|
1874
|
+
const missing = findMissingRequiredFields(requiredFields, input, publicScripts[key]);
|
|
1663
1875
|
if (missing.length) {
|
|
1664
1876
|
logger.warn(`[nuxt-scripts] registry.${key}: missing required field${missing.length > 1 ? "s" : ""} ${missing.map((f) => `'${f}'`).join(", ")}. The script infrastructure is registered but will not function without ${missing.length > 1 ? "them" : "it"}.`);
|
|
1665
1877
|
}
|
|
@@ -1673,6 +1885,26 @@ const module$1 = defineNuxtModule({
|
|
|
1673
1885
|
}
|
|
1674
1886
|
}
|
|
1675
1887
|
}
|
|
1888
|
+
if (Object.keys(config.globals || {}).length) {
|
|
1889
|
+
const globalsRuntime = {};
|
|
1890
|
+
for (const [k, c] of Object.entries(config.globals || {})) {
|
|
1891
|
+
let input;
|
|
1892
|
+
if (typeof c === "string")
|
|
1893
|
+
input = { src: c };
|
|
1894
|
+
else if (Array.isArray(c) && c.length === 2)
|
|
1895
|
+
input = typeof c[0] === "string" ? { src: c[0] } : { ...c[0] };
|
|
1896
|
+
else if (typeof c === "object" && c !== null)
|
|
1897
|
+
input = { ...c };
|
|
1898
|
+
else
|
|
1899
|
+
continue;
|
|
1900
|
+
delete input.trigger;
|
|
1901
|
+
globalsRuntime[k] = input;
|
|
1902
|
+
}
|
|
1903
|
+
nuxt.options.runtimeConfig.public.scriptsGlobals = defu(
|
|
1904
|
+
globalsRuntime,
|
|
1905
|
+
nuxt.options.runtimeConfig.public.scriptsGlobals
|
|
1906
|
+
);
|
|
1907
|
+
}
|
|
1676
1908
|
nuxt.hooks.hook("modules:done", async () => {
|
|
1677
1909
|
const registryScripts = [...scripts];
|
|
1678
1910
|
await nuxt.hooks.callHook("scripts:registry", registryScripts);
|
|
@@ -1887,7 +2119,11 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
|
|
|
1887
2119
|
const nitroPreset = process.env.NITRO_PRESET || "";
|
|
1888
2120
|
const isStaticTarget = staticPresets.includes(nitroPreset);
|
|
1889
2121
|
const isSpa = nuxt.options.ssr === false;
|
|
1890
|
-
if (
|
|
2122
|
+
if (config.security === false) {
|
|
2123
|
+
if (anyHandlerRequiresSigning && !nuxt.options.dev) {
|
|
2124
|
+
logger.info("[security] Proxy security disabled via `security: false`. Proxy endpoints will pass requests through without signature verification.");
|
|
2125
|
+
}
|
|
2126
|
+
} else if (anyHandlerRequiresSigning && (isSpa || isStaticTarget)) {
|
|
1891
2127
|
logger.warn(
|
|
1892
2128
|
`[security] URL signing requires a server runtime${isStaticTarget ? ` (detected preset: ${nitroPreset})` : " (ssr: false)"}.
|
|
1893
2129
|
Proxy endpoints will work without signature verification.
|
|
@@ -1924,4 +2160,4 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
|
|
|
1924
2160
|
}
|
|
1925
2161
|
});
|
|
1926
2162
|
|
|
1927
|
-
export { applyAutoInject, module$1 as default, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|
|
2163
|
+
export { applyAutoInject, module$1 as default, findMissingRequiredFields, isProxyDisabled, resolveConfiguredProxyDomains, resolveProxySecret };
|