@nuxt/scripts 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/devtools-client/200.html +1 -1
  2. package/dist/devtools-client/404.html +1 -1
  3. package/dist/devtools-client/_nuxt/B5UH0Ds3.js +188 -0
  4. package/dist/devtools-client/_nuxt/{C3h_qg0j.js → BKha4otU.js} +1 -1
  5. package/dist/devtools-client/_nuxt/{CKrGhxlH.js → BNnOFEgA.js} +1 -1
  6. package/dist/devtools-client/_nuxt/{BjIIVRlr.js → CK-VPzWc.js} +1 -1
  7. package/dist/devtools-client/_nuxt/{DTVoxnk-.js → D1-tSGjF.js} +1 -1
  8. package/dist/devtools-client/_nuxt/{TnW0ti1s.js → DXbMEK4S.js} +1 -1
  9. package/dist/devtools-client/_nuxt/DZC4fp-D.js +1 -0
  10. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  11. package/dist/devtools-client/_nuxt/builds/meta/6689578b-eedf-440f-89c7-1c51715a9fd2.json +1 -0
  12. package/dist/devtools-client/_nuxt/entry.By2_NhVg.css +1 -0
  13. package/dist/devtools-client/_nuxt/error-404.CmHnDJ22.css +1 -0
  14. package/dist/devtools-client/_nuxt/error-500.C0mC5XzU.css +1 -0
  15. package/dist/devtools-client/docs/index.html +1 -1
  16. package/dist/devtools-client/first-party/index.html +1 -1
  17. package/dist/devtools-client/index.html +1 -1
  18. package/dist/devtools-client/registry/index.html +1 -1
  19. package/dist/module.json +1 -1
  20. package/dist/module.mjs +59 -49
  21. package/dist/registry.mjs +13 -8
  22. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +33 -4
  23. package/dist/runtime/server/bluesky-embed-image.d.ts +1 -1
  24. package/dist/runtime/server/bluesky-embed.d.ts +1 -1
  25. package/dist/runtime/server/google-maps-geocode-proxy.d.ts +1 -1
  26. package/dist/runtime/server/google-static-maps-proxy.d.ts +1 -1
  27. package/dist/runtime/server/gravatar-proxy.d.ts +1 -1
  28. package/dist/runtime/server/instagram-embed-asset.d.ts +1 -1
  29. package/dist/runtime/server/instagram-embed-image.d.ts +1 -1
  30. package/dist/runtime/server/instagram-embed.d.ts +1 -1
  31. package/dist/runtime/server/proxy-handler.js +2 -3
  32. package/dist/runtime/server/utils/image-proxy.d.ts +1 -1
  33. package/dist/runtime/server/utils/withSigning.d.ts +1 -1
  34. package/dist/runtime/server/x-embed-image.d.ts +1 -1
  35. package/dist/runtime/server/x-embed.d.ts +1 -48
  36. package/dist/runtime/types.d.ts +8 -0
  37. package/package.json +3 -3
  38. package/dist/devtools-client/_nuxt/DD1eKorn.js +0 -1
  39. package/dist/devtools-client/_nuxt/UTyLw2F_.js +0 -188
  40. package/dist/devtools-client/_nuxt/builds/meta/8eda1fb3-23bc-456f-8373-7e503f9580ec.json +0 -1
  41. package/dist/devtools-client/_nuxt/entry.BKkVrcJj.css +0 -1
  42. package/dist/devtools-client/_nuxt/error-404.Rdq9GpXu.css +0 -1
  43. package/dist/devtools-client/_nuxt/error-500.BPHNCR4E.css +0 -1
package/dist/module.mjs CHANGED
@@ -704,14 +704,15 @@ function rewriteScriptUrlsAST(content, filename, rewrites, sdkPatches, options)
704
704
  }
705
705
  }
706
706
  }
707
- if (sdkPatches?.some((p) => p.type === "neutralize-domain-check") && node.type === "BinaryExpression" && node.operator === "<") {
707
+ const neutralizePatches = sdkPatches?.filter((p) => p.type === "neutralize-domain-check");
708
+ if (neutralizePatches?.length && node.type === "BinaryExpression" && node.operator === "<") {
708
709
  const left = node.left;
709
710
  const right = node.right;
710
711
  if (right?.type === "Literal" && right.value === 0 && left?.type === "CallExpression" && left.callee?.type === "MemberExpression") {
711
712
  const prop = left.callee.computed ? left.callee.property?.type === "Literal" && typeof left.callee.property.value === "string" ? left.callee.property.value : null : left.callee.property?.name;
712
713
  if (prop === "indexOf" && left.arguments?.length === 1) {
713
714
  const arg = left.arguments[0];
714
- if (arg?.type === "Literal" && typeof arg.value === "string" && rewrites.some((r) => arg.value.includes(r.from))) {
715
+ if (arg?.type === "Literal" && typeof arg.value === "string" && neutralizePatches.some((p) => arg.value.includes(p.domain))) {
715
716
  s.overwrite(right.start, right.end, "-1");
716
717
  }
717
718
  }
@@ -789,46 +790,42 @@ async function isCacheExpired(storage, filename, cacheMaxAge = SEVEN_DAYS_IN_MS)
789
790
  }
790
791
  return Date.now() - meta.timestamp > cacheMaxAge;
791
792
  }
793
+ function safeFilename(h) {
794
+ return `${h.startsWith("-") ? `_${h.slice(1)}` : h}.js`;
795
+ }
796
+ function buildAssetUrl(filename, assetsBaseURL = "/_scripts/assets") {
797
+ const nuxt = tryUseNuxt();
798
+ const cdnURL = nuxt?.options.runtimeConfig?.app?.cdnURL || nuxt?.options.app?.cdnURL || "";
799
+ const baseURL = cdnURL || nuxt?.options.app.baseURL || "";
800
+ return joinURL(joinURL(baseURL, assetsBaseURL), filename);
801
+ }
792
802
  function normalizeScriptData(src, assetsBaseURL = "/_scripts/assets") {
793
803
  if (hasProtocol(src, { acceptRelative: true })) {
794
804
  src = src.replace(PROTOCOL_RELATIVE_RE, "https://");
795
805
  const url = parseURL(src);
796
- const h = hash(url);
797
- const file = `${h.startsWith("-") ? `_${h.slice(1)}` : h}.js`;
798
- const nuxt = tryUseNuxt();
799
- const cdnURL = nuxt?.options.runtimeConfig?.app?.cdnURL || nuxt?.options.app?.cdnURL || "";
800
- const baseURL = cdnURL || nuxt?.options.app.baseURL || "";
801
- return { url: joinURL(joinURL(baseURL, assetsBaseURL), file), filename: file };
806
+ const file = safeFilename(hash(url));
807
+ return { url: buildAssetUrl(file, assetsBaseURL), filename: file };
802
808
  }
803
809
  return { url: src };
804
810
  }
805
811
  async function downloadScript(opts, renderedScript, fetchOptions, cacheMaxAge) {
806
- const { src, url, filename, forceDownload, integrity, proxyRewrites, sdkPatches, skipApiRewrites, neutralizeCanvas } = opts;
812
+ const { src, url, filename, forceDownload, integrity, proxyRewrites, sdkPatches, skipApiRewrites, neutralizeCanvas, assetsBaseURL } = opts;
807
813
  if (src === url || !filename) {
808
814
  return;
809
815
  }
810
816
  const storage = bundleStorage();
811
- const scriptContent = renderedScript.get(src);
812
- let res = scriptContent instanceof Error ? void 0 : scriptContent?.content;
813
- if (!res) {
814
- const proxyRewritesHash = proxyRewrites?.length ? `-${hash(proxyRewrites)}` : "";
815
- const cacheKey = proxyRewrites?.length ? `bundle-proxy:${filename.replace(".js", `${proxyRewritesHash}.js`)}` : `bundle:${filename}`;
816
- const shouldUseCache = !forceDownload && await storage.hasItem(cacheKey) && !await isCacheExpired(storage, filename, cacheMaxAge);
817
- if (shouldUseCache) {
818
- const cachedContent = await storage.getItemRaw(cacheKey);
819
- const meta = await storage.getItem(`bundle-meta:${filename}`);
820
- renderedScript.set(url, {
821
- content: cachedContent,
822
- size: cachedContent.length / 1024,
823
- encoding: "utf-8",
824
- src,
825
- filename,
826
- integrity: meta?.integrity
827
- });
828
- return;
829
- }
830
- let encoding;
831
- let size = 0;
817
+ let res;
818
+ let encoding;
819
+ let size = 0;
820
+ let fetched = false;
821
+ const hasRewrites = !!(proxyRewrites?.length || sdkPatches?.length);
822
+ const rewriteHash = hasRewrites ? `-${hash({ proxyRewrites, sdkPatches })}` : "";
823
+ const cacheKey = hasRewrites ? `bundle-patched:${filename.replace(".js", `${rewriteHash}.js`)}` : `bundle:${filename}`;
824
+ const shouldUseCache = !forceDownload && await storage.hasItem(cacheKey) && !await isCacheExpired(storage, filename, cacheMaxAge);
825
+ if (shouldUseCache) {
826
+ res = await storage.getItemRaw(cacheKey);
827
+ encoding = "utf-8";
828
+ } else {
832
829
  res = await $fetch.raw(src, { ...fetchOptions, responseType: "arrayBuffer" }).then(async (r) => {
833
830
  if (!r.ok) {
834
831
  throw new Error(`Failed to fetch ${src} (HTTP ${r.status})`);
@@ -838,32 +835,41 @@ async function downloadScript(opts, renderedScript, fetchOptions, cacheMaxAge) {
838
835
  size = contentLength ? Number(contentLength) / 1024 : 0;
839
836
  return Buffer.from(r._data || await r.arrayBuffer());
840
837
  });
838
+ fetched = true;
841
839
  await storage.setItemRaw(`bundle:${filename}`, res);
842
- if (proxyRewrites?.length && res) {
840
+ if (hasRewrites && res) {
843
841
  const content = res.toString("utf-8");
844
- const rewritten = rewriteScriptUrlsAST(content, filename || "script.js", proxyRewrites, sdkPatches, { skipApiRewrites, neutralizeCanvas });
842
+ const rewritten = rewriteScriptUrlsAST(content, filename, proxyRewrites ?? [], sdkPatches, { skipApiRewrites, neutralizeCanvas });
845
843
  res = Buffer.from(rewritten, "utf-8");
846
- logger.debug(`Rewrote ${proxyRewrites.length} URL patterns in ${filename}`);
844
+ logger.debug(`Rewrote ${proxyRewrites?.length ?? 0} URL patterns + ${sdkPatches?.length ?? 0} sdk patches in ${filename}`);
847
845
  }
848
- const integrityHash = integrity && res ? calculateIntegrity(res, integrity === true ? "sha384" : integrity) : void 0;
849
846
  await storage.setItemRaw(cacheKey, res);
850
847
  await storage.setItem(`bundle-meta:${filename}`, {
851
848
  timestamp: Date.now(),
852
849
  src,
853
- filename,
854
- integrity: integrityHash
855
- });
856
- size = size || res.length / 1024;
857
- logger.info(`Downloading script ${colors.gray(`${src} \u2192 ${filename} (${size.toFixed(2)} kB ${encoding})${integrityHash ? ` [${integrityHash.slice(0, 15)}...]` : ""}`)}`);
858
- renderedScript.set(url, {
859
- content: res,
860
- size,
861
- encoding,
862
- src,
863
- filename,
864
- integrity: integrityHash
850
+ filename
865
851
  });
866
852
  }
853
+ if (!res) {
854
+ return;
855
+ }
856
+ const contentHash = createHash("sha256").update(res).digest("hex").slice(0, 16);
857
+ const publicFilename = safeFilename(contentHash);
858
+ const publicUrl = buildAssetUrl(publicFilename, assetsBaseURL);
859
+ const integrityHash = integrity ? calculateIntegrity(res, integrity === true ? "sha384" : integrity) : void 0;
860
+ size = size || res.length / 1024;
861
+ if (fetched) {
862
+ logger.info(`Downloading script ${colors.gray(`${src} \u2192 ${publicFilename} (${size.toFixed(2)} kB ${encoding})${integrityHash ? ` [${integrityHash.slice(0, 15)}...]` : ""}`)}`);
863
+ }
864
+ renderedScript.set(publicUrl, {
865
+ content: res,
866
+ size,
867
+ encoding: encoding || void 0,
868
+ src,
869
+ filename: publicFilename,
870
+ integrity: integrityHash
871
+ });
872
+ return { url: publicUrl, filename: publicFilename };
867
873
  }
868
874
  function NuxtScriptBundleTransformer(options = {
869
875
  renderedScript: /* @__PURE__ */ new Map()
@@ -1058,13 +1064,17 @@ function NuxtScriptBundleTransformer(options = {
1058
1064
  from: domain,
1059
1065
  to: `${options.proxyPrefix}/${domain}`
1060
1066
  }));
1061
- const sdkPatches = proxyConfig?.sdkPatches;
1062
- const skipApiRewrites = !!(registryKey && options.partytownScripts?.has(registryKey));
1067
+ const bundleConfig = typeof script?.bundle === "object" ? script.bundle : void 0;
1068
+ const sdkPatches = proxyConfig?.sdkPatches ?? bundleConfig?.sdkPatches;
1069
+ const skipApiRewrites = !!(registryKey && options.partytownScripts?.has(registryKey)) || !proxyConfig;
1063
1070
  const neutralizeCanvas = proxyConfig?.privacy !== void 0 && typeof proxyConfig.privacy === "object" ? proxyConfig.privacy.hardware ?? true : true;
1064
1071
  deferredOps.push(async () => {
1065
1072
  let url = _url;
1066
1073
  try {
1067
- await downloadScript({ src, url, filename, forceDownload, proxyRewrites, sdkPatches, integrity: options.integrity, skipApiRewrites, neutralizeCanvas }, renderedScript, options.fetchOptions, options.cacheMaxAge);
1074
+ const result = await downloadScript({ src, url, filename, forceDownload, proxyRewrites, sdkPatches, integrity: options.integrity, skipApiRewrites, neutralizeCanvas, assetsBaseURL: options.assetsBaseURL }, renderedScript, options.fetchOptions, options.cacheMaxAge);
1075
+ if (result) {
1076
+ url = result.url;
1077
+ }
1068
1078
  } catch (e) {
1069
1079
  if (options.fallbackOnSrcOnBundleFail) {
1070
1080
  logger.warn(`[Nuxt Scripts: Bundle Transformer] Failed to bundle ${src}. Fallback to remote loading.`);
package/dist/registry.mjs CHANGED
@@ -89,7 +89,12 @@ const registryMeta = [
89
89
  m("plausibleAnalytics", "Plausible Analytics", "analytics", "useScriptPlausibleAnalytics", { bundle: true, proxy: true, partytown: true }, PRIVACY_IP_ONLY),
90
90
  m("cloudflareWebAnalytics", "Cloudflare Web Analytics", "analytics", "useScriptCloudflareWebAnalytics", { bundle: true, proxy: true, partytown: true }, PRIVACY_IP_ONLY),
91
91
  m("posthog", "PostHog", "analytics", "useScriptPostHog", { proxy: true }, PRIVACY_IP_ONLY),
92
- m("fathomAnalytics", "Fathom Analytics", "analytics", "useScriptFathomAnalytics", { bundle: true, proxy: true, partytown: true }, PRIVACY_IP_ONLY),
92
+ // proxy intentionally off: proxied beacons reach Fathom from the server's IP
93
+ // (datacenter) and Fathom's bot detection ignores X-Forwarded-For, flagging
94
+ // every visitor as a bot. Bundle is supported via neutralize-domain-check —
95
+ // the script is served from the user's origin but beacons still go directly
96
+ // to cdn.usefathom.com so Fathom sees real client IPs. See nuxt/scripts#720.
97
+ m("fathomAnalytics", "Fathom Analytics", "analytics", "useScriptFathomAnalytics", { bundle: true }, null),
93
98
  m("matomoAnalytics", "Matomo Analytics", "analytics", "useScriptMatomoAnalytics", { proxy: true, partytown: true }, PRIVACY_IP_ONLY),
94
99
  m("rybbitAnalytics", "Rybbit Analytics", "analytics", "useScriptRybbitAnalytics", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
95
100
  m("databuddyAnalytics", "Databuddy Analytics", "analytics", "useScriptDatabuddyAnalytics", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
@@ -270,13 +275,13 @@ async function registry(resolve) {
270
275
  src: "https://cdn.usefathom.com/script.js",
271
276
  category: "analytics",
272
277
  envDefaults: { site: "" },
273
- bundle: true,
274
- proxy: {
275
- domains: ["cdn.usefathom.com", "usefathom.com"],
276
- privacy: PRIVACY_IP_ONLY,
277
- sdkPatches: [{ type: "neutralize-domain-check" }]
278
- },
279
- partytown: { forwards: ["fathom", "fathom.trackEvent", "fathom.trackPageview"] }
278
+ // Bundle without proxy: serve the script from the user's origin (faster
279
+ // load, ad-blocker resistant for domain-based blocking) but keep beacons
280
+ // pointed at cdn.usefathom.com via the neutralize-domain-check patch so
281
+ // Fathom sees real client IPs. Proxying is unsupported (see #720).
282
+ bundle: {
283
+ sdkPatches: [{ type: "neutralize-domain-check", domain: "cdn.usefathom.com" }]
284
+ }
280
285
  }),
281
286
  def("matomoAnalytics", {
282
287
  schema: MatomoAnalyticsOptions,
@@ -8,7 +8,7 @@ import { useScriptGoogleMaps } from "#nuxt-scripts/registry/google-maps";
8
8
  import { scriptRuntimeConfig, scriptsPrefix } from "#nuxt-scripts/utils";
9
9
  import { defu } from "defu";
10
10
  import { tryUseNuxtApp, useHead, useRuntimeConfig } from "nuxt/app";
11
- import { computed, onBeforeUnmount, onMounted, provide, ref, shallowRef, toRaw, useAttrs, useTemplateRef, watch } from "vue";
11
+ import { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, shallowRef, toRaw, useAttrs, useTemplateRef, watch } from "vue";
12
12
  import ScriptAriaLoadingIndicator from "../ScriptAriaLoadingIndicator.vue";
13
13
  import { defineDeprecatedAlias, MAP_INJECTION_KEY, waitForMapsReady, warnDeprecatedTopLevelMapProps } from "./useGoogleMapsResource";
14
14
  const props = defineProps({
@@ -42,6 +42,11 @@ const currentMapId = computed(() => {
42
42
  return props.mapOptions?.mapId;
43
43
  return props.mapIds[currentColorMode.value] || props.mapIds.light || props.mapOptions?.mapId;
44
44
  });
45
+ const currentColorScheme = computed(() => {
46
+ if (!props.mapIds && !props.colorMode && !nuxtColorMode.value)
47
+ return void 0;
48
+ return currentColorMode.value === "dark" ? "DARK" : "LIGHT";
49
+ });
45
50
  const mapsApi = shallowRef();
46
51
  if (import.meta.dev) {
47
52
  if (!apiKey)
@@ -76,13 +81,14 @@ const { load, status, onLoaded } = useScriptGoogleMaps({
76
81
  const options = computed(() => {
77
82
  const mapId = props.mapOptions?.styles ? void 0 : currentMapId.value || "DEMO_MAP_ID";
78
83
  return defu(
79
- { center: centerOverride.value, mapId },
84
+ { center: centerOverride.value, mapId, colorScheme: currentColorScheme.value },
80
85
  props.mapOptions,
81
86
  { center: props.center, zoom: props.zoom },
82
87
  { zoom: 15 }
83
88
  );
84
89
  });
85
90
  const isMapReady = ref(false);
91
+ const slotMounted = ref(true);
86
92
  const map = shallowRef();
87
93
  function isLocationQuery(s) {
88
94
  return typeof s === "string" && (s.split(",").length > 2 || s.includes("+"));
@@ -191,9 +197,32 @@ onMounted(() => {
191
197
  watch(options, () => {
192
198
  if (!map.value)
193
199
  return;
194
- const { center: _, zoom: __, ...rest } = options.value;
200
+ const { center: _, zoom: __, mapId: ___, colorScheme: ____, ...rest } = options.value;
195
201
  map.value.setOptions(rest);
196
202
  });
203
+ watch([currentMapId, currentColorScheme], async ([newMapId, newScheme], [oldMapId, oldScheme]) => {
204
+ if (!map.value || !mapsApi.value || !mapEl.value)
205
+ return;
206
+ if (newMapId === oldMapId && newScheme === oldScheme)
207
+ return;
208
+ const center = map.value.getCenter();
209
+ const zoom = map.value.getZoom();
210
+ map.value.unbindAll();
211
+ map.value = void 0;
212
+ slotMounted.value = false;
213
+ if (mapEl.value)
214
+ mapEl.value.innerHTML = "";
215
+ await nextTick();
216
+ if (!mapEl.value || !mapsApi.value)
217
+ return;
218
+ const _options = {
219
+ ...options.value,
220
+ center: center ? { lat: center.lat(), lng: center.lng() } : options.value.center,
221
+ zoom: zoom ?? options.value.zoom
222
+ };
223
+ map.value = new mapsApi.value.Map(mapEl.value, _options);
224
+ slotMounted.value = true;
225
+ });
197
226
  watch(() => options.value.zoom, (zoom) => {
198
227
  if (map.value && zoom != null)
199
228
  map.value.setZoom(zoom);
@@ -294,6 +323,6 @@ onBeforeUnmount(() => {
294
323
  </slot>
295
324
  <slot v-if="status === 'awaitingLoad'" name="awaitingLoad" />
296
325
  <slot v-else-if="status === 'error'" name="error" />
297
- <slot />
326
+ <slot v-if="slotMounted" />
298
327
  </div>
299
328
  </template>
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Record<string, any>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,3 +1,3 @@
1
1
  export { proxyAssetUrl, proxyImageUrl, rewriteUrl, rewriteUrlsInText, scopeCss } from './utils/instagram-embed.js';
2
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<string>>;
2
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
3
3
  export default _default;
@@ -1,4 +1,4 @@
1
- import { createError, defineEventHandler, getHeaders, getQuery, getRequestIP, getRequestWebStream, readBody, setResponseHeader } from "h3";
1
+ import { createError, defineEventHandler, getHeaders, getQuery, getRequestIP, getRequestWebStream, readBody, setResponseHeader, setResponseStatus } from "h3";
2
2
  import { useNitroApp, useRuntimeConfig } from "nitropack/runtime";
3
3
  import {
4
4
  anonymizeIP,
@@ -264,8 +264,7 @@ export default defineEventHandler(async (event) => {
264
264
  setResponseHeader(event, key, value);
265
265
  }
266
266
  });
267
- event.node.res.statusCode = response.status;
268
- event.node.res.statusMessage = response.statusText;
267
+ setResponseStatus(event, response.status, response.statusText);
269
268
  const responseContentType = response.headers.get("content-type") || "";
270
269
  const isTextContent = responseContentType.includes("text") || responseContentType.includes("javascript") || responseContentType.includes("json");
271
270
  if (isTextContent) {
@@ -11,4 +11,4 @@ export interface ImageProxyConfig {
11
11
  /** Unique name for the nitro cache group (defaults to derived from allowedDomains). */
12
12
  cacheName?: string;
13
13
  }
14
- export declare function createImageProxyHandler(config: ImageProxyConfig): import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
14
+ export declare function createImageProxyHandler(config: ImageProxyConfig): import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
@@ -20,4 +20,4 @@
20
20
  * never reach the upstream fetch and cannot consume API quota.
21
21
  */
22
22
  import type { EventHandler, EventHandlerRequest, EventHandlerResponse } from 'h3';
23
- export declare function withSigning<Req extends EventHandlerRequest = EventHandlerRequest, Res extends EventHandlerResponse = EventHandlerResponse>(handler: EventHandler<Req, Res>): EventHandler<Req, Res>;
23
+ export declare function withSigning<Req extends EventHandlerRequest = EventHandlerRequest, Res extends EventHandlerResponse = EventHandlerResponse>(handler: EventHandler<Req, Res>): EventHandler<Req, any>;
@@ -1,2 +1,2 @@
1
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<Buffer<ArrayBufferLike>>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
2
2
  export default _default;
@@ -1,49 +1,2 @@
1
- interface TweetData {
2
- id_str: string;
3
- text: string;
4
- created_at: string;
5
- favorite_count: number;
6
- conversation_count: number;
7
- user: {
8
- name: string;
9
- screen_name: string;
10
- profile_image_url_https: string;
11
- verified?: boolean;
12
- is_blue_verified?: boolean;
13
- };
14
- entities?: {
15
- media?: Array<{
16
- media_url_https: string;
17
- type: string;
18
- sizes: Record<string, {
19
- w: number;
20
- h: number;
21
- }>;
22
- }>;
23
- urls?: Array<{
24
- url: string;
25
- expanded_url: string;
26
- display_url: string;
27
- }>;
28
- };
29
- photos?: Array<{
30
- url: string;
31
- width: number;
32
- height: number;
33
- }>;
34
- video?: {
35
- poster: string;
36
- variants: Array<{
37
- type: string;
38
- src: string;
39
- }>;
40
- };
41
- quoted_tweet?: TweetData;
42
- parent?: {
43
- user: {
44
- screen_name: string;
45
- };
46
- };
47
- }
48
- declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<TweetData>>;
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, any>;
49
2
  export default _default;
@@ -337,6 +337,13 @@ export interface ScriptDomain {
337
337
  export interface BundleCapability {
338
338
  /** Custom URL resolution. If omitted, the script's `src` is used. */
339
339
  resolve?: (options?: any) => string | false;
340
+ /**
341
+ * AST-level SDK patches applied during bundling, independent of proxy.
342
+ * Use for scripts that need self-hosted detection neutralization but should
343
+ * still send beacons directly to the origin (e.g. Fathom, where proxying
344
+ * triggers bot detection but bundling is otherwise safe).
345
+ */
346
+ sdkPatches?: SdkPatch[];
340
347
  }
341
348
  /**
342
349
  * Proxy capability config. When present, collection requests can be
@@ -362,6 +369,7 @@ export interface ProxyCapability {
362
369
  */
363
370
  export type SdkPatch = {
364
371
  type: 'neutralize-domain-check';
372
+ domain: string;
365
373
  }
366
374
  /**
367
375
  * Replace `<expr>.split("<separator>")[0]` patterns used by SDKs that derive
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuxt/scripts",
3
3
  "type": "module",
4
- "version": "1.0.1",
4
+ "version": "1.0.3",
5
5
  "description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -112,10 +112,10 @@
112
112
  "magic-string": "^0.30.21",
113
113
  "ofetch": "^1.5.1",
114
114
  "ohash": "^2.0.11",
115
- "oxc-parser": "^0.126.0",
115
+ "oxc-parser": "^0.128.0",
116
116
  "oxc-walker": "^0.7.0",
117
117
  "pathe": "^2.0.3",
118
- "pkg-types": "^2.3.0",
118
+ "pkg-types": "^2.3.1",
119
119
  "sirv": "^3.0.2",
120
120
  "std-env": "^4.1.0",
121
121
  "ufo": "^1.6.3",
@@ -1 +0,0 @@
1
- import{x as We,y as Ve,z as Ge,A,B as Be,C as me,D as fe,E as ge,G as D,H as oe,I as Je,J as _e,K as Xe,f as O,L,M as j,N as se,O as ae,P as Qe,Q as Ye,R as re,S as xe,o as n,g as P,w,T as $,h as o,U as J,q as Ze,V as et,W as $e,X as Ee,Y as Te,Z as Fe,$ as tt,a0 as M,a1 as U,a2 as he,a3 as Ae,a4 as De,a5 as ot,b as S,a6 as Re,a7 as Le,a8 as z,a9 as X,aa as ve,ab as Ne,ac as Ie,ad as Me,ae as Ue,af as st,ag as at,ah as rt,ai as nt,c as v,n as R,a as i,t as h,_ as H,j as Q,d as F,m as B,aj as lt,ak as it,al as ut,am as we,an as dt,ao as ne,ap as ct,aq as ke,F as E,ar as le,as as ie,r as N,at as Y,au as pt,av as ze,l as ft,aw as vt,ax as ue,ay as W,az as yt,aA as qe,aB as V,aC as mt,aD as Ce,aE as gt,aF as _t,aG as Z,aH as ht,i as bt,aI as de,aJ as xt}from"./UTyLw2F_.js";const wt=Ve(()=>{const e=A(new Map),a=A(),t=D(()=>{for(const y of e.value.values())if(y)return!0;return!1}),s=Ge({scrollBody:A(!0)}),p=()=>{document.body.style.paddingRight="",document.body.style.marginRight="",document.body.style.pointerEvents="",document.documentElement.style.removeProperty("--scrollbar-width"),document.body.style.overflow=a.value??"",a.value=void 0};return Be(t,(y,d)=>{if(!me)return;if(!y){d&&p();return}a.value===void 0&&(a.value=document.body.style.overflow);const u=window.innerWidth-document.documentElement.clientWidth,m={padding:u,margin:0},_=s.scrollBody?.value?typeof s.scrollBody.value=="object"?fe({padding:s.scrollBody.value.padding===!0?u:s.scrollBody.value.padding,margin:s.scrollBody.value.margin===!0?u:s.scrollBody.value.margin},m):m:{padding:0,margin:0};u>0&&(document.body.style.paddingRight=typeof _.padding=="number"?`${_.padding}px`:String(_.padding),document.body.style.marginRight=typeof _.margin=="number"?`${_.margin}px`:String(_.margin),document.documentElement.style.setProperty("--scrollbar-width",`${u}px`),document.body.style.overflow="hidden"),ge(()=>{t.value&&(document.body.style.pointerEvents="none",document.body.style.overflow="hidden")})},{immediate:!0,flush:"sync"}),e});function kt(e){const a=Math.random().toString(36).substring(2,7),t=wt();t.value.set(a,e);const s=D({get:()=>t.value.get(a)??!1,set:p=>t.value.set(a,p)});return We(()=>{t.value.delete(a)}),s}let ce=0;function qt(){oe(e=>{if(!me)return;const a=document.querySelectorAll("[data-reka-focus-guard]");document.body.insertAdjacentElement("afterbegin",a[0]??Pe()),document.body.insertAdjacentElement("beforeend",a[1]??Pe()),ce++,e(()=>{ce===1&&document.querySelectorAll("[data-reka-focus-guard]").forEach(t=>t.remove()),ce--})})}function Pe(){const e=document.createElement("span");return e.setAttribute("data-reka-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var Ct=function(e){if(typeof document>"u")return null;var a=Array.isArray(e)?e[0]:e;return a.ownerDocument.body},G=new WeakMap,ee=new WeakMap,te={},pe=0,je=function(e){return e&&(e.host||je(e.parentNode))},Pt=function(e,a){return a.map(function(t){if(e.contains(t))return t;var s=je(t);return s&&e.contains(s)?s:(console.error("aria-hidden",t,"in not contained inside",e,". Doing nothing"),null)}).filter(function(t){return!!t})},St=function(e,a,t,s){var p=Pt(a,Array.isArray(e)?e:[e]);te[t]||(te[t]=new WeakMap);var y=te[t],d=[],u=new Set,m=new Set(p),_=function(f){!f||u.has(f)||(u.add(f),_(f.parentNode))};p.forEach(_);var g=function(f){!f||m.has(f)||Array.prototype.forEach.call(f.children,function(x){if(u.has(x))g(x);else try{var C=x.getAttribute(s),b=C!==null&&C!=="false",l=(G.get(x)||0)+1,c=(y.get(x)||0)+1;G.set(x,l),y.set(x,c),d.push(x),l===1&&b&&ee.set(x,!0),c===1&&x.setAttribute(t,"true"),b||x.setAttribute(s,"true")}catch(r){console.error("aria-hidden: cannot operate on ",x,r)}})};return g(a),u.clear(),pe++,function(){d.forEach(function(f){var x=G.get(f)-1,C=y.get(f)-1;G.set(f,x),y.set(f,C),x||(ee.has(f)||f.removeAttribute(s),ee.delete(f)),C||f.removeAttribute(t)}),pe--,pe||(G=new WeakMap,G=new WeakMap,ee=new WeakMap,te={})}},Ot=function(e,a,t){t===void 0&&(t="data-aria-hidden");var s=Array.from(Array.isArray(e)?e:[e]),p=Ct(e);return p?(s.push.apply(s,Array.from(p.querySelectorAll("[aria-live], script"))),St(s,p,t,"aria-hidden")):function(){return null}};function Bt(e){let a;Be(()=>Je(e),t=>{let s=!1;try{s=!!t?.closest("[popover]:not(:popover-open)")}catch{}t&&!s?a=Ot(t):a&&a()}),_e(()=>{a&&a()})}const $t=Xe(()=>A([]));function Et(){const e=$t();return{add(a){const t=e.value[0];a!==t&&t?.pause(),e.value=Se(e.value,a),e.value.unshift(a)},remove(a){e.value=Se(e.value,a),e.value[0]?.resume()}}}function Se(e,a){const t=[...e],s=t.indexOf(a);return s!==-1&&t.splice(s,1),t}var Tt=O({__name:"FocusScope",props:{loop:{type:Boolean,required:!1,default:!1},trapped:{type:Boolean,required:!1,default:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["mountAutoFocus","unmountAutoFocus"],setup(e,{emit:a}){const t=e,s=a,{currentRef:p,currentElement:y}=L(),d=A(null),u=Et(),m=Ze({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}});oe(g=>{if(!me)return;const f=y.value;if(!t.trapped)return;function x(c){if(m.paused||!f)return;const r=c.target;f.contains(r)?d.value=r:j(d.value,{select:!0})}function C(c){if(m.paused||!f)return;const r=c.relatedTarget;r!==null&&(f.contains(r)||j(d.value,{select:!0}))}function b(c){const r=d.value;if(r===null||!c.some(k=>k.removedNodes.length>0))return;f.contains(r)||j(f)}document.addEventListener("focusin",x),document.addEventListener("focusout",C);const l=new MutationObserver(b);f&&l.observe(f,{childList:!0,subtree:!0}),g(()=>{document.removeEventListener("focusin",x),document.removeEventListener("focusout",C),l.disconnect()})}),oe(async g=>{const f=y.value;if(await ge(),!f)return;u.add(m);const x=se();if(!f.contains(x)){const b=new CustomEvent(ae,xe);f.addEventListener(ae,l=>s("mountAutoFocus",l)),f.dispatchEvent(b),b.defaultPrevented||(Qe(Ye(f),{select:!0}),se()===x&&j(f))}g(()=>{f.removeEventListener(ae,c=>s("mountAutoFocus",c));const b=new CustomEvent(re,xe),l=c=>{s("unmountAutoFocus",c)};f.addEventListener(re,l),f.dispatchEvent(b),setTimeout(()=>{b.defaultPrevented||j(x??document.body,{select:!0}),f.removeEventListener(re,l),u.remove(m)},0)})});function _(g){if(!t.loop&&!t.trapped||m.paused)return;const f=g.key==="Tab"&&!g.altKey&&!g.ctrlKey&&!g.metaKey,x=se();if(f&&x){const C=g.currentTarget,[b,l]=et(C);b&&l?!g.shiftKey&&x===l?(g.preventDefault(),t.loop&&j(b,{select:!0})):g.shiftKey&&x===b&&(g.preventDefault(),t.loop&&j(l,{select:!0})):x===C&&g.preventDefault()}}return(g,f)=>(n(),P(o(J),{ref_key:"currentRef",ref:p,tabindex:"-1","as-child":g.asChild,as:g.as,onKeydown:_},{default:w(()=>[$(g.$slots,"default")]),_:3},8,["as-child","as"]))}}),Ft=Tt;const[K,At]=Fe("PopoverRoot");var Dt=O({__name:"PopoverRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},modal:{type:Boolean,required:!1,default:!1}},emits:["update:open"],setup(e,{emit:a}){const t=e,s=a,{modal:p}=$e(t),y=Ee(t,"open",s,{defaultValue:t.defaultOpen,passive:t.open===void 0}),d=A(),u=A(!1);return At({contentId:"",triggerId:"",modal:p,open:y,onOpenChange:m=>{y.value=m},onOpenToggle:()=>{y.value=!y.value},triggerElement:d,hasCustomAnchor:u}),(m,_)=>(n(),P(o(Te),null,{default:w(()=>[$(m.$slots,"default",{open:o(y),close:()=>y.value=!1})]),_:3}))}}),Rt=Dt,Lt=O({__name:"PopoverAnchor",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(e){const a=e;L();const t=K();return tt(()=>{t.hasCustomAnchor.value=!0}),_e(()=>{t.hasCustomAnchor.value=!1}),(s,p)=>(n(),P(o(he),M(U(a)),{default:w(()=>[$(s.$slots,"default")]),_:3},16))}}),Nt=Lt,It=O({__name:"PopoverArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const a=e;return L(),(t,s)=>(n(),P(o(Ae),M(U(a)),{default:w(()=>[$(t.$slots,"default")]),_:3},16))}}),Mt=It,Ut=O({__name:"PopoverClose",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const a=e;L();const t=K();return(s,p)=>(n(),P(o(J),{type:s.as==="button"?"button":void 0,as:s.as,"as-child":a.asChild,onClick:p[0]||(p[0]=y=>o(t).onOpenChange(!1))},{default:w(()=>[$(s.$slots,"default")]),_:3},8,["type","as","as-child"]))}}),zt=Ut,jt=O({__name:"PopoverContentImpl",props:{trapFocus:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:a}){const t=e,s=a,p=De(ot(t,"trapFocus","disableOutsidePointerEvents")),{forwardRef:y}=L(),d=K();return qt(),(u,m)=>(n(),P(o(Ft),{"as-child":"",loop:"",trapped:u.trapFocus,onMountAutoFocus:m[5]||(m[5]=_=>s("openAutoFocus",_)),onUnmountAutoFocus:m[6]||(m[6]=_=>s("closeAutoFocus",_))},{default:w(()=>[S(o(Re),{"as-child":"","disable-outside-pointer-events":u.disableOutsidePointerEvents,onPointerDownOutside:m[0]||(m[0]=_=>s("pointerDownOutside",_)),onInteractOutside:m[1]||(m[1]=_=>s("interactOutside",_)),onEscapeKeyDown:m[2]||(m[2]=_=>s("escapeKeyDown",_)),onFocusOutside:m[3]||(m[3]=_=>s("focusOutside",_)),onDismiss:m[4]||(m[4]=_=>o(d).onOpenChange(!1))},{default:w(()=>[S(o(Le),z(o(p),{id:o(d).contentId,ref:o(y),"data-state":o(d).open.value?"open":"closed","aria-labelledby":o(d).triggerId,style:{"--reka-popover-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-popover-content-available-width":"var(--reka-popper-available-width)","--reka-popover-content-available-height":"var(--reka-popper-available-height)","--reka-popover-trigger-width":"var(--reka-popper-anchor-width)","--reka-popover-trigger-height":"var(--reka-popper-anchor-height)"},role:"dialog"}),{default:w(()=>[$(u.$slots,"default")]),_:3},16,["id","data-state","aria-labelledby"])]),_:3},8,["disable-outside-pointer-events"])]),_:3},8,["trapped"]))}}),He=jt,Ht=O({__name:"PopoverContentModal",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:a}){const t=e,s=a,p=K(),y=A(!1);kt(!0);const d=X(t,s),{forwardRef:u,currentElement:m}=L();return Bt(m),(_,g)=>(n(),P(He,z(o(d),{ref:o(u),"trap-focus":o(p).open.value,"disable-outside-pointer-events":"",onCloseAutoFocus:g[0]||(g[0]=ve(f=>{s("closeAutoFocus",f),y.value||o(p).triggerElement.value?.focus()},["prevent"])),onPointerDownOutside:g[1]||(g[1]=f=>{s("pointerDownOutside",f);const x=f.detail.originalEvent,C=x.button===0&&x.ctrlKey===!0,b=x.button===2||C;y.value=b}),onFocusOutside:g[2]||(g[2]=ve(()=>{},["prevent"]))}),{default:w(()=>[$(_.$slots,"default")]),_:3},16,["trap-focus"]))}}),Kt=Ht,Wt=O({__name:"PopoverContentNonModal",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:a}){const t=e,s=a,p=K(),y=A(!1),d=A(!1),u=X(t,s);return(m,_)=>(n(),P(He,z(o(u),{"trap-focus":!1,"disable-outside-pointer-events":!1,onCloseAutoFocus:_[0]||(_[0]=g=>{s("closeAutoFocus",g),g.defaultPrevented||(y.value||o(p).triggerElement.value?.focus(),g.preventDefault()),y.value=!1,d.value=!1}),onInteractOutside:_[1]||(_[1]=async g=>{s("interactOutside",g),g.defaultPrevented||(y.value=!0,g.detail.originalEvent.type==="pointerdown"&&(d.value=!0));const f=g.target;o(p).triggerElement.value?.contains(f)&&g.preventDefault(),g.detail.originalEvent.type==="focusin"&&d.value&&g.preventDefault()})}),{default:w(()=>[$(m.$slots,"default")]),_:3},16))}}),Vt=Wt,Gt=O({__name:"PopoverContent",props:{forceMount:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1},disableOutsidePointerEvents:{type:Boolean,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside","openAutoFocus","closeAutoFocus"],setup(e,{emit:a}){const t=e,s=a,p=K(),y=X(t,s),{forwardRef:d}=L();return p.contentId||=Ne(void 0,"reka-popover-content"),(u,m)=>(n(),P(o(Ie),{present:u.forceMount||o(p).open.value},{default:w(()=>[o(p).modal.value?(n(),P(Kt,z({key:0},o(y),{ref:o(d)}),{default:w(()=>[$(u.$slots,"default")]),_:3},16)):(n(),P(Vt,z({key:1},o(y),{ref:o(d)}),{default:w(()=>[$(u.$slots,"default")]),_:3},16))]),_:3},8,["present"]))}}),Jt=Gt,Xt=O({__name:"PopoverPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const a=e;return(t,s)=>(n(),P(o(Me),M(U(a)),{default:w(()=>[$(t.$slots,"default")]),_:3},16))}}),Qt=Xt,Yt=O({__name:"PopoverTrigger",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"button"}},setup(e){const a=e,t=K(),{forwardRef:s,currentElement:p}=L();return t.triggerId||=Ne(void 0,"reka-popover-trigger"),Ue(()=>{t.triggerElement.value=p.value}),(y,d)=>(n(),P(st(o(t).hasCustomAnchor.value?o(J):o(he)),{"as-child":""},{default:w(()=>[S(o(J),{id:o(t).triggerId,ref:o(s),type:y.as==="button"?"button":void 0,"aria-haspopup":"dialog","aria-expanded":o(t).open.value,"aria-controls":o(t).contentId,"data-state":o(t).open.value?"open":"closed",as:y.as,"as-child":a.asChild,onClick:o(t).onOpenToggle},{default:w(()=>[$(y.$slots,"default")]),_:3},8,["id","type","aria-expanded","aria-controls","data-state","as","as-child","onClick"])]),_:3}))}}),Zt=Yt,eo=O({__name:"HoverCardArrow",props:{width:{type:Number,required:!1,default:10},height:{type:Number,required:!1,default:5},rounded:{type:Boolean,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"svg"}},setup(e){const a=e;return L(),(t,s)=>(n(),P(o(Ae),M(U(a)),{default:w(()=>[$(t.$slots,"default")]),_:3},16))}}),to=eo;const[be,oo]=Fe("HoverCardRoot");var so=O({__name:"HoverCardRoot",props:{defaultOpen:{type:Boolean,required:!1,default:!1},open:{type:Boolean,required:!1,default:void 0},openDelay:{type:Number,required:!1,default:700},closeDelay:{type:Number,required:!1,default:300}},emits:["update:open"],setup(e,{emit:a}){const t=e,s=a,{openDelay:p,closeDelay:y}=$e(t);L();const d=Ee(t,"open",s,{defaultValue:t.defaultOpen,passive:t.open===void 0}),u=A(0),m=A(0),_=A(!1),g=A(!1),f=A(!1),x=A();function C(){clearTimeout(m.value),u.value=window.setTimeout(()=>d.value=!0,p.value)}function b(){clearTimeout(u.value),!_.value&&!g.value&&(m.value=window.setTimeout(()=>d.value=!1,y.value))}function l(){d.value=!1}return oo({open:d,onOpenChange(c){d.value=c},onOpen:C,onClose:b,onDismiss:l,hasSelectionRef:_,isPointerDownOnContentRef:g,isPointerInTransitRef:f,triggerElement:x}),(c,r)=>(n(),P(o(Te),null,{default:w(()=>[$(c.$slots,"default",{open:o(d)})]),_:3}))}}),ao=so;function ye(e){return a=>a.pointerType==="touch"?void 0:e()}function ro(e){const a=[],t=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:s=>s.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP});for(;t.nextNode();)a.push(t.currentNode);return a}var no=O({__name:"HoverCardContentImpl",props:{side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:a}){const t=e,s=a,p=De(t),{forwardRef:y,currentElement:d}=L(),u=be(),{isPointerInTransit:m,onPointerExit:_}=at(u.triggerElement,d);rt(u.isPointerInTransitRef,m,{direction:"rtl"}),_(()=>{u.onClose()});const g=A(!1);let f;oe(C=>{if(g.value){const b=document.body;f=b.style.userSelect||b.style.webkitUserSelect,b.style.userSelect="none",b.style.webkitUserSelect="none",C(()=>{b.style.userSelect=f,b.style.webkitUserSelect=f})}});function x(){g.value=!1,u.isPointerDownOnContentRef.value=!1,ge(()=>{document.getSelection()?.toString()!==""&&(u.hasSelectionRef.value=!0)})}return Ue(()=>{d.value&&(document.addEventListener("pointerup",x),ro(d.value).forEach(b=>b.setAttribute("tabindex","-1"))),nt(window,"scroll",C=>{C.target?.contains(u.triggerElement.value)&&u.onDismiss()},{capture:!0})}),_e(()=>{document.removeEventListener("pointerup",x),u.hasSelectionRef.value=!1,u.isPointerDownOnContentRef.value=!1}),(C,b)=>(n(),P(o(Re),{"as-child":"","disable-outside-pointer-events":!1,onEscapeKeyDown:b[1]||(b[1]=l=>s("escapeKeyDown",l)),onPointerDownOutside:b[2]||(b[2]=l=>s("pointerDownOutside",l)),onFocusOutside:b[3]||(b[3]=ve(l=>s("focusOutside",l),["prevent"])),onDismiss:o(u).onDismiss},{default:w(()=>[S(o(Le),z({...o(p),...C.$attrs},{ref:o(y),"data-state":o(u).open.value?"open":"closed",style:{userSelect:g.value?"text":void 0,WebkitUserSelect:g.value?"text":void 0,"--reka-hover-card-content-transform-origin":"var(--reka-popper-transform-origin)","--reka-hover-card-content-available-width":"var(--reka-popper-available-width)","--reka-hover-card-content-available-height":"var(--reka-popper-available-height)","--reka-hover-card-trigger-width":"var(--reka-popper-anchor-width)","--reka-hover-card-trigger-height":"var(--reka-popper-anchor-height)"},onPointerdown:b[0]||(b[0]=l=>{l.currentTarget.contains(l.target)&&(g.value=!0),o(u).hasSelectionRef.value=!1,o(u).isPointerDownOnContentRef.value=!0})}),{default:w(()=>[$(C.$slots,"default")]),_:3},16,["data-state","style"])]),_:3},8,["onDismiss"]))}}),lo=no,io=O({__name:"HoverCardContent",props:{forceMount:{type:Boolean,required:!1},side:{type:null,required:!1},sideOffset:{type:Number,required:!1},sideFlip:{type:Boolean,required:!1},align:{type:null,required:!1},alignOffset:{type:Number,required:!1},alignFlip:{type:Boolean,required:!1},avoidCollisions:{type:Boolean,required:!1},collisionBoundary:{type:null,required:!1},collisionPadding:{type:[Number,Object],required:!1},arrowPadding:{type:Number,required:!1},hideShiftedArrow:{type:Boolean,required:!1},sticky:{type:String,required:!1},hideWhenDetached:{type:Boolean,required:!1},positionStrategy:{type:String,required:!1},updatePositionStrategy:{type:String,required:!1},disableUpdateOnLayoutShift:{type:Boolean,required:!1},prioritizePosition:{type:Boolean,required:!1},reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},emits:["escapeKeyDown","pointerDownOutside","focusOutside","interactOutside"],setup(e,{emit:a}){const p=X(e,a),{forwardRef:y}=L(),d=be();return(u,m)=>(n(),P(o(Ie),{present:u.forceMount||o(d).open.value},{default:w(()=>[S(lo,z(o(p),{ref:o(y),onPointerenter:m[0]||(m[0]=_=>o(ye)(o(d).onOpen)(_))}),{default:w(()=>[$(u.$slots,"default")]),_:3},16)]),_:3},8,["present"]))}}),uo=io,co=O({__name:"HoverCardPortal",props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){const a=e;return(t,s)=>(n(),P(o(Me),M(U(a)),{default:w(()=>[$(t.$slots,"default")]),_:3},16))}}),po=co,fo=O({__name:"HoverCardTrigger",props:{reference:{type:null,required:!1},asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"a"}},setup(e){const{forwardRef:a,currentElement:t}=L(),s=be();s.triggerElement=t;function p(){setTimeout(()=>{!s.isPointerInTransitRef.value&&!s.open.value&&s.onClose()},0)}return(y,d)=>(n(),P(o(he),{"as-child":"",reference:y.reference},{default:w(()=>[S(o(J),{ref:o(a),"as-child":y.asChild,as:y.as,"data-state":o(s).open.value?"open":"closed","data-grace-area-trigger":"",onPointerenter:d[0]||(d[0]=u=>o(ye)(o(s).onOpen)(u)),onPointerleave:d[1]||(d[1]=u=>o(ye)(p)(u)),onFocus:d[2]||(d[2]=u=>o(s).onOpen()),onBlur:d[3]||(d[3]=u=>o(s).onClose())},{default:w(()=>[$(y.$slots,"default")]),_:3},8,["as-child","as","data-state"])]),_:3},8,["reference"]))}}),vo=fo;const yo={class:"capitalize"},mo=O({__name:"ScriptStatus",props:{status:{},error:{}},setup(e){const a=D(()=>e.error?e.error==="TypeError: Failed to fetch"?"CORS Error":e.error:e.status||"unknown"),t=D(()=>{if(e.error||e.status==="error")return"status-error";switch(e.status){case"loaded":return"status-loaded";case"loading":return"status-loading";case"awaitingLoad":return"status-awaiting";case"validation-failed":return"status-validation";default:return"status-unknown"}});return(s,p)=>(n(),v("div",{class:R(["script-status",o(t)])},[p[0]||(p[0]=i("span",{class:"script-status-dot"},null,-1)),i("span",yo,h(o(a)),1)],2))}}),go=Object.assign(H(mo,[["__scopeId","data-v-5cf865ba"]]),{__name:"ScriptStatus"}),_o={key:0,class:"script-metric"},ho=O({__name:"ScriptSize",props:{size:{}},setup(e){return(a,t)=>{const s=Q;return e.size?(n(),v("span",_o,[S(s,{name:"i-carbon-meter",class:"text-[10px] opacity-50"}),F(" "+h(e.size),1)])):B("",!0)}}}),bo=Object.assign(H(ho,[["__scopeId","data-v-b147450b"]]),{__name:"ScriptSize"}),xo={key:0,class:"script-metric"},wo=O({__name:"ScriptLoadTime",props:{loadTime:{}},setup(e){return(a,t)=>{const s=Q;return e.loadTime?(n(),v("span",xo,[S(s,{name:"i-carbon-timer",class:"text-[10px] opacity-50"}),F(" "+h(e.loadTime),1)])):B("",!0)}}}),ko=Object.assign(H(wo,[["__scopeId","data-v-c6837c50"]]),{__name:"ScriptLoadTime"}),qo={Root:ao,Trigger:vo,Portal:po,Content:uo,Arrow:to},Co={Root:Rt,Trigger:Zt,Portal:Qt,Content:Jt,Arrow:Mt,Close:zt,Anchor:Nt};function Po(e,a={}){const t=e.detail.originalEvent,s=t.target;if(!s?.isConnected){e.preventDefault();return}a.scrollable&&(t.offsetX>s.clientWidth||t.offsetY>s.clientHeight)&&e.preventDefault()}const So={slots:{content:"bg-default shadow-lg rounded-md ring ring-default data-[state=open]:animate-[scale-in_100ms_ease-out] data-[state=closed]:animate-[scale-out_100ms_ease-in] origin-(--reka-popover-content-transform-origin) focus:outline-none pointer-events-auto",arrow:"fill-bg stroke-default"}},Oo={__name:"UPopover",props:{mode:{type:null,required:!1,default:"click"},content:{type:Object,required:!1},arrow:{type:[Boolean,Object],required:!1},portal:{type:[Boolean,String],required:!1,skipCheck:!0,default:!0},reference:{type:null,required:!1},dismissible:{type:Boolean,required:!1,default:!0},class:{type:null,required:!1},ui:{type:null,required:!1},defaultOpen:{type:Boolean,required:!1},open:{type:Boolean,required:!1},modal:{type:Boolean,required:!1},openDelay:{type:Number,required:!1,default:0},closeDelay:{type:Number,required:!1,default:0}},emits:["close:prevent","update:open"],setup(e,{emit:a}){const t=e,s=a,p=lt(),y=it(),d=ut("popover",t),u=t.mode==="hover"?we(t,"defaultOpen","open","openDelay","closeDelay"):we(t,"defaultOpen","open","modal"),m=X(u,s),_=dt(ne(()=>t.portal)),g=ne(()=>fe(t.content,{side:"bottom",sideOffset:8,collisionPadding:8})),f=D(()=>t.dismissible?{pointerDownOutside:Po}:["interactOutside","escapeKeyDown"].reduce((c,r)=>(c[r]=q=>{q.preventDefault(),s("close:prevent")},c),{})),x=ne(()=>fe(t.arrow,{rounded:!0})),C=D(()=>ke({extend:ke(So),...y.ui?.popover||{}})({side:g.value.side})),b=D(()=>t.mode==="hover"?qo:Co);return(l,c)=>(n(),P(o(b).Root,M(U(o(m))),{default:w(({open:r,close:q})=>[p.default||e.reference?(n(),P(o(b).Trigger,{key:0,"as-child":"",reference:e.reference,class:R(t.class)},{default:w(()=>[$(l.$slots,"default",{open:r})]),_:2},1032,["reference","class"])):B("",!0),"Anchor"in b.value&&p.anchor?(n(),P(o(b).Anchor,{key:1,"as-child":""},{default:w(()=>[$(l.$slots,"anchor",M(U(q?{close:q}:{})))]),_:2},1024)):B("",!0),S(o(b).Portal,M(U(o(_))),{default:w(()=>[S(o(b).Content,z(g.value,{"data-slot":"content",class:C.value.content({class:[!p.default&&t.class,o(d)?.content]})},ct(f.value)),{default:w(()=>[$(l.$slots,"content",M(U(q?{close:q}:{}))),e.arrow?(n(),P(o(b).Arrow,z({key:0},x.value,{"data-slot":"arrow",class:C.value.arrow({class:o(d)?.arrow})}),null,16,["class"])):B("",!0)]),_:2},1040,["class"])]),_:2},1040)]),_:3},16))}},Bo={key:0,class:"inline-flex items-center gap-1"},$o={class:"ui-tooltip-panel"},Eo={class:"font-semibold"},To={key:0,class:"text-(--color-text-muted) text-xs"},Fo={class:"ui-tooltip-panel"},Ao={class:"font-semibold"},Do={key:0,class:"text-(--color-text-muted) text-xs"},Oe={xs:"max-w-[80px]",sm:"max-w-[160px]",md:"max-w-[250px]",lg:"max-w-[440px]",xl:"max-w-[640px]"},Ro=O({__name:"UiTooltip",props:{text:{},title:{},description:{},label:{},size:{},iconSize:{},side:{default:"top"}},setup(e){const a=D(()=>({side:e.side}));return(t,s)=>{const p=Q,y=Oo;return e.label?(n(),v("span",Bo,[i("span",null,h(e.label),1),S(y,{"data-ui":"UiTooltip",mode:"hover",role:"tooltip",content:o(a),class:"inline-flex"},{content:w(()=>[i("div",$o,[i("div",{class:R(`w-max ${Oe[e.size||"md"]}`)},[e.title?(n(),v(E,{key:0},[i("div",Eo,h(e.title),1),e.description?(n(),v("div",To,h(e.description),1)):B("",!0)],64)):(n(),v(E,{key:1},[F(h(e.text),1)],64))],2)])]),default:w(()=>[S(p,{name:"i-carbon-help",class:"size-3 text-(--color-text-subtle) hover:text-(--color-text-muted) transition-colors"})]),_:1},8,["content"])])):(n(),P(y,{key:1,"data-ui":"UiTooltip",mode:"hover",role:"tooltip",content:o(a),class:R(t.$slots.default?"inline-block":"inline-flex")},{content:w(()=>[i("div",Fo,[i("div",{class:R(`w-max ${Oe[e.size||"md"]}`)},[t.$slots.text?$(t.$slots,"text",{key:0},void 0,!0):e.title?(n(),v(E,{key:1},[i("div",Ao,h(e.title),1),e.description?(n(),v("div",Do,h(e.description),1)):B("",!0)],64)):(n(),v(E,{key:2},[F(h(e.text),1)],64))],2)])]),default:w(()=>[t.$slots.default?$(t.$slots,"default",{key:0},void 0,!0):(n(),P(p,{key:1,name:"i-carbon-help",color:"primary",size:e.iconSize||"md"},null,8,["size"]))]),_:3},8,["content","class"]))}}}),Lo=Object.assign(H(Ro,[["__scopeId","data-v-16948115"]]),{__name:"UiTooltip"}),No={key:0,class:"panel-grids flex flex-col items-center justify-center py-8 gap-1.5 rounded-b-xl"},Io={key:1,class:"waterfall-container"},Mo={class:"waterfall-stats"},Uo={class:"waterfall-stat"},zo={class:"waterfall-stat-value"},jo={class:"waterfall-stat"},Ho={class:"waterfall-stat-value"},Ko={class:"waterfall-stat"},Wo={class:"waterfall-stat-value"},Vo={class:"waterfall-proxied-badge"},Go={class:"waterfall-stat-value"},Jo={class:"text-xs space-y-1 max-w-60"},Xo={class:"opacity-70"},Qo={class:"px-1 py-px rounded bg-white/10 text-[10px]"},Yo={key:0,class:"opacity-70"},Zo={class:"flex items-center gap-1"},es={class:"text-xs space-y-0.5"},ts={class:"font-mono font-semibold"},os={class:"opacity-70"},ss={key:0,class:"opacity-60"},as={key:1,class:"text-emerald-400"},rs={class:"waterfall-table"},ns={class:"waterfall-legend"},ls={class:"waterfall-rows"},is={class:"waterfall-url"},us={class:"waterfall-bar-track"},ds={class:"waterfall-duration"},cs={class:"text-xs space-y-1.5 max-w-80"},ps={class:"font-mono text-[11px] break-all opacity-90"},fs={class:"flex items-center gap-2 opacity-70"},vs={class:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5"},ys={class:"flex items-center gap-1 opacity-60"},ms={class:"tabular-nums text-right"},gs={key:0,class:"flex items-center gap-1 text-emerald-400"},_s=O({__name:"NetworkWaterfall",props:{requests:{},domains:{default:()=>[]},proxyRoutes:{default:()=>[]},privacyLevel:{},proxyPrefix:{},isFirstParty:{type:Boolean,default:!1}},setup(e){const a=[{key:"dns",label:"DNS",color:"oklch(70% 0.15 165)"},{key:"connect",label:"Connect",color:"oklch(72% 0.14 75)"},{key:"ssl",label:"SSL",color:"oklch(65% 0.15 300)"},{key:"ttfb",label:"TTFB",color:"oklch(65% 0.13 250)"},{key:"download",label:"Download",color:"oklch(72% 0.12 200)"}],t=D(()=>[...e.requests].sort((c,r)=>c.startTime-r.startTime)),s=D(()=>{if(!t.value.length)return{min:0,max:1};const c=t.value[0].startTime,r=Math.max(...t.value.map(q=>q.startTime+q.duration));return{min:c,max:r||c+1}}),p=D(()=>e.requests.reduce((c,r)=>c+r.transferSize,0)),y=D(()=>s.value.max-s.value.min),d=D(()=>e.requests.filter(c=>c.isProxied).length),u=D(()=>{const c=new Map;for(const r of e.requests){const q=_(r.url),T=c.get(q)||{count:0,transfer:0,proxied:!1};T.count++,T.transfer+=r.transferSize,r.isProxied&&(T.proxied=!0),c.set(q,T)}return[...c.entries()].sort((r,q)=>q[1].transfer-r[1].transfer).map(([r,q])=>({domain:r,...q,isKnown:e.domains.includes(r),proxyRoute:e.proxyRoutes.find(T=>T.target.includes(r))}))}),m=/\/_scripts\/p\/([^/]+)/;function _(c){try{return new URL(c).hostname}catch{return c.match(m)?.[1]||"localhost"}}function g(c){const{min:r,max:q}=s.value,T=q-r;return{left:`${(c.startTime-r)/T*100}%`,width:`${Math.max(c.duration/T*100,.5)}%`}}function f(c,r){if(c.duration===0)return"0%";const q=c[r.key];return`${Math.max(q/c.duration*100,q>0?2:0)}%`}function x(c){try{const r=new URL(c),q=(r.pathname+r.search).replace("/_scripts","");return q.length>100?`${q.slice(0,97)}...`:q}catch{return c.length>100?`${c.slice(0,97)}...`:c}}function C(c){return{script:"Script",xmlhttprequest:"XHR",fetch:"Fetch",img:"Image",css:"Stylesheet",beacon:"Beacon"}[c]||c}function b(c){return{script:"i-carbon-code",xmlhttprequest:"i-carbon-send-alt",fetch:"i-carbon-send-alt",img:"i-carbon-image",css:"i-carbon-paint-brush",beacon:"i-carbon-satellite-radar"}[c]||"i-carbon-document"}function l(c){return c.transferSize===0&&c.decodedBodySize>0?304:200}return(c,r)=>{const q=Q,T=Lo;return e.requests.length?(n(),v("div",Io,[i("div",Mo,[i("span",Uo,[i("span",zo,h(e.requests.length),1),r[1]||(r[1]=i("span",{class:"waterfall-stat-label"},"req",-1))]),r[7]||(r[7]=i("span",{class:"waterfall-sep"},null,-1)),i("span",jo,[i("span",Ho,h(o(le)(o(p))),1)]),r[8]||(r[8]=i("span",{class:"waterfall-sep"},null,-1)),i("span",Ko,[i("span",Wo,h(o(ie)(Math.round(o(y)))),1)]),e.isFirstParty&&o(d)>0?(n(),v(E,{key:0},[r[5]||(r[5]=i("span",{class:"waterfall-sep"},null,-1)),S(T,null,{content:w(()=>[i("div",Jo,[r[4]||(r[4]=i("div",{class:"font-semibold"}," First-Party Proxy ",-1)),i("div",Xo,[F(h(o(d))+" request"+h(o(d)!==1?"s":"")+" routed through ",1),i("code",Qo,h(e.proxyPrefix||"/_scripts/p"),1)]),e.privacyLevel?(n(),v("div",Yo,[r[3]||(r[3]=F(" Privacy: ",-1)),i("span",{class:R(e.privacyLevel==="full"?"text-emerald-400":e.privacyLevel==="partial"?"text-amber-400":"")},h(e.privacyLevel),3)])):B("",!0)])]),default:w(()=>[i("span",Vo,[S(q,{name:"i-carbon-security",class:"text-[10px]"}),i("span",Go,h(o(d))+"/"+h(e.requests.length),1),r[2]||(r[2]=F(" proxied ",-1))])]),_:1})],64)):B("",!0),o(u).length>1?(n(),v(E,{key:1},[r[6]||(r[6]=i("span",{class:"waterfall-sep"},null,-1)),i("div",Zo,[(n(!0),v(E,null,N(o(u),k=>(n(),P(T,{key:k.domain},{content:w(()=>[i("div",es,[i("div",ts,h(k.domain),1),i("div",os,h(k.count)+" req · "+h(o(le)(k.transfer)),1),k.proxyRoute?(n(),v("div",ss,h(k.proxyRoute.target)+" → "+h(k.proxyRoute.local),1)):B("",!0),k.proxied?(n(),v("div",as," Proxied through first-party ")):B("",!0)])]),default:w(()=>[i("span",{class:R(["domain-pill",k.proxied?"domain-pill-proxied":""])},[k.proxied?(n(),P(q,{key:0,name:"i-carbon-security",class:"text-[8px]"})):B("",!0),F(" "+h(k.domain),1)],2)]),_:2},1024))),128))])],64)):B("",!0)]),i("div",rs,[i("div",ns,[(n(),v(E,null,N(a,k=>i("div",{key:k.key,class:"waterfall-legend-item"},[i("span",{class:"waterfall-legend-dot",style:Y({background:k.color})},null,4),F(" "+h(k.label),1)])),64))]),i("div",ls,[(n(!0),v(E,null,N(o(t),(k,Ke)=>(n(),P(T,{key:Ke},{content:w(()=>[i("div",cs,[i("div",ps,h(k.url),1),i("div",fs,[i("span",null,h(C(k.initiatorType)),1),r[10]||(r[10]=i("span",{class:"opacity-30"},"·",-1)),i("span",null,h(o(ie)(Math.round(k.duration))),1),k.transferSize>0?(n(),v(E,{key:0},[r[9]||(r[9]=i("span",{class:"opacity-30"},"·",-1)),i("span",null,h(o(le)(k.transferSize)),1)],64)):B("",!0)]),i("div",vs,[(n(),v(E,null,N(a,I=>(n(),v(E,{key:I.key},[k[I.key]>.1?(n(),v(E,{key:0},[i("div",ys,[i("span",{class:"w-1.5 h-1.5 rounded-sm inline-block",style:Y({background:I.color})},null,4),F(" "+h(I.label),1)]),i("div",ms,h(k[I.key].toFixed(1))+"ms ",1)],64)):B("",!0)],64))),64))]),k.isProxied?(n(),v("div",gs,[S(q,{name:"i-carbon-security",class:"text-[10px]"}),r[11]||(r[11]=F(" Proxied through first-party ",-1))])):B("",!0)])]),default:w(()=>[i("div",{class:R(["waterfall-row",k.isProxied?"waterfall-row-proxied":""])},[i("div",{class:R(["waterfall-status",l(k)===304?"waterfall-status-304":"waterfall-status-200"])},h(l(k)),3),S(q,{name:k.isProxied?"i-carbon-security":b(k.initiatorType),class:R(["waterfall-row-icon",k.isProxied?"waterfall-row-icon-proxied":""])},null,8,["name","class"]),i("div",is,h(x(k.url)),1),i("div",us,[i("div",{class:"waterfall-bar",style:Y(g(k))},[(n(),v(E,null,N(a,I=>i("div",{key:I.key,style:Y({width:f(k,I),background:I.color}),class:"h-full"},null,4)),64))],4)]),i("div",ds,h(o(ie)(Math.round(k.duration))),1)],2)]),_:2},1024))),128))])])])):(n(),v("div",No,[S(q,{name:"i-carbon-network-4",class:"text-xl text-(--color-text-subtle)"}),r[0]||(r[0]=i("p",{class:"text-xs text-(--color-text-subtle)"}," Requests appear as the script loads ",-1))]))}}}),hs=Object.assign(H(_s,[["__scopeId","data-v-d16c88db"]]),{__name:"NetworkWaterfall"});function bs(e=2e3){const{copy:a,copied:t}=pt({legacy:!0,copiedDuring:e});return{copy:a,copied:t}}const xs=O({__name:"DevtoolsCopyButton",props:{text:{}},setup(e){const{copy:a,copied:t}=bs();return(s,p)=>{const y=ze,d=ft;return n(),P(d,{text:o(t)?"Copied!":"Copy"},{default:w(()=>[S(y,{icon:o(t)?"carbon:checkmark":"carbon:copy","aria-label":o(t)?"Copied":"Copy to clipboard",class:R(o(t)?"text-[var(--seo-green)]":""),onClick:p[0]||(p[0]=u=>o(a)(e.text))},null,8,["icon","aria-label","class"])]),_:1},8,["text"])}}}),ws=Object.assign(xs,{__name:"DevtoolsCopyButton"}),ks=["innerHTML"],qs=O({__name:"OCodeBlock",props:{code:{},lang:{},lines:{type:Boolean,default:!1},transformRendered:{type:Function}},setup(e){const a=vt(()=>e.code,e.lang),t=D(()=>e.transformRendered?e.transformRendered(a.value||""):a.value);return(s,p)=>(n(),v("pre",{class:R(["code-block p-5",e.lines?"code-block-lines":""]),innerHTML:o(t)},null,10,ks))}}),Cs=Object.assign(qs,{__name:"OCodeBlock"}),Ps={class:"devtools-snippet"},Ss={key:0,class:"devtools-snippet-header"},Os={class:"devtools-snippet-label"},Bs=O({__name:"DevtoolsSnippet",props:{label:{},code:{},lang:{default:"js"}},setup(e){return(a,t)=>{const s=ws,p=Cs;return n(),v("div",Ps,[e.label||a.$slots.header?(n(),v("div",Ss,[$(a.$slots,"header",{},()=>[i("code",Os,h(e.label),1)],!0),S(s,{text:e.code},null,8,["text"])])):B("",!0),S(p,{code:e.code,lang:e.lang,class:"devtools-snippet-block"},null,8,["code","lang"])])}}}),$s=Object.assign(H(Bs,[["__scopeId","data-v-265ccc31"]]),{__name:"DevtoolsSnippet"}),Es={class:"py-1"},Ts={key:0,class:"panel-grids rounded-xl flex flex-col items-center justify-center py-16 gap-3"},Fs={class:"w-12 h-12 rounded-xl bg-(--color-surface-elevated) border border-(--color-border) flex items-center justify-center"},As={class:"filter-bar"},Ds=["onClick"],Rs={class:"filter-chip-count"},Ls={class:"stagger-children space-y-3"},Ns={class:"px-4 py-3 flex items-center justify-between gap-3"},Is={class:"flex items-center gap-2.5 min-w-0"},Ms={class:"w-7 h-7 rounded-lg bg-(--color-surface-sunken) border border-(--color-border-subtle) flex items-center justify-center flex-shrink-0 overflow-hidden"},Us=["src"],zs=["innerHTML"],js=["src"],Hs={class:"min-w-0"},Ks={class:"flex items-center gap-2"},Ws=["href","title"],Vs=["href"],Gs={class:"px-4 pb-3 flex items-center gap-2 flex-wrap"},Js={key:0,class:"status-enabled"},Xs={key:1,class:"inline-flex items-center gap-1 text-[11px] text-(--color-text-subtle) font-mono"},Qs={class:"border-t border-(--color-border-subtle)"},Ys={class:"flex items-center border-b border-(--color-border-subtle)"},Zs=["onClick"],ea={key:0,class:"text-[9px] px-1 py-px rounded-full bg-(--color-surface-sunken) tabular-nums font-mono"},ta={key:0,class:"p-3"},oa={key:0,class:"text-xs text-(--color-text-subtle) py-2 text-center"},sa={key:1,class:"event-timeline"},aa={class:"event-time"},ra={key:0,class:"flex items-center gap-2 min-w-0"},na={class:"text-[11px] text-(--color-text-subtle) truncate"},la={key:1,class:"event-fn"},ia={key:1},ua={key:2,class:"p-3"},da=O({__name:"index",setup(e){const a=[{label:"Events",value:"events",icon:"i-carbon-list"},{label:"Network",value:"network",icon:"i-carbon-network-4"},{label:"API",value:"api",icon:"i-carbon-code"}],t=A("all"),s=D(()=>{const d=Object.values(ue.value||{}),u=d.filter(_=>V(_)!=="awaitingLoad").length,m=d.filter(_=>V(_)==="awaitingLoad").length;return{total:d.length,active:u,awaiting:m}}),p=D(()=>{const d=ue.value||{};return t.value==="all"?d:Object.fromEntries(Object.entries(d).filter(([,u])=>{const m=V(u);return t.value==="active"?m!=="awaitingLoad":m==="awaitingLoad"}))});function y(d){switch(d){case"loaded":return"status-badge-loaded";case"loading":return"status-badge-loading";case"awaitingLoad":return"status-badge-awaiting";case"removed":case"error":return"status-badge-error";case"validation-failed":return"status-badge-validation";default:return"status-badge-default"}}return(d,u)=>{const m=Q,_=ze,g=go,f=bo,x=ko,C=hs,b=$s;return n(),v("div",Es,[Object.keys(o(ue)||{}).length?(n(),v(E,{key:1},[i("div",As,[(n(!0),v(E,null,N([{key:"all",label:"All",count:o(s).total},{key:"active",label:"Active",count:o(s).active},{key:"awaiting",label:"Awaiting",count:o(s).awaiting}],l=>(n(),v("button",{key:l.key,class:R(["filter-chip",o(t)===l.key?"filter-chip-active":""]),onClick:c=>t.value=l.key},[F(h(l.label)+" ",1),i("span",Rs,h(l.count),1)],10,Ds))),128))]),i("div",Ls,[(n(!0),v(E,null,N(o(p),(l,c)=>(n(),v("div",{key:c,class:"card overflow-hidden"},[i("div",Ns,[i("div",Is,[i("div",Ms,[o(W)(l)&&typeof o(W)(l)=="string"&&o(W)(l).startsWith("http")?(n(),v("img",{key:0,class:"w-5 h-5 object-contain",src:o(W)(l),alt:""},null,8,Us)):o(W)(l)?(n(),v("div",{key:1,class:"w-5 h-5 flex items-center [&>svg]:max-w-5 [&>svg]:max-h-5",innerHTML:o(W)(l)},null,8,zs)):l.src&&!l.src.startsWith("/")?(n(),v("img",{key:2,src:`https://www.google.com/s2/favicons?domain=${o(yt)(l.src)}`,class:"w-4 h-4 rounded-sm",alt:""},null,8,js)):(n(),P(m,{key:3,name:"i-carbon-script",class:"text-sm text-(--color-text-subtle)"}))]),i("div",Hs,[i("div",Ks,[i("a",{href:l.src,target:"_blank",class:"text-sm font-semibold tracking-tight truncate link-external",title:l.src},h(l.registry?.label||l.key||l.src),9,Ws),l.docs?(n(),v("a",{key:0,href:l.docs,target:"_blank",class:"text-[10px] font-medium text-(--color-text-subtle) hover:text-(--color-text-muted) transition-colors"}," docs ",8,Vs)):B("",!0)])])]),o(qe)(l)&&o(V)(l)==="awaitingLoad"?(n(),P(_,{key:0,size:"xs",color:"primary",variant:"soft",icon:"i-carbon-play-filled-alt",onClick:r=>l.$script.load()},{default:w(()=>[...u[2]||(u[2]=[F(" Load ",-1)])]),_:1},8,["onClick"])):o(qe)(l)&&o(V)(l)==="loaded"?(n(),P(_,{key:1,size:"xs",color:"neutral",variant:"ghost",icon:"i-carbon-close",onClick:r=>l.$script.remove()},{default:w(()=>[...u[3]||(u[3]=[F(" Remove ",-1)])]),_:1},8,["onClick"])):B("",!0)]),i("div",Gs,[S(g,{status:o(V)(l),error:o(mt)[l.src]},null,8,["status","error"]),o(Ce)(l.registryKey)?(n(),v("span",Js,[S(m,{name:"i-carbon-security",class:"text-xs"}),u[4]||(u[4]=F(" First-Party ",-1))])):B("",!0),S(f,{size:o(gt)[l.src]},null,8,["size"]),S(x,{"load-time":l.loadTime},null,8,["load-time"]),l.loadedFrom&&l.loadedFrom!=="unknown"?(n(),v("span",Xs,[u[5]||(u[5]=i("svg",{xmlns:"http://www.w3.org/2000/svg",height:"10",viewBox:"0 0 256 221",class:"opacity-60"},[i("path",{fill:"#41B883",d:"M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z"}),i("path",{fill:"#41B883",d:"m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z"}),i("path",{fill:"#35495E",d:"M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z"})],-1)),F(" "+h(l.loadedFrom),1)])):B("",!0),(n(!0),v(E,null,N(Object.keys(l.registryMeta||{}),r=>(n(),v("span",{key:r,class:"text-[11px] text-(--color-text-subtle) font-mono"},h(r)+": "+h(l.registryMeta[r]),1))),128))]),i("div",Qs,[i("div",Ys,[(n(),v(E,null,N(a,r=>i("button",{key:r.value,class:R(["sub-tab",o(Z)(l.src)===r.value?"sub-tab-active":""]),onClick:q=>o(_t)(l.src,r.value)},[S(m,{name:r.icon,class:"text-xs"},null,8,["name"]),F(" "+h(r.label)+" ",1),r.value==="network"&&l.networkRequests?.length?(n(),v("span",ea,h(l.networkRequests.length),1)):B("",!0)],10,Zs)),64))]),o(Z)(l.src)==="events"?(n(),v("div",ta,[l.events?.length?(n(),v("div",sa,[(n(!0),v(E,null,N(l.events,(r,q)=>(n(),v("div",{key:q,class:"event-row"},[i("div",aa,h(o(ht)(r.at)),1),r.type==="status"?(n(),v(E,{key:0},[r.status==="validation-failed"?(n(),v("div",ra,[i("span",{class:R(["event-badge",y(r.status)])},h(r.status),3),i("span",na,h(r.args.issues.map(T=>`${T.path?.map(k=>k.key).join(".")}: ${T.message}`).join(", ")),1)])):(n(),v("span",{key:1,class:R(["event-badge",y(r.status)])},h(r.status),3))],64)):r.type==="fn-call"?(n(),v("span",la,[r.args?(n(),v(E,{key:0},[F(h(`${r.fn}(${r.args?.map(T=>JSON.stringify(T,null,2)).join(", ")||""})`),1)],64)):(n(),v(E,{key:1},[u[6]||(u[6]=i("span",{class:"opacity-40"},"QUEUED",-1)),F(" "+h(r.fn),1)],64))])):B("",!0)]))),128))])):(n(),v("div",oa," No events recorded "))])):o(Z)(l.src)==="network"?(n(),v("div",ia,[S(C,{requests:l.networkRequests||[],domains:o(de)(l.registryKey)?.domains,"proxy-routes":o(de)(l.registryKey)?.routes,"privacy-level":o(de)(l.registryKey)?.privacyLevel,"proxy-prefix":o(bt)?.proxyPrefix,"is-first-party":o(Ce)(l.registryKey)},null,8,["requests","domains","proxy-routes","privacy-level","proxy-prefix","is-first-party"])])):o(Z)(l.src)==="api"?(n(),v("div",ua,[S(b,{code:o(xt)(l.$script?.instance),lang:"js"},null,8,["code"])])):B("",!0)])]))),128))])],64)):(n(),v("div",Ts,[i("div",Fs,[S(m,{name:"i-carbon-script",class:"text-2xl text-(--color-text-subtle)"})]),u[0]||(u[0]=i("p",{class:"text-sm font-medium text-(--color-text-muted)"}," No scripts loaded ",-1)),u[1]||(u[1]=i("p",{class:"text-xs text-(--color-text-subtle)"}," Scripts will appear here as they are registered ",-1))]))])}}}),pa=H(da,[["__scopeId","data-v-1d33b8c9"]]);export{pa as default};