@nuxt/scripts 1.0.0-beta.23 → 1.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/78647cef-f45a-4560-82b4-b9364815198a.json +1 -0
- package/dist/client/index.html +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +28 -3
- package/dist/runtime/server/utils/privacy.d.ts +0 -1
- package/dist/runtime/server/utils/privacy.js +6 -8
- package/dist/stats.mjs +16 -8
- package/package.json +3 -3
- package/dist/client/_nuxt/builds/meta/39ee5395-65bb-4a46-82e0-e68853f94418.json +0 -1
package/dist/client/200.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556086,false]</script></body></html>
|
package/dist/client/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556087,false]</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"78647cef-f45a-4560-82b4-b9364815198a","timestamp":1773461550818}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"78647cef-f45a-4560-82b4-b9364815198a","timestamp":1773461550818,"prerendered":[]}
|
package/dist/client/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.CACgbLJl.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/BNNMZFwZ.js"><script type="module" src="/__nuxt-scripts/_nuxt/BNNMZFwZ.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"},googleStaticMapsProxy:"",endpoints:{}}},app:{baseURL:"/__nuxt-scripts",buildId:"78647cef-f45a-4560-82b4-b9364815198a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1773461556087,false]</script></body></html>
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -10,7 +10,7 @@ import { createStorage } from 'unstorage';
|
|
|
10
10
|
import fsDriver from 'unstorage/drivers/fs-lite';
|
|
11
11
|
import { addCustomTab } from '@nuxt/devtools-kit';
|
|
12
12
|
import { isCI, provider } from 'std-env';
|
|
13
|
-
import { parseAndWalk, ScopeTracker, walk, ScopeTrackerFunctionParam, ScopeTrackerVariable } from 'oxc-walker';
|
|
13
|
+
import { parseAndWalk, ScopeTracker, walk, ScopeTrackerFunction, ScopeTrackerIdentifier, ScopeTrackerFunctionParam, ScopeTrackerVariable } from 'oxc-walker';
|
|
14
14
|
import { createUnplugin } from 'unplugin';
|
|
15
15
|
import { pathToFileURL } from 'node:url';
|
|
16
16
|
import { createHash } from 'node:crypto';
|
|
@@ -478,6 +478,7 @@ function NuxtScriptsCheckScripts() {
|
|
|
478
478
|
}
|
|
479
479
|
|
|
480
480
|
const WORD_OR_DOLLAR_RE = /[\w$]/;
|
|
481
|
+
const BLANK_CANVAS_DATA_URL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIHWNgAAIABQABNjN9GQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAA0lEQVQI12NgYGBgAAAABQABXvMqOgAAAABJRU5ErkJggg==";
|
|
481
482
|
const GA_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.google-analytics\.com\/g\/collect"/g;
|
|
482
483
|
const GA_ANALYTICS_COLLECT_RE = /([\w$])?"https:\/\/"\+\(.*?\)\+"\.analytics\.google\.com\/g\/collect"/g;
|
|
483
484
|
const FATHOM_SELF_HOSTED_RE = /\.src\.indexOf\("cdn\.usefathom\.com"\)\s*<\s*0/;
|
|
@@ -557,12 +558,15 @@ function resolveToGlobal(name, scopeTracker, depth = 0) {
|
|
|
557
558
|
return null;
|
|
558
559
|
if (init.type === "Identifier")
|
|
559
560
|
return resolveToGlobal(init.name, scopeTracker, depth + 1);
|
|
560
|
-
if (init.type === "MemberExpression" &&
|
|
561
|
+
if (init.type === "MemberExpression" && init.object?.type === "Identifier") {
|
|
562
|
+
const memberProp = init.computed ? init.property?.type === "Literal" && typeof init.property.value === "string" ? init.property.value : null : init.property?.type === "Identifier" ? init.property.name : null;
|
|
563
|
+
if (!memberProp)
|
|
564
|
+
return null;
|
|
561
565
|
const objGlobal = resolveToGlobal(init.object.name, scopeTracker, depth + 1);
|
|
562
566
|
if (!objGlobal)
|
|
563
567
|
return null;
|
|
564
568
|
if (WINDOW_GLOBALS.has(objGlobal) || objGlobal === "document")
|
|
565
|
-
return
|
|
569
|
+
return memberProp;
|
|
566
570
|
return null;
|
|
567
571
|
}
|
|
568
572
|
return null;
|
|
@@ -636,6 +640,27 @@ function rewriteScriptUrlsAST(content, filename, rewrites) {
|
|
|
636
640
|
}
|
|
637
641
|
if (node.type === "CallExpression") {
|
|
638
642
|
const callee = node.callee;
|
|
643
|
+
const canvasPropName = callee?.type === "MemberExpression" ? callee.computed ? callee.property?.type === "Literal" && typeof callee.property.value === "string" ? callee.property.value : null : callee.property?.name : null;
|
|
644
|
+
if (canvasPropName === "toDataURL" && callee.object) {
|
|
645
|
+
const blankCanvas = `"${BLANK_CANVAS_DATA_URL}"`;
|
|
646
|
+
if (callee.object.type === "Identifier") {
|
|
647
|
+
const decl = scopeTracker.getDeclaration(callee.object.name);
|
|
648
|
+
if (decl instanceof ScopeTrackerFunction || decl instanceof ScopeTrackerIdentifier) ; else {
|
|
649
|
+
s.overwrite(node.start, node.end, blankCanvas);
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
} else {
|
|
653
|
+
s.overwrite(node.start, node.end, blankCanvas);
|
|
654
|
+
return;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
if (canvasPropName === "getExtension") {
|
|
658
|
+
const args = node.arguments;
|
|
659
|
+
if (args?.length === 1 && args[0]?.type === "Literal" && args[0].value === "WEBGL_debug_renderer_info") {
|
|
660
|
+
s.overwrite(node.start, node.end, "null");
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
639
664
|
if (callee?.type === "Identifier" && callee.name === "fetch") {
|
|
640
665
|
if (!scopeTracker.getDeclaration("fetch"))
|
|
641
666
|
s.overwrite(callee.start, callee.end, "__nuxtScripts.fetch");
|
|
@@ -78,11 +78,13 @@ export const STRIP_PARAMS = {
|
|
|
78
78
|
// Browser version lists — generalized to major versions (d_bvs = Snapchat, uafvl = GA Client Hints)
|
|
79
79
|
browserVersion: ["d_bvs", "uafvl"],
|
|
80
80
|
// Browser data lists — replaced with empty value
|
|
81
|
-
browserData: ["plugins", "fonts"],
|
|
81
|
+
browserData: ["plugins", "fonts", "audiofingerprint"],
|
|
82
82
|
// Location/Timezone — generalized
|
|
83
83
|
location: ["tz", "timezone", "timezoneoffset"],
|
|
84
|
-
// Canvas/WebGL
|
|
85
|
-
|
|
84
|
+
// Canvas/WebGL fingerprints — neutralized at build time via AST rewriting (rewrite-ast.ts).
|
|
85
|
+
// These params are no longer stripped at runtime; the source APIs (toDataURL, WEBGL_debug_renderer_info)
|
|
86
|
+
// are neutralized before the script ever runs.
|
|
87
|
+
// canvas: ['canvas', 'webgl'],
|
|
86
88
|
// Combined device fingerprinting (X/Twitter dv param contains: timezone, locale, vendor, platform, screen, etc.)
|
|
87
89
|
deviceInfo: ["dv", "device_info", "deviceinfo"]
|
|
88
90
|
};
|
|
@@ -302,11 +304,7 @@ export function stripPayloadFingerprinting(payload, privacy) {
|
|
|
302
304
|
continue;
|
|
303
305
|
}
|
|
304
306
|
if (matchesParam(key, STRIP_PARAMS.browserData)) {
|
|
305
|
-
result[key] = p.hardware ? Array.isArray(value) ? [] : "" : value;
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
if (matchesParam(key, STRIP_PARAMS.canvas)) {
|
|
309
|
-
result[key] = p.hardware ? typeof value === "number" ? 0 : typeof value === "object" ? {} : "" : value;
|
|
307
|
+
result[key] = p.hardware ? Array.isArray(value) ? [] : typeof value === "number" ? 0 : "" : value;
|
|
310
308
|
continue;
|
|
311
309
|
}
|
|
312
310
|
if (matchesParam(key, STRIP_PARAMS.deviceInfo)) {
|
package/dist/stats.mjs
CHANGED
|
@@ -37,7 +37,8 @@ const scriptMeta = {
|
|
|
37
37
|
},
|
|
38
38
|
googleAnalytics: {
|
|
39
39
|
urls: ["https://www.googletagmanager.com/gtag/js?id=G-TR58L0EF8P"],
|
|
40
|
-
trackedData: ["page-views", "events", "conversions", "user-identity", "audiences"]
|
|
40
|
+
trackedData: ["page-views", "events", "conversions", "user-identity", "audiences"],
|
|
41
|
+
canvasFingerprinting: true
|
|
41
42
|
},
|
|
42
43
|
umamiAnalytics: {
|
|
43
44
|
urls: ["https://cloud.umami.is/script.js"],
|
|
@@ -46,23 +47,28 @@ const scriptMeta = {
|
|
|
46
47
|
// Ads / Pixels
|
|
47
48
|
metaPixel: {
|
|
48
49
|
urls: ["https://connect.facebook.net/en_US/fbevents.js"],
|
|
49
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
50
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
51
|
+
canvasFingerprinting: true
|
|
50
52
|
},
|
|
51
53
|
xPixel: {
|
|
52
54
|
urls: ["https://static.ads-twitter.com/uwt.js"],
|
|
53
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
55
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
56
|
+
canvasFingerprinting: true
|
|
54
57
|
},
|
|
55
58
|
tikTokPixel: {
|
|
56
59
|
urls: ["https://analytics.tiktok.com/i18n/pixel/events.js"],
|
|
57
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
60
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
61
|
+
canvasFingerprinting: true
|
|
58
62
|
},
|
|
59
63
|
snapchatPixel: {
|
|
60
64
|
urls: ["https://sc-static.net/scevent.min.js"],
|
|
61
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
65
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
66
|
+
canvasFingerprinting: true
|
|
62
67
|
},
|
|
63
68
|
redditPixel: {
|
|
64
69
|
urls: ["https://www.redditstatic.com/ads/pixel.js"],
|
|
65
|
-
trackedData: ["page-views", "conversions", "retargeting", "audiences"]
|
|
70
|
+
trackedData: ["page-views", "conversions", "retargeting", "audiences"],
|
|
71
|
+
canvasFingerprinting: true
|
|
66
72
|
},
|
|
67
73
|
googleAdsense: {
|
|
68
74
|
urls: ["https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"],
|
|
@@ -75,11 +81,13 @@ const scriptMeta = {
|
|
|
75
81
|
// Session replay / Heatmaps
|
|
76
82
|
hotjar: {
|
|
77
83
|
urls: ["https://static.hotjar.com/c/hotjar-3925006.js?sv=6"],
|
|
78
|
-
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls", "form-submissions"]
|
|
84
|
+
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls", "form-submissions"],
|
|
85
|
+
canvasFingerprinting: true
|
|
79
86
|
},
|
|
80
87
|
clarity: {
|
|
81
88
|
urls: ["https://www.clarity.ms/tag/mqk2m9dr2v"],
|
|
82
|
-
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls"]
|
|
89
|
+
trackedData: ["page-views", "session-replay", "heatmaps", "clicks", "scrolls"],
|
|
90
|
+
canvasFingerprinting: true
|
|
83
91
|
},
|
|
84
92
|
// Tag Manager
|
|
85
93
|
googleTagManager: {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuxt/scripts",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.0-beta.
|
|
4
|
+
"version": "1.0.0-beta.24",
|
|
5
5
|
"description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Harlan Wilton",
|
|
@@ -135,14 +135,14 @@
|
|
|
135
135
|
"knitwork": "^1.3.0",
|
|
136
136
|
"nuxt": "^4.4.2",
|
|
137
137
|
"playwright-core": "^1.58.2",
|
|
138
|
-
"posthog-js": "^1.360.
|
|
138
|
+
"posthog-js": "^1.360.2",
|
|
139
139
|
"shiki": "^4.0.2",
|
|
140
140
|
"typescript": "^5.9.3",
|
|
141
141
|
"vitest": "^4.1.0",
|
|
142
142
|
"vue": "^3.5.30",
|
|
143
143
|
"vue-router": "^5.0.3",
|
|
144
144
|
"vue-tsc": "^3.2.5",
|
|
145
|
-
"@nuxt/scripts": "1.0.0-beta.
|
|
145
|
+
"@nuxt/scripts": "1.0.0-beta.24"
|
|
146
146
|
},
|
|
147
147
|
"resolutions": {
|
|
148
148
|
"@nuxt/scripts": "workspace:*"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"39ee5395-65bb-4a46-82e0-e68853f94418","timestamp":1773403960379,"prerendered":[]}
|