@vxrn/vite-native-client 1.27.1 → 2.0.0-beta.45.1

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.
Files changed (43) hide show
  1. package/dist/cjs/client.cjs +320 -365
  2. package/dist/cjs/client.native.cjs +452 -0
  3. package/dist/cjs/client.native.js +385 -433
  4. package/dist/cjs/client.native.js.map +1 -1
  5. package/dist/cjs/customEvent.cjs +9 -11
  6. package/dist/cjs/customEvent.native.cjs +18 -0
  7. package/dist/cjs/customEvent.native.js +9 -10
  8. package/dist/cjs/customEvent.native.js.map +1 -1
  9. package/dist/cjs/hmrPayload.cjs +9 -11
  10. package/dist/cjs/hmrPayload.native.cjs +18 -0
  11. package/dist/cjs/hmrPayload.native.js +9 -10
  12. package/dist/cjs/hmrPayload.native.js.map +1 -1
  13. package/dist/cjs/hot.cjs +9 -11
  14. package/dist/cjs/hot.native.cjs +18 -0
  15. package/dist/cjs/hot.native.js +9 -10
  16. package/dist/cjs/hot.native.js.map +1 -1
  17. package/dist/cjs/index.cjs +9 -11
  18. package/dist/cjs/index.native.cjs +20 -0
  19. package/dist/cjs/index.native.js +9 -10
  20. package/dist/cjs/index.native.js.map +1 -1
  21. package/dist/esm/client.mjs +311 -349
  22. package/dist/esm/client.mjs.map +1 -1
  23. package/dist/esm/client.native.js +376 -418
  24. package/dist/esm/client.native.js.map +1 -1
  25. package/dist/esm/customEvent.mjs +0 -2
  26. package/dist/esm/customEvent.native.js +0 -2
  27. package/dist/esm/hmrPayload.mjs +0 -2
  28. package/dist/esm/hmrPayload.native.js +0 -2
  29. package/dist/esm/hot.mjs +0 -2
  30. package/dist/esm/hot.native.js +0 -2
  31. package/dist/esm/index.js +1 -2
  32. package/dist/esm/index.mjs +1 -2
  33. package/dist/esm/index.native.js +1 -2
  34. package/package.json +2 -2
  35. package/dist/esm/customEvent.mjs.map +0 -1
  36. package/dist/esm/customEvent.native.js.map +0 -1
  37. package/dist/esm/hmrPayload.mjs.map +0 -1
  38. package/dist/esm/hmrPayload.native.js.map +0 -1
  39. package/dist/esm/hot.mjs.map +0 -1
  40. package/dist/esm/hot.native.js.map +0 -1
  41. package/dist/esm/index.js.map +0 -1
  42. package/dist/esm/index.mjs.map +0 -1
  43. package/dist/esm/index.native.js.map +0 -1
@@ -1,21 +1,20 @@
1
1
  import getDevServer from "react-native/Libraries/Core/Devtools/getDevServer";
2
+
2
3
  const importMetaUrl = {
3
- hostname: "127.0.0.1",
4
- protocol: "http",
5
- port: 5173
4
+ hostname: "127.0.0.1",
5
+ protocol: "http",
6
+ port: 5173
6
7
  };
7
8
  const serverHost = __SERVER_HOST__;
8
9
  const socketProtocol = __HMR_PROTOCOL__ || (importMetaUrl.protocol === "https:" ? "wss" : "ws");
9
10
  const hmrPort = __HMR_PORT__ || 5173;
10
11
  let rnDevServerHost;
11
12
  try {
12
- const {
13
- url: devServerUrl
14
- } = getDevServer();
15
- const [, host] = devServerUrl.match(/:\/\/([^/]+)/) || [];
16
- if (host) rnDevServerHost = host;
13
+ const { url: devServerUrl } = getDevServer();
14
+ const [, host] = devServerUrl.match(/:\/\/([^/]+)/) || [];
15
+ if (host) rnDevServerHost = host;
17
16
  } catch (e) {
18
- console.warn(`[vite-native-client] failed to get react-native dev server url: ${e}`);
17
+ console.warn(`[vite-native-client] failed to get react-native dev server url: ${e}`);
19
18
  }
20
19
  const hmrHost = rnDevServerHost || `${__HMR_HOSTNAME__ || importMetaUrl.hostname}:${hmrPort || importMetaUrl.port}`;
21
20
  const socketHost = `${hmrHost}${__HMR_BASE__}`;
@@ -24,383 +23,346 @@ const base = __BASE__ || "/";
24
23
  const messageBuffer = [];
25
24
  let socket;
26
25
  try {
27
- let fallback;
28
- if (!hmrPort) {
29
- fallback = () => {
30
- socket = setupWebSocket(socketProtocol, directSocketHost, () => {
31
- console.error(`[vite] failed to connect to websocket.
26
+ let fallback;
27
+ if (!hmrPort) {
28
+ fallback = () => {
29
+ socket = setupWebSocket(socketProtocol, directSocketHost, () => {
30
+ console.error(`[vite] failed to connect to websocket.
32
31
  your current setup:
33
32
  (browser) ${JSON.stringify(importMetaUrl)} <--[HTTP]--> ${serverHost} (server)
34
33
  (browser) ${socketHost} <--[WebSocket (failing)]--> ${directSocketHost} (server)
35
34
  Check out your Vite / network configuration and https://vitejs.dev/config/server-options.html#server-hmr .`);
36
- });
37
- socket.addEventListener("open", () => {
38
- console.info("[vite] Direct websocket connection fallback. Check out https://vitejs.dev/config/server-options.html#server-hmr to remove the previous connection error.");
39
- }, {
40
- once: true
41
- });
42
- };
43
- }
44
- socket = setupWebSocket(socketProtocol, socketHost, fallback);
35
+ });
36
+ socket.addEventListener("open", () => {
37
+ console.info("[vite] Direct websocket connection fallback. Check out https://vitejs.dev/config/server-options.html#server-hmr to remove the previous connection error.");
38
+ }, { once: true });
39
+ };
40
+ }
41
+ socket = setupWebSocket(socketProtocol, socketHost, fallback);
45
42
  } catch (error) {
46
- console.error(`[vite] failed to connect to websocket (${error}). `);
43
+ console.error(`[vite] failed to connect to websocket (${error}). `);
47
44
  }
48
45
  function setupWebSocket(protocol, hostAndPath, onCloseWithoutOpen) {
49
- let endpoint = `${protocol}://${hostAndPath}`;
50
- if (typeof globalThis.__VITE_WS_TOKEN__ === "string") {
51
- endpoint += `?token=${globalThis.__VITE_WS_TOKEN__}`;
52
- }
53
- const socket2 = new WebSocket(endpoint, "vite-hmr");
54
- let isOpened = false;
55
- socket2.addEventListener("open", () => {
56
- isOpened = true;
57
- notifyListeners("vite:ws:connect", {
58
- webSocket: socket2
59
- });
60
- }, {
61
- once: true
62
- });
63
- socket2.addEventListener("message", ({
64
- data
65
- }) => {
66
- if (process.env.DEBUG) {
67
- console.info(" \u2776 hmr ", data);
68
- }
69
- handleMessage(JSON.parse(data));
70
- });
71
- socket2.addEventListener("error", err => {
72
- console.info("err" + err["message"] + err["stack"]);
73
- });
74
- socket2.addEventListener("close", ({
75
- wasClean
76
- }) => {
77
- if (wasClean) return;
78
- if (!isOpened && onCloseWithoutOpen) {
79
- onCloseWithoutOpen();
80
- return;
81
- }
82
- notifyListeners("vite:ws:disconnect", {
83
- webSocket: socket2
84
- });
85
- console.info(`[vite] server connection lost. polling for restart...`);
86
- waitForSuccessfulPing(protocol, hostAndPath).then(() => {
87
- console.info("should reload");
88
- });
89
- });
90
- return socket2;
46
+ let endpoint = `${protocol}://${hostAndPath}`;
47
+ if (typeof globalThis.__VITE_WS_TOKEN__ === "string") {
48
+ endpoint += `?token=${globalThis.__VITE_WS_TOKEN__}`;
49
+ }
50
+ const socket2 = new WebSocket(endpoint, "vite-hmr");
51
+ let isOpened = false;
52
+ socket2.addEventListener("open", () => {
53
+ isOpened = true;
54
+ notifyListeners("vite:ws:connect", { webSocket: socket2 });
55
+ }, { once: true });
56
+ socket2.addEventListener("message", ({ data }) => {
57
+ if (process.env.DEBUG) {
58
+ console.info(" ❶ hmr ", data);
59
+ }
60
+ handleMessage(JSON.parse(data));
61
+ });
62
+ socket2.addEventListener("error", (err) => {
63
+ console.info("err" + err["message"] + err["stack"]);
64
+ });
65
+ socket2.addEventListener("close", ({ wasClean }) => {
66
+ if (wasClean) return;
67
+ if (!isOpened && onCloseWithoutOpen) {
68
+ onCloseWithoutOpen();
69
+ return;
70
+ }
71
+ notifyListeners("vite:ws:disconnect", { webSocket: socket2 });
72
+ console.info(`[vite] server connection lost. polling for restart...`);
73
+ waitForSuccessfulPing(protocol, hostAndPath).then(() => {
74
+ console.info("should reload");
75
+ });
76
+ });
77
+ return socket2;
91
78
  }
92
79
  function warnFailedFetch(err, path2) {
93
- try {
94
- console.error(`${err.message}
80
+ try {
81
+ console.error(`${err.message}
95
82
  ${err.stack}`);
96
- } catch {
97
- console.error(`${err}`);
98
- }
99
- console.error(`[hmr] Failed to reload ${path2}. This could be due to syntax errors or importing non-existent modules. (see errors above)`);
83
+ } catch {
84
+ console.error(`${err}`);
85
+ }
86
+ console.error(`[hmr] Failed to reload ${path2}. This could be due to syntax errors or importing non-existent modules. (see errors above)`);
100
87
  }
101
88
  let isFirstUpdate = true;
102
- const debounceReload = time => {
103
- let timer;
104
- return () => {
105
- if (timer) {
106
- clearTimeout(timer);
107
- timer = null;
108
- }
109
- timer = setTimeout(() => {
110
- globalThis.__vxrnReloadApp();
111
- }, time);
112
- };
89
+ const debounceReload = (time) => {
90
+ let timer;
91
+ return () => {
92
+ if (timer) {
93
+ clearTimeout(timer);
94
+ timer = null;
95
+ }
96
+ timer = setTimeout(() => {
97
+ globalThis.__vxrnReloadApp();
98
+ }, time);
99
+ };
113
100
  };
114
101
  const pageReload = debounceReload(50);
115
102
  async function handleMessage(payload) {
116
- switch (payload.type) {
117
- case "connected":
118
- console.info(`[vite] connected.`);
119
- sendMessageBuffer();
120
- setInterval(() => {
121
- if (socket.readyState === socket.OPEN) {
122
- socket.send('{"type":"ping"}');
123
- }
124
- }, __HMR_TIMEOUT__);
125
- break;
126
- case "update":
127
- notifyListeners("vite:beforeUpdate", payload);
128
- if (isFirstUpdate && hasErrorOverlay()) {
129
- globalThis.__vxrnReloadApp();
130
- return;
131
- }
132
- clearErrorOverlay();
133
- isFirstUpdate = false;
134
- await Promise.all(payload.updates.map(update => {
135
- if (update.type === "js-update") {
136
- return queueUpdate(fetchUpdate(update));
137
- }
138
- }));
139
- notifyListeners("vite:afterUpdate", payload);
140
- break;
141
- case "custom":
142
- {
143
- notifyListeners(payload.event, payload.data);
144
- break;
145
- }
146
- case "full-reload":
147
- notifyListeners("vite:beforeFullReload", payload);
148
- if (payload.path && payload.path.endsWith(".html")) {
149
- const pagePath = decodeURI(location.pathname);
150
- const payloadPath = base + payload.path.slice(1);
151
- if (pagePath === payloadPath || payload.path === "/index.html" || pagePath.endsWith("/") && pagePath + "index.html" === payloadPath) {
152
- pageReload();
153
- }
154
- return;
155
- }
156
- pageReload();
157
- break;
158
- case "prune":
159
- notifyListeners("vite:beforePrune", payload);
160
- payload.paths.forEach(path2 => {
161
- const fn = pruneMap.get(path2);
162
- if (fn) {
163
- fn(dataMap.get(path2));
164
- }
165
- });
166
- break;
167
- case "error":
168
- {
169
- notifyListeners("vite:error", payload);
170
- const err = payload.err;
171
- if (enableOverlay) {
172
- createErrorOverlay(err);
173
- } else {
174
- console.error(`[vite] Internal Server Error
103
+ switch (payload.type) {
104
+ case "connected":
105
+ console.info(`[vite] connected.`);
106
+ sendMessageBuffer();
107
+ setInterval(() => {
108
+ if (socket.readyState === socket.OPEN) {
109
+ socket.send("{\"type\":\"ping\"}");
110
+ }
111
+ }, __HMR_TIMEOUT__);
112
+ break;
113
+ case "update":
114
+ notifyListeners("vite:beforeUpdate", payload);
115
+ if (isFirstUpdate && hasErrorOverlay()) {
116
+ globalThis.__vxrnReloadApp();
117
+ return;
118
+ }
119
+ clearErrorOverlay();
120
+ isFirstUpdate = false;
121
+ await Promise.all(payload.updates.map((update) => {
122
+ if (update.type === "js-update") {
123
+ return queueUpdate(fetchUpdate(update));
124
+ }
125
+ }));
126
+ notifyListeners("vite:afterUpdate", payload);
127
+ break;
128
+ case "custom": {
129
+ notifyListeners(payload.event, payload.data);
130
+ break;
131
+ }
132
+ case "full-reload":
133
+ notifyListeners("vite:beforeFullReload", payload);
134
+ if (payload.path && payload.path.endsWith(".html")) {
135
+ const pagePath = decodeURI(location.pathname);
136
+ const payloadPath = base + payload.path.slice(1);
137
+ if (pagePath === payloadPath || payload.path === "/index.html" || pagePath.endsWith("/") && pagePath + "index.html" === payloadPath) {
138
+ pageReload();
139
+ }
140
+ return;
141
+ }
142
+ pageReload();
143
+ break;
144
+ case "prune":
145
+ notifyListeners("vite:beforePrune", payload);
146
+ payload.paths.forEach((path2) => {
147
+ const fn = pruneMap.get(path2);
148
+ if (fn) {
149
+ fn(dataMap.get(path2));
150
+ }
151
+ });
152
+ break;
153
+ case "error": {
154
+ notifyListeners("vite:error", payload);
155
+ const err = payload.err;
156
+ if (enableOverlay) {
157
+ createErrorOverlay(err);
158
+ } else {
159
+ console.error(`[vite] Internal Server Error
175
160
  ${err.message}
176
161
  ${err.stack}`);
177
- }
178
- break;
179
- }
180
- default:
181
- {
182
- const check = payload;
183
- return check;
184
- }
185
- }
162
+ }
163
+ break;
164
+ }
165
+ default: {
166
+ const check = payload;
167
+ return check;
168
+ }
169
+ }
186
170
  }
187
171
  function notifyListeners(event, data) {
188
- const cbs = customListenersMap.get(event);
189
- if (cbs) {
190
- cbs.forEach(cb => cb(data));
191
- }
172
+ const cbs = customListenersMap.get(event);
173
+ if (cbs) {
174
+ cbs.forEach((cb) => cb(data));
175
+ }
192
176
  }
193
177
  const enableOverlay = __HMR_ENABLE_OVERLAY__;
194
178
  function createErrorOverlay(err) {
195
- if (!enableOverlay) return;
196
- clearErrorOverlay();
197
- console.error("create error", err);
179
+ if (!enableOverlay) return;
180
+ clearErrorOverlay();
181
+ console.error("create error", err);
198
182
  }
199
183
  function clearErrorOverlay() {}
200
184
  function hasErrorOverlay() {
201
- return false;
185
+ return false;
202
186
  }
203
187
  let pending = false;
204
188
  let queued = [];
205
189
  async function queueUpdate(p) {
206
- queued.push(p);
207
- if (!pending) {
208
- pending = true;
209
- await Promise.resolve();
210
- pending = false;
211
- const loading = [...queued];
212
- queued = [];
213
- (await Promise.all(loading)).forEach(fn => fn && fn());
214
- }
190
+ queued.push(p);
191
+ if (!pending) {
192
+ pending = true;
193
+ await Promise.resolve();
194
+ pending = false;
195
+ const loading = [...queued];
196
+ queued = [];
197
+ (await Promise.all(loading)).forEach((fn) => fn && fn());
198
+ }
215
199
  }
216
200
  async function waitForSuccessfulPing(socketProtocol2, hostAndPath, ms = 1e3) {
217
- const pingHostProtocol = socketProtocol2 === "wss" ? "https" : "http";
218
- const ping = async () => {
219
- try {
220
- await fetch(`${pingHostProtocol}://${hostAndPath}`, {
221
- mode: "no-cors",
222
- headers: {
223
- // Custom headers won't be included in a request with no-cors so (ab)use one of the
224
- // safelisted headers to identify the ping request
225
- Accept: "text/x-vite-ping"
226
- }
227
- });
228
- return true;
229
- } catch {}
230
- return false;
231
- };
232
- if (await ping()) {
233
- return;
234
- }
235
- await wait(ms);
236
- while (true) {
237
- if (await ping()) {
238
- break;
239
- }
240
- await wait(ms);
241
- }
201
+ const pingHostProtocol = socketProtocol2 === "wss" ? "https" : "http";
202
+ const ping = async () => {
203
+ try {
204
+ await fetch(`${pingHostProtocol}://${hostAndPath}`, {
205
+ mode: "no-cors",
206
+ headers: { Accept: "text/x-vite-ping" }
207
+ });
208
+ return true;
209
+ } catch {}
210
+ return false;
211
+ };
212
+ if (await ping()) {
213
+ return;
214
+ }
215
+ await wait(ms);
216
+ while (true) {
217
+ if (await ping()) {
218
+ break;
219
+ }
220
+ await wait(ms);
221
+ }
242
222
  }
243
223
  function wait(ms) {
244
- return new Promise(resolve => setTimeout(resolve, ms));
224
+ return new Promise((resolve) => setTimeout(resolve, ms));
245
225
  }
246
- async function fetchUpdate({
247
- path: pathIn,
248
- acceptedPath: acceptedPathIn,
249
- timestamp,
250
- explicitImportRequired
251
- }) {
252
- const path = pathIn.replace("/@id", "");
253
- const acceptedPath = acceptedPathIn.replace("/@id", "");
254
- const mod = hotModulesMap.get(path);
255
- if (!mod) {
256
- console.info(` \u2776 hmr - No module found`);
257
- console.info(` looked for ${path} in:`);
258
- hotModulesMap.forEach((value, key) => {
259
- console.info(` - ${key}`);
260
- });
261
- return;
262
- }
263
- let fetchedModule;
264
- const isSelfUpdate = path === acceptedPath;
265
- const qualifiedCallbacks = mod.callbacks.filter(({
266
- deps
267
- }) => deps.includes(acceptedPath));
268
- if (isSelfUpdate || qualifiedCallbacks.length > 0) {
269
- const disposer = disposeMap.get(acceptedPath);
270
- if (disposer) await disposer(dataMap.get(acceptedPath));
271
- const [acceptedPathWithoutQuery, query] = acceptedPath.split(`?`);
272
- try {
273
- const filePath = acceptedPathWithoutQuery;
274
- const finalQuery = `file?file=${encodeURIComponent(filePath)}&${explicitImportRequired ? "import&" : ""}t=${timestamp}${query ? `&${query}` : ""}`;
275
- const scriptUrl =
276
- // re-route to our cjs endpoint
277
- `http://${rnDevServerHost ? rnDevServerHost + "/" : serverHost.replace("5173", "8081")}` + finalQuery;
278
- console.info(` \u2776 hmr fetching update: ${scriptUrl}`);
279
- const source = await fetch(scriptUrl).then(res => res.text());
280
- const evaluatedModule = eval(source);
281
- fetchedModule = evaluatedModule;
282
- } catch (e) {
283
- warnFailedFetch(e, acceptedPath);
284
- }
285
- } else {
286
- console.info(` \u2776 hmr can't accept - isSelfUpdate ${isSelfUpdate} - callbacks: ${JSON.stringify(mod.callbacks)} - acceptedPath: ${acceptedPath}`);
287
- }
288
- return () => {
289
- for (const {
290
- deps,
291
- fn
292
- } of qualifiedCallbacks) {
293
- fn(deps.map(dep => dep === acceptedPath ? fetchedModule : void 0));
294
- }
295
- const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
296
- if (process.env.DEBUG) {
297
- console.info(`[vite] hot updated: ${loggedPath}`);
298
- }
299
- };
226
+ async function fetchUpdate({ path: pathIn, acceptedPath: acceptedPathIn, timestamp, explicitImportRequired }) {
227
+ const path = pathIn.replace("/@id", "");
228
+ const acceptedPath = acceptedPathIn.replace("/@id", "");
229
+ const mod = hotModulesMap.get(path);
230
+ if (!mod) {
231
+ console.info(` \u2776 hmr - No module found`);
232
+ console.info(` looked for ${path} in:`);
233
+ hotModulesMap.forEach((value, key) => {
234
+ console.info(` - ${key}`);
235
+ });
236
+ return;
237
+ }
238
+ let fetchedModule;
239
+ const isSelfUpdate = path === acceptedPath;
240
+ const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => deps.includes(acceptedPath));
241
+ if (isSelfUpdate || qualifiedCallbacks.length > 0) {
242
+ const disposer = disposeMap.get(acceptedPath);
243
+ if (disposer) await disposer(dataMap.get(acceptedPath));
244
+ const [acceptedPathWithoutQuery, query] = acceptedPath.split(`?`);
245
+ try {
246
+ const filePath = acceptedPathWithoutQuery;
247
+ const finalQuery = `file?file=${encodeURIComponent(filePath)}&${explicitImportRequired ? "import&" : ""}t=${timestamp}${query ? `&${query}` : ""}`;
248
+ const scriptUrl = `http://${rnDevServerHost ? rnDevServerHost + "/" : serverHost.replace("5173", "8081")}` + finalQuery;
249
+ console.info(` \u2776 hmr fetching update: ${scriptUrl}`);
250
+ const source = await fetch(scriptUrl).then((res) => res.text());
251
+ const evaluatedModule = eval(source);
252
+ fetchedModule = evaluatedModule;
253
+ } catch (e) {
254
+ warnFailedFetch(e, acceptedPath);
255
+ }
256
+ } else {
257
+ console.info(` \u2776 hmr can't accept - isSelfUpdate ${isSelfUpdate} - callbacks: ${JSON.stringify(mod.callbacks)} - acceptedPath: ${acceptedPath}`);
258
+ }
259
+ return () => {
260
+ for (const { deps, fn } of qualifiedCallbacks) {
261
+ fn(deps.map((dep) => dep === acceptedPath ? fetchedModule : void 0));
262
+ }
263
+ const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
264
+ if (process.env.DEBUG) {
265
+ console.info(`[vite] hot updated: ${loggedPath}`);
266
+ }
267
+ };
300
268
  }
301
269
  function sendMessageBuffer() {
302
- if (socket.readyState === 1) {
303
- messageBuffer.forEach(msg => socket.send(msg));
304
- messageBuffer.length = 0;
305
- }
270
+ if (socket.readyState === 1) {
271
+ messageBuffer.forEach((msg) => socket.send(msg));
272
+ messageBuffer.length = 0;
273
+ }
306
274
  }
307
- const hotModulesMap = /* @__PURE__ */new Map();
308
- const disposeMap = /* @__PURE__ */new Map();
309
- const pruneMap = /* @__PURE__ */new Map();
310
- const dataMap = /* @__PURE__ */new Map();
311
- const customListenersMap = /* @__PURE__ */new Map();
312
- const ctxToListenersMap = /* @__PURE__ */new Map();
275
+ const hotModulesMap = /* @__PURE__ */ new Map();
276
+ const disposeMap = /* @__PURE__ */ new Map();
277
+ const pruneMap = /* @__PURE__ */ new Map();
278
+ const dataMap = /* @__PURE__ */ new Map();
279
+ const customListenersMap = /* @__PURE__ */ new Map();
280
+ const ctxToListenersMap = /* @__PURE__ */ new Map();
313
281
  globalThis["createHotContext"] = function createHotContext(ownerPath) {
314
- if (!dataMap.has(ownerPath)) {
315
- dataMap.set(ownerPath, {});
316
- }
317
- const mod2 = hotModulesMap.get(ownerPath);
318
- if (mod2) {
319
- mod2.callbacks = [];
320
- }
321
- const staleListeners = ctxToListenersMap.get(ownerPath);
322
- if (staleListeners) {
323
- for (const [event, staleFns] of staleListeners) {
324
- const listeners = customListenersMap.get(event);
325
- if (listeners) {
326
- customListenersMap.set(event, listeners.filter(l => !staleFns.includes(l)));
327
- }
328
- }
329
- }
330
- const newListeners = /* @__PURE__ */new Map();
331
- ctxToListenersMap.set(ownerPath, newListeners);
332
- function acceptDeps(deps, callback = () => {}) {
333
- const mod3 = hotModulesMap.get(ownerPath) || {
334
- id: ownerPath,
335
- callbacks: []
336
- };
337
- mod3.callbacks.push({
338
- deps,
339
- fn: callback
340
- });
341
- hotModulesMap.set(ownerPath, mod3);
342
- }
343
- const hot = {
344
- get data() {
345
- return dataMap.get(ownerPath);
346
- },
347
- accept(deps, callback) {
348
- if (typeof deps === "function" || !deps) {
349
- acceptDeps([ownerPath], ([mod3]) => deps?.(mod3));
350
- } else if (typeof deps === "string") {
351
- acceptDeps([deps], ([mod3]) => callback?.(mod3));
352
- } else if (Array.isArray(deps)) {
353
- acceptDeps(deps, callback);
354
- } else {
355
- throw new Error(`invalid hot.accept() usage.`);
356
- }
357
- },
358
- // export names (first arg) are irrelevant on the client side, they're
359
- // extracted in the server for propagation
360
- acceptExports(_, callback) {
361
- acceptDeps([ownerPath], ([mod3]) => callback?.(mod3));
362
- },
363
- dispose(cb) {
364
- disposeMap.set(ownerPath, cb);
365
- },
366
- prune(cb) {
367
- pruneMap.set(ownerPath, cb);
368
- },
369
- // Kept for backward compatibility (#11036)
370
- // @ts-expect-error untyped
371
- // eslint-disable-next-line @typescript-eslint/no-empty-function
372
- decline() {},
373
- // tell the server to re-perform hmr propagation from this module as root
374
- invalidate(message) {
375
- notifyListeners("vite:invalidate", {
376
- path: ownerPath,
377
- message
378
- });
379
- this.send("vite:invalidate", {
380
- path: ownerPath,
381
- message
382
- });
383
- console.info(`[vite] invalidate ${ownerPath}${message ? `: ${message}` : ""}`);
384
- },
385
- // custom events
386
- on(event, cb) {
387
- const addToMap = map => {
388
- const existing = map.get(event) || [];
389
- existing.push(cb);
390
- map.set(event, existing);
391
- };
392
- addToMap(customListenersMap);
393
- addToMap(newListeners);
394
- },
395
- send(event, data) {
396
- messageBuffer.push(JSON.stringify({
397
- type: "custom",
398
- event,
399
- data
400
- }));
401
- sendMessageBuffer();
402
- }
403
- };
404
- return hot;
282
+ if (!dataMap.has(ownerPath)) {
283
+ dataMap.set(ownerPath, {});
284
+ }
285
+ const mod2 = hotModulesMap.get(ownerPath);
286
+ if (mod2) {
287
+ mod2.callbacks = [];
288
+ }
289
+ const staleListeners = ctxToListenersMap.get(ownerPath);
290
+ if (staleListeners) {
291
+ for (const [event, staleFns] of staleListeners) {
292
+ const listeners = customListenersMap.get(event);
293
+ if (listeners) {
294
+ customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));
295
+ }
296
+ }
297
+ }
298
+ const newListeners = /* @__PURE__ */ new Map();
299
+ ctxToListenersMap.set(ownerPath, newListeners);
300
+ function acceptDeps(deps, callback = () => {}) {
301
+ const mod3 = hotModulesMap.get(ownerPath) || {
302
+ id: ownerPath,
303
+ callbacks: []
304
+ };
305
+ mod3.callbacks.push({
306
+ deps,
307
+ fn: callback
308
+ });
309
+ hotModulesMap.set(ownerPath, mod3);
310
+ }
311
+ const hot = {
312
+ get data() {
313
+ return dataMap.get(ownerPath);
314
+ },
315
+ accept(deps, callback) {
316
+ if (typeof deps === "function" || !deps) {
317
+ acceptDeps([ownerPath], ([mod3]) => deps?.(mod3));
318
+ } else if (typeof deps === "string") {
319
+ acceptDeps([deps], ([mod3]) => callback?.(mod3));
320
+ } else if (Array.isArray(deps)) {
321
+ acceptDeps(deps, callback);
322
+ } else {
323
+ throw new Error(`invalid hot.accept() usage.`);
324
+ }
325
+ },
326
+ acceptExports(_, callback) {
327
+ acceptDeps([ownerPath], ([mod3]) => callback?.(mod3));
328
+ },
329
+ dispose(cb) {
330
+ disposeMap.set(ownerPath, cb);
331
+ },
332
+ prune(cb) {
333
+ pruneMap.set(ownerPath, cb);
334
+ },
335
+ decline() {},
336
+ invalidate(message) {
337
+ notifyListeners("vite:invalidate", {
338
+ path: ownerPath,
339
+ message
340
+ });
341
+ this.send("vite:invalidate", {
342
+ path: ownerPath,
343
+ message
344
+ });
345
+ console.info(`[vite] invalidate ${ownerPath}${message ? `: ${message}` : ""}`);
346
+ },
347
+ on(event, cb) {
348
+ const addToMap = (map) => {
349
+ const existing = map.get(event) || [];
350
+ existing.push(cb);
351
+ map.set(event, existing);
352
+ };
353
+ addToMap(customListenersMap);
354
+ addToMap(newListeners);
355
+ },
356
+ send(event, data) {
357
+ messageBuffer.push(JSON.stringify({
358
+ type: "custom",
359
+ event,
360
+ data
361
+ }));
362
+ sendMessageBuffer();
363
+ }
364
+ };
365
+ return hot;
405
366
  };
367
+
406
368
  //# sourceMappingURL=client.mjs.map