@base44-preview/vite-plugin 0.2.16-pr.25.deb6246 → 0.2.16-pr.25.fd27f29

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.
@@ -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,eAAe,EACf,gBAAgB,GACjB,EAAE;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,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,EAAqB,MAAM,MAAM,CAAC;AA4EtD,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,EAAE;IACD,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GA4CM,MAAM,CACZ"}
@@ -1,74 +1,105 @@
1
+ const ANALYTICS_TRACKER_SCRIPT = `
2
+ let lastPath = "";
3
+ function getPageNameFromPath(path) {
4
+ const segments = path.split("/").filter(Boolean);
5
+ return segments[0] || null;
6
+ }
7
+ function trackPageView() {
8
+ const path = window.location.pathname;
9
+ if (path === lastPath) return;
10
+ lastPath = path;
11
+ const pageName = getPageNameFromPath(path) || "home";
12
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
13
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
14
+ if (!appId) return;
15
+ fetch(\`\${serverUrl}/app-logs/\${appId}/log-user-in-app/\${pageName}\`, {
16
+ method: "POST",
17
+ }).catch(() => {});
18
+ }
19
+ const originalPushState = history.pushState.bind(history);
20
+ history.pushState = function (...args) {
21
+ originalPushState(...args);
22
+ trackPageView();
23
+ };
24
+ const originalReplaceState = history.replaceState.bind(history);
25
+ history.replaceState = function (...args) {
26
+ originalReplaceState(...args);
27
+ trackPageView();
28
+ };
29
+ window.addEventListener("popstate", trackPageView);
30
+ trackPageView();
31
+ `;
32
+ const INJECTIONS = {
33
+ unhandledErrors: {
34
+ src: "/node_modules/@base44/vite-plugin/dist/injections/unhandled-errors-handlers.js",
35
+ injectTo: "head",
36
+ mode: "dev",
37
+ },
38
+ sandboxMount: {
39
+ src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-mount-observer.js",
40
+ injectTo: "body",
41
+ mode: "dev",
42
+ },
43
+ hmrNotifier: {
44
+ src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
45
+ injectTo: "head",
46
+ mode: "dev",
47
+ },
48
+ navigationNotifier: {
49
+ src: "/node_modules/@base44/vite-plugin/dist/injections/navigation-notifier.js",
50
+ injectTo: "head",
51
+ mode: "dev",
52
+ },
53
+ visualEditAgent: {
54
+ src: "/node_modules/@base44/vite-plugin/dist/injections/visual-edit-agent.js",
55
+ injectTo: "body",
56
+ mode: "dev",
57
+ },
58
+ analyticsTracker: {
59
+ src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
60
+ injectTo: "head",
61
+ mode: "production",
62
+ inlineContent: ANALYTICS_TRACKER_SCRIPT,
63
+ },
64
+ };
1
65
  export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker, }) {
66
+ const enabledInjections = {
67
+ unhandledErrors: true,
68
+ sandboxMount: true,
69
+ hmrNotifier,
70
+ navigationNotifier,
71
+ visualEditAgent,
72
+ analyticsTracker,
73
+ };
2
74
  return {
3
75
  name: "html-injections",
4
- apply: (config) => config.mode !== "production",
5
- transformIndexHtml() {
6
- return [
7
- {
8
- tag: "script",
9
- attrs: {
10
- src: "/node_modules/@base44/vite-plugin/dist/injections/unhandled-errors-handlers.js",
11
- type: "module",
12
- },
13
- injectTo: "head",
14
- },
15
- {
16
- tag: "script",
17
- attrs: {
18
- src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-mount-observer.js",
19
- type: "module",
20
- },
21
- injectTo: "body",
22
- },
23
- ...(hmrNotifier
24
- ? [
25
- {
26
- tag: "script",
27
- attrs: {
28
- src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
29
- type: "module",
30
- },
31
- injectTo: "head",
32
- },
33
- ]
34
- : []),
35
- ...(navigationNotifier
36
- ? [
37
- {
38
- tag: "script",
39
- attrs: {
40
- src: "/node_modules/@base44/vite-plugin/dist/injections/navigation-notifier.js",
41
- type: "module",
42
- },
43
- injectTo: "head",
44
- },
45
- ]
46
- : []),
47
- ...(visualEditAgent
48
- ? [
49
- {
50
- tag: "script",
51
- attrs: {
52
- src: "/node_modules/@base44/vite-plugin/dist/injections/visual-edit-agent.js",
53
- type: "module",
54
- },
55
- injectTo: "body",
56
- },
57
- ]
58
- : []),
59
- ...(analyticsTracker
60
- ? [
61
- {
76
+ transformIndexHtml: {
77
+ order: "pre",
78
+ handler(_html, ctx) {
79
+ const currentMode = ctx.server ? "dev" : "production";
80
+ return Object.entries(INJECTIONS)
81
+ .filter(([key, injection]) => enabledInjections[key] && injection.mode === currentMode)
82
+ .map(([, injection]) => {
83
+ // Production injections use inline content (src paths don't work in built output)
84
+ if (injection.inlineContent) {
85
+ return {
62
86
  tag: "script",
63
- attrs: {
64
- src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
65
- type: "module",
66
- },
67
- injectTo: "head",
87
+ attrs: { type: "module" },
88
+ children: injection.inlineContent,
89
+ injectTo: injection.injectTo,
90
+ };
91
+ }
92
+ // Dev injections use src path (served from node_modules)
93
+ return {
94
+ tag: "script",
95
+ attrs: {
96
+ src: injection.src,
97
+ type: "module",
68
98
  },
69
- ]
70
- : []),
71
- ];
99
+ injectTo: injection.injectTo,
100
+ };
101
+ });
102
+ },
72
103
  },
73
104
  };
74
105
  }
@@ -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,eAAe,EACf,gBAAgB,GAMjB;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;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;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":"AAUA,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BhC,CAAC;AAEF,MAAM,UAAU,GAA8B;IAC5C,eAAe,EAAE;QACf,GAAG,EAAE,gFAAgF;QACrF,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,6EAA6E;QAClF,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ;IACD,WAAW,EAAE;QACX,GAAG,EAAE,2EAA2E;QAChF,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ;IACD,kBAAkB,EAAE;QAClB,GAAG,EAAE,0EAA0E;QAC/E,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ;IACD,eAAe,EAAE;QACf,GAAG,EAAE,wEAAwE;QAC7E,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ;IACD,gBAAgB,EAAE;QAChB,GAAG,EAAE,wEAAwE;QAC7E,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,YAAY;QAClB,aAAa,EAAE,wBAAwB;KACxC;CACF,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GAMjB;IACC,MAAM,iBAAiB,GAA4B;QACjD,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,WAAW;QACX,kBAAkB;QAClB,eAAe;QACf,gBAAgB;KACjB,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,kBAAkB,EAAE;YAClB,KAAK,EAAE,KAAK;YACZ,OAAO,CAAC,KAAK,EAAE,GAAG;gBAChB,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;gBAEtD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;qBAC9B,MAAM,CACL,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CACnB,iBAAiB,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,CAC3D;qBACA,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAqB,EAAE;oBACxC,kFAAkF;oBAClF,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;wBAC5B,OAAO;4BACL,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,QAAQ,EAAE,SAAS,CAAC,aAAa;4BACjC,QAAQ,EAAE,SAAS,CAAC,QAAQ;yBAC7B,CAAC;oBACJ,CAAC;oBACD,yDAAyD;oBACzD,OAAO;wBACL,GAAG,EAAE,QAAQ;wBACb,KAAK,EAAE;4BACL,GAAG,EAAE,SAAS,CAAC,GAAG;4BAClB,IAAI,EAAE,QAAQ;yBACf;wBACD,QAAQ,EAAE,SAAS,CAAC,QAAQ;qBAC7B,CAAC;gBACJ,CAAC,CAAC,CAAC;YACP,CAAC;SACF;KACQ,CAAC;AACd,CAAC"}
@@ -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,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,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;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,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACvB,iBAgNP"}
package/dist/index.js CHANGED
@@ -149,9 +149,10 @@ export default function vitePlugin(opts = {}) {
149
149
  },
150
150
  errorOverlayPlugin(),
151
151
  visualEditPlugin(),
152
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker }),
153
152
  ]
154
153
  : []),
154
+ // HTML injections - handles both dev (sandbox) and production injections
155
+ htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker }),
155
156
  ];
156
157
  }
157
158
  //# 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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"}
@@ -1,48 +1,39 @@
1
- // Only track page views in production (not in iframe/preview)
2
- if (window.self === window.top) {
3
- let lastPath = "";
4
- function getPageNameFromPath(path) {
5
- const segments = path.split("/").filter(Boolean);
6
- return segments[0] || null;
7
- }
8
- async function initAnalytics() {
9
- try {
10
- // @ts-expect-error - SDK is provided by the consuming app, not this package
11
- const { createClient } = await import("@base44/sdk");
12
- const client = createClient({
13
- appId: import.meta.env.VITE_BASE44_APP_ID,
14
- serverUrl: import.meta.env.VITE_BASE44_BACKEND_URL || "",
15
- });
16
- function trackPageView() {
17
- const path = window.location.pathname;
18
- if (path === lastPath)
19
- return;
20
- lastPath = path;
21
- const pageName = getPageNameFromPath(path) || "home";
22
- client.appLogs.logUserInApp(pageName).catch(() => { });
23
- }
24
- // Intercept history.pushState
25
- const originalPushState = history.pushState.bind(history);
26
- history.pushState = function (...args) {
27
- originalPushState(...args);
28
- trackPageView();
29
- };
30
- // Intercept history.replaceState
31
- const originalReplaceState = history.replaceState.bind(history);
32
- history.replaceState = function (...args) {
33
- originalReplaceState(...args);
34
- trackPageView();
35
- };
36
- // Handle browser back/forward navigation
37
- window.addEventListener("popstate", trackPageView);
38
- // Track initial page view
39
- trackPageView();
40
- }
41
- catch {
42
- // Silently fail if SDK is not available
43
- }
44
- }
45
- initAnalytics();
1
+ // Analytics tracker - tracks page views in production
2
+ // This script is only injected in production builds
3
+ let lastPath = "";
4
+ function getPageNameFromPath(path) {
5
+ const segments = path.split("/").filter(Boolean);
6
+ return segments[0] || null;
46
7
  }
8
+ function trackPageView() {
9
+ const path = window.location.pathname;
10
+ if (path === lastPath)
11
+ return;
12
+ lastPath = path;
13
+ const pageName = getPageNameFromPath(path) || "home";
14
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
15
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
16
+ if (!appId)
17
+ return;
18
+ fetch(`${serverUrl}/app-logs/${appId}/log-user-in-app/${pageName}`, {
19
+ method: "POST",
20
+ }).catch(() => { });
21
+ }
22
+ // Intercept history.pushState
23
+ const originalPushState = history.pushState.bind(history);
24
+ history.pushState = function (...args) {
25
+ originalPushState(...args);
26
+ trackPageView();
27
+ };
28
+ // Intercept history.replaceState
29
+ const originalReplaceState = history.replaceState.bind(history);
30
+ history.replaceState = function (...args) {
31
+ originalReplaceState(...args);
32
+ trackPageView();
33
+ };
34
+ // Handle browser back/forward navigation
35
+ window.addEventListener("popstate", trackPageView);
36
+ // Track initial page view
37
+ trackPageView();
47
38
  export {};
48
39
  //# sourceMappingURL=analytics-tracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-tracker.js","sourceRoot":"","sources":["../../src/injections/analytics-tracker.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,SAAS,mBAAmB,CAAC,IAAY;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7B,CAAC;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,CAAC;YACH,4EAA4E;YAC5E,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,YAAY,CAAC;gBAC1B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB;gBACzC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE;aACzD,CAAC,CAAC;YAEH,SAAS,aAAa;gBACpB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACtC,IAAI,IAAI,KAAK,QAAQ;oBAAE,OAAO;gBAC9B,QAAQ,GAAG,IAAI,CAAC;gBAEhB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,8BAA8B;YAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1D,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI;gBACnC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC3B,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC;YAEF,iCAAiC;YACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAI;gBACtC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9B,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC;YAEF,yCAAyC;YACzC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAEnD,0BAA0B;YAC1B,aAAa,EAAE,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,aAAa,EAAE,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"analytics-tracker.js","sourceRoot":"","sources":["../../src/injections/analytics-tracker.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,oDAAoD;AAEpD,IAAI,QAAQ,GAAG,EAAE,CAAC;AAElB,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC7B,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACtC,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO;IAC9B,QAAQ,GAAG,IAAI,CAAC;IAEhB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;IAEhE,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,KAAK,CAAC,GAAG,SAAS,aAAa,KAAK,oBAAoB,QAAQ,EAAE,EAAE;QAClE,MAAM,EAAE,MAAM;KACf,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,8BAA8B;AAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAI;IACnC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,aAAa,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF,iCAAiC;AACjC,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChE,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAI;IACtC,oBAAoB,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEnD,0BAA0B;AAC1B,aAAa,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "0.2.16-pr.25.deb6246",
3
+ "version": "0.2.16-pr.25.fd27f29",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,4 +1,78 @@
1
- import type { Plugin } from "vite";
1
+ import type { Plugin, HtmlTagDescriptor } from "vite";
2
+
3
+ type Injection = {
4
+ src: string;
5
+ injectTo: "head" | "body";
6
+ mode: "dev" | "production";
7
+ /** Inline content for production builds (src paths don't work in built output) */
8
+ inlineContent?: string;
9
+ };
10
+
11
+ const ANALYTICS_TRACKER_SCRIPT = `
12
+ let lastPath = "";
13
+ function getPageNameFromPath(path) {
14
+ const segments = path.split("/").filter(Boolean);
15
+ return segments[0] || null;
16
+ }
17
+ function trackPageView() {
18
+ const path = window.location.pathname;
19
+ if (path === lastPath) return;
20
+ lastPath = path;
21
+ const pageName = getPageNameFromPath(path) || "home";
22
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
23
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
24
+ if (!appId) return;
25
+ fetch(\`\${serverUrl}/app-logs/\${appId}/log-user-in-app/\${pageName}\`, {
26
+ method: "POST",
27
+ }).catch(() => {});
28
+ }
29
+ const originalPushState = history.pushState.bind(history);
30
+ history.pushState = function (...args) {
31
+ originalPushState(...args);
32
+ trackPageView();
33
+ };
34
+ const originalReplaceState = history.replaceState.bind(history);
35
+ history.replaceState = function (...args) {
36
+ originalReplaceState(...args);
37
+ trackPageView();
38
+ };
39
+ window.addEventListener("popstate", trackPageView);
40
+ trackPageView();
41
+ `;
42
+
43
+ const INJECTIONS: Record<string, Injection> = {
44
+ unhandledErrors: {
45
+ src: "/node_modules/@base44/vite-plugin/dist/injections/unhandled-errors-handlers.js",
46
+ injectTo: "head",
47
+ mode: "dev",
48
+ },
49
+ sandboxMount: {
50
+ src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-mount-observer.js",
51
+ injectTo: "body",
52
+ mode: "dev",
53
+ },
54
+ hmrNotifier: {
55
+ src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
56
+ injectTo: "head",
57
+ mode: "dev",
58
+ },
59
+ navigationNotifier: {
60
+ src: "/node_modules/@base44/vite-plugin/dist/injections/navigation-notifier.js",
61
+ injectTo: "head",
62
+ mode: "dev",
63
+ },
64
+ visualEditAgent: {
65
+ src: "/node_modules/@base44/vite-plugin/dist/injections/visual-edit-agent.js",
66
+ injectTo: "body",
67
+ mode: "dev",
68
+ },
69
+ analyticsTracker: {
70
+ src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
71
+ injectTo: "head",
72
+ mode: "production",
73
+ inlineContent: ANALYTICS_TRACKER_SCRIPT,
74
+ },
75
+ };
2
76
 
3
77
  export function htmlInjectionsPlugin({
4
78
  hmrNotifier,
@@ -11,76 +85,48 @@ export function htmlInjectionsPlugin({
11
85
  visualEditAgent: boolean;
12
86
  analyticsTracker: boolean;
13
87
  }) {
88
+ const enabledInjections: Record<string, boolean> = {
89
+ unhandledErrors: true,
90
+ sandboxMount: true,
91
+ hmrNotifier,
92
+ navigationNotifier,
93
+ visualEditAgent,
94
+ analyticsTracker,
95
+ };
96
+
14
97
  return {
15
98
  name: "html-injections",
16
- apply: (config) => config.mode !== "production",
17
- transformIndexHtml() {
18
- return [
19
- {
20
- tag: "script",
21
- attrs: {
22
- src: "/node_modules/@base44/vite-plugin/dist/injections/unhandled-errors-handlers.js",
23
- type: "module",
24
- },
25
- injectTo: "head",
26
- },
27
- {
28
- tag: "script",
29
- attrs: {
30
- src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-mount-observer.js",
31
- type: "module",
32
- },
33
- injectTo: "body",
34
- },
35
- ...(hmrNotifier
36
- ? [
37
- {
38
- tag: "script",
39
- attrs: {
40
- src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
41
- type: "module",
42
- },
43
- injectTo: "head",
44
- },
45
- ]
46
- : []),
47
- ...(navigationNotifier
48
- ? [
49
- {
50
- tag: "script",
51
- attrs: {
52
- src: "/node_modules/@base44/vite-plugin/dist/injections/navigation-notifier.js",
53
- type: "module",
54
- },
55
- injectTo: "head",
56
- },
57
- ]
58
- : []),
59
- ...(visualEditAgent
60
- ? [
61
- {
62
- tag: "script",
63
- attrs: {
64
- src: "/node_modules/@base44/vite-plugin/dist/injections/visual-edit-agent.js",
65
- type: "module",
66
- },
67
- injectTo: "body",
68
- },
69
- ]
70
- : []),
71
- ...(analyticsTracker
72
- ? [
73
- {
99
+ transformIndexHtml: {
100
+ order: "pre",
101
+ handler(_html, ctx) {
102
+ const currentMode = ctx.server ? "dev" : "production";
103
+
104
+ return Object.entries(INJECTIONS)
105
+ .filter(
106
+ ([key, injection]) =>
107
+ enabledInjections[key] && injection.mode === currentMode
108
+ )
109
+ .map(([, injection]): HtmlTagDescriptor => {
110
+ // Production injections use inline content (src paths don't work in built output)
111
+ if (injection.inlineContent) {
112
+ return {
74
113
  tag: "script",
75
- attrs: {
76
- src: "/node_modules/@base44/vite-plugin/dist/injections/analytics-tracker.js",
77
- type: "module",
78
- },
79
- injectTo: "head",
114
+ attrs: { type: "module" },
115
+ children: injection.inlineContent,
116
+ injectTo: injection.injectTo,
117
+ };
118
+ }
119
+ // Dev injections use src path (served from node_modules)
120
+ return {
121
+ tag: "script",
122
+ attrs: {
123
+ src: injection.src,
124
+ type: "module",
80
125
  },
81
- ]
82
- : []),
83
- ];
126
+ injectTo: injection.injectTo,
127
+ };
128
+ });
129
+ },
84
130
  },
85
131
  } as Plugin;
86
132
  }
package/src/index.ts CHANGED
@@ -217,8 +217,9 @@ export default function vitePlugin(
217
217
  } as Plugin,
218
218
  errorOverlayPlugin(),
219
219
  visualEditPlugin(),
220
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker }),
221
220
  ]
222
221
  : []),
222
+ // HTML injections - handles both dev (sandbox) and production injections
223
+ htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker }),
223
224
  ];
224
225
  }
@@ -1,54 +1,45 @@
1
- // Only track page views in production (not in iframe/preview)
2
- if (window.self === window.top) {
3
- let lastPath = "";
4
-
5
- function getPageNameFromPath(path: string): string | null {
6
- const segments = path.split("/").filter(Boolean);
7
- return segments[0] || null;
8
- }
9
-
10
- async function initAnalytics() {
11
- try {
12
- // @ts-expect-error - SDK is provided by the consuming app, not this package
13
- const { createClient } = await import("@base44/sdk");
14
-
15
- const client = createClient({
16
- appId: import.meta.env.VITE_BASE44_APP_ID,
17
- serverUrl: import.meta.env.VITE_BASE44_BACKEND_URL || "",
18
- });
19
-
20
- function trackPageView() {
21
- const path = window.location.pathname;
22
- if (path === lastPath) return;
23
- lastPath = path;
24
-
25
- const pageName = getPageNameFromPath(path) || "home";
26
- client.appLogs.logUserInApp(pageName).catch(() => {});
27
- }
28
-
29
- // Intercept history.pushState
30
- const originalPushState = history.pushState.bind(history);
31
- history.pushState = function (...args) {
32
- originalPushState(...args);
33
- trackPageView();
34
- };
35
-
36
- // Intercept history.replaceState
37
- const originalReplaceState = history.replaceState.bind(history);
38
- history.replaceState = function (...args) {
39
- originalReplaceState(...args);
40
- trackPageView();
41
- };
42
-
43
- // Handle browser back/forward navigation
44
- window.addEventListener("popstate", trackPageView);
45
-
46
- // Track initial page view
47
- trackPageView();
48
- } catch {
49
- // Silently fail if SDK is not available
50
- }
51
- }
52
-
53
- initAnalytics();
1
+ // Analytics tracker - tracks page views in production
2
+ // This script is only injected in production builds
3
+
4
+ let lastPath = "";
5
+
6
+ function getPageNameFromPath(path: string): string | null {
7
+ const segments = path.split("/").filter(Boolean);
8
+ return segments[0] || null;
9
+ }
10
+
11
+ function trackPageView() {
12
+ const path = window.location.pathname;
13
+ if (path === lastPath) return;
14
+ lastPath = path;
15
+
16
+ const pageName = getPageNameFromPath(path) || "home";
17
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
18
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
19
+
20
+ if (!appId) return;
21
+
22
+ fetch(`${serverUrl}/app-logs/${appId}/log-user-in-app/${pageName}`, {
23
+ method: "POST",
24
+ }).catch(() => {});
54
25
  }
26
+
27
+ // Intercept history.pushState
28
+ const originalPushState = history.pushState.bind(history);
29
+ history.pushState = function (...args) {
30
+ originalPushState(...args);
31
+ trackPageView();
32
+ };
33
+
34
+ // Intercept history.replaceState
35
+ const originalReplaceState = history.replaceState.bind(history);
36
+ history.replaceState = function (...args) {
37
+ originalReplaceState(...args);
38
+ trackPageView();
39
+ };
40
+
41
+ // Handle browser back/forward navigation
42
+ window.addEventListener("popstate", trackPageView);
43
+
44
+ // Track initial page view
45
+ trackPageView();