@nuxt/scripts 0.11.1 → 0.11.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 (47) hide show
  1. package/README.md +71 -71
  2. package/dist/client/200.html +9 -9
  3. package/dist/client/404.html +9 -9
  4. package/dist/client/_nuxt/{CtQNcfGE.js → Bo1SWr6k.js} +1 -1
  5. package/dist/client/_nuxt/BojlM8av.js +21 -0
  6. package/dist/client/_nuxt/{BFM-Ncmx.js → BwFnCI0m.js} +1 -1
  7. package/dist/client/_nuxt/builds/latest.json +1 -1
  8. package/dist/client/_nuxt/builds/meta/4c86029b-49d8-417d-817c-09c5117d4d78.json +1 -0
  9. package/dist/client/_nuxt/{entry.ipQkUTQD.css → entry.CJckMUzn.css} +1 -1
  10. package/dist/client/_nuxt/error-404.BiTeRF3j.css +1 -0
  11. package/dist/client/_nuxt/error-500.Be1AE5oK.css +1 -0
  12. package/dist/client/_nuxt/{BSA2bgdb.js → yRslIvSb.js} +1 -1
  13. package/dist/client/index.html +9 -9
  14. package/dist/module.json +1 -1
  15. package/dist/module.mjs +21 -19
  16. package/dist/registry.d.mts +3 -2
  17. package/dist/registry.d.ts +3 -2
  18. package/dist/registry.mjs +37 -26
  19. package/dist/runtime/components/ScriptAriaLoadingIndicator.vue +5 -5
  20. package/dist/runtime/components/ScriptCarbonAds.vue +83 -83
  21. package/dist/runtime/components/ScriptCrisp.vue +94 -94
  22. package/dist/runtime/components/ScriptGoogleAdsense.vue +93 -93
  23. package/dist/runtime/components/ScriptGoogleMaps.vue +495 -469
  24. package/dist/runtime/components/ScriptIntercom.vue +103 -103
  25. package/dist/runtime/components/ScriptLemonSqueezy.vue +52 -52
  26. package/dist/runtime/components/ScriptLoadingIndicator.vue +22 -22
  27. package/dist/runtime/components/ScriptStripePricingTable.vue +74 -74
  28. package/dist/runtime/components/ScriptVimeoPlayer.vue +288 -289
  29. package/dist/runtime/components/ScriptYouTubePlayer.vue +215 -215
  30. package/dist/runtime/composables/useScript.js +6 -3
  31. package/dist/runtime/composables/useScriptEventPage.js +1 -2
  32. package/dist/runtime/registry/clarity.d.ts +1 -1
  33. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +1 -1
  34. package/dist/runtime/registry/google-adsense.js +1 -1
  35. package/dist/runtime/registry/google-analytics.d.ts +57 -13
  36. package/dist/runtime/registry/google-analytics.js +30 -28
  37. package/dist/runtime/registry/google-maps.d.ts +1 -1
  38. package/dist/runtime/registry/google-maps.js +4 -2
  39. package/dist/runtime/registry/google-tag-manager.d.ts +83 -21
  40. package/dist/runtime/registry/google-tag-manager.js +65 -24
  41. package/dist/runtime/types.d.ts +3 -10
  42. package/dist/runtime/utils.d.ts +1 -1
  43. package/package.json +20 -20
  44. package/dist/client/_nuxt/DuCkB5R-.js +0 -21
  45. package/dist/client/_nuxt/builds/meta/6161796c-413c-4c03-ac47-cad81a701b23.json +0 -1
  46. package/dist/client/_nuxt/error-404.BdjopNsg.css +0 -1
  47. package/dist/client/_nuxt/error-500.Bd7Z7Q7I.css +0 -1
@@ -6,7 +6,7 @@ export const GoogleMapsOptions = object({
6
6
  libraries: optional(array(string())),
7
7
  language: optional(string()),
8
8
  region: optional(string()),
9
- v: optional(union([literal("weekly"), literal("beta"), literal("alpha")]))
9
+ v: optional(union([literal("weekly"), literal("quarterly"), literal("beta"), literal("alpha"), string()]))
10
10
  });
11
11
  export function useScriptGoogleMaps(_options) {
12
12
  let readyPromise = Promise.resolve();
@@ -14,6 +14,7 @@ export function useScriptGoogleMaps(_options) {
14
14
  const libraries = options?.libraries || ["places"];
15
15
  const language = options?.language ? { language: options.language } : void 0;
16
16
  const region = options?.region ? { region: options.region } : void 0;
17
+ const version = options?.v ? { v: options.v } : void 0;
17
18
  return {
18
19
  scriptInput: {
19
20
  src: withQuery(`https://maps.googleapis.com/maps/api/js`, {
@@ -22,7 +23,8 @@ export function useScriptGoogleMaps(_options) {
22
23
  loading: "async",
23
24
  callback: "google.maps.__ib__",
24
25
  ...language,
25
- ...region
26
+ ...region,
27
+ ...version
26
28
  })
27
29
  },
28
30
  clientInit: import.meta.server ? void 0 : () => {
@@ -1,41 +1,103 @@
1
1
  import type { GTag } from './google-analytics.js';
2
- import type { RegistryScriptInput } from '#nuxt-scripts/types';
3
- type DataLayer = Array<Parameters<GTag> | Record<string, unknown>>;
4
- interface GoogleTagManagerDataLayerApi {
5
- name: 'dataLayer';
6
- set: (opt: {
7
- [key: string]: string;
8
- }) => void;
9
- get: (key: string) => void;
2
+ import type { NuxtUseScriptOptions, RegistryScriptInput, UseFunctionType, UseScriptContext } from '#nuxt-scripts/types';
3
+ /**
4
+ * Improved DataLayer type that better reflects GTM's capabilities
5
+ * Can contain either gtag event parameters or custom data objects
6
+ */
7
+ export type DataLayerItem = Parameters<GTag> | Record<string, unknown>;
8
+ export type DataLayer = Array<DataLayerItem>;
9
+ /**
10
+ * DataLayer push function type
11
+ */
12
+ export interface DataLayerPush {
13
+ (...args: Parameters<GTag>): void;
14
+ (obj: Record<string, unknown>): void;
15
+ }
16
+ /**
17
+ * Improved DataLayer API type with more precise methods
18
+ */
19
+ export interface GoogleTagManagerDataLayerApi {
20
+ name: string;
21
+ push: DataLayerPush;
22
+ set: (config: Record<string, unknown>) => void;
23
+ get: <T = unknown>(key: string) => T;
10
24
  reset: () => void;
25
+ listeners: Array<() => void>;
11
26
  }
12
- interface GoogleTagManagerDataLayerStatus {
27
+ /**
28
+ * DataLayer status information
29
+ */
30
+ export interface GoogleTagManagerDataLayerStatus {
13
31
  dataLayer: {
14
32
  gtmDom: boolean;
15
33
  gtmLoad: boolean;
16
34
  subscribers: number;
35
+ [key: string]: unknown;
17
36
  };
18
37
  }
19
- type GoogleTagManagerInstance = GoogleTagManagerDataLayerStatus & {
20
- [key: string]: {
21
- callback: () => void;
22
- dataLayer: GoogleTagManagerDataLayerApi;
23
- };
24
- };
25
- interface GoogleTagManagerApi {
38
+ /**
39
+ * Container instance type
40
+ */
41
+ export interface GoogleTagManagerContainer {
42
+ callback: () => void;
43
+ dataLayer: GoogleTagManagerDataLayerApi;
44
+ state: Record<string, unknown>;
45
+ }
46
+ /**
47
+ * Complete GTM instance object
48
+ */
49
+ export interface GoogleTagManagerInstance extends GoogleTagManagerDataLayerStatus {
50
+ [containerId: string]: GoogleTagManagerContainer | any;
51
+ }
52
+ /**
53
+ * Complete Google Tag Manager API accessible via window
54
+ */
55
+ export interface GoogleTagManagerApi {
26
56
  google_tag_manager: GoogleTagManagerInstance;
27
- dataLayer: DataLayer;
57
+ dataLayer: DataLayer & {
58
+ push: DataLayerPush;
59
+ };
28
60
  }
61
+ /**
62
+ * Enhanced window type with GTM
63
+ */
29
64
  declare global {
30
65
  interface Window extends GoogleTagManagerApi {
31
66
  }
32
67
  }
68
+ /**
69
+ * GTM configuration options with improved documentation
70
+ */
33
71
  export declare const GoogleTagManagerOptions: import("valibot").ObjectSchema<{
72
+ /** GTM container ID (format: GTM-XXXXXX) */
34
73
  readonly id: import("valibot").StringSchema<undefined>;
74
+ /** Optional dataLayer variable name */
35
75
  readonly l: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
76
+ /** Authentication token for environment-specific container versions */
77
+ readonly auth: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
78
+ /** Preview environment name */
79
+ readonly preview: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
80
+ /** Forces GTM cookies to take precedence when true */
81
+ readonly cookiesWin: import("valibot").OptionalSchema<import("valibot").UnionSchema<[import("valibot").BooleanSchema<undefined>, import("valibot").LiteralSchema<"x", undefined>], undefined>, undefined>;
82
+ /** Enables debug mode when true */
83
+ readonly debug: import("valibot").OptionalSchema<import("valibot").UnionSchema<[import("valibot").BooleanSchema<undefined>, import("valibot").LiteralSchema<"x", undefined>], undefined>, undefined>;
84
+ /** No Personal Advertising - disables advertising features when true */
85
+ readonly npa: import("valibot").OptionalSchema<import("valibot").UnionSchema<[import("valibot").BooleanSchema<undefined>, import("valibot").LiteralSchema<"1", undefined>], undefined>, undefined>;
86
+ /** Custom dataLayer name (alternative to "l" property) */
87
+ readonly dataLayer: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
88
+ /** Environment name for environment-specific container */
89
+ readonly envName: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
90
+ /** Referrer policy for analytics requests */
91
+ readonly authReferrerPolicy: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
36
92
  }, undefined>;
37
93
  export type GoogleTagManagerInput = RegistryScriptInput<typeof GoogleTagManagerOptions>;
38
- export declare function useScriptGoogleTagManager<T extends GoogleTagManagerApi>(_options?: GoogleTagManagerInput & {
39
- onBeforeGtmStart?: (gtag: GTag) => void;
40
- }): import("#nuxt-scripts/types").UseScriptContext<T>;
41
- export {};
94
+ /**
95
+ * Hook to use Google Tag Manager in Nuxt applications
96
+ */
97
+ export declare function useScriptGoogleTagManager<T extends GoogleTagManagerApi>(options?: GoogleTagManagerInput & {
98
+ /**
99
+ * Optional callback that runs before GTM starts
100
+ * Allows for custom initialization or configuration
101
+ */
102
+ onBeforeGtmStart?: (gtag: DataLayerPush) => void;
103
+ }): UseScriptContext<UseFunctionType<NuxtUseScriptOptions<T>, T>>;
@@ -1,31 +1,72 @@
1
1
  import { withQuery } from "ufo";
2
2
  import { useRegistryScript } from "#nuxt-scripts/utils";
3
- import { object, string, optional } from "#nuxt-scripts-validator";
3
+ import { object, string, optional, boolean, union, literal } from "#nuxt-scripts-validator";
4
4
  export const GoogleTagManagerOptions = object({
5
+ /** GTM container ID (format: GTM-XXXXXX) */
5
6
  id: string(),
6
- l: optional(string())
7
+ /** Optional dataLayer variable name */
8
+ l: optional(string()),
9
+ /** Authentication token for environment-specific container versions */
10
+ auth: optional(string()),
11
+ /** Preview environment name */
12
+ preview: optional(string()),
13
+ /** Forces GTM cookies to take precedence when true */
14
+ cookiesWin: optional(union([boolean(), literal("x")])),
15
+ /** Enables debug mode when true */
16
+ debug: optional(union([boolean(), literal("x")])),
17
+ /** No Personal Advertising - disables advertising features when true */
18
+ npa: optional(union([boolean(), literal("1")])),
19
+ /** Custom dataLayer name (alternative to "l" property) */
20
+ dataLayer: optional(string()),
21
+ /** Environment name for environment-specific container */
22
+ envName: optional(string()),
23
+ /** Referrer policy for analytics requests */
24
+ authReferrerPolicy: optional(string())
7
25
  });
8
- export function useScriptGoogleTagManager(_options) {
9
- return useRegistryScript(_options?.key || "googleTagManager", (options) => ({
10
- scriptInput: {
11
- src: withQuery("https://www.googletagmanager.com/gtm.js", { id: options?.id, l: options?.l })
26
+ export function useScriptGoogleTagManager(options) {
27
+ return useRegistryScript(
28
+ options?.key || "googleTagManager",
29
+ (opts) => {
30
+ const dataLayerName = opts?.l ?? opts?.dataLayer ?? "dataLayer";
31
+ return {
32
+ scriptInput: {
33
+ src: withQuery("https://www.googletagmanager.com/gtm.js", {
34
+ id: opts.id,
35
+ l: opts.l,
36
+ gtm_auth: opts.auth,
37
+ gtm_preview: opts.preview,
38
+ gtm_cookies_win: opts.cookiesWin ? "x" : void 0,
39
+ gtm_debug: opts.debug ? "x" : void 0,
40
+ gtm_npa: opts.npa ? "1" : void 0,
41
+ gtm_data_layer: opts.dataLayer,
42
+ gtm_env: opts.envName,
43
+ gtm_auth_referrer_policy: opts.authReferrerPolicy
44
+ })
45
+ },
46
+ schema: import.meta.dev ? GoogleTagManagerOptions : void 0,
47
+ scriptOptions: {
48
+ use: () => {
49
+ return {
50
+ dataLayer: window[dataLayerName],
51
+ google_tag_manager: window.google_tag_manager
52
+ };
53
+ },
54
+ performanceMarkFeature: "nuxt-third-parties-gtm",
55
+ tagPriority: 1
56
+ },
57
+ clientInit: import.meta.server ? void 0 : () => {
58
+ window[dataLayerName] = window[dataLayerName] || [];
59
+ function gtag(...args) {
60
+ window[dataLayerName].push(args);
61
+ }
62
+ options?.onBeforeGtmStart?.(gtag);
63
+ window[dataLayerName].push({
64
+ "gtm.start": (/* @__PURE__ */ new Date()).getTime(),
65
+ "event": "gtm.js"
66
+ });
67
+ }
68
+ };
12
69
  },
13
- schema: import.meta.dev ? GoogleTagManagerOptions : void 0,
14
- scriptOptions: {
15
- use: () => {
16
- return { dataLayer: window[options.l ?? "dataLayer"], google_tag_manager: window.google_tag_manager };
17
- },
18
- performanceMarkFeature: "nuxt-third-parties-gtm",
19
- tagPriority: 1
20
- },
21
- clientInit: import.meta.server ? void 0 : () => {
22
- const dataLayerName = options?.l ?? "dataLayer";
23
- window[dataLayerName] = window[options?.l ?? "dataLayer"] || [];
24
- function gtag() {
25
- window[dataLayerName].push(arguments);
26
- }
27
- _options?.onBeforeGtmStart?.(gtag);
28
- window[dataLayerName].push({ "gtm.start": (/* @__PURE__ */ new Date()).getTime(), "event": "gtm.js" });
29
- }
30
- }), _options);
70
+ options
71
+ );
31
72
  }
@@ -1,4 +1,4 @@
1
- import type { ActiveHeadEntry, AsAsyncFunctionValues, DataKeys, SchemaAugmentations, ScriptBase } from '@unhead/schema';
1
+ import type { Script } from '@unhead/vue/types';
2
2
  import type { UseScriptInput, VueScriptInstance, UseScriptOptions } from '@unhead/vue';
3
3
  import type { ComputedRef, Ref } from 'vue';
4
4
  import type { InferInput, ObjectSchema } from 'valibot';
@@ -26,14 +26,7 @@ import type { GoogleAnalyticsInput } from './registry/google-analytics.js';
26
26
  import type { GoogleTagManagerInput } from './registry/google-tag-manager.js';
27
27
  import type { UmamiAnalyticsInput } from './registry/umami-analytics.js';
28
28
  export type WarmupStrategy = false | 'preload' | 'preconnect' | 'dns-prefetch';
29
- export type UseScriptContext<T extends Record<symbol | string, any>> = (Promise<T> & VueScriptInstance<T>) & AsAsyncFunctionValues<T> & {
30
- /**
31
- * @deprecated Use top-level functions instead.
32
- */
33
- $script: Promise<T> & VueScriptInstance<T>;
34
- warmup: (rel: WarmupStrategy) => void;
35
- _warmupEl?: void | ActiveHeadEntry<any>;
36
- };
29
+ export type UseScriptContext<T extends Record<symbol | string, any>> = VueScriptInstance<T>;
37
30
  export type NuxtUseScriptOptions<T extends Record<symbol | string, any> = {}> = Omit<UseScriptOptions<T>, 'trigger'> & {
38
31
  /**
39
32
  * The trigger to load the script:
@@ -153,7 +146,7 @@ export type UseFunctionType<T, U> = T extends {
153
146
  } ? V extends (...args: any) => any ? ReturnType<V> : U : U;
154
147
  declare const _emptyOptions: ObjectSchema<{}, undefined>;
155
148
  export type EmptyOptionsSchema = typeof _emptyOptions;
156
- type ScriptInput = ScriptBase & DataKeys & SchemaAugmentations['script'];
149
+ type ScriptInput = Script;
157
150
  export type InferIfSchema<T> = T extends ObjectSchema<any, any> ? InferInput<T> : T;
158
151
  export type RegistryScriptInput<T = EmptyOptionsSchema, Bundelable extends boolean = true, Usable extends boolean = false, CanBypassOptions extends boolean = true> = (InferIfSchema<T> & {
159
152
  /**
@@ -9,6 +9,6 @@ type OptionsFn<O> = (options: InferIfSchema<O>) => ({
9
9
  clientInit?: () => void;
10
10
  });
11
11
  export declare function scriptRuntimeConfig<T extends keyof ScriptRegistry>(key: T): ScriptRegistry[T];
12
- export declare function useRegistryScript<T extends Record<string | symbol, any>, O = EmptyOptionsSchema, U = {}>(registryKey: keyof ScriptRegistry | string, optionsFn: OptionsFn<O>, _userOptions?: RegistryScriptInput<O>): UseScriptContext<UseFunctionType<NuxtUseScriptOptions<T>, T>>;
12
+ 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>>;
13
13
  export declare function pick(obj: Record<string, any>, keys: string[]): Record<string, any>;
14
14
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuxt/scripts",
3
3
  "type": "module",
4
- "version": "0.11.1",
4
+ "version": "0.11.3",
5
5
  "description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
6
6
  "author": {
7
7
  "website": "https://harlanzw.com",
@@ -71,9 +71,9 @@
71
71
  }
72
72
  },
73
73
  "dependencies": {
74
- "@nuxt/kit": "^3.16.0",
75
- "@vueuse/core": "^12.8.2",
76
- "consola": "^3.4.0",
74
+ "@nuxt/kit": "^3.16.1",
75
+ "@vueuse/core": "^13.0.0",
76
+ "consola": "^3.4.2",
77
77
  "defu": "^6.1.4",
78
78
  "h3": "^1.15.1",
79
79
  "magic-string": "^0.30.17",
@@ -84,40 +84,40 @@
84
84
  "sirv": "^3.0.1",
85
85
  "std-env": "^3.8.1",
86
86
  "ufo": "^1.5.4",
87
- "unplugin": "^2.2.0",
87
+ "unplugin": "^2.2.2",
88
88
  "unstorage": "^1.15.0",
89
- "valibot": "^1.0.0-rc.3"
89
+ "valibot": "^1.0.0"
90
90
  },
91
91
  "devDependencies": {
92
- "@nuxt/devtools-kit": "^2.2.1",
93
- "@nuxt/devtools-ui-kit": "^2.2.1",
94
- "@nuxt/eslint-config": "^1.1.0",
92
+ "@nuxt/devtools-kit": "^2.3.1",
93
+ "@nuxt/devtools-ui-kit": "^2.3.1",
94
+ "@nuxt/eslint-config": "^1.2.0",
95
95
  "@nuxt/module-builder": "^0.8.4",
96
- "@nuxt/test-utils": "3.17.1",
96
+ "@nuxt/test-utils": "3.17.2",
97
97
  "@types/semver": "^7.5.8",
98
- "@typescript-eslint/typescript-estree": "^8.26.0",
99
- "@unhead/ssr": "^1.11.20",
98
+ "@typescript-eslint/typescript-estree": "^8.28.0",
100
99
  "acorn-loose": "^8.4.0",
101
- "bumpp": "^10.0.3",
100
+ "bumpp": "^10.1.0",
102
101
  "changelogen": "^0.6.1",
103
- "eslint": "9.21.0",
102
+ "eslint": "9.23.0",
104
103
  "eslint-plugin-n": "^17.16.2",
105
- "happy-dom": "^17.4.0",
104
+ "happy-dom": "^17.4.4",
106
105
  "knitwork": "^1.2.0",
107
- "nuxt": "^3.16.0",
108
- "playwright-core": "^1.51.0",
106
+ "nuxt": "^3.16.1",
107
+ "playwright-core": "^1.51.1",
109
108
  "shiki": "2.5.0",
110
109
  "typescript": "5.8.2",
111
- "vitest": "^3.0.8",
110
+ "vitest": "^3.0.9",
112
111
  "vue": "^3.5.13",
113
112
  "vue-router": "^4.5.0",
114
113
  "vue-tsc": "^2.2.8",
115
- "@nuxt/scripts": "0.11.1"
114
+ "@nuxt/scripts": "0.11.3"
116
115
  },
117
116
  "resolutions": {
118
117
  "@nuxt/schema": "catalog:",
119
118
  "@nuxt/scripts": "workspace:*",
120
- "@unhead/vue": "2.0.0-rc.8",
119
+ "@unhead/vue": "2.0.1",
120
+ "unhead": "2.0.1",
121
121
  "nuxt": "catalog:",
122
122
  "typescript": "5.8.2",
123
123
  "vue": "^3.5.13",