@base44-preview/vite-plugin 0.2.16-pr.24.de4b42b → 0.2.17-pr.25.fb197cb

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.
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from "vite";
2
+ /**
3
+ * Plugin that injects analytics tracking code for production builds.
4
+ * This plugin only runs when NOT in sandbox mode (MODAL_SANDBOX_ID not set).
5
+ * It uses the @base44/sdk to track page views via appLogs.logUserInApp().
6
+ *
7
+ * Requires @base44/sdk to be installed in the consuming app.
8
+ */
9
+ export declare function analyticsTrackerPlugin(): Plugin;
10
+ //# sourceMappingURL=analytics-tracker-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-tracker-plugin.d.ts","sourceRoot":"","sources":["../src/analytics-tracker-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,MAAM,CAAC;AAGnD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA0E/C"}
@@ -0,0 +1,80 @@
1
+ import { loadEnv } from "vite";
2
+ /**
3
+ * Plugin that injects analytics tracking code for production builds.
4
+ * This plugin only runs when NOT in sandbox mode (MODAL_SANDBOX_ID not set).
5
+ * It uses the @base44/sdk to track page views via appLogs.logUserInApp().
6
+ *
7
+ * Requires @base44/sdk to be installed in the consuming app.
8
+ */
9
+ export function analyticsTrackerPlugin() {
10
+ let appId = "";
11
+ let serverUrl = "";
12
+ return {
13
+ name: "analytics-tracker",
14
+ // Only apply in production builds
15
+ apply: "build",
16
+ configResolved(config) {
17
+ const env = loadEnv(config.mode, config.root, "");
18
+ appId = env.VITE_BASE44_APP_ID || "";
19
+ serverUrl = env.VITE_BASE44_BACKEND_URL || "";
20
+ },
21
+ transformIndexHtml(html) {
22
+ if (!appId) {
23
+ console.warn("[analytics-tracker] VITE_BASE44_APP_ID not set, skipping analytics injection");
24
+ return html;
25
+ }
26
+ // Use JSON.stringify to prevent XSS injection via env vars
27
+ const safeAppId = JSON.stringify(appId);
28
+ const safeServerUrl = JSON.stringify(serverUrl);
29
+ // Inline script that imports SDK and tracks page views
30
+ const analyticsScript = `
31
+ <script type="module">
32
+ import { createClient } from "@base44/sdk";
33
+
34
+ const client = createClient({
35
+ appId: ${safeAppId},
36
+ serverUrl: ${safeServerUrl},
37
+ });
38
+
39
+ let lastPath = "";
40
+
41
+ function getPageNameFromPath(path) {
42
+ const segments = path.split("/").filter(Boolean);
43
+ return segments[0] || null;
44
+ }
45
+
46
+ function trackPageView() {
47
+ const path = window.location.pathname;
48
+ if (path === lastPath) return;
49
+ lastPath = path;
50
+
51
+ const pageName = getPageNameFromPath(path) || "home";
52
+ client.appLogs.logUserInApp(pageName).catch(() => {});
53
+ }
54
+
55
+ // Intercept history.pushState
56
+ const originalPushState = history.pushState.bind(history);
57
+ history.pushState = function (...args) {
58
+ originalPushState(...args);
59
+ trackPageView();
60
+ };
61
+
62
+ // Intercept history.replaceState
63
+ const originalReplaceState = history.replaceState.bind(history);
64
+ history.replaceState = function (...args) {
65
+ originalReplaceState(...args);
66
+ trackPageView();
67
+ };
68
+
69
+ // Handle browser back/forward navigation
70
+ window.addEventListener("popstate", trackPageView);
71
+
72
+ // Track initial page view
73
+ trackPageView();
74
+ </script>`;
75
+ // Inject before closing </head> tag
76
+ return html.replace("</head>", `${analyticsScript}\n</head>`);
77
+ },
78
+ };
79
+ }
80
+ //# sourceMappingURL=analytics-tracker-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-tracker-plugin.js","sourceRoot":"","sources":["../src/analytics-tracker-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,kCAAkC;QAClC,KAAK,EAAE,OAAO;QACd,cAAc,CAAC,MAAsB;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClD,KAAK,GAAG,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC;YACrC,SAAS,GAAG,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,kBAAkB,CAAC,IAAI;YACrB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;gBAC7F,OAAO,IAAI,CAAC;YACd,CAAC;YAED,2DAA2D;YAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEhD,uDAAuD;YACvD,MAAM,eAAe,GAAG;;;;;WAKnB,SAAS;eACL,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAsClB,CAAC;YAEL,oCAAoC;YACpC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,eAAe,WAAW,CAAC,CAAC;QAChE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,8 +1,7 @@
1
1
  import type { Plugin } from "vite";
2
- export declare function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, analyticsTracker, visualEditAgent, }: {
2
+ export declare function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, }: {
3
3
  hmrNotifier: boolean;
4
4
  navigationNotifier: boolean;
5
- analyticsTracker: boolean;
6
5
  visualEditAgent: boolean;
7
6
  }): Plugin;
8
7
  //# sourceMappingURL=html-injections-plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-injections-plugin.d.ts","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,EAAE;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B,GAwEM,MAAM,CACZ"}
1
+ {"version":3,"file":"html-injections-plugin.d.ts","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,GAChB,EAAE;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CAC1B,GA4DM,MAAM,CACZ"}
@@ -1,4 +1,4 @@
1
- export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, analyticsTracker, visualEditAgent, }) {
1
+ export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, }) {
2
2
  return {
3
3
  name: "html-injections",
4
4
  apply: (config) => config.mode !== "production",
@@ -44,18 +44,6 @@ export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, analytic
44
44
  },
45
45
  ]
46
46
  : []),
47
- ...(analyticsTracker
48
- ? [
49
- {
50
- tag: "script",
51
- attrs: {
52
- src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
53
- type: "module",
54
- },
55
- injectTo: "head",
56
- },
57
- ]
58
- : []),
59
47
  ...(visualEditAgent
60
48
  ? [
61
49
  {
@@ -1 +1 @@
1
- {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAMhB;IACC,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QAC/C,kBAAkB;YAChB,OAAO;gBACL;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE;wBACL,GAAG,EAAE,gFAAgF;wBACrF,IAAI,EAAE,QAAQ;qBACf;oBACD,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE;wBACL,GAAG,EAAE,6EAA6E;wBAClF,IAAI,EAAE,QAAQ;qBACf;oBACD,QAAQ,EAAE,MAAM;iBACjB;gBACD,GAAG,CAAC,WAAW;oBACb,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,2EAA2E;gCAChF,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,kBAAkB;oBACpB,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,0EAA0E;gCAC/E,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,gBAAgB;oBAClB,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,wEAAwE;gCAC7E,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,eAAe;oBACjB,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,wEAAwE;gCAC7E,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;KACQ,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,GAKhB;IACC,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QAC/C,kBAAkB;YAChB,OAAO;gBACL;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE;wBACL,GAAG,EAAE,gFAAgF;wBACrF,IAAI,EAAE,QAAQ;qBACf;oBACD,QAAQ,EAAE,MAAM;iBACjB;gBACD;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE;wBACL,GAAG,EAAE,6EAA6E;wBAClF,IAAI,EAAE,QAAQ;qBACf;oBACD,QAAQ,EAAE,MAAM;iBACjB;gBACD,GAAG,CAAC,WAAW;oBACb,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,2EAA2E;gCAChF,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,kBAAkB;oBACpB,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,0EAA0E;gCAC/E,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,eAAe;oBACjB,CAAC,CAAC;wBACE;4BACE,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE;gCACL,GAAG,EAAE,wEAAwE;gCAC7E,IAAI,EAAE,QAAQ;6BACf;4BACD,QAAQ,EAAE,MAAM;yBACjB;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;KACQ,CAAC;AACd,CAAC"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export default function vitePlugin(opts?: {
3
3
  legacySDKImports?: boolean;
4
4
  hmrNotifier?: boolean;
5
5
  navigationNotifier?: boolean;
6
- analyticsTracker?: boolean;
7
6
  visualEditAgent?: boolean;
7
+ analyticsTracker?: boolean;
8
8
  }): Plugin<any>[];
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAS/C,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,iBA+MP"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAU/C,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,IAAI,GAAE;IACJ,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,iBAiNP"}
package/dist/index.js CHANGED
@@ -3,9 +3,10 @@ import { errorOverlayPlugin } from "./error-overlay-plugin.js";
3
3
  import { visualEditPlugin } from "./visual-edit-plugin.js";
4
4
  import { filterPackagesInProject } from "./utils.js";
5
5
  import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
6
+ import { analyticsTrackerPlugin } from "./analytics-tracker-plugin.js";
6
7
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
7
8
  export default function vitePlugin(opts = {}) {
8
- const { legacySDKImports = false, hmrNotifier = false, navigationNotifier = false, analyticsTracker = false, visualEditAgent = false, } = opts;
9
+ const { legacySDKImports = false, hmrNotifier = false, navigationNotifier = false, visualEditAgent = false, analyticsTracker = false, } = opts;
9
10
  return [
10
11
  {
11
12
  name: "base44",
@@ -149,9 +150,11 @@ export default function vitePlugin(opts = {}) {
149
150
  },
150
151
  errorOverlayPlugin(),
151
152
  visualEditPlugin(),
152
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, analyticsTracker, visualEditAgent }),
153
+ htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent }),
153
154
  ]
154
155
  : []),
156
+ // Analytics tracker runs in production (not in sandbox)
157
+ ...(!isRunningInSandbox && analyticsTracker ? [analyticsTrackerPlugin()] : []),
155
158
  ];
156
159
  }
157
160
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "0.2.16-pr.24.de4b42b",
3
+ "version": "0.2.17-pr.25.fb197cb",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,5 +29,13 @@
29
29
  "@babel/parser": "^7.28.5",
30
30
  "@babel/traverse": "^7.28.5",
31
31
  "@babel/types": "^7.28.5"
32
+ },
33
+ "peerDependencies": {
34
+ "@base44/sdk": ">=0.1.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "@base44/sdk": {
38
+ "optional": true
39
+ }
32
40
  }
33
41
  }
@@ -0,0 +1,85 @@
1
+ import type { Plugin, ResolvedConfig } from "vite";
2
+ import { loadEnv } from "vite";
3
+
4
+ /**
5
+ * Plugin that injects analytics tracking code for production builds.
6
+ * This plugin only runs when NOT in sandbox mode (MODAL_SANDBOX_ID not set).
7
+ * It uses the @base44/sdk to track page views via appLogs.logUserInApp().
8
+ *
9
+ * Requires @base44/sdk to be installed in the consuming app.
10
+ */
11
+ export function analyticsTrackerPlugin(): Plugin {
12
+ let appId = "";
13
+ let serverUrl = "";
14
+
15
+ return {
16
+ name: "analytics-tracker",
17
+ // Only apply in production builds
18
+ apply: "build",
19
+ configResolved(config: ResolvedConfig) {
20
+ const env = loadEnv(config.mode, config.root, "");
21
+ appId = env.VITE_BASE44_APP_ID || "";
22
+ serverUrl = env.VITE_BASE44_BACKEND_URL || "";
23
+ },
24
+ transformIndexHtml(html) {
25
+ if (!appId) {
26
+ console.warn("[analytics-tracker] VITE_BASE44_APP_ID not set, skipping analytics injection");
27
+ return html;
28
+ }
29
+
30
+ // Use JSON.stringify to prevent XSS injection via env vars
31
+ const safeAppId = JSON.stringify(appId);
32
+ const safeServerUrl = JSON.stringify(serverUrl);
33
+
34
+ // Inline script that imports SDK and tracks page views
35
+ const analyticsScript = `
36
+ <script type="module">
37
+ import { createClient } from "@base44/sdk";
38
+
39
+ const client = createClient({
40
+ appId: ${safeAppId},
41
+ serverUrl: ${safeServerUrl},
42
+ });
43
+
44
+ let lastPath = "";
45
+
46
+ function getPageNameFromPath(path) {
47
+ const segments = path.split("/").filter(Boolean);
48
+ return segments[0] || null;
49
+ }
50
+
51
+ function trackPageView() {
52
+ const path = window.location.pathname;
53
+ if (path === lastPath) return;
54
+ lastPath = path;
55
+
56
+ const pageName = getPageNameFromPath(path) || "home";
57
+ client.appLogs.logUserInApp(pageName).catch(() => {});
58
+ }
59
+
60
+ // Intercept history.pushState
61
+ const originalPushState = history.pushState.bind(history);
62
+ history.pushState = function (...args) {
63
+ originalPushState(...args);
64
+ trackPageView();
65
+ };
66
+
67
+ // Intercept history.replaceState
68
+ const originalReplaceState = history.replaceState.bind(history);
69
+ history.replaceState = function (...args) {
70
+ originalReplaceState(...args);
71
+ trackPageView();
72
+ };
73
+
74
+ // Handle browser back/forward navigation
75
+ window.addEventListener("popstate", trackPageView);
76
+
77
+ // Track initial page view
78
+ trackPageView();
79
+ </script>`;
80
+
81
+ // Inject before closing </head> tag
82
+ return html.replace("</head>", `${analyticsScript}\n</head>`);
83
+ },
84
+ };
85
+ }
@@ -3,12 +3,10 @@ import type { Plugin } from "vite";
3
3
  export function htmlInjectionsPlugin({
4
4
  hmrNotifier,
5
5
  navigationNotifier,
6
- analyticsTracker,
7
6
  visualEditAgent,
8
7
  }: {
9
8
  hmrNotifier: boolean;
10
9
  navigationNotifier: boolean;
11
- analyticsTracker: boolean;
12
10
  visualEditAgent: boolean;
13
11
  }) {
14
12
  return {
@@ -56,18 +54,6 @@ export function htmlInjectionsPlugin({
56
54
  },
57
55
  ]
58
56
  : []),
59
- ...(analyticsTracker
60
- ? [
61
- {
62
- tag: "script",
63
- attrs: {
64
- src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
65
- type: "module",
66
- },
67
- injectTo: "head",
68
- },
69
- ]
70
- : []),
71
57
  ...(visualEditAgent
72
58
  ? [
73
59
  {
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ import { errorOverlayPlugin } from "./error-overlay-plugin.js";
4
4
  import { visualEditPlugin } from "./visual-edit-plugin.js";
5
5
  import { filterPackagesInProject } from "./utils.js";
6
6
  import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
7
+ import { analyticsTrackerPlugin } from "./analytics-tracker-plugin.js";
7
8
 
8
9
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
9
10
 
@@ -12,16 +13,16 @@ export default function vitePlugin(
12
13
  legacySDKImports?: boolean;
13
14
  hmrNotifier?: boolean;
14
15
  navigationNotifier?: boolean;
15
- analyticsTracker?: boolean;
16
16
  visualEditAgent?: boolean;
17
+ analyticsTracker?: boolean;
17
18
  } = {}
18
19
  ) {
19
20
  const {
20
21
  legacySDKImports = false,
21
22
  hmrNotifier = false,
22
23
  navigationNotifier = false,
23
- analyticsTracker = false,
24
24
  visualEditAgent = false,
25
+ analyticsTracker = false,
25
26
  } = opts;
26
27
 
27
28
  return [
@@ -217,8 +218,10 @@ export default function vitePlugin(
217
218
  } as Plugin,
218
219
  errorOverlayPlugin(),
219
220
  visualEditPlugin(),
220
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, analyticsTracker, visualEditAgent }),
221
+ htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent }),
221
222
  ]
222
223
  : []),
224
+ // Analytics tracker runs in production (not in sandbox)
225
+ ...(!isRunningInSandbox && analyticsTracker ? [analyticsTrackerPlugin()] : []),
223
226
  ];
224
227
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=analytics-tracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics-tracker.d.ts","sourceRoot":"","sources":["../../src/injections/analytics-tracker.ts"],"names":[],"mappings":""}
@@ -1,47 +0,0 @@
1
- if (window.self !== window.top) {
2
- let lastPath = window.location.pathname;
3
- function getPageNameFromPath(pathname) {
4
- if (pathname === "/" || pathname === "") {
5
- return null; // Let parent handle default page
6
- }
7
- // Extract first segment of path as page name
8
- const pathSegment = pathname.replace(/^\//, "").split("/")[0];
9
- return pathSegment || null;
10
- }
11
- function notifyPageView() {
12
- const currentPath = window.location.pathname;
13
- if (currentPath !== lastPath) {
14
- lastPath = currentPath;
15
- const pageName = getPageNameFromPath(currentPath);
16
- window.parent?.postMessage({
17
- type: "app_page_view",
18
- path: currentPath,
19
- pageName,
20
- }, "*");
21
- }
22
- }
23
- // Intercept history.pushState
24
- const originalPushState = history.pushState.bind(history);
25
- history.pushState = function (...args) {
26
- originalPushState(...args);
27
- notifyPageView();
28
- };
29
- // Intercept history.replaceState
30
- const originalReplaceState = history.replaceState.bind(history);
31
- history.replaceState = function (...args) {
32
- originalReplaceState(...args);
33
- notifyPageView();
34
- };
35
- // Handle browser back/forward navigation
36
- window.addEventListener("popstate", notifyPageView);
37
- // Notify initial page view on load
38
- const initialPath = window.location.pathname;
39
- const initialPageName = getPageNameFromPath(initialPath);
40
- window.parent?.postMessage({
41
- type: "app_page_view",
42
- path: initialPath,
43
- pageName: initialPageName,
44
- }, "*");
45
- }
46
- export {};
47
- //# sourceMappingURL=analytics-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics-tracker.js","sourceRoot":"","sources":["../../src/injections/analytics-tracker.ts"],"names":[],"mappings":"AAAA,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAExC,SAAS,mBAAmB,CAAC,QAAgB;QAC3C,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,CAAC,iCAAiC;QAChD,CAAC;QACD,6CAA6C;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO,WAAW,IAAI,IAAI,CAAC;IAC7B,CAAC;IAED,SAAS,cAAc;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7C,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,QAAQ,GAAG,WAAW,CAAC;YACvB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,CAAC,MAAM,EAAE,WAAW,CACxB;gBACE,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,WAAW;gBACjB,QAAQ;aACT,EACD,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI;QACnC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;QAC3B,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAI;QACtC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;QAC9B,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,yCAAyC;IACzC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEpD,mCAAmC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC7C,MAAM,eAAe,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,CAAC,MAAM,EAAE,WAAW,CACxB;QACE,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,eAAe;KAC1B,EACD,GAAG,CACJ,CAAC;AACJ,CAAC"}
@@ -1,57 +0,0 @@
1
- if (window.self !== window.top) {
2
- let lastPath = window.location.pathname;
3
-
4
- function getPageNameFromPath(pathname: string): string | null {
5
- if (pathname === "/" || pathname === "") {
6
- return null; // Let parent handle default page
7
- }
8
- // Extract first segment of path as page name
9
- const pathSegment = pathname.replace(/^\//, "").split("/")[0];
10
- return pathSegment || null;
11
- }
12
-
13
- function notifyPageView() {
14
- const currentPath = window.location.pathname;
15
- if (currentPath !== lastPath) {
16
- lastPath = currentPath;
17
- const pageName = getPageNameFromPath(currentPath);
18
- window.parent?.postMessage(
19
- {
20
- type: "app_page_view",
21
- path: currentPath,
22
- pageName,
23
- },
24
- "*"
25
- );
26
- }
27
- }
28
-
29
- // Intercept history.pushState
30
- const originalPushState = history.pushState.bind(history);
31
- history.pushState = function (...args) {
32
- originalPushState(...args);
33
- notifyPageView();
34
- };
35
-
36
- // Intercept history.replaceState
37
- const originalReplaceState = history.replaceState.bind(history);
38
- history.replaceState = function (...args) {
39
- originalReplaceState(...args);
40
- notifyPageView();
41
- };
42
-
43
- // Handle browser back/forward navigation
44
- window.addEventListener("popstate", notifyPageView);
45
-
46
- // Notify initial page view on load
47
- const initialPath = window.location.pathname;
48
- const initialPageName = getPageNameFromPath(initialPath);
49
- window.parent?.postMessage(
50
- {
51
- type: "app_page_view",
52
- path: initialPath,
53
- pageName: initialPageName,
54
- },
55
- "*"
56
- );
57
- }