@base44-preview/vite-plugin 1.0.32-pr.114.574de6d → 1.0.33-pr.104.9ab4126

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,EAAqB,MAAM,MAAM,CAAC;AA8EtD,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,GAsFM,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;AAyEtD,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,GAmFM,MAAM,CACZ"}
@@ -42,11 +42,6 @@ const INJECTIONS = {
42
42
  injectTo: "body",
43
43
  mode: "dev",
44
44
  },
45
- staleDepsReloader: {
46
- src: "/node_modules/@base44/vite-plugin/dist/injections/stale-deps-reloader.js",
47
- injectTo: "head",
48
- mode: "dev",
49
- },
50
45
  hmrNotifier: {
51
46
  src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
52
47
  injectTo: "head",
@@ -67,9 +62,6 @@ export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEd
67
62
  const enabledInjections = {
68
63
  unhandledErrors: true,
69
64
  sandboxMount: true,
70
- // Deliberately not an opt-in option: existing apps must pick this up from a
71
- // plugin version bump alone, without editing their vite.config.js.
72
- staleDepsReloader: true,
73
65
  hmrNotifier,
74
66
  navigationNotifier,
75
67
  analyticsTracker,
@@ -1 +1 @@
1
- {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-injections-plugin.js","sourceRoot":"","sources":["../src/html-injections-plugin.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Plugin } from "vite";
2
+ export declare const PREBUNDLED_SANDBOX_DEPS: string[];
2
3
  export default function vitePlugin(opts?: {
3
4
  legacySDKImports?: boolean;
4
5
  hmrNotifier?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAuB/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,iBAmPP"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAyB/C,eAAO,MAAM,uBAAuB,UAWnC,CAAC;AAeF,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,iBAwOP"}
package/dist/index.js CHANGED
@@ -1,11 +1,37 @@
1
1
  import path from "node:path";
2
- import { loadEnv } from "vite";
2
+ import { loadEnv, version as viteVersion } from "vite";
3
3
  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
7
  import { buildStatusPlugin } from "./build-status-plugin.js";
8
8
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
9
+ // Vite 8 pre-bundles deps with Rolldown instead of esbuild and deprecates
10
+ // `optimizeDeps.esbuildOptions`. Both spellings mean the same thing here:
11
+ // treat .js files as JSX, since app code routinely puts JSX in .js.
12
+ const isVite8OrLater = Number(viteVersion.split(".")[0]) >= 8;
13
+ const jsxInJsFiles = isVite8OrLater
14
+ ? { rolldownOptions: { moduleTypes: { ".js": "jsx" } } }
15
+ : { esbuildOptions: { loader: { ".js": "jsx" } } };
16
+ // Every entry Vite must pre-bundle before the browser loads the app. Deep
17
+ // entries are listed explicitly: to the optimizer `react/jsx-dev-runtime` and
18
+ // `react-dom/client` are separate entries, NOT covered by `react`/`react-dom`.
19
+ // Leaving one out means Vite discovers it mid-load, re-runs the optimizer and
20
+ // mints a new browserHash — so the same page ends up holding `react.js?v=A`
21
+ // and `react.js?v=B`, two React instances, and dies on its first hook with
22
+ // "Cannot read properties of null (reading 'useState')".
23
+ export const PREBUNDLED_SANDBOX_DEPS = [
24
+ "react",
25
+ "react/jsx-runtime",
26
+ "react/jsx-dev-runtime",
27
+ "react-dom",
28
+ "react-dom/client",
29
+ "react-router-dom",
30
+ "framer-motion",
31
+ "lodash",
32
+ "moment",
33
+ "react-quill",
34
+ ];
9
35
  const ENV_UNSET_GUIDANCE = [
10
36
  "[base44] No Base44 backend configured — VITE_BASE44_APP_BASE_URL is not set, so /api requests have nowhere to go.",
11
37
  "[base44] Run the app through the Base44 CLI instead:",
@@ -119,21 +145,10 @@ export default function vitePlugin(opts = {}) {
119
145
  optimizeDeps: {
120
146
  ...(isRunningInSandbox
121
147
  ? {
122
- include: filterPackagesInProject([
123
- "react",
124
- "react-dom",
125
- "framer-motion",
126
- "lodash",
127
- "moment",
128
- "react-quill",
129
- ], root),
148
+ include: filterPackagesInProject(PREBUNDLED_SANDBOX_DEPS, root),
130
149
  }
131
150
  : {}),
132
- esbuildOptions: {
133
- loader: {
134
- ".js": "jsx",
135
- },
136
- },
151
+ ...jsxInJsFiles,
137
152
  },
138
153
  };
139
154
  },
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 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAmBV"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAeA,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAAE,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,CAmBV"}
package/dist/utils.js CHANGED
@@ -1,5 +1,16 @@
1
1
  import { readFileSync, existsSync } from "fs";
2
2
  import { join } from "path";
3
+ /**
4
+ * The package that owns an optimizeDeps entry. Deep entries like
5
+ * `react-dom/client` are separate entries to Vite's optimizer but are declared
6
+ * in package.json only under their owning package.
7
+ */
8
+ function owningPackage(entry) {
9
+ const segments = entry.split("/");
10
+ return entry.startsWith("@")
11
+ ? segments.slice(0, 2).join("/")
12
+ : segments[0] ?? entry;
13
+ }
3
14
  export function filterPackagesInProject(packages, root) {
4
15
  try {
5
16
  const packageJsonPath = join(root, "package.json");
@@ -12,7 +23,7 @@ export function filterPackagesInProject(packages, root) {
12
23
  ...packageJson.devDependencies,
13
24
  ...packageJson.peerDependencies,
14
25
  };
15
- return packages.filter((pkg) => pkg in allDeps);
26
+ return packages.filter((pkg) => owningPackage(pkg) in allDeps);
16
27
  }
17
28
  catch (error) {
18
29
  console.warn("Failed to read project package.json:", error);
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG;YACd,GAAG,WAAW,CAAC,YAAY;YAC3B,GAAG,WAAW,CAAC,eAAe;YAC9B,GAAG,WAAW,CAAC,gBAAgB;SAChC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B;;;;GAIG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,QAAkB,EAClB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG;YACd,GAAG,WAAW,CAAC,YAAY;YAC3B,GAAG,WAAW,CAAC,eAAe;YAC9B,GAAG,WAAW,CAAC,gBAAgB;SAChC,CAAC;QAEF,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "1.0.32-pr.114.574de6d",
3
+ "version": "1.0.33-pr.104.9ab4126",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -54,11 +54,6 @@ const INJECTIONS: Record<string, Injection> = {
54
54
  injectTo: "body",
55
55
  mode: "dev",
56
56
  },
57
- staleDepsReloader: {
58
- src: "/node_modules/@base44/vite-plugin/dist/injections/stale-deps-reloader.js",
59
- injectTo: "head",
60
- mode: "dev",
61
- },
62
57
  hmrNotifier: {
63
58
  src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
64
59
  injectTo: "head",
@@ -90,9 +85,6 @@ export function htmlInjectionsPlugin({
90
85
  const enabledInjections: Record<string, boolean> = {
91
86
  unhandledErrors: true,
92
87
  sandboxMount: true,
93
- // Deliberately not an opt-in option: existing apps must pick this up from a
94
- // plugin version bump alone, without editing their vite.config.js.
95
- staleDepsReloader: true,
96
88
  hmrNotifier,
97
89
  navigationNotifier,
98
90
  analyticsTracker,
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import type { Plugin, UserConfig } from "vite";
3
- import { loadEnv } from "vite";
3
+ import { loadEnv, version as viteVersion } from "vite";
4
4
  import { errorOverlayPlugin } from "./error-overlay-plugin.js";
5
5
  import { visualEditPlugin } from "./visual-edit-plugin.js";
6
6
  import { filterPackagesInProject } from "./utils.js";
@@ -9,6 +9,34 @@ import { buildStatusPlugin } from "./build-status-plugin.js";
9
9
 
10
10
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
11
11
 
12
+ // Vite 8 pre-bundles deps with Rolldown instead of esbuild and deprecates
13
+ // `optimizeDeps.esbuildOptions`. Both spellings mean the same thing here:
14
+ // treat .js files as JSX, since app code routinely puts JSX in .js.
15
+ const isVite8OrLater = Number(viteVersion.split(".")[0]) >= 8;
16
+ const jsxInJsFiles = isVite8OrLater
17
+ ? { rolldownOptions: { moduleTypes: { ".js": "jsx" } } }
18
+ : { esbuildOptions: { loader: { ".js": "jsx" } } };
19
+
20
+ // Every entry Vite must pre-bundle before the browser loads the app. Deep
21
+ // entries are listed explicitly: to the optimizer `react/jsx-dev-runtime` and
22
+ // `react-dom/client` are separate entries, NOT covered by `react`/`react-dom`.
23
+ // Leaving one out means Vite discovers it mid-load, re-runs the optimizer and
24
+ // mints a new browserHash — so the same page ends up holding `react.js?v=A`
25
+ // and `react.js?v=B`, two React instances, and dies on its first hook with
26
+ // "Cannot read properties of null (reading 'useState')".
27
+ export const PREBUNDLED_SANDBOX_DEPS = [
28
+ "react",
29
+ "react/jsx-runtime",
30
+ "react/jsx-dev-runtime",
31
+ "react-dom",
32
+ "react-dom/client",
33
+ "react-router-dom",
34
+ "framer-motion",
35
+ "lodash",
36
+ "moment",
37
+ "react-quill",
38
+ ];
39
+
12
40
  const ENV_UNSET_GUIDANCE = [
13
41
  "[base44] No Base44 backend configured — VITE_BASE44_APP_BASE_URL is not set, so /api requests have nowhere to go.",
14
42
  "[base44] Run the app through the Base44 CLI instead:",
@@ -152,23 +180,12 @@ export default function vitePlugin(
152
180
  ...(isRunningInSandbox
153
181
  ? {
154
182
  include: filterPackagesInProject(
155
- [
156
- "react",
157
- "react-dom",
158
- "framer-motion",
159
- "lodash",
160
- "moment",
161
- "react-quill",
162
- ],
183
+ PREBUNDLED_SANDBOX_DEPS,
163
184
  root
164
185
  ),
165
186
  }
166
187
  : {}),
167
- esbuildOptions: {
168
- loader: {
169
- ".js": "jsx",
170
- },
171
- },
188
+ ...jsxInJsFiles,
172
189
  },
173
190
  };
174
191
  },
package/src/utils.ts CHANGED
@@ -1,6 +1,18 @@
1
1
  import { readFileSync, existsSync } from "fs";
2
2
  import { join } from "path";
3
3
 
4
+ /**
5
+ * The package that owns an optimizeDeps entry. Deep entries like
6
+ * `react-dom/client` are separate entries to Vite's optimizer but are declared
7
+ * in package.json only under their owning package.
8
+ */
9
+ function owningPackage(entry: string): string {
10
+ const segments = entry.split("/");
11
+ return entry.startsWith("@")
12
+ ? segments.slice(0, 2).join("/")
13
+ : segments[0] ?? entry;
14
+ }
15
+
4
16
  export function filterPackagesInProject(
5
17
  packages: string[],
6
18
  root: string
@@ -18,7 +30,7 @@ export function filterPackagesInProject(
18
30
  ...packageJson.peerDependencies,
19
31
  };
20
32
 
21
- return packages.filter((pkg) => pkg in allDeps);
33
+ return packages.filter((pkg) => owningPackage(pkg) in allDeps);
22
34
  } catch (error) {
23
35
  console.warn("Failed to read project package.json:", error);
24
36
  return [];
@@ -1,23 +0,0 @@
1
- type BudgetStorage = Pick<Storage, "getItem" | "setItem">;
2
- export type StaleDepsTracker = {
3
- observe: (url: string) => boolean;
4
- };
5
- export type StaleDepsReloaderOptions = {
6
- reload?: () => void;
7
- now?: () => number;
8
- storage?: BudgetStorage | null;
9
- graceMs?: number;
10
- };
11
- /** The `v` param of an optimized-dep URL, or null for anything else. */
12
- export declare function extractDepHash(url: string): string | null;
13
- /** Reports true once a dep URL carries a hash different from the first one seen. */
14
- export declare function createStaleDepsTracker(): StaleDepsTracker;
15
- /**
16
- * Consume one reload from the per-window budget. Fails open when storage is
17
- * unreadable — an unrecoverable white screen is worse than a reload loop we can
18
- * at least see in the logs.
19
- */
20
- export declare function takeReloadBudget(storage: BudgetStorage, now: number): boolean;
21
- export declare function setupStaleDepsReloader(options?: StaleDepsReloaderOptions): () => void;
22
- export {};
23
- //# sourceMappingURL=stale-deps-reloader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stale-deps-reloader.d.ts","sourceRoot":"","sources":["../../src/injections/stale-deps-reloader.ts"],"names":[],"mappings":"AAoBA,KAAK,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG;IAAE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzD;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,IAAI,gBAAgB,CAazD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAuB7E;AAkBD,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,wBAA6B,GACrC,MAAM,IAAI,CAuEZ"}
@@ -1,161 +0,0 @@
1
- /// <reference types="vite/client" />
2
- // Vite serves every optimized dependency under a single `?v=<browserHash>`. When the
3
- // optimizer re-runs mid-session — a newly discovered import, or `vite --force` on a
4
- // dev-server restart — that hash changes, and a page that already fetched chunks under
5
- // the old one finishes loading with two copies of React. The second resolves to null
6
- // and the app dies on its first hook: "Cannot read properties of null (reading
7
- // 'useState')". Vite's own 504-based recovery only covers requests it can still
8
- // identify as outdated, so it misses the swap that lands between two requests of the
9
- // same page load. Reloading on the second distinct hash turns a dead preview into a
10
- // flicker.
11
- const DEPS_MARKER = "/.vite/deps/";
12
- const RELOAD_GRACE_MS = 200;
13
- const RELOAD_BUDGET = 2;
14
- const RELOAD_WINDOW_MS = 15_000;
15
- const STORAGE_KEY = "__base44_stale_deps_reload";
16
- /** The `v` param of an optimized-dep URL, or null for anything else. */
17
- export function extractDepHash(url) {
18
- if (!url.includes(DEPS_MARKER))
19
- return null;
20
- const query = url.indexOf("?");
21
- if (query === -1)
22
- return null;
23
- return new URLSearchParams(url.slice(query + 1)).get("v");
24
- }
25
- /** Reports true once a dep URL carries a hash different from the first one seen. */
26
- export function createStaleDepsTracker() {
27
- let firstHash = null;
28
- return {
29
- observe(url) {
30
- const hash = extractDepHash(url);
31
- if (hash === null)
32
- return false;
33
- if (firstHash === null) {
34
- firstHash = hash;
35
- return false;
36
- }
37
- return hash !== firstHash;
38
- },
39
- };
40
- }
41
- /**
42
- * Consume one reload from the per-window budget. Fails open when storage is
43
- * unreadable — an unrecoverable white screen is worse than a reload loop we can
44
- * at least see in the logs.
45
- */
46
- export function takeReloadBudget(storage, now) {
47
- let prev = null;
48
- try {
49
- const raw = storage.getItem(STORAGE_KEY);
50
- if (raw)
51
- prev = JSON.parse(raw);
52
- }
53
- catch {
54
- return true;
55
- }
56
- let n = 1;
57
- let windowStart = now;
58
- if (prev && typeof prev.n === "number" && now - prev.t < RELOAD_WINDOW_MS) {
59
- n = prev.n + 1;
60
- windowStart = prev.t;
61
- }
62
- if (n > RELOAD_BUDGET)
63
- return false;
64
- try {
65
- storage.setItem(STORAGE_KEY, JSON.stringify({ n, t: windowStart }));
66
- }
67
- catch {
68
- // Budget can't be persisted; the cap degrades but the reload still helps.
69
- }
70
- return true;
71
- }
72
- function defaultStorage() {
73
- try {
74
- return window.sessionStorage;
75
- }
76
- catch {
77
- return null;
78
- }
79
- }
80
- function notifyParent(type) {
81
- try {
82
- window.parent?.postMessage({ type }, "*");
83
- }
84
- catch {
85
- // Parent is cross-origin or gone; observability is best-effort.
86
- }
87
- }
88
- export function setupStaleDepsReloader(options = {}) {
89
- const reload = options.reload ?? (() => window.location.reload());
90
- const now = options.now ?? (() => Date.now());
91
- const graceMs = options.graceMs ?? RELOAD_GRACE_MS;
92
- const storage = options.storage === undefined ? defaultStorage() : options.storage;
93
- const Observer = globalThis.PerformanceObserver;
94
- if (typeof Observer !== "function")
95
- return () => { };
96
- const tracker = createStaleDepsTracker();
97
- let viteIsReloading = false;
98
- let timer = null;
99
- let done = false;
100
- // Vite handles most swaps itself. Stand down rather than reload twice.
101
- if (import.meta.hot) {
102
- import.meta.hot.on("vite:beforeFullReload", () => {
103
- viteIsReloading = true;
104
- });
105
- }
106
- const scheduleReload = () => {
107
- if (done || timer !== null)
108
- return;
109
- // The grace exists to let Vite's own full reload win the race. During the
110
- // initial load its HMR client may not even be connected yet, and every
111
- // millisecond of delay is a millisecond of broken preview — so don't wait.
112
- const delay = document.readyState === "loading" ? 0 : graceMs;
113
- timer = setTimeout(() => {
114
- timer = null;
115
- if (done || viteIsReloading)
116
- return;
117
- done = true;
118
- observer.disconnect();
119
- if (storage && !takeReloadBudget(storage, now())) {
120
- notifyParent("sandbox:staleDepsReloadBudgetExhausted");
121
- return;
122
- }
123
- notifyParent("sandbox:staleDepsReload");
124
- reload();
125
- }, delay);
126
- };
127
- const observer = new Observer((list) => {
128
- for (const entry of list.getEntries()) {
129
- if (tracker.observe(entry.name))
130
- scheduleReload();
131
- }
132
- });
133
- try {
134
- observer.observe({ type: "resource", buffered: true });
135
- }
136
- catch {
137
- return () => { };
138
- }
139
- // `buffered` is not honored everywhere; sweep what already landed.
140
- try {
141
- for (const entry of performance.getEntriesByType("resource")) {
142
- if (tracker.observe(entry.name))
143
- scheduleReload();
144
- }
145
- }
146
- catch {
147
- // No resource timing available; the observer above is the only source.
148
- }
149
- return () => {
150
- done = true;
151
- if (timer !== null) {
152
- clearTimeout(timer);
153
- timer = null;
154
- }
155
- observer.disconnect();
156
- };
157
- }
158
- if (typeof window !== "undefined") {
159
- setupStaleDepsReloader();
160
- }
161
- //# sourceMappingURL=stale-deps-reloader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stale-deps-reloader.js","sourceRoot":"","sources":["../../src/injections/stale-deps-reloader.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,qFAAqF;AACrF,oFAAoF;AACpF,uFAAuF;AACvF,qFAAqF;AACrF,+EAA+E;AAC/E,gFAAgF;AAChF,qFAAqF;AACrF,oFAAoF;AACpF,WAAW;AAEX,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAejD,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,sBAAsB;IACpC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,OAAO;QACL,OAAO,CAAC,GAAW;YACjB,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,SAAS,GAAG,IAAI,CAAC;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,KAAK,SAAS,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB,EAAE,GAAW;IAClE,IAAI,IAAI,GAAwB,IAAI,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,GAAG;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,gBAAgB,EAAE,CAAC;QAC1E,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,GAAG,aAAa;QAAE,OAAO,KAAK,CAAC;IAEpC,IAAI,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,cAAc,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,gEAAgE;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,UAAoC,EAAE;IAEtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,GAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAW,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IACnD,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAErE,MAAM,QAAQ,GAAG,UAAU,CAAC,mBAAmB,CAAC;IAChD,IAAI,OAAO,QAAQ,KAAK,UAAU;QAAE,OAAO,GAAS,EAAE,GAAE,CAAC,CAAC;IAE1D,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,KAAK,GAAyC,IAAI,CAAC;IACvD,IAAI,IAAI,GAAG,KAAK,CAAC;IAEjB,uEAAuE;IACvE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/C,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QACnC,0EAA0E;QAC1E,uEAAuE;QACvE,2EAA2E;QAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,KAAK,GAAG,IAAI,CAAC;YACb,IAAI,IAAI,IAAI,eAAe;gBAAE,OAAO;YACpC,IAAI,GAAG,IAAI,CAAC;YACZ,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;gBACjD,YAAY,CAAC,wCAAwC,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,YAAY,CAAC,yBAAyB,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC;QACX,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,IAAkC,EAAE,EAAE;QACnE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,cAAc,EAAE,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAS,EAAE,GAAE,CAAC,CAAC;IACxB,CAAC;IAED,mEAAmE;IACnE,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,cAAc,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uEAAuE;IACzE,CAAC;IAED,OAAO,GAAS,EAAE;QAChB,IAAI,GAAG,IAAI,CAAC;QACZ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,QAAQ,CAAC,UAAU,EAAE,CAAC;IACxB,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,sBAAsB,EAAE,CAAC;AAC3B,CAAC"}
@@ -1,179 +0,0 @@
1
- /// <reference types="vite/client" />
2
-
3
- // Vite serves every optimized dependency under a single `?v=<browserHash>`. When the
4
- // optimizer re-runs mid-session — a newly discovered import, or `vite --force` on a
5
- // dev-server restart — that hash changes, and a page that already fetched chunks under
6
- // the old one finishes loading with two copies of React. The second resolves to null
7
- // and the app dies on its first hook: "Cannot read properties of null (reading
8
- // 'useState')". Vite's own 504-based recovery only covers requests it can still
9
- // identify as outdated, so it misses the swap that lands between two requests of the
10
- // same page load. Reloading on the second distinct hash turns a dead preview into a
11
- // flicker.
12
-
13
- const DEPS_MARKER = "/.vite/deps/";
14
- const RELOAD_GRACE_MS = 200;
15
- const RELOAD_BUDGET = 2;
16
- const RELOAD_WINDOW_MS = 15_000;
17
- const STORAGE_KEY = "__base44_stale_deps_reload";
18
-
19
- type ReloadRecord = { n: number; t: number };
20
-
21
- type BudgetStorage = Pick<Storage, "getItem" | "setItem">;
22
-
23
- export type StaleDepsTracker = { observe: (url: string) => boolean };
24
-
25
- export type StaleDepsReloaderOptions = {
26
- reload?: () => void;
27
- now?: () => number;
28
- storage?: BudgetStorage | null;
29
- graceMs?: number;
30
- };
31
-
32
- /** The `v` param of an optimized-dep URL, or null for anything else. */
33
- export function extractDepHash(url: string): string | null {
34
- if (!url.includes(DEPS_MARKER)) return null;
35
- const query = url.indexOf("?");
36
- if (query === -1) return null;
37
- return new URLSearchParams(url.slice(query + 1)).get("v");
38
- }
39
-
40
- /** Reports true once a dep URL carries a hash different from the first one seen. */
41
- export function createStaleDepsTracker(): StaleDepsTracker {
42
- let firstHash: string | null = null;
43
- return {
44
- observe(url: string): boolean {
45
- const hash = extractDepHash(url);
46
- if (hash === null) return false;
47
- if (firstHash === null) {
48
- firstHash = hash;
49
- return false;
50
- }
51
- return hash !== firstHash;
52
- },
53
- };
54
- }
55
-
56
- /**
57
- * Consume one reload from the per-window budget. Fails open when storage is
58
- * unreadable — an unrecoverable white screen is worse than a reload loop we can
59
- * at least see in the logs.
60
- */
61
- export function takeReloadBudget(storage: BudgetStorage, now: number): boolean {
62
- let prev: ReloadRecord | null = null;
63
- try {
64
- const raw = storage.getItem(STORAGE_KEY);
65
- if (raw) prev = JSON.parse(raw) as ReloadRecord;
66
- } catch {
67
- return true;
68
- }
69
-
70
- let n = 1;
71
- let windowStart = now;
72
- if (prev && typeof prev.n === "number" && now - prev.t < RELOAD_WINDOW_MS) {
73
- n = prev.n + 1;
74
- windowStart = prev.t;
75
- }
76
- if (n > RELOAD_BUDGET) return false;
77
-
78
- try {
79
- storage.setItem(STORAGE_KEY, JSON.stringify({ n, t: windowStart }));
80
- } catch {
81
- // Budget can't be persisted; the cap degrades but the reload still helps.
82
- }
83
- return true;
84
- }
85
-
86
- function defaultStorage(): BudgetStorage | null {
87
- try {
88
- return window.sessionStorage;
89
- } catch {
90
- return null;
91
- }
92
- }
93
-
94
- function notifyParent(type: string): void {
95
- try {
96
- window.parent?.postMessage({ type }, "*");
97
- } catch {
98
- // Parent is cross-origin or gone; observability is best-effort.
99
- }
100
- }
101
-
102
- export function setupStaleDepsReloader(
103
- options: StaleDepsReloaderOptions = {}
104
- ): () => void {
105
- const reload = options.reload ?? ((): void => window.location.reload());
106
- const now = options.now ?? ((): number => Date.now());
107
- const graceMs = options.graceMs ?? RELOAD_GRACE_MS;
108
- const storage =
109
- options.storage === undefined ? defaultStorage() : options.storage;
110
-
111
- const Observer = globalThis.PerformanceObserver;
112
- if (typeof Observer !== "function") return (): void => {};
113
-
114
- const tracker = createStaleDepsTracker();
115
- let viteIsReloading = false;
116
- let timer: ReturnType<typeof setTimeout> | null = null;
117
- let done = false;
118
-
119
- // Vite handles most swaps itself. Stand down rather than reload twice.
120
- if (import.meta.hot) {
121
- import.meta.hot.on("vite:beforeFullReload", () => {
122
- viteIsReloading = true;
123
- });
124
- }
125
-
126
- const scheduleReload = (): void => {
127
- if (done || timer !== null) return;
128
- // The grace exists to let Vite's own full reload win the race. During the
129
- // initial load its HMR client may not even be connected yet, and every
130
- // millisecond of delay is a millisecond of broken preview — so don't wait.
131
- const delay = document.readyState === "loading" ? 0 : graceMs;
132
- timer = setTimeout(() => {
133
- timer = null;
134
- if (done || viteIsReloading) return;
135
- done = true;
136
- observer.disconnect();
137
- if (storage && !takeReloadBudget(storage, now())) {
138
- notifyParent("sandbox:staleDepsReloadBudgetExhausted");
139
- return;
140
- }
141
- notifyParent("sandbox:staleDepsReload");
142
- reload();
143
- }, delay);
144
- };
145
-
146
- const observer = new Observer((list: PerformanceObserverEntryList) => {
147
- for (const entry of list.getEntries()) {
148
- if (tracker.observe(entry.name)) scheduleReload();
149
- }
150
- });
151
-
152
- try {
153
- observer.observe({ type: "resource", buffered: true });
154
- } catch {
155
- return (): void => {};
156
- }
157
-
158
- // `buffered` is not honored everywhere; sweep what already landed.
159
- try {
160
- for (const entry of performance.getEntriesByType("resource")) {
161
- if (tracker.observe(entry.name)) scheduleReload();
162
- }
163
- } catch {
164
- // No resource timing available; the observer above is the only source.
165
- }
166
-
167
- return (): void => {
168
- done = true;
169
- if (timer !== null) {
170
- clearTimeout(timer);
171
- timer = null;
172
- }
173
- observer.disconnect();
174
- };
175
- }
176
-
177
- if (typeof window !== "undefined") {
178
- setupStaleDepsReloader();
179
- }