@base44-preview/vite-plugin 0.2.20-pr.27.20fa529 → 0.2.20-pr.27.8bf9822

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.
@@ -3,7 +3,8 @@ interface HtmlInjectionOptions {
3
3
  hmrNotifier: boolean;
4
4
  navigationNotifier: boolean;
5
5
  visualEditAgent: boolean;
6
+ analyticsTracker: boolean;
6
7
  }
7
- export declare function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, }: HtmlInjectionOptions): Plugin;
8
+ export declare function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker, }: HtmlInjectionOptions): Plugin;
8
9
  export {};
9
10
  //# 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,UAAU,oBAAoB;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,GAChB,EAAE,oBAAoB,GAAG,MAAM,CAsC/B"}
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;AAmCtD,UAAU,oBAAoB;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,EAAE,oBAAoB,GAAG,MAAM,CAkE/B"}
@@ -1,38 +1,92 @@
1
- export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, }) {
1
+ import { loadEnv } from "vite";
2
+ const ANALYTICS_TRACKER_SCRIPT = `
3
+ let lastPath = "";
4
+ function getPageNameFromPath(path) {
5
+ const segments = path.split("/").filter(Boolean);
6
+ return segments[0] || null;
7
+ }
8
+ function trackPageView() {
9
+ const path = window.location.pathname;
10
+ if (path === lastPath) return;
11
+ lastPath = path;
12
+ const pageName = getPageNameFromPath(path) || "home";
13
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
14
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
15
+ if (!appId) return;
16
+ fetch(\`\${serverUrl}/app-logs/\${appId}/log-user-in-app/\${pageName}\`, {
17
+ method: "POST",
18
+ }).catch(() => {});
19
+ }
20
+ const originalPushState = history.pushState.bind(history);
21
+ history.pushState = function (...args) {
22
+ originalPushState(...args);
23
+ trackPageView();
24
+ };
25
+ const originalReplaceState = history.replaceState.bind(history);
26
+ history.replaceState = function (...args) {
27
+ originalReplaceState(...args);
28
+ trackPageView();
29
+ };
30
+ window.addEventListener("popstate", trackPageView);
31
+ trackPageView();
32
+ `;
33
+ export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker, }) {
34
+ let resolvedEnv = {};
2
35
  return {
3
36
  name: "html-injections",
4
- apply: (config) => config.mode !== "production",
5
- transformIndexHtml() {
6
- const options = JSON.stringify({
7
- hmrNotifier,
8
- navigationNotifier,
9
- visualEditAgent,
10
- unhandledErrors: true,
11
- mountObserver: true,
12
- });
13
- return [
14
- {
15
- tag: "script",
16
- attrs: { type: "module" },
17
- children: [
18
- `if (window.self !== window.top) {`,
19
- ` (async () => {`,
20
- ` try {`,
21
- ` const mode = new URLSearchParams(location.search).get("sandbox-bridge");`,
22
- ` const url = mode === "local"`,
23
- ` ? "https://localhost:3201/index.mjs"`,
24
- ` : "/node_modules/@base44/vite-plugin/dist/statics/index.mjs";`,
25
- ` const mod = await import(url);`,
26
- ` if (typeof mod.init === "function") mod.init(${options}, import.meta.hot);`,
27
- ` } catch (e) {`,
28
- ` console.error("[sandbox-bridge] Failed to load:", e);`,
29
- ` }`,
30
- ` })();`,
31
- `}`,
32
- ].join("\n"),
33
- injectTo: "head",
34
- },
35
- ];
37
+ configResolved(config) {
38
+ // Capture env vars for use in transformIndexHtml
39
+ // loadEnv gets all env vars including VITE_ prefixed ones
40
+ resolvedEnv = loadEnv(config.mode, config.root, "");
41
+ },
42
+ transformIndexHtml: {
43
+ handler(_html, ctx) {
44
+ const tags = [];
45
+ const currentMode = ctx.server ? "dev" : "production";
46
+ if (currentMode === "dev") {
47
+ // Dev mode: use sandbox-bridge dynamic loader
48
+ const options = JSON.stringify({
49
+ hmrNotifier,
50
+ navigationNotifier,
51
+ visualEditAgent,
52
+ unhandledErrors: true,
53
+ mountObserver: true,
54
+ });
55
+ tags.push({
56
+ tag: "script",
57
+ attrs: { type: "module" },
58
+ children: [
59
+ `if (window.self !== window.top) {`,
60
+ ` (async () => {`,
61
+ ` try {`,
62
+ ` const mode = new URLSearchParams(location.search).get("sandbox-bridge");`,
63
+ ` const url = mode === "local"`,
64
+ ` ? "https://localhost:3201/index.mjs"`,
65
+ ` : "/node_modules/@base44/vite-plugin/dist/statics/index.mjs";`,
66
+ ` const mod = await import(url);`,
67
+ ` if (typeof mod.init === "function") mod.init(${options}, import.meta.hot);`,
68
+ ` } catch (e) {`,
69
+ ` console.error("[sandbox-bridge] Failed to load:", e);`,
70
+ ` }`,
71
+ ` })();`,
72
+ `}`,
73
+ ].join("\n"),
74
+ injectTo: "head",
75
+ });
76
+ }
77
+ // Production: inline analytics tracker with env var replacement
78
+ if (currentMode === "production" && analyticsTracker) {
79
+ let content = ANALYTICS_TRACKER_SCRIPT;
80
+ content = content.replace(/import\.meta\.env\.(\w+)/g, (_, envKey) => JSON.stringify(resolvedEnv[envKey] ?? ""));
81
+ tags.push({
82
+ tag: "script",
83
+ attrs: { type: "module" },
84
+ children: content,
85
+ injectTo: "head",
86
+ });
87
+ }
88
+ return tags;
89
+ },
36
90
  },
37
91
  };
38
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,GACM;IACrB,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QAE/C,kBAAkB;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,WAAW;gBACX,kBAAkB;gBAClB,eAAe;gBACf,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,OAAO;gBACL;oBACE,GAAG,EAAE,QAAQ;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACzB,QAAQ,EAAE;wBACR,mCAAmC;wBACnC,kBAAkB;wBAClB,WAAW;wBACX,gFAAgF;wBAChF,oCAAoC;wBACpC,8CAA8C;wBAC9C,uEAAuE;wBACvE,sCAAsC;wBACtC,sDAAsD,OAAO,qBAAqB;wBAClF,mBAAmB;wBACnB,6DAA6D;wBAC7D,OAAO;wBACP,SAAS;wBACT,GAAG;qBACJ,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,MAAM;iBACjB;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BhC,CAAC;AASF,MAAM,UAAU,oBAAoB,CAAC,EACnC,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACK;IACrB,IAAI,WAAW,GAA2B,EAAE,CAAC;IAE7C,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,cAAc,CAAC,MAAM;YACnB,iDAAiD;YACjD,0DAA0D;YAC1D,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,kBAAkB,EAAE;YAClB,OAAO,CAAC,KAAK,EAAE,GAAG;gBAChB,MAAM,IAAI,GAAwB,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;gBAEtD,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;oBAC1B,8CAA8C;oBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC7B,WAAW;wBACX,kBAAkB;wBAClB,eAAe;wBACf,eAAe,EAAE,IAAI;wBACrB,aAAa,EAAE,IAAI;qBACpB,CAAC,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC;wBACR,GAAG,EAAE,QAAQ;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,QAAQ,EAAE;4BACR,mCAAmC;4BACnC,kBAAkB;4BAClB,WAAW;4BACX,gFAAgF;4BAChF,oCAAoC;4BACpC,8CAA8C;4BAC9C,uEAAuE;4BACvE,sCAAsC;4BACtC,sDAAsD,OAAO,qBAAqB;4BAClF,mBAAmB;4BACnB,6DAA6D;4BAC7D,OAAO;4BACP,SAAS;4BACT,GAAG;yBACJ,CAAC,IAAI,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,MAAM;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,gEAAgE;gBAChE,IAAI,WAAW,KAAK,YAAY,IAAI,gBAAgB,EAAE,CAAC;oBACrD,IAAI,OAAO,GAAG,wBAAwB,CAAC;oBACvC,OAAO,GAAG,OAAO,CAAC,OAAO,CACvB,2BAA2B,EAC3B,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACzD,CAAC;oBACF,IAAI,CAAC,IAAI,CAAC;wBACR,GAAG,EAAE,QAAQ;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,QAAQ,EAAE,OAAO;wBACjB,QAAQ,EAAE,MAAM;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,6 @@ export default function vitePlugin(opts?: {
4
4
  hmrNotifier?: boolean;
5
5
  navigationNotifier?: boolean;
6
6
  visualEditAgent?: boolean;
7
+ analyticsTracker?: boolean;
7
8
  }): Plugin<any>[];
8
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,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,iBA8MP"}
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
@@ -5,7 +5,7 @@ import { filterPackagesInProject } from "./utils.js";
5
5
  import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
6
6
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
7
7
  export default function vitePlugin(opts = {}) {
8
- const { legacySDKImports = false, hmrNotifier = false, navigationNotifier = false, visualEditAgent = false, } = opts;
8
+ const { legacySDKImports = false, hmrNotifier = false, navigationNotifier = false, visualEditAgent = false, analyticsTracker = false, } = opts;
9
9
  return [
10
10
  {
11
11
  name: "base44",
@@ -149,9 +149,10 @@ export default function vitePlugin(opts = {}) {
149
149
  },
150
150
  errorOverlayPlugin(),
151
151
  visualEditPlugin(),
152
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent }),
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "0.2.20-pr.27.20fa529",
3
+ "version": "0.2.20-pr.27.8bf9822",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,51 +1,114 @@
1
- import type { Plugin } from "vite";
1
+ import type { Plugin, HtmlTagDescriptor } from "vite";
2
+ import { loadEnv } from "vite";
3
+
4
+ const ANALYTICS_TRACKER_SCRIPT = `
5
+ let lastPath = "";
6
+ function getPageNameFromPath(path) {
7
+ const segments = path.split("/").filter(Boolean);
8
+ return segments[0] || null;
9
+ }
10
+ function trackPageView() {
11
+ const path = window.location.pathname;
12
+ if (path === lastPath) return;
13
+ lastPath = path;
14
+ const pageName = getPageNameFromPath(path) || "home";
15
+ const appId = import.meta.env.VITE_BASE44_APP_ID;
16
+ const serverUrl = import.meta.env.VITE_BASE44_BACKEND_URL || "";
17
+ if (!appId) return;
18
+ fetch(\`\${serverUrl}/app-logs/\${appId}/log-user-in-app/\${pageName}\`, {
19
+ method: "POST",
20
+ }).catch(() => {});
21
+ }
22
+ const originalPushState = history.pushState.bind(history);
23
+ history.pushState = function (...args) {
24
+ originalPushState(...args);
25
+ trackPageView();
26
+ };
27
+ const originalReplaceState = history.replaceState.bind(history);
28
+ history.replaceState = function (...args) {
29
+ originalReplaceState(...args);
30
+ trackPageView();
31
+ };
32
+ window.addEventListener("popstate", trackPageView);
33
+ trackPageView();
34
+ `;
2
35
 
3
36
  interface HtmlInjectionOptions {
4
37
  hmrNotifier: boolean;
5
38
  navigationNotifier: boolean;
6
39
  visualEditAgent: boolean;
40
+ analyticsTracker: boolean;
7
41
  }
8
42
 
9
43
  export function htmlInjectionsPlugin({
10
44
  hmrNotifier,
11
45
  navigationNotifier,
12
46
  visualEditAgent,
47
+ analyticsTracker,
13
48
  }: HtmlInjectionOptions): Plugin {
49
+ let resolvedEnv: Record<string, string> = {};
50
+
14
51
  return {
15
52
  name: "html-injections",
16
- apply: (config) => config.mode !== "production",
53
+ configResolved(config) {
54
+ // Capture env vars for use in transformIndexHtml
55
+ // loadEnv gets all env vars including VITE_ prefixed ones
56
+ resolvedEnv = loadEnv(config.mode, config.root, "");
57
+ },
58
+ transformIndexHtml: {
59
+ handler(_html, ctx) {
60
+ const tags: HtmlTagDescriptor[] = [];
61
+ const currentMode = ctx.server ? "dev" : "production";
62
+
63
+ if (currentMode === "dev") {
64
+ // Dev mode: use sandbox-bridge dynamic loader
65
+ const options = JSON.stringify({
66
+ hmrNotifier,
67
+ navigationNotifier,
68
+ visualEditAgent,
69
+ unhandledErrors: true,
70
+ mountObserver: true,
71
+ });
72
+ tags.push({
73
+ tag: "script",
74
+ attrs: { type: "module" },
75
+ children: [
76
+ `if (window.self !== window.top) {`,
77
+ ` (async () => {`,
78
+ ` try {`,
79
+ ` const mode = new URLSearchParams(location.search).get("sandbox-bridge");`,
80
+ ` const url = mode === "local"`,
81
+ ` ? "https://localhost:3201/index.mjs"`,
82
+ ` : "/node_modules/@base44/vite-plugin/dist/statics/index.mjs";`,
83
+ ` const mod = await import(url);`,
84
+ ` if (typeof mod.init === "function") mod.init(${options}, import.meta.hot);`,
85
+ ` } catch (e) {`,
86
+ ` console.error("[sandbox-bridge] Failed to load:", e);`,
87
+ ` }`,
88
+ ` })();`,
89
+ `}`,
90
+ ].join("\n"),
91
+ injectTo: "head",
92
+ });
93
+ }
94
+
95
+ // Production: inline analytics tracker with env var replacement
96
+ if (currentMode === "production" && analyticsTracker) {
97
+ let content = ANALYTICS_TRACKER_SCRIPT;
98
+ content = content.replace(
99
+ /import\.meta\.env\.(\w+)/g,
100
+ (_, envKey) => JSON.stringify(resolvedEnv[envKey] ?? "")
101
+ );
102
+ tags.push({
103
+ tag: "script",
104
+ attrs: { type: "module" },
105
+ children: content,
106
+ injectTo: "head",
107
+ });
108
+ }
17
109
 
18
- transformIndexHtml() {
19
- const options = JSON.stringify({
20
- hmrNotifier,
21
- navigationNotifier,
22
- visualEditAgent,
23
- unhandledErrors: true,
24
- mountObserver: true,
25
- });
26
- return [
27
- {
28
- tag: "script",
29
- attrs: { type: "module" },
30
- children: [
31
- `if (window.self !== window.top) {`,
32
- ` (async () => {`,
33
- ` try {`,
34
- ` const mode = new URLSearchParams(location.search).get("sandbox-bridge");`,
35
- ` const url = mode === "local"`,
36
- ` ? "https://localhost:3201/index.mjs"`,
37
- ` : "/node_modules/@base44/vite-plugin/dist/statics/index.mjs";`,
38
- ` const mod = await import(url);`,
39
- ` if (typeof mod.init === "function") mod.init(${options}, import.meta.hot);`,
40
- ` } catch (e) {`,
41
- ` console.error("[sandbox-bridge] Failed to load:", e);`,
42
- ` }`,
43
- ` })();`,
44
- `}`,
45
- ].join("\n"),
46
- injectTo: "head",
47
- },
48
- ];
110
+ return tags;
111
+ },
49
112
  },
50
113
  };
51
114
  }
package/src/index.ts CHANGED
@@ -13,6 +13,7 @@ export default function vitePlugin(
13
13
  hmrNotifier?: boolean;
14
14
  navigationNotifier?: boolean;
15
15
  visualEditAgent?: boolean;
16
+ analyticsTracker?: boolean;
16
17
  } = {}
17
18
  ) {
18
19
  const {
@@ -20,6 +21,7 @@ export default function vitePlugin(
20
21
  hmrNotifier = false,
21
22
  navigationNotifier = false,
22
23
  visualEditAgent = false,
24
+ analyticsTracker = false,
23
25
  } = opts;
24
26
 
25
27
  return [
@@ -215,8 +217,9 @@ export default function vitePlugin(
215
217
  } as Plugin,
216
218
  errorOverlayPlugin(),
217
219
  visualEditPlugin(),
218
- htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent }),
219
220
  ]
220
221
  : []),
222
+ // HTML injections - handles both dev (sandbox) and production injections
223
+ htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEditAgent, analyticsTracker }),
221
224
  ];
222
225
  }