@nuxt/scripts 1.0.0-beta.7 → 1.0.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/dist/devtools-client/200.html +1 -0
  2. package/dist/devtools-client/404.html +1 -0
  3. package/dist/devtools-client/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
  4. package/dist/devtools-client/_fonts/4qBuU9MRVUlPZNPSF7Xom_sK8RBEnfYu-9VXFrdq8A8-8TDwLE1HAj1sQn7XxVWtM_7sIaPM-DTdO3Pf8U2DF1U.woff2 +0 -0
  5. package/dist/devtools-client/_fonts/6dYsbWUd_BpKJ7mdDihgOcya1gHXLpJBuMYXux3WMjE-q3fYNS8YbW5n7ZeXI2vSNgkRWW5VDPKAl51SNTjG2qk.woff2 +0 -0
  6. package/dist/devtools-client/_fonts/Lr-hqqZZsYmCt0ITUlr1CUrWim9fsKvoDFZliMxgNHY-iTa_Yt_PzhOY9TX7ZXdSlEPim6iRt92xhECwaxWxd5w.woff2 +0 -0
  7. package/dist/devtools-client/_fonts/OknHvWI6KtYn1JQBzX7eSpNDBQ8520F9TvSUJYkVf6A-xeZn9253svK_8Q2LD0XEruY_MnEsuCRO5LenPoggC0Y.woff2 +0 -0
  8. package/dist/devtools-client/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
  9. package/dist/devtools-client/_fonts/UA7OtwYHwGN_HjcVGTdmiQxUit7FlqkCwxVUWSeXVnQ-B4OXCFOL_tWrYODpQTc07aMaj0c2cewTOmBRWR9tD-A.woff2 +0 -0
  10. package/dist/devtools-client/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
  11. package/dist/devtools-client/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
  12. package/dist/devtools-client/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
  13. package/dist/devtools-client/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
  14. package/dist/devtools-client/_fonts/qxAYvKsXWeYv731eb-h5TRurcdIP_W44mpNdX-HABAk-zUDeMEFlNtNbrwvT9JxLEBg0TphGy70O6RfIoIX_ZwU.woff2 +0 -0
  15. package/dist/devtools-client/_nuxt/B3kN3DAy.js +1 -0
  16. package/dist/devtools-client/_nuxt/B8PEiB0p.js +1 -0
  17. package/dist/devtools-client/_nuxt/C8jhSQ8l.js +1 -0
  18. package/dist/devtools-client/_nuxt/CJD6wrkT.js +188 -0
  19. package/dist/devtools-client/_nuxt/CfOsp0mU.js +1 -0
  20. package/dist/devtools-client/_nuxt/DKL6PHO3.js +1 -0
  21. package/dist/devtools-client/_nuxt/ajngqPCs.js +1 -0
  22. package/dist/devtools-client/_nuxt/builds/latest.json +1 -0
  23. package/dist/devtools-client/_nuxt/builds/meta/cb4e67c6-e8b7-4205-95b7-708fd96ffab6.json +1 -0
  24. package/dist/devtools-client/_nuxt/dlaR8P-P.js +1 -0
  25. package/dist/devtools-client/_nuxt/entry.BwpOBArY.css +1 -0
  26. package/dist/devtools-client/_nuxt/error-404.CvOVjXeC.css +1 -0
  27. package/dist/devtools-client/_nuxt/error-500.BIm53nmx.css +1 -0
  28. package/dist/devtools-client/_nuxt/first-party.C8Ha4JLM.css +1 -0
  29. package/dist/devtools-client/_nuxt/index.CA-OpSj0.css +1 -0
  30. package/dist/devtools-client/_nuxt/registry.B9lnjF_b.css +1 -0
  31. package/dist/devtools-client/_nuxt/wDzz0qaB.js +1 -0
  32. package/dist/devtools-client/docs/index.html +1 -0
  33. package/dist/devtools-client/first-party/index.html +1 -0
  34. package/dist/devtools-client/index.html +1 -0
  35. package/dist/devtools-client/registry/index.html +1 -0
  36. package/dist/module.d.mts +29 -84
  37. package/dist/module.d.ts +121 -0
  38. package/dist/module.json +1 -1
  39. package/dist/module.mjs +940 -755
  40. package/dist/registry.d.mts +91 -4
  41. package/dist/registry.d.ts +93 -0
  42. package/dist/registry.mjs +668 -326
  43. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +19 -87
  44. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +79 -180
  45. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +19 -87
  46. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +6 -55
  47. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +12 -83
  48. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +6 -55
  49. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +5 -1
  50. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +24 -38
  51. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +5 -1
  52. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +43 -0
  53. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue +60 -0
  54. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +43 -0
  55. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +4 -0
  56. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +22 -26
  57. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +4 -0
  58. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +11 -8
  59. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +57 -57
  60. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +11 -8
  61. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +24 -42
  62. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +70 -73
  63. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +24 -42
  64. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +42 -5
  65. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +83 -37
  66. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +42 -5
  67. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +77 -0
  68. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +223 -0
  69. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +77 -0
  70. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +10 -3
  71. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +9 -41
  72. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +10 -3
  73. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +7 -3
  74. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +23 -38
  75. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +7 -3
  76. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +7 -3
  77. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +23 -38
  78. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +7 -3
  79. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +7 -3
  80. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +24 -38
  81. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +7 -3
  82. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +200 -0
  83. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +166 -0
  84. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +200 -0
  85. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +13 -0
  86. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +8 -0
  87. package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +10 -0
  88. package/dist/runtime/components/GoogleMaps/injectionKeys.js +2 -0
  89. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +48 -0
  90. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +51 -0
  91. package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +84 -0
  92. package/dist/runtime/components/ScriptBlueskyEmbed.vue +89 -0
  93. package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +84 -0
  94. package/dist/runtime/components/ScriptCarbonAds.d.vue.ts +4 -7
  95. package/dist/runtime/components/ScriptCarbonAds.vue +1 -0
  96. package/dist/runtime/components/ScriptCarbonAds.vue.d.ts +4 -7
  97. package/dist/runtime/components/ScriptCrisp.d.vue.ts +7 -11
  98. package/dist/runtime/components/ScriptCrisp.vue +2 -1
  99. package/dist/runtime/components/ScriptCrisp.vue.d.ts +7 -11
  100. package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +4 -7
  101. package/dist/runtime/components/ScriptGoogleAdsense.vue +2 -1
  102. package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +4 -7
  103. package/dist/runtime/components/ScriptGravatar.d.vue.ts +22 -0
  104. package/dist/runtime/components/ScriptGravatar.vue +46 -0
  105. package/dist/runtime/components/ScriptGravatar.vue.d.ts +22 -0
  106. package/dist/runtime/components/ScriptInstagramEmbed.d.vue.ts +12 -15
  107. package/dist/runtime/components/ScriptInstagramEmbed.vue +9 -3
  108. package/dist/runtime/components/ScriptInstagramEmbed.vue.d.ts +12 -15
  109. package/dist/runtime/components/ScriptIntercom.d.vue.ts +7 -11
  110. package/dist/runtime/components/ScriptIntercom.vue +5 -3
  111. package/dist/runtime/components/ScriptIntercom.vue.d.ts +7 -11
  112. package/dist/runtime/components/ScriptLemonSqueezy.d.vue.ts +2 -3
  113. package/dist/runtime/components/ScriptLemonSqueezy.vue +1 -0
  114. package/dist/runtime/components/ScriptLemonSqueezy.vue.d.ts +2 -3
  115. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +43 -37
  116. package/dist/runtime/components/ScriptPayPalButtons.vue +49 -79
  117. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +43 -37
  118. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +37 -28
  119. package/dist/runtime/components/ScriptPayPalMessages.vue +47 -50
  120. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +37 -28
  121. package/dist/runtime/components/ScriptStripePricingTable.d.vue.ts +5 -9
  122. package/dist/runtime/components/ScriptStripePricingTable.vue +3 -2
  123. package/dist/runtime/components/ScriptStripePricingTable.vue.d.ts +5 -9
  124. package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +17 -11
  125. package/dist/runtime/components/ScriptVimeoPlayer.vue +14 -10
  126. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +17 -11
  127. package/dist/runtime/components/ScriptXEmbed.d.vue.ts +10 -13
  128. package/dist/runtime/components/ScriptXEmbed.vue +15 -8
  129. package/dist/runtime/components/ScriptXEmbed.vue.d.ts +10 -13
  130. package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +10 -15
  131. package/dist/runtime/components/ScriptYouTubePlayer.vue +12 -5
  132. package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +10 -15
  133. package/dist/runtime/composables/useScript.js +148 -8
  134. package/dist/runtime/composables/useScriptEventPage.js +2 -2
  135. package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
  136. package/dist/runtime/composables/useScriptTriggerConsent.js +33 -20
  137. package/dist/runtime/composables/useScriptTriggerElement.js +1 -1
  138. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +1 -1
  139. package/dist/runtime/devtools-standalone-bridge.client.d.ts +8 -0
  140. package/dist/runtime/devtools-standalone-bridge.client.js +50 -0
  141. package/dist/runtime/registry/bing-uet.d.ts +20 -0
  142. package/dist/runtime/registry/bing-uet.js +29 -0
  143. package/dist/runtime/registry/bluesky-embed.d.ts +116 -0
  144. package/dist/runtime/registry/bluesky-embed.js +72 -0
  145. package/dist/runtime/registry/clarity.d.ts +10 -15
  146. package/dist/runtime/registry/clarity.js +22 -31
  147. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -13
  148. package/dist/runtime/registry/cloudflare-web-analytics.js +2 -14
  149. package/dist/runtime/registry/crisp.d.ts +10 -40
  150. package/dist/runtime/registry/crisp.js +2 -33
  151. package/dist/runtime/registry/databuddy-analytics.d.ts +2 -35
  152. package/dist/runtime/registry/databuddy-analytics.js +20 -45
  153. package/dist/runtime/registry/fathom-analytics.d.ts +7 -26
  154. package/dist/runtime/registry/fathom-analytics.js +3 -25
  155. package/dist/runtime/registry/google-adsense.d.ts +3 -11
  156. package/dist/runtime/registry/google-adsense.js +2 -11
  157. package/dist/runtime/registry/google-analytics.d.ts +3 -5
  158. package/dist/runtime/registry/google-analytics.js +3 -8
  159. package/dist/runtime/registry/google-maps.d.ts +3 -9
  160. package/dist/runtime/registry/google-maps.js +2 -8
  161. package/dist/runtime/registry/google-recaptcha.d.ts +2 -6
  162. package/dist/runtime/registry/google-recaptcha.js +4 -12
  163. package/dist/runtime/registry/google-sign-in.d.ts +2 -13
  164. package/dist/runtime/registry/google-sign-in.js +2 -22
  165. package/dist/runtime/registry/google-tag-manager.d.ts +3 -28
  166. package/dist/runtime/registry/google-tag-manager.js +4 -27
  167. package/dist/runtime/registry/gravatar.d.ts +26 -0
  168. package/dist/runtime/registry/gravatar.js +36 -0
  169. package/dist/runtime/registry/hotjar.d.ts +4 -6
  170. package/dist/runtime/registry/hotjar.js +2 -5
  171. package/dist/runtime/registry/instagram-embed.d.ts +3 -18
  172. package/dist/runtime/registry/instagram-embed.js +4 -19
  173. package/dist/runtime/registry/intercom.d.ts +5 -13
  174. package/dist/runtime/registry/intercom.js +2 -12
  175. package/dist/runtime/registry/matomo-analytics.d.ts +3 -12
  176. package/dist/runtime/registry/matomo-analytics.js +3 -12
  177. package/dist/runtime/registry/meta-pixel.d.ts +4 -6
  178. package/dist/runtime/registry/meta-pixel.js +2 -4
  179. package/dist/runtime/registry/mixpanel-analytics.d.ts +22 -0
  180. package/dist/runtime/registry/mixpanel-analytics.js +46 -0
  181. package/dist/runtime/registry/npm.d.ts +3 -7
  182. package/dist/runtime/registry/npm.js +2 -9
  183. package/dist/runtime/registry/paypal.d.ts +4 -25
  184. package/dist/runtime/registry/paypal.js +3 -66
  185. package/dist/runtime/registry/plausible-analytics.js +19 -14
  186. package/dist/runtime/registry/posthog.d.ts +10 -12
  187. package/dist/runtime/registry/posthog.js +3 -12
  188. package/dist/runtime/registry/reddit-pixel.d.ts +5 -6
  189. package/dist/runtime/registry/reddit-pixel.js +2 -4
  190. package/dist/runtime/registry/rybbit-analytics.d.ts +2 -14
  191. package/dist/runtime/registry/rybbit-analytics.js +10 -20
  192. package/dist/runtime/registry/schemas.d.ts +982 -0
  193. package/dist/runtime/registry/schemas.js +937 -0
  194. package/dist/runtime/registry/segment.d.ts +2 -5
  195. package/dist/runtime/registry/segment.js +2 -5
  196. package/dist/runtime/registry/snapchat-pixel.d.ts +5 -34
  197. package/dist/runtime/registry/snapchat-pixel.js +2 -20
  198. package/dist/runtime/registry/stripe.d.ts +3 -4
  199. package/dist/runtime/registry/stripe.js +2 -4
  200. package/dist/runtime/registry/tiktok-pixel.d.ts +4 -7
  201. package/dist/runtime/registry/tiktok-pixel.js +2 -6
  202. package/dist/runtime/registry/umami-analytics.d.ts +2 -31
  203. package/dist/runtime/registry/umami-analytics.js +2 -36
  204. package/dist/runtime/registry/vercel-analytics.d.ts +29 -0
  205. package/dist/runtime/registry/vercel-analytics.js +84 -0
  206. package/dist/runtime/registry/vimeo-player.d.ts +2 -2
  207. package/dist/runtime/registry/vimeo-player.js +1 -1
  208. package/dist/runtime/registry/x-embed.d.ts +3 -17
  209. package/dist/runtime/registry/x-embed.js +3 -18
  210. package/dist/runtime/registry/x-pixel.d.ts +4 -7
  211. package/dist/runtime/registry/x-pixel.js +2 -5
  212. package/dist/runtime/registry/youtube-player.d.ts +7 -7
  213. package/dist/runtime/registry/youtube-player.js +1 -1
  214. package/dist/runtime/server/bluesky-embed-image.d.ts +2 -0
  215. package/dist/runtime/server/bluesky-embed-image.js +7 -0
  216. package/dist/runtime/server/bluesky-embed.d.ts +16 -0
  217. package/dist/runtime/server/bluesky-embed.js +59 -0
  218. package/dist/runtime/server/google-maps-geocode-proxy.d.ts +2 -0
  219. package/dist/runtime/server/google-maps-geocode-proxy.js +34 -0
  220. package/dist/runtime/server/google-static-maps-proxy.js +2 -13
  221. package/dist/runtime/server/gravatar-proxy.d.ts +2 -0
  222. package/dist/runtime/server/gravatar-proxy.js +46 -0
  223. package/dist/runtime/server/instagram-embed-asset.js +8 -41
  224. package/dist/runtime/server/instagram-embed-image.js +6 -53
  225. package/dist/runtime/server/instagram-embed.d.ts +16 -0
  226. package/dist/runtime/server/instagram-embed.js +176 -35
  227. package/dist/runtime/server/proxy-handler.js +101 -83
  228. package/dist/runtime/server/utils/image-proxy.d.ts +12 -0
  229. package/dist/runtime/server/utils/image-proxy.js +70 -0
  230. package/dist/runtime/server/utils/privacy.d.ts +1 -10
  231. package/dist/runtime/server/utils/privacy.js +60 -40
  232. package/dist/runtime/server/x-embed-image.js +5 -49
  233. package/dist/runtime/server/x-embed.js +3 -2
  234. package/dist/runtime/types.d.ts +277 -53
  235. package/dist/runtime/types.js +0 -2
  236. package/dist/runtime/utils/pure.d.ts +1 -1
  237. package/dist/runtime/utils.d.ts +6 -4
  238. package/dist/runtime/utils.js +31 -14
  239. package/dist/stats.d.mts +202 -0
  240. package/dist/stats.d.ts +202 -0
  241. package/dist/stats.mjs +3875 -0
  242. package/dist/types-source.d.mts +17 -0
  243. package/dist/types-source.d.ts +17 -0
  244. package/dist/types-source.mjs +3835 -0
  245. package/dist/types.d.mts +4 -2
  246. package/package.json +35 -61
  247. package/README.md +0 -86
  248. package/dist/client/200.html +0 -1
  249. package/dist/client/404.html +0 -1
  250. package/dist/client/_nuxt/BJa0m50V.js +0 -1
  251. package/dist/client/_nuxt/BPQ3VLAy.js +0 -1
  252. package/dist/client/_nuxt/Ci5iXYuB.js +0 -1
  253. package/dist/client/_nuxt/DaI2y8Uz.js +0 -162
  254. package/dist/client/_nuxt/builds/latest.json +0 -1
  255. package/dist/client/_nuxt/builds/meta/9b4fb16a-3c62-48b0-8295-126cb077b5d3.json +0 -1
  256. package/dist/client/_nuxt/entry.D45OuV0w.css +0 -1
  257. package/dist/client/_nuxt/error-404.B57D-jUQ.css +0 -1
  258. package/dist/client/_nuxt/error-500.DTHUW7BI.css +0 -1
  259. package/dist/client/_nuxt/vPLZfVXe.js +0 -1
  260. package/dist/client/index.html +0 -1
  261. package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +0 -52
  262. package/dist/runtime/components/ScriptPayPalMarks.vue +0 -69
  263. package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +0 -52
  264. package/dist/runtime/validation/mock.d.ts +0 -42
  265. package/dist/runtime/validation/mock.js +0 -21
  266. package/dist/runtime/validation/valibot.d.ts +0 -1
  267. package/dist/runtime/validation/valibot.js +0 -1
  268. /package/dist/{client → devtools-client}/_nuxt/CVO1_9PV.js +0 -0
  269. /package/dist/{client → devtools-client}/_nuxt/Cp-IABpG.js +0 -0
  270. /package/dist/{client → devtools-client}/_nuxt/D0r3Knsf.js +0 -0
@@ -1,53 +1,9 @@
1
- import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
- import { $fetch } from "ofetch";
3
- export default defineEventHandler(async (event) => {
4
- const query = getQuery(event);
5
- const url = query.url;
6
- if (!url) {
7
- throw createError({
8
- statusCode: 400,
9
- statusMessage: "Image URL is required"
10
- });
11
- }
12
- let parsedUrl;
13
- try {
14
- parsedUrl = new URL(url);
15
- } catch {
16
- throw createError({
17
- statusCode: 400,
18
- statusMessage: "Invalid image URL"
19
- });
20
- }
21
- if (parsedUrl.protocol !== "http:" && parsedUrl.protocol !== "https:") {
22
- throw createError({
23
- statusCode: 400,
24
- statusMessage: "Invalid URL scheme"
25
- });
26
- }
27
- const allowedDomains = [
1
+ import { createImageProxyHandler } from "./utils/image-proxy.js";
2
+ export default createImageProxyHandler({
3
+ allowedDomains: [
28
4
  "pbs.twimg.com",
29
5
  "abs.twimg.com",
30
6
  "video.twimg.com"
31
- ];
32
- if (!allowedDomains.includes(parsedUrl.hostname)) {
33
- throw createError({
34
- statusCode: 403,
35
- statusMessage: "Domain not allowed"
36
- });
37
- }
38
- const response = await $fetch.raw(url, {
39
- timeout: 5e3,
40
- headers: {
41
- "Accept": "image/webp,image/jpeg,image/png,image/*,*/*;q=0.8",
42
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
43
- }
44
- }).catch((error) => {
45
- throw createError({
46
- statusCode: error.statusCode || 500,
47
- statusMessage: error.statusMessage || "Failed to fetch image"
48
- });
49
- });
50
- setHeader(event, "Content-Type", response.headers.get("content-type") || "image/jpeg");
51
- setHeader(event, "Cache-Control", "public, max-age=3600, s-maxage=3600");
52
- return response._data;
7
+ ],
8
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
53
9
  });
@@ -1,15 +1,16 @@
1
1
  import { createError, defineEventHandler, getQuery, setHeader } from "h3";
2
2
  import { $fetch } from "ofetch";
3
+ const TWEET_ID_RE = /^\d+$/;
3
4
  export default defineEventHandler(async (event) => {
4
5
  const query = getQuery(event);
5
6
  const tweetId = query.id;
6
- if (!tweetId || !/^\d+$/.test(tweetId)) {
7
+ if (!tweetId || !TWEET_ID_RE.test(tweetId)) {
7
8
  throw createError({
8
9
  statusCode: 400,
9
10
  statusMessage: "Valid Tweet ID is required"
10
11
  });
11
12
  }
12
- const randomToken = [...Array(11)].map(() => (Math.random() * 36).toString(36)[2]).join("");
13
+ const randomToken = Array.from(Array.from({ length: 11 }), () => (Math.random() * 36).toString(36)[2]).join("");
13
14
  const params = new URLSearchParams({ id: tweetId, token: randomToken });
14
15
  const tweetData = await $fetch(
15
16
  `https://cdn.syndication.twimg.com/tweet-result?${params.toString()}`,
@@ -1,37 +1,46 @@
1
+ import type { UseScriptInput, UseScriptOptions, VueScriptInstance } from '@unhead/vue';
1
2
  import type { Script } from '@unhead/vue/types';
2
- import type { UseScriptInput, VueScriptInstance, UseScriptOptions } from '@unhead/vue';
3
- import type { ComputedRef, Ref } from 'vue';
4
- import type { InferInput, ObjectSchema, ValiError } from 'valibot';
5
3
  import type { Import } from 'unimport';
6
- import type { SegmentInput } from './registry/segment.js';
4
+ import type { InferInput, ObjectEntries, ObjectSchema, UnionSchema, ValiError } from 'valibot';
5
+ import type { ComputedRef, Ref } from 'vue';
6
+ import type { BingUetInput } from './registry/bing-uet.js';
7
+ import type { BlueskyEmbedInput } from './registry/bluesky-embed.js';
8
+ import type { ClarityInput } from './registry/clarity.js';
7
9
  import type { CloudflareWebAnalyticsInput } from './registry/cloudflare-web-analytics.js';
10
+ import type { CrispInput } from './registry/crisp.js';
8
11
  import type { DatabuddyAnalyticsInput } from './registry/databuddy-analytics.js';
9
- import type { MetaPixelInput } from './registry/meta-pixel.js';
10
12
  import type { FathomAnalyticsInput } from './registry/fathom-analytics.js';
13
+ import type { GoogleAdsenseInput } from './registry/google-adsense.js';
14
+ import type { GoogleAnalyticsInput } from './registry/google-analytics.js';
15
+ import type { GoogleMapsInput } from './registry/google-maps.js';
16
+ import type { GoogleRecaptchaInput } from './registry/google-recaptcha.js';
17
+ import type { GoogleSignInInput } from './registry/google-sign-in.js';
18
+ import type { GoogleTagManagerInput } from './registry/google-tag-manager.js';
19
+ import type { GravatarInput } from './registry/gravatar.js';
11
20
  import type { HotjarInput } from './registry/hotjar.js';
21
+ import type { InstagramEmbedInput } from './registry/instagram-embed.js';
12
22
  import type { IntercomInput } from './registry/intercom.js';
13
- import type { GoogleMapsInput } from './registry/google-maps.js';
23
+ import type { LemonSqueezyInput } from './registry/lemon-squeezy.js';
14
24
  import type { MatomoAnalyticsInput } from './registry/matomo-analytics.js';
15
- import type { StripeInput } from './registry/stripe.js';
16
- import type { VimeoPlayerInput } from './registry/vimeo-player.js';
17
- import type { XPixelInput } from './registry/x-pixel.js';
18
- import type { SnapTrPixelInput } from './registry/snapchat-pixel.js';
19
- import type { YouTubePlayerInput } from './registry/youtube-player.js';
20
- import type { PlausibleAnalyticsInput } from './registry/plausible-analytics.js';
25
+ import type { MetaPixelInput } from './registry/meta-pixel.js';
26
+ import type { MixpanelAnalyticsInput } from './registry/mixpanel-analytics.js';
21
27
  import type { NpmInput } from './registry/npm.js';
22
- import type { LemonSqueezyInput } from './registry/lemon-squeezy.js';
23
- import type { GoogleAdsenseInput } from './registry/google-adsense.js';
24
- import type { ClarityInput } from './registry/clarity.js';
25
- import type { CrispInput } from './registry/crisp.js';
26
- import type { GoogleAnalyticsInput } from './registry/google-analytics.js';
27
- import type { GoogleTagManagerInput } from './registry/google-tag-manager.js';
28
- import type { UmamiAnalyticsInput } from './registry/umami-analytics.js';
29
- import type { RybbitAnalyticsInput } from './registry/rybbit-analytics.js';
30
- import type { RedditPixelInput } from './registry/reddit-pixel.js';
31
28
  import type { PayPalInput } from './registry/paypal.js';
29
+ import type { PlausibleAnalyticsInput } from './registry/plausible-analytics.js';
32
30
  import type { PostHogInput } from './registry/posthog.js';
33
- import type { GoogleRecaptchaInput } from './registry/google-recaptcha.js';
31
+ import type { RedditPixelInput } from './registry/reddit-pixel.js';
32
+ import type { RybbitAnalyticsInput } from './registry/rybbit-analytics.js';
33
+ import type { SegmentInput } from './registry/segment.js';
34
+ import type { SnapTrPixelInput } from './registry/snapchat-pixel.js';
35
+ import type { StripeInput } from './registry/stripe.js';
34
36
  import type { TikTokPixelInput } from './registry/tiktok-pixel.js';
37
+ import type { UmamiAnalyticsInput } from './registry/umami-analytics.js';
38
+ import type { VercelAnalyticsInput } from './registry/vercel-analytics.js';
39
+ import type { VimeoPlayerInput } from './registry/vimeo-player.js';
40
+ import type { XEmbedInput } from './registry/x-embed.js';
41
+ import type { XPixelInput } from './registry/x-pixel.js';
42
+ import type { YouTubePlayerInput } from './registry/youtube-player.js';
43
+ import type { ProxyPrivacyInput } from './server/utils/privacy.js';
35
44
  export type WarmupStrategy = false | 'preload' | 'preconnect' | 'dns-prefetch';
36
45
  export type UseScriptContext<T extends Record<symbol | string, any>> = VueScriptInstance<T> & {
37
46
  /**
@@ -58,16 +67,16 @@ export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> =
58
67
  *
59
68
  * Note: Using 'force' may significantly increase build time as scripts will be re-downloaded on every build.
60
69
  *
61
- * @deprecated Use `scripts.firstParty: true` in nuxt.config instead for bundling and routing scripts through your domain.
70
+ * @deprecated Bundling is now auto-enabled per-script via capabilities. Set `bundle: false` per-script to disable.
62
71
  */
63
72
  bundle?: boolean | 'force';
64
73
  /**
65
- * Opt-out of first-party routing for this specific script when global `scripts.firstParty` is enabled.
66
- * Set to `false` to load this script directly from its original source instead of through your domain.
67
- *
68
- * Note: This option only works as an opt-out. To enable first-party routing, use the global `scripts.firstParty` option in nuxt.config.
74
+ * Control proxying for this script.
75
+ * When `false`, collection requests go directly to the third-party server.
76
+ * When `true`, collection requests are proxied through `/_scripts/p/`.
77
+ * Defaults based on whether the script has a `proxy` capability in the registry.
69
78
  */
70
- firstParty?: false;
79
+ proxy?: boolean;
71
80
  /**
72
81
  * Load the script in a web worker using Partytown.
73
82
  * When enabled, adds `type="text/partytown"` to the script tag.
@@ -104,6 +113,11 @@ export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> =
104
113
  * @internal
105
114
  */
106
115
  registryMeta?: Record<string, string>;
116
+ /**
117
+ * Known third-party domains this script communicates with.
118
+ * @internal
119
+ */
120
+ domains?: string[];
107
121
  };
108
122
  /**
109
123
  * @internal
@@ -137,10 +151,26 @@ export interface ConsentScriptTriggerOptions {
137
151
  */
138
152
  postConsentTrigger?: ExcludePromises<NuxtUseScriptOptions['trigger']> | (() => Promise<any>);
139
153
  }
154
+ export interface NuxtDevToolsNetworkRequest {
155
+ url: string;
156
+ startTime: number;
157
+ duration: number;
158
+ transferSize: number;
159
+ encodedBodySize: number;
160
+ decodedBodySize: number;
161
+ initiatorType: string;
162
+ dns: number;
163
+ connect: number;
164
+ ssl: number;
165
+ ttfb: number;
166
+ download: number;
167
+ isProxied: boolean;
168
+ }
140
169
  export interface NuxtDevToolsScriptInstance {
141
170
  registryKey?: string;
142
171
  registryMeta?: Record<string, string>;
143
172
  src: string;
173
+ domains?: string[];
144
174
  $script: VueScriptInstance<any>;
145
175
  events: {
146
176
  type: string;
@@ -150,19 +180,25 @@ export interface NuxtDevToolsScriptInstance {
150
180
  trigger?: NuxtUseScriptOptions['trigger'];
151
181
  at: number;
152
182
  }[];
183
+ networkRequests: NuxtDevToolsNetworkRequest[];
153
184
  }
154
185
  export interface ScriptRegistry {
186
+ bingUet?: BingUetInput;
187
+ blueskyEmbed?: BlueskyEmbedInput;
188
+ carbonAds?: true;
155
189
  crisp?: CrispInput;
156
190
  clarity?: ClarityInput;
157
191
  cloudflareWebAnalytics?: CloudflareWebAnalyticsInput;
158
192
  databuddyAnalytics?: DatabuddyAnalyticsInput;
159
193
  metaPixel?: MetaPixelInput;
160
194
  fathomAnalytics?: FathomAnalyticsInput;
195
+ instagramEmbed?: InstagramEmbedInput;
161
196
  plausibleAnalytics?: PlausibleAnalyticsInput;
162
197
  googleAdsense?: GoogleAdsenseInput;
163
198
  googleAnalytics?: GoogleAnalyticsInput;
164
199
  googleMaps?: GoogleMapsInput;
165
200
  googleRecaptcha?: GoogleRecaptchaInput;
201
+ googleSignIn?: GoogleSignInInput;
166
202
  lemonSqueezy?: LemonSqueezyInput;
167
203
  googleTagManager?: GoogleTagManagerInput;
168
204
  hotjar?: HotjarInput;
@@ -170,58 +206,155 @@ export interface ScriptRegistry {
170
206
  paypal?: PayPalInput;
171
207
  posthog?: PostHogInput;
172
208
  matomoAnalytics?: MatomoAnalyticsInput;
209
+ mixpanelAnalytics?: MixpanelAnalyticsInput;
173
210
  rybbitAnalytics?: RybbitAnalyticsInput;
174
211
  redditPixel?: RedditPixelInput;
175
212
  segment?: SegmentInput;
176
213
  stripe?: StripeInput;
177
214
  tiktokPixel?: TikTokPixelInput;
215
+ xEmbed?: XEmbedInput;
178
216
  xPixel?: XPixelInput;
179
217
  snapchatPixel?: SnapTrPixelInput;
180
218
  youtubePlayer?: YouTubePlayerInput;
219
+ vercelAnalytics?: VercelAnalyticsInput;
181
220
  vimeoPlayer?: VimeoPlayerInput;
182
221
  umamiAnalytics?: UmamiAnalyticsInput;
222
+ gravatar?: GravatarInput;
223
+ npm?: NpmInput;
183
224
  [key: `${string}-npm`]: NpmInput;
184
225
  }
185
- export type NuxtConfigScriptRegistryEntry<T> = true | 'mock' | T | [T, NuxtUseScriptOptionsSerializable];
186
- export type NuxtConfigScriptRegistry<T extends keyof ScriptRegistry = keyof ScriptRegistry> = Partial<{
187
- [key in T]: NuxtConfigScriptRegistryEntry<ScriptRegistry[key]>;
188
- }>;
226
+ /**
227
+ * Built-in registry script keys not affected by module augmentation.
228
+ * Use this to type-check records that must enumerate all built-in scripts (logos, meta, etc.).
229
+ */
230
+ export type BuiltInRegistryScriptKey = 'bingUet' | 'blueskyEmbed' | 'carbonAds' | 'crisp' | 'clarity' | 'cloudflareWebAnalytics' | 'databuddyAnalytics' | 'metaPixel' | 'fathomAnalytics' | 'instagramEmbed' | 'plausibleAnalytics' | 'googleAdsense' | 'googleAnalytics' | 'googleMaps' | 'googleRecaptcha' | 'googleSignIn' | 'lemonSqueezy' | 'googleTagManager' | 'hotjar' | 'intercom' | 'paypal' | 'posthog' | 'matomoAnalytics' | 'mixpanelAnalytics' | 'rybbitAnalytics' | 'redditPixel' | 'segment' | 'stripe' | 'tiktokPixel' | 'xEmbed' | 'xPixel' | 'snapchatPixel' | 'youtubePlayer' | 'vercelAnalytics' | 'vimeoPlayer' | 'umamiAnalytics' | 'gravatar' | 'npm';
231
+ /**
232
+ * Union of all explicit registry script keys (excludes npm pattern).
233
+ * Includes both built-in and augmented keys.
234
+ */
235
+ export type RegistryScriptKey = Exclude<keyof ScriptRegistry, `${string}-npm`>;
236
+ type RegistryConfigInput<T> = [T] extends [true] ? Record<string, never> : T;
237
+ export type NuxtConfigScriptRegistryEntry<T> = true | false | 'mock' | (RegistryConfigInput<T> & {
238
+ trigger?: NuxtUseScriptOptionsSerializable['trigger'] | false;
239
+ proxy?: boolean;
240
+ bundle?: boolean;
241
+ partytown?: boolean;
242
+ privacy?: ProxyPrivacyInput;
243
+ });
244
+ type _NuxtConfigScriptRegistryEntries = {
245
+ [K in keyof ScriptRegistry as K extends `${string}-npm` ? never : K]?: NuxtConfigScriptRegistryEntry<ScriptRegistry[K]>;
246
+ };
247
+ export interface NuxtConfigScriptRegistry extends _NuxtConfigScriptRegistryEntries {
248
+ [key: string]: any;
249
+ }
189
250
  export type UseFunctionType<T, U> = T extends {
190
251
  use: infer V;
191
252
  } ? V extends (...args: any) => any ? ReturnType<V> : U : U;
192
- declare const _emptyOptions: ObjectSchema<{}, undefined>;
193
- export type EmptyOptionsSchema = typeof _emptyOptions;
253
+ export type EmptyOptionsSchema = ObjectSchema<ObjectEntries, undefined>;
194
254
  type ScriptInput = Script;
195
- export type InferIfSchema<T> = T extends ObjectSchema<any, any> ? InferInput<T> : T;
196
- export type RegistryScriptInput<T = EmptyOptionsSchema, Bundelable extends boolean = true, Usable extends boolean = false, CanBypassOptions extends boolean = true> = (InferIfSchema<T> & {
255
+ export type InferIfSchema<T> = T extends ObjectSchema<any, any> | UnionSchema<any, any> ? InferInput<T> : T;
256
+ export interface RegistryScriptInputExtras<Bundelable extends boolean = true, Usable extends boolean = false> {
197
257
  /**
198
258
  * A unique key to use for the script, this can be used to load multiple of the same script with different options.
199
259
  */
200
260
  key?: string;
201
261
  scriptInput?: ScriptInput;
202
262
  scriptOptions?: Omit<NuxtUseScriptOptions, Bundelable extends true ? '' : 'bundle' | Usable extends true ? '' : 'use'>;
203
- }) | Partial<InferIfSchema<T>> & (CanBypassOptions extends true ? {
263
+ }
264
+ export type RegistryScriptInput<T = EmptyOptionsSchema, Bundelable extends boolean = true, Usable extends boolean = false> = Partial<InferIfSchema<T>> & RegistryScriptInputExtras<Bundelable, Usable>;
265
+ export interface RegistryScriptServerHandler {
266
+ route: string;
267
+ handler: string;
268
+ middleware?: boolean;
269
+ }
270
+ /**
271
+ * Declares what optimization modes a script supports and what's active by default.
272
+ * Each flag is an independent capability that must be explicitly opted into.
273
+ */
274
+ export interface ScriptCapabilities {
275
+ /** Script can be downloaded at build time and served from `/_scripts/assets/`. */
276
+ bundle?: boolean;
204
277
  /**
205
- * A unique key to use for the script, this can be used to load multiple of the same script with different options.
278
+ * Collection requests can be proxied through `/_scripts/p/`.
279
+ * When combined with `bundle`: AST URL rewriting + runtime intercept.
280
+ * Without `bundle` (npm mode): autoInject sets SDK endpoint to proxy URL.
206
281
  */
207
- key?: string;
208
- scriptInput: Required<Pick<ScriptInput, 'src'>> & ScriptInput;
209
- scriptOptions?: Omit<NuxtUseScriptOptions, Bundelable extends true ? '' : 'bundle' | Usable extends true ? '' : 'use'>;
210
- } : never);
282
+ proxy?: boolean;
283
+ /** Script can run in a web worker via Partytown. */
284
+ partytown?: boolean;
285
+ }
286
+ /**
287
+ * A third-party domain the script communicates with.
288
+ * Used for proxy routing, AST rewriting, and connection warming (dns-prefetch/preconnect).
289
+ */
290
+ export interface ScriptDomain {
291
+ /** The domain hostname (e.g., 'www.google-analytics.com') */
292
+ domain: string;
293
+ /**
294
+ * Whether this domain is used lazily (e.g., only after user interaction or SDK initialization).
295
+ * When `true`, connection warming uses `dns-prefetch` instead of `preconnect`.
296
+ * @default false
297
+ */
298
+ lazy?: boolean;
299
+ }
300
+ /**
301
+ * Bundle capability config. When present, the script can be downloaded at
302
+ * build time and served from `/_scripts/assets/`.
303
+ */
304
+ export interface BundleCapability {
305
+ /** Custom URL resolution. If omitted, the script's `src` is used. */
306
+ resolve?: (options?: any) => string | false;
307
+ }
308
+ /**
309
+ * Proxy capability config. When present, collection requests can be
310
+ * proxied through `/_scripts/p/`.
311
+ * When combined with bundle: AST URL rewriting + runtime intercept.
312
+ * Without bundle (npm/config mode): autoInject sets SDK endpoint to proxy URL.
313
+ */
314
+ export interface ProxyCapability {
315
+ /** Third-party domains this script communicates with. */
316
+ domains: (string | ScriptDomain)[];
317
+ /** Privacy controls for proxied requests. */
318
+ privacy: import('../runtime/server/utils/privacy').ProxyPrivacyInput;
319
+ /** Auto-inject proxy endpoint into the script's SDK config. */
320
+ autoInject?: ProxyAutoInject;
321
+ /** AST-level SDK patches applied during URL rewriting. */
322
+ sdkPatches?: SdkPatch[];
323
+ }
324
+ /**
325
+ * Declarative SDK patch applied during AST rewriting.
326
+ * Replaces fragile regex-based postProcess with targeted AST visitors.
327
+ */
328
+ export type SdkPatch = {
329
+ type: 'neutralize-domain-check';
330
+ }
331
+ /**
332
+ * Replace `<expr>.split("<separator>")[0]` patterns used by SDKs that derive
333
+ * their API host from `document.currentScript.src`. When bundled, the script src
334
+ * changes, breaking this derivation. This patch replaces the expression with
335
+ * the correct proxy path.
336
+ */
337
+ | {
338
+ type: 'replace-src-split';
339
+ separator: string;
340
+ fromDomain: string;
341
+ appendPath?: string;
342
+ };
343
+ /**
344
+ * Partytown capability config. When present, the script can run in a
345
+ * web worker via Partytown.
346
+ */
347
+ export interface PartytownCapability {
348
+ /** Global API forward declarations for Partytown. */
349
+ forwards: string[];
350
+ }
211
351
  export interface RegistryScript {
212
- import?: Import;
213
- scriptBundling?: false | ((options?: any) => string | false);
214
352
  /**
215
- * First-party routing configuration for this script.
216
- * - `string` - The proxy config key to use (e.g., 'googleAnalytics', 'metaPixel')
217
- * - `false` - Explicitly disable first-party routing for this script
218
- * - `undefined` - Use the default key derived from the function name
219
- *
220
- * When set to a string, the script's URLs will be rewritten and collection
221
- * endpoints will be routed through your server when `scripts.firstParty` is enabled.
222
- * @internal
353
+ * The config key used in `scripts.registry` in nuxt.config (e.g., 'googleAnalytics', 'plausibleAnalytics').
354
+ * Used for direct lookup from config to script.
223
355
  */
224
- proxy?: string | false;
356
+ registryKey?: RegistryScriptKey;
357
+ import?: Import;
225
358
  label?: string;
226
359
  src?: string | false;
227
360
  category?: string;
@@ -229,7 +362,98 @@ export interface RegistryScript {
229
362
  light: string;
230
363
  dark: string;
231
364
  };
365
+ /** Server handlers (routes/middleware) to register when this script is enabled. */
366
+ serverHandlers?: RegistryScriptServerHandler[];
367
+ /** Valibot schema for the script's input options. */
368
+ schema?: ObjectSchema<ObjectEntries, any>;
369
+ /** Default env var field names and values for NUXT_PUBLIC_SCRIPTS_<SCRIPT>_<KEY> resolution. */
370
+ envDefaults?: Record<string, string>;
371
+ /**
372
+ * Bundle capability. Script can be downloaded at build time and served locally.
373
+ * - `true`: bundleable using the script's `src` URL
374
+ * - `{ resolve }`: bundleable with a custom URL resolution function
375
+ * - absent: not bundleable
376
+ */
377
+ bundle?: BundleCapability | true;
378
+ /**
379
+ * Proxy capability. Collection requests are proxied through `/_scripts/p/`.
380
+ * - `ProxyCapability`: proxy-capable with inline config (domains, privacy, etc.)
381
+ * - `RegistryScriptKey` string: alias, inherits proxy config from the referenced script
382
+ * - absent: not proxy-capable
383
+ */
384
+ proxy?: ProxyCapability | RegistryScriptKey;
385
+ /**
386
+ * Partytown capability. Script can run in a web worker via Partytown.
387
+ * - `PartytownCapability`: partytown-capable with forward declarations
388
+ * - absent: not partytown-capable
389
+ */
390
+ partytown?: PartytownCapability;
232
391
  }
233
392
  export type ElementScriptTrigger = 'immediate' | 'visible' | string | string[] | false;
234
393
  export type RegistryScripts = RegistryScript[];
394
+ export interface ProxyRewrite {
395
+ /** Domain and path to match (e.g., 'www.google-analytics.com/g/collect') */
396
+ from: string;
397
+ /** Local path to rewrite to (e.g., '/_scripts/p/ga/g/collect') */
398
+ to: string;
399
+ }
400
+ /**
401
+ * Global privacy override for all proxied requests.
402
+ *
403
+ * By default (`undefined`), each script uses its own privacy controls declared in the registry.
404
+ * Setting this overrides all per-script defaults:
405
+ *
406
+ * - `true`: full anonymization (IP, UA, language, screen, timezone, hardware)
407
+ * - `false`: passthrough (still strips sensitive auth headers)
408
+ * - `{ ip: false }`: selective override per flag
409
+ */
410
+ export type FirstPartyPrivacy = ProxyPrivacyInput;
411
+ /**
412
+ * Auto-inject proxy endpoint into the script's SDK config.
413
+ * Used by scripts that let you configure the collection endpoint (PostHog, Plausible, etc.).
414
+ *
415
+ * Simple form: `{ field, target }` where target is appended to proxyPrefix.
416
+ * Complex form: `{ field, resolve }` for dynamic endpoint computation.
417
+ */
418
+ export interface ProxyAutoInject {
419
+ /** The config field name to set (e.g., 'apiHost', 'endpoint') */
420
+ field: string;
421
+ /** Domain and path appended to proxyPrefix. Sugar for `resolve: (p) => p + '/' + target`. */
422
+ target?: string;
423
+ /** Compute the proxy endpoint value from the proxyPrefix and script config. Use for dynamic logic (e.g., region-based endpoints). */
424
+ resolve?: (proxyPrefix: string, config: Record<string, any>) => string;
425
+ }
426
+ /**
427
+ * Resolved auto-inject config with a guaranteed computeValue function.
428
+ * Used in ProxyConfig output after normalization.
429
+ */
430
+ export interface ResolvedProxyAutoInject {
431
+ configField: string;
432
+ computeValue: (proxyPrefix: string, config: Record<string, any>) => string;
433
+ }
434
+ /**
435
+ * Proxy configuration for third-party scripts.
436
+ * Each supported script declares its domains, privacy controls, and optional SDK-specific hooks.
437
+ *
438
+ * The AST rewriter derives rewrite rules automatically from domains:
439
+ * { from: domain, to: proxyPrefix + '/' + domain }
440
+ *
441
+ * The runtime intercept plugin catches any remaining dynamic URLs at the
442
+ * fetch/sendBeacon/XHR/Image call site.
443
+ */
444
+ export interface ProxyConfig {
445
+ /** Third-party domains to proxy. AST rewrites are derived automatically. */
446
+ domains: string[];
447
+ /**
448
+ * Per-script privacy controls. Each script declares what it needs.
449
+ * - `true` (default) = full anonymize: IP, UA, language, screen, timezone, hardware fingerprints
450
+ * - `false` = passthrough (still strips sensitive auth headers)
451
+ * - `{ ip: false }` = selective (unset flags default to `false`)
452
+ */
453
+ privacy: ProxyPrivacyInput;
454
+ /** Auto-inject proxy endpoint config into the script's SDK options (resolved form) */
455
+ autoInject?: ResolvedProxyAutoInject;
456
+ /** AST-level SDK patches applied during URL rewriting. */
457
+ sdkPatches?: SdkPatch[];
458
+ }
235
459
  export {};
@@ -1,2 +0,0 @@
1
- import { object } from "#nuxt-scripts-validator";
2
- const _emptyOptions = object({});
@@ -4,6 +4,6 @@
4
4
  export interface ProxyRewrite {
5
5
  /** Domain and path to match (e.g., 'www.google-analytics.com/g/collect') */
6
6
  from: string;
7
- /** Local path to rewrite to (e.g., '/_scripts/c/ga/g/collect') */
7
+ /** Local path to rewrite to (e.g., '/_scripts/p/ga/g/collect') */
8
8
  to: string;
9
9
  }
@@ -1,6 +1,6 @@
1
- import type { ObjectSchema } from 'valibot';
1
+ import type { EmptyOptionsSchema, InferIfSchema, NuxtUseScriptOptions, RegistryScriptInput, ScriptRegistry, UseFunctionType, UseScriptContext } from '#nuxt-scripts/types';
2
2
  import type { UseScriptInput } from '@unhead/vue';
3
- import type { EmptyOptionsSchema, InferIfSchema, NuxtUseScriptOptions, RegistryScriptInput, UseFunctionType, ScriptRegistry, UseScriptContext } from '#nuxt-scripts/types';
3
+ import type { ObjectSchema, UnionSchema } from 'valibot';
4
4
  export type MaybePromise<T> = Promise<T> | T;
5
5
  type OptionsFn<O> = (options: InferIfSchema<O>, ctx: {
6
6
  scriptInput?: UseScriptInput & {
@@ -9,10 +9,12 @@ type OptionsFn<O> = (options: InferIfSchema<O>, ctx: {
9
9
  }) => ({
10
10
  scriptInput?: UseScriptInput;
11
11
  scriptOptions?: NuxtUseScriptOptions;
12
- schema?: O extends ObjectSchema<any, any> ? O : undefined;
12
+ schema?: O extends ObjectSchema<any, any> | UnionSchema<any, any> ? O : undefined;
13
13
  clientInit?: () => void | Promise<any>;
14
14
  scriptMode?: 'external' | 'npm';
15
15
  });
16
16
  export declare function scriptRuntimeConfig<T extends keyof ScriptRegistry>(key: T): ScriptRegistry[T];
17
+ export declare function scriptsPrefix(): string;
18
+ export declare function requireRegistryEndpoint(componentName: string, registryKey: string): void;
17
19
  export declare function useRegistryScript<T extends Record<string | symbol, any>, O = EmptyOptionsSchema>(registryKey: keyof ScriptRegistry | string, optionsFn: OptionsFn<O>, _userOptions?: RegistryScriptInput<O>): UseScriptContext<UseFunctionType<NuxtUseScriptOptions<T>, T>>;
18
- export * from './utils/pure.js';
20
+ export {};
@@ -1,10 +1,14 @@
1
1
  import { defu } from "defu";
2
- import { useRuntimeConfig } from "nuxt/app";
3
- import { parseURL, withQuery, parseQuery } from "ufo";
2
+ import { createError, useRuntimeConfig } from "nuxt/app";
3
+ import { parseQuery, parseURL, withQuery } from "ufo";
4
+ import { parse } from "valibot";
4
5
  import { useScript } from "./composables/useScript.js";
5
6
  import { createNpmScriptStub } from "./npm-script-stub.js";
6
- import { parse } from "#nuxt-scripts-validator";
7
- function validateScriptInputSchema(key, schema, options) {
7
+ const URL_MATCH_RE = /https?:\/\/[^/]+\/_nuxt\/(.+\.vue)(?:\?[^)]*)?:(\d+):(\d+)/;
8
+ const URL_PAREN_MATCH_RE = /\(https?:\/\/[^/]+\/_nuxt\/(.+\.vue)(?:\?[^)]*)?:(\d+):(\d+)\)/;
9
+ const VUE_MATCH_RE = /([^/\s]+\.vue):(\d+):(\d+)/;
10
+ const CLEAN_CALLER_RE = /^\s*at\s+/;
11
+ function validateScriptInputSchema(schema, options) {
8
12
  if (import.meta.dev) {
9
13
  try {
10
14
  parse(schema, options);
@@ -17,9 +21,21 @@ function validateScriptInputSchema(key, schema, options) {
17
21
  export function scriptRuntimeConfig(key) {
18
22
  return (useRuntimeConfig().public.scripts || {})[key];
19
23
  }
24
+ export function scriptsPrefix() {
25
+ return useRuntimeConfig().public["nuxt-scripts"]?.prefix || "/_scripts";
26
+ }
27
+ export function requireRegistryEndpoint(componentName, registryKey) {
28
+ const endpoints = useRuntimeConfig().public["nuxt-scripts"]?.endpoints;
29
+ if (!endpoints?.[registryKey]) {
30
+ throw createError({
31
+ message: `${componentName} requires \`scripts.registry.${registryKey}\` to be enabled in nuxt.config`,
32
+ fatal: import.meta.dev
33
+ });
34
+ }
35
+ }
20
36
  export function useRegistryScript(registryKey, optionsFn, _userOptions) {
21
37
  const scriptConfig = scriptRuntimeConfig(registryKey);
22
- const userOptions = Object.assign(_userOptions || {}, typeof scriptConfig === "object" ? scriptConfig : {});
38
+ const userOptions = defu(_userOptions || {}, typeof scriptConfig === "object" ? scriptConfig : {});
23
39
  const options = optionsFn(userOptions, { scriptInput: userOptions.scriptInput });
24
40
  if (options.scriptMode === "npm") {
25
41
  return createNpmScriptStub({
@@ -45,7 +61,7 @@ export function useRegistryScript(registryKey, optionsFn, _userOptions) {
45
61
  };
46
62
  }
47
63
  const scriptInput = defu(finalScriptInput, userOptions.scriptInput, { key: registryKey });
48
- const scriptOptions = Object.assign(userOptions?.scriptOptions || {}, options.scriptOptions || {});
64
+ const scriptOptions = { ...userOptions?.scriptOptions, ...options.scriptOptions };
49
65
  if (import.meta.dev) {
50
66
  const error = new Error("Stack trace for component location");
51
67
  const stack = error.stack?.split("\n");
@@ -54,25 +70,27 @@ export function useRegistryScript(registryKey, optionsFn, _userOptions) {
54
70
  );
55
71
  let loadedFrom = "unknown";
56
72
  if (callerLine) {
57
- const urlMatch = callerLine.match(/https?:\/\/[^/]+\/_nuxt\/(.+\.vue)(?:\?[^)]*)?:(\d+):(\d+)/) || callerLine.match(/\(https?:\/\/[^/]+\/_nuxt\/(.+\.vue)(?:\?[^)]*)?:(\d+):(\d+)\)/);
73
+ const urlMatch = callerLine.match(URL_MATCH_RE) || callerLine.match(URL_PAREN_MATCH_RE);
58
74
  if (urlMatch) {
59
75
  const [, filePath, line, column] = urlMatch;
60
76
  loadedFrom = `./${filePath}:${line}:${column}`;
61
77
  } else {
62
- const vueMatch = callerLine.match(/([^/\s]+\.vue):(\d+):(\d+)/);
78
+ const vueMatch = callerLine.match(VUE_MATCH_RE);
63
79
  if (vueMatch) {
64
80
  const [, fileName, line, column] = vueMatch;
65
81
  loadedFrom = `./${fileName}:${line}:${column}`;
66
82
  } else {
67
- loadedFrom = callerLine.trim().replace(/^\s*at\s+/, "");
83
+ loadedFrom = callerLine.trim().replace(CLEAN_CALLER_RE, "");
68
84
  }
69
85
  }
70
86
  }
71
- scriptOptions.devtools = defu(scriptOptions.devtools, { registryKey, loadedFrom });
72
- if (options.schema) {
87
+ const devtoolsConfig = useRuntimeConfig().public["nuxt-scripts-devtools"];
88
+ const registryDomains = devtoolsConfig?.scripts?.find((s) => s.registryKey === registryKey)?.domains;
89
+ scriptOptions.devtools = defu(scriptOptions.devtools, { registryKey, loadedFrom, domains: registryDomains });
90
+ if (options.schema && "entries" in options.schema) {
73
91
  const registryMeta = {};
74
92
  for (const k in options.schema.entries) {
75
- if (options.schema.entries[k].type !== "optional") {
93
+ if (options.schema.entries[k]?.type !== "optional") {
76
94
  registryMeta[k] = String(userOptions[k]);
77
95
  }
78
96
  }
@@ -83,7 +101,7 @@ export function useRegistryScript(registryKey, optionsFn, _userOptions) {
83
101
  if (import.meta.dev) {
84
102
  scriptOptions._validate = () => {
85
103
  if (!userOptions.scriptInput?.src && !scriptOptions.skipValidation && options.schema) {
86
- return validateScriptInputSchema(registryKey, options.schema, userOptions);
104
+ return validateScriptInputSchema(options.schema, userOptions);
87
105
  }
88
106
  };
89
107
  }
@@ -95,4 +113,3 @@ export function useRegistryScript(registryKey, optionsFn, _userOptions) {
95
113
  };
96
114
  return useScript(scriptInput, scriptOptions);
97
115
  }
98
- export * from "./utils/pure.js";