@base44-preview/vite-plugin 1.0.31-pr.113.e541ee0 → 1.0.32-pr.114.574de6d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/html-injections-plugin.d.ts.map +1 -1
- package/dist/html-injections-plugin.js +8 -0
- package/dist/html-injections-plugin.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/injections/stale-deps-reloader.d.ts +23 -0
- package/dist/injections/stale-deps-reloader.d.ts.map +1 -0
- package/dist/injections/stale-deps-reloader.js +161 -0
- package/dist/injections/stale-deps-reloader.js.map +1 -0
- package/package.json +1 -1
- package/src/html-injections-plugin.ts +8 -0
- package/src/index.ts +1 -0
- package/src/injections/stale-deps-reloader.ts +179 -0
|
@@ -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;
|
|
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"}
|
|
@@ -42,6 +42,11 @@ 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
|
+
},
|
|
45
50
|
hmrNotifier: {
|
|
46
51
|
src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
|
|
47
52
|
injectTo: "head",
|
|
@@ -62,6 +67,9 @@ export function htmlInjectionsPlugin({ hmrNotifier, navigationNotifier, visualEd
|
|
|
62
67
|
const enabledInjections = {
|
|
63
68
|
unhandledErrors: true,
|
|
64
69
|
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,
|
|
65
73
|
hmrNotifier,
|
|
66
74
|
navigationNotifier,
|
|
67
75
|
analyticsTracker,
|
|
@@ -1 +1 @@
|
|
|
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;AAW/B,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BhC,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,gBAAgB,EAAE;QAChB,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,gBAAgB;KACjB,CAAC;IAEF,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,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;gBAEtD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;qBACpC,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,wDAAwD;wBACxD,sDAAsD;wBACtD,IAAI,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC;wBACtC,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;wBAEF,OAAO;4BACL,GAAG,EAAE,QAAQ;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,QAAQ,EAAE,OAAO;4BACjB,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;gBAEL,2DAA2D;gBAC3D,iDAAiD;gBACjD,IAAI,WAAW,KAAK,KAAK,IAAI,eAAe,EAAE,CAAC;oBAC7C,MAAM,IAAI,GAAG,wCAAwC,CAAC;oBACtD,IAAI,CAAC,IAAI,CAAC;wBACR,GAAG,EAAE,QAAQ;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,QAAQ,EAAE;4BACR,mCAAmC;4BACnC,4EAA4E;4BAC5E,gCAAgC;4BAChC,0CAA0C;4BAC1C,UAAU,IAAI,sBAAsB;4BACpC,eAAe;4BACf,oBAAoB;4BACpB,uFAAuF;4BACvF,QAAQ;4BACR,2EAA2E;4BAC3E,GAAG;yBACJ,CAAC,IAAI,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,MAAM;qBACjB,CAAC,CAAC;gBACL,CAAC;gBAED,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACQ,CAAC;AACd,CAAC"}
|
|
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.map
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,7 @@ export default function vitePlugin(opts = {}) {
|
|
|
53
53
|
// Allow all hosts - essential for Modal tunnel URLs
|
|
54
54
|
allowedHosts: true,
|
|
55
55
|
fs: {
|
|
56
|
+
strict: true,
|
|
56
57
|
// Vite replaces its default deny list when one is provided, so preserve those defaults here.
|
|
57
58
|
deny: [
|
|
58
59
|
".env",
|
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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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stale-deps-reloader.js","sourceRoot":"","sources":["../../src/injections/stale-deps-reloader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -54,6 +54,11 @@ 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
|
+
},
|
|
57
62
|
hmrNotifier: {
|
|
58
63
|
src: "/node_modules/@base44/vite-plugin/dist/injections/sandbox-hmr-notifier.js",
|
|
59
64
|
injectTo: "head",
|
|
@@ -85,6 +90,9 @@ export function htmlInjectionsPlugin({
|
|
|
85
90
|
const enabledInjections: Record<string, boolean> = {
|
|
86
91
|
unhandledErrors: true,
|
|
87
92
|
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,
|
|
88
96
|
hmrNotifier,
|
|
89
97
|
navigationNotifier,
|
|
90
98
|
analyticsTracker,
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,179 @@
|
|
|
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
|
+
}
|