vxrn 1.25.4 → 1.25.6

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.
@@ -47,17 +47,17 @@ function createReactNativeDevServerPlugin(options) {
47
47
  }
48
48
  }
49
49
  if (url.startsWith("/hot")) {
50
+ const hmrUrl = new URL(url, `http://${req.headers.host || "localhost"}`);
51
+ const platform = validPlatforms[hmrUrl.searchParams.get("platform") || ""];
52
+ const clientId = hmrUrl.searchParams.get("clientId");
53
+ if (!platform || !clientId) {
54
+ socket.destroy();
55
+ return;
56
+ }
50
57
  hmrWSS.handleUpgrade(req, socket, head, ws => {
51
- ws.on("message", async data => {
52
- try {
53
- const msg = JSON.parse(data.toString());
54
- if (msg.type === "hmr:module-registered" && msg.modules) {
55
- const currentEngine = devEngines["ios"] || devEngines["android"];
56
- if (currentEngine?.engine) {
57
- await currentEngine.engine.registerModules("vxrn-dev", msg.modules);
58
- }
59
- }
60
- } catch {}
58
+ Object.assign(ws, {
59
+ vxrnClientId: clientId,
60
+ vxrnPlatform: platform
61
61
  });
62
62
  hmrWSS.emit("connection", ws, req);
63
63
  });
@@ -75,15 +75,45 @@ function createReactNativeDevServerPlugin(options) {
75
75
  });
76
76
  }
77
77
  });
78
- hmrWSS.on("connection", socket => {
78
+ hmrWSS.on("connection", async socket => {
79
+ const currentEngine = devEngines[socket.vxrnPlatform];
80
+ if (!currentEngine) {
81
+ socket.close(1013, "native dev engine unavailable");
82
+ return;
83
+ }
84
+ try {
85
+ await currentEngine.engine.registerClient(socket.vxrnClientId);
86
+ } catch (error) {
87
+ console.error("[hmr] failed to register native client", error);
88
+ socket.close(1011, "native HMR registration failed");
89
+ return;
90
+ }
79
91
  addConnectedNativeClient();
80
- socket.on("message", message => {
81
- if (message.toString().includes("ping")) {
92
+ socket.on("message", async message => {
93
+ const value = message.toString();
94
+ if (value === "ping") {
82
95
  socket.send("pong");
96
+ return;
97
+ }
98
+ let update;
99
+ try {
100
+ update = JSON.parse(value);
101
+ } catch {
102
+ return;
103
+ }
104
+ if (update.type === "hmr:invalidate") {
105
+ currentEngine.engine.triggerFullBuild();
106
+ await currentEngine.engine.ensureLatestBuildOutput();
107
+ socket.send(JSON.stringify({
108
+ type: "hmr:reload"
109
+ }));
83
110
  }
84
111
  });
85
112
  socket.on("close", () => {
86
113
  removeConnectedNativeClient();
114
+ currentEngine.engine.removeClient(socket.vxrnClientId).catch(error => {
115
+ console.error("[hmr] failed to remove native client", error);
116
+ });
87
117
  });
88
118
  socket.on("error", error => {
89
119
  console.error("[hmr] error", error);
@@ -137,7 +167,8 @@ function createReactNativeDevServerPlugin(options) {
137
167
  onHmrUpdate: update => {
138
168
  const msg = JSON.stringify(update);
139
169
  hmrWSS.clients.forEach(client => {
140
- if (client.readyState === 1) {
170
+ const nativeClient = client;
171
+ if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (update.type === "hmr:error" || nativeClient.vxrnClientId === update.clientId)) {
141
172
  client.send(msg);
142
173
  }
143
174
  });
@@ -1 +1 @@
1
- {"version":3,"names":["WebSocketServer","createMessageSocket","addConnectedNativeClient","removeConnectedNativeClient","URL","createDevMiddleware","createNativeDevEngine","getBoundPort","createReactNativeDevServerPlugin","options","name","configureServer","server","host","config","root","hmrWSS","noServer","clientWSS","messageWSS","devToolsSocketEndpoints","reactNativeDevToolsUrl","middleware","websocketEndpoints","serverBaseUrl","logger","console","unstable_experiments","enableStandaloneFuseboxShell","middlewares","use","httpServer","on","req","socket","head","url","endpoint","startsWith","wss","handleUpgrade","ws","emit","data","msg","JSON","parse","toString","type","modules","currentEngine","devEngines","engine","registerModules","message","includes","send","error","messageRaw","level","info","warn","validPlatforms","ios","android","devEngineCreating","handleRNBundle","res","headers","platformString","searchParams","get","platform","bundle","port","serverUrl","onHmrUpdate","update","stringify","clients","forEach","client","readyState","err","getBundle","then","r","code","writeHead","end","Error","stack","String","next","split","endsWith","_req"],"sources":["../../src/plugins/reactNativeDevServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebSocketServer","createMessageSocket","addConnectedNativeClient","removeConnectedNativeClient","URL","createDevMiddleware","createNativeDevEngine","getBoundPort","createReactNativeDevServerPlugin","options","name","configureServer","server","host","config","root","hmrWSS","noServer","clientWSS","messageWSS","devToolsSocketEndpoints","reactNativeDevToolsUrl","middleware","websocketEndpoints","serverBaseUrl","logger","console","unstable_experiments","enableStandaloneFuseboxShell","middlewares","use","httpServer","on","req","socket","head","url","endpoint","startsWith","wss","handleUpgrade","ws","emit","hmrUrl","headers","platform","validPlatforms","searchParams","get","clientId","destroy","Object","assign","vxrnClientId","vxrnPlatform","currentEngine","devEngines","close","engine","registerClient","error","message","value","toString","send","update","JSON","parse","type","triggerFullBuild","ensureLatestBuildOutput","stringify","removeClient","catch","messageRaw","level","data","info","warn","ios","android","devEngineCreating","handleRNBundle","res","platformString","bundle","port","serverUrl","onHmrUpdate","msg","clients","forEach","client","nativeClient","readyState","err","getBundle","then","r","code","writeHead","end","Error","stack","String","next","split","endsWith","_req"],"sources":["../../src/plugins/reactNativeDevServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -85,17 +85,17 @@ function createReactNativeDevServerPlugin(options) {
85
85
  }
86
86
  }
87
87
  if (url.startsWith("/hot")) {
88
+ var hmrUrl = new URL(url, `http://${req.headers.host || "localhost"}`);
89
+ var platform = validPlatforms[hmrUrl.searchParams.get("platform") || ""];
90
+ var clientId = hmrUrl.searchParams.get("clientId");
91
+ if (!platform || !clientId) {
92
+ socket.destroy();
93
+ return;
94
+ }
88
95
  hmrWSS.handleUpgrade(req, socket, head, function (ws) {
89
- ws.on("message", async function (data) {
90
- try {
91
- var msg = JSON.parse(data.toString());
92
- if (msg.type === "hmr:module-registered" && msg.modules) {
93
- var currentEngine = devEngines["ios"] || devEngines["android"];
94
- if (currentEngine === null || currentEngine === void 0 ? void 0 : currentEngine.engine) {
95
- await currentEngine.engine.registerModules("vxrn-dev", msg.modules);
96
- }
97
- }
98
- } catch (unused) {}
96
+ Object.assign(ws, {
97
+ vxrnClientId: clientId,
98
+ vxrnPlatform: platform
99
99
  });
100
100
  hmrWSS.emit("connection", ws, req);
101
101
  });
@@ -113,15 +113,45 @@ function createReactNativeDevServerPlugin(options) {
113
113
  });
114
114
  }
115
115
  });
116
- hmrWSS.on("connection", function (socket) {
116
+ hmrWSS.on("connection", async function (socket) {
117
+ var currentEngine = devEngines[socket.vxrnPlatform];
118
+ if (!currentEngine) {
119
+ socket.close(1013, "native dev engine unavailable");
120
+ return;
121
+ }
122
+ try {
123
+ await currentEngine.engine.registerClient(socket.vxrnClientId);
124
+ } catch (error) {
125
+ console.error("[hmr] failed to register native client", error);
126
+ socket.close(1011, "native HMR registration failed");
127
+ return;
128
+ }
117
129
  addConnectedNativeClient();
118
- socket.on("message", function (message) {
119
- if (message.toString().includes("ping")) {
130
+ socket.on("message", async function (message) {
131
+ var value = message.toString();
132
+ if (value === "ping") {
120
133
  socket.send("pong");
134
+ return;
135
+ }
136
+ var update;
137
+ try {
138
+ update = JSON.parse(value);
139
+ } catch (unused) {
140
+ return;
141
+ }
142
+ if (update.type === "hmr:invalidate") {
143
+ currentEngine.engine.triggerFullBuild();
144
+ await currentEngine.engine.ensureLatestBuildOutput();
145
+ socket.send(JSON.stringify({
146
+ type: "hmr:reload"
147
+ }));
121
148
  }
122
149
  });
123
150
  socket.on("close", function () {
124
151
  removeConnectedNativeClient();
152
+ currentEngine.engine.removeClient(socket.vxrnClientId).catch(function (error) {
153
+ console.error("[hmr] failed to remove native client", error);
154
+ });
125
155
  });
126
156
  socket.on("error", function (error) {
127
157
  console.error("[hmr] error", error);
@@ -176,7 +206,8 @@ function createReactNativeDevServerPlugin(options) {
176
206
  onHmrUpdate: function (update) {
177
207
  var msg = JSON.stringify(update);
178
208
  hmrWSS.clients.forEach(function (client) {
179
- if (client.readyState === 1) {
209
+ var nativeClient = client;
210
+ if (nativeClient.readyState === 1 && nativeClient.vxrnPlatform === platform && (update.type === "hmr:error" || nativeClient.vxrnClientId === update.clientId)) {
180
211
  client.send(msg);
181
212
  }
182
213
  });
@@ -1 +1 @@
1
- {"version":3,"names":["WebSocketServer","createMessageSocket","addConnectedNativeClient","removeConnectedNativeClient","URL","createDevMiddleware","createNativeDevEngine","getBoundPort","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","createReactNativeDevServerPlugin","options","name","configureServer","server","_server_httpServer","host","config","root","hmrWSS","noServer","clientWSS","messageWSS","devToolsSocketEndpoints","reactNativeDevToolsUrl","middleware","websocketEndpoints","serverBaseUrl","logger","console","unstable_experiments","enableStandaloneFuseboxShell","middlewares","use","httpServer","on","req","socket","head","url","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop","endpoint","_step","value","startsWith","wss","handleUpgrade","ws","emit","v","_iterator","iterator","next","done","_ret","err","return","data","msg","JSON","parse","toString","type","modules","currentEngine","devEngines","engine","registerModules","unused","message","includes","send","error","messageRaw","_message_data_","level","info","warn","validPlatforms","ios","android","devEngineCreating","handleRNBundle","res","headers","platformString","searchParams","get","platform","bundle","port","serverUrl","onHmrUpdate","update","stringify","clients","forEach","client","readyState"],"sources":["../../src/plugins/reactNativeDevServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["WebSocketServer","createMessageSocket","addConnectedNativeClient","removeConnectedNativeClient","URL","createDevMiddleware","createNativeDevEngine","getBoundPort","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","createReactNativeDevServerPlugin","options","name","configureServer","server","_server_httpServer","host","config","root","hmrWSS","noServer","clientWSS","messageWSS","devToolsSocketEndpoints","reactNativeDevToolsUrl","middleware","websocketEndpoints","serverBaseUrl","logger","console","unstable_experiments","enableStandaloneFuseboxShell","middlewares","use","httpServer","on","req","socket","head","url","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_loop","endpoint","_step","value","startsWith","wss","handleUpgrade","ws","emit","v","_iterator","iterator","next","done","_ret","err","return","hmrUrl","headers","platform","validPlatforms","searchParams","get","clientId","destroy","Object","assign","vxrnClientId","vxrnPlatform","currentEngine","devEngines","close","engine","registerClient","error","message","toString","send","update","JSON","parse","unused","type","triggerFullBuild","ensureLatestBuildOutput","stringify","removeClient","catch","messageRaw","_message_data_","level","data","info","warn","ios","android","devEngineCreating","handleRNBundle","res","platformString","bundle","port","serverUrl","onHmrUpdate","msg","clients","forEach","client","nativeClient","readyState"],"sources":["../../src/plugins/reactNativeDevServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -129,7 +129,7 @@ function getNativeTransformConfig(platform, dev, root) {
129
129
  function getNativePlugins(root, platform, viteImportGlobPlugin, dev, assetsDest) {
130
130
  return [...(globalThis.__vxrnAddNativePlugins || []), serverFileExclusionPlugin(), environmentGuardPlugin(), hmrClientNoopPlugin(), cssStubPlugin(), viteImportGlobPlugin({
131
131
  root
132
- }), vxrnCompilerPlugin(platform, dev), flowStripPlugin(), nativeAnimatedGuardPlugin(), assetPlugin({
132
+ }), vxrnCompilerPlugin(platform, dev, root), flowStripPlugin(), nativeAnimatedGuardPlugin(), assetPlugin({
133
133
  root,
134
134
  platform,
135
135
  assetsDest
@@ -269,18 +269,18 @@ async function createNativeDevEngine(options) {
269
269
  outro: `
270
270
  try {
271
271
  var __WS = (init_WebSocket(), __toCommonJS(WebSocket_exports)).default;
272
- var __hmrUrl = 'ws://${resolvedHost}:${port}/hot';
272
+ var __hmrUrl = 'ws://${resolvedHost}:${port}/hot?platform=${platform}&clientId=' + encodeURIComponent(__rolldown_runtime__.clientId);
273
273
  var __hmrWS = new __WS(__hmrUrl);
274
274
  __hmrWS.onmessage = function(event) {
275
275
  try {
276
276
  var msg = JSON.parse(event.data);
277
277
  var g = typeof global !== 'undefined' ? global : globalThis;
278
278
  if (msg.type === 'hmr:update' && msg.code) {
279
- if (g.globalEvalWithSourceUrl) g.globalEvalWithSourceUrl(msg.code);
280
- else (0, eval)(msg.code);
281
- setTimeout(function() {
282
- try { if (g.__ReactRefresh) g.__ReactRefresh.performReactRefresh(); } catch(e) {}
283
- }, 50);
279
+ var applied = __rolldown_runtime__.applyHmrUpdate(msg.code, msg.changedIds, msg.seq);
280
+ if (!applied) {
281
+ var updateSettings = g.__turboModuleProxy ? g.__turboModuleProxy('DevSettings') : null;
282
+ if (updateSettings && updateSettings.reload) updateSettings.reload();
283
+ }
284
284
  } else if (msg.type === 'hmr:reload') {
285
285
  var ds = g.__turboModuleProxy ? g.__turboModuleProxy('DevSettings') : null;
286
286
  if (ds && ds.reload) ds.reload();
@@ -289,7 +289,7 @@ try {
289
289
  };
290
290
  __hmrWS.onopen = function() {
291
291
  if (typeof __rolldown_runtime__ !== 'undefined' && __rolldown_runtime__.setup) {
292
- __rolldown_runtime__.setup(__hmrWS, __hmrUrl.replace('ws://', 'http://'));
292
+ __rolldown_runtime__.setup(__hmrWS);
293
293
  }
294
294
  };
295
295
  __hmrWS.onerror = function(e) { console.warn('[vxrn] HMR connection error:', e.message || e); };
@@ -325,18 +325,18 @@ try {
325
325
  });
326
326
  return;
327
327
  }
328
- const updates = result.updates || [];
329
- for (const item of updates) {
330
- const update = item.update || item;
331
- if (update.type === "Patch" && update.code) onHmrUpdate?.({
332
- type: "hmr:update",
333
- code: update.code
334
- });else if (update.type === "FullReload") onHmrUpdate?.({
335
- type: "hmr:reload"
336
- });
337
- }
338
- if (updates.length === 0) onHmrUpdate?.({
339
- type: "hmr:reload"
328
+ for (const {
329
+ clientId,
330
+ update
331
+ } of result.updates) if (update.type === "Patch" && update.code) onHmrUpdate?.({
332
+ type: "hmr:update",
333
+ clientId,
334
+ code: update.code,
335
+ changedIds: update.changedIds,
336
+ seq: update.seq
337
+ });else if (update.type === "FullReload") onHmrUpdate?.({
338
+ type: "hmr:reload",
339
+ clientId
340
340
  });
341
341
  },
342
342
  rebuildStrategy: "never",
@@ -563,7 +563,7 @@ function cssStubPlugin() {
563
563
  }
564
564
  };
565
565
  }
566
- function vxrnCompilerPlugin(platform, dev) {
566
+ function vxrnCompilerPlugin(platform, dev, projectRoot = process.cwd()) {
567
567
  let compiler = null;
568
568
  const isRefreshCandidate = id => dev && !id.includes("node_modules") && !id.includes("__virtual-native-entry") && /\.[tj]sx?$/.test(id);
569
569
  return {
@@ -577,6 +577,7 @@ function vxrnCompilerPlugin(platform, dev) {
577
577
  const props = {
578
578
  id,
579
579
  code,
580
+ projectRoot,
580
581
  development: dev,
581
582
  environment: platform,
582
583
  reactForRNVersion: "19"
@@ -765,26 +766,33 @@ var BaseDevRuntime = DevRuntime;
765
766
 
766
767
  class ReactNativeDevRuntime extends BaseDevRuntime {
767
768
  constructor() {
768
- var _shared = { _socket: null, _queue: [] };
769
769
  var clientId = 'rn-' + Date.now() + '-' + Math.random().toString(36).slice(2);
770
- super({ send: function(msg) {
771
- var s = JSON.stringify(msg);
772
- if (_shared._socket && _shared._socket.readyState === 1) { _shared._socket.send(s); }
773
- else { _shared._queue.push(s); }
774
- }}, clientId);
775
- this._shared = _shared;
770
+ super(clientId);
776
771
  this._socket = null;
777
- this._queue = [];
778
772
  this.moduleHotContexts = {};
773
+ this.lastSeq = 0;
779
774
  }
780
775
 
781
776
  createModuleHotContext(moduleId) {
777
+ var runtime = this;
782
778
  var ctx = {
783
779
  acceptCallbacks: [],
784
- accept: function(cb) {
785
- if (cb) ctx.acceptCallbacks.push({ deps: [moduleId], fn: cb });
780
+ accept: function(deps, callback) {
781
+ if (typeof deps === 'function' || !deps) {
782
+ ctx.acceptCallbacks.push({
783
+ deps: [moduleId],
784
+ fn: function(modules) { if (typeof deps === 'function') deps(modules[0]); }
785
+ });
786
+ } else if (typeof deps === 'string') {
787
+ ctx.acceptCallbacks.push({
788
+ deps: [deps],
789
+ fn: function(modules) { if (callback) callback(modules[0]); }
790
+ });
791
+ } else if (Array.isArray(deps)) {
792
+ ctx.acceptCallbacks.push({ deps: deps, fn: callback || function() {} });
793
+ }
786
794
  },
787
- invalidate: function() {},
795
+ invalidate: function() { runtime.requestReload('module invalidated: ' + moduleId); },
788
796
  on: function() {},
789
797
  off: function() {},
790
798
  send: function() {},
@@ -815,60 +823,117 @@ class ReactNativeDevRuntime extends BaseDevRuntime {
815
823
  return ctx;
816
824
  }
817
825
 
818
- applyUpdates(boundaries) {
819
- for (var i = 0; i < boundaries.length; i++) {
820
- var moduleId = boundaries[i][0];
821
- var ctx = this.moduleHotContexts[moduleId];
822
- if (ctx && ctx.acceptCallbacks) {
823
- for (var j = 0; j < ctx.acceptCallbacks.length; j++) {
824
- ctx.acceptCallbacks[j].fn(this.modules[moduleId].exports);
825
- }
826
+ isSelfAccepted(moduleId) {
827
+ var ctx = this.moduleHotContexts[moduleId];
828
+ return !!(ctx && ctx.acceptCallbacks.some(function(callback) {
829
+ return callback.deps.indexOf(moduleId) !== -1;
830
+ }));
831
+ }
832
+
833
+ acceptsDependency(parentId, moduleId) {
834
+ var ctx = this.moduleHotContexts[parentId];
835
+ return !!(ctx && ctx.acceptCallbacks.some(function(callback) {
836
+ return callback.deps.indexOf(moduleId) !== -1;
837
+ }));
838
+ }
839
+
840
+ findBoundaries(moduleId, traversed, updateSet, boundaries) {
841
+ if (traversed.has(moduleId)) return true;
842
+ traversed.add(moduleId);
843
+ updateSet.add(moduleId);
844
+
845
+ if (this.isSelfAccepted(moduleId)) {
846
+ boundaries.push({ boundary: moduleId, acceptedVia: moduleId });
847
+ return true;
848
+ }
849
+
850
+ var importers = this.getImporters(moduleId).filter(function(importer) {
851
+ return this.isExecuted(importer);
852
+ }, this);
853
+ if (importers.length === 0) return false;
854
+
855
+ for (var i = 0; i < importers.length; i++) {
856
+ var importer = importers[i];
857
+ if (this.acceptsDependency(importer, moduleId)) {
858
+ boundaries.push({ boundary: importer, acceptedVia: moduleId });
859
+ } else if (!this.findBoundaries(importer, traversed, updateSet, boundaries)) {
860
+ return false;
861
+ }
862
+ }
863
+ return true;
864
+ }
865
+
866
+ applyHmrUpdate(code, changedIds, seq) {
867
+ if (seq !== this.lastSeq + 1) return false;
868
+ this.lastSeq = seq;
869
+
870
+ var traversed = new Set();
871
+ var updateSet = new Set();
872
+ var boundaries = [];
873
+ for (var i = 0; i < changedIds.length; i++) {
874
+ var changedId = changedIds[i];
875
+ if (!this.isExecuted(changedId)) continue;
876
+ if (!this.findBoundaries(changedId, traversed, updateSet, boundaries)) return false;
877
+ }
878
+ if (boundaries.length === 0) return true;
879
+
880
+ var callbacks = boundaries.map(function(item) {
881
+ var ctx = this.moduleHotContexts[item.boundary];
882
+ return {
883
+ boundary: item.boundary,
884
+ acceptedVia: item.acceptedVia,
885
+ callbacks: ctx ? ctx.acceptCallbacks.filter(function(callback) {
886
+ return callback.deps.indexOf(item.acceptedVia) !== -1;
887
+ }) : []
888
+ };
889
+ }, this);
890
+
891
+ if (globalThis.globalEvalWithSourceUrl) globalThis.globalEvalWithSourceUrl(code);
892
+ else (0, eval)(code);
893
+
894
+ var modulesToReplace = Array.from(updateSet);
895
+ for (var j = 0; j < modulesToReplace.length; j++) {
896
+ if (!this.hasFactory(modulesToReplace[j])) return false;
897
+ }
898
+ for (var k = 0; k < modulesToReplace.length; k++) {
899
+ this.removeModuleCache(modulesToReplace[k]);
900
+ }
901
+
902
+ for (var m = 0; m < callbacks.length; m++) {
903
+ var apply = callbacks[m];
904
+ this.initModule(apply.acceptedVia);
905
+ var freshExports = this.loadExports(apply.acceptedVia);
906
+ for (var n = 0; n < apply.callbacks.length; n++) {
907
+ apply.callbacks[n].fn([freshExports]);
826
908
  }
827
- // surface each committed module id to the framework hot-update hook (if one
828
- // is registered). RN's React Refresh can't repaint frameworks that re-wrap
829
- // route components away from the edited module's Refresh family (e.g. One),
830
- // and the web route-update event has no equivalent on the native /hot
831
- // socket, so this generic vxrn global is the bridge.
909
+ }
910
+
911
+ for (var p = 0; p < changedIds.length; p++) {
832
912
  try {
833
- if (globalThis.__VXRN_ON_MODULE_UPDATED__ && moduleId) globalThis.__VXRN_ON_MODULE_UPDATED__(moduleId);
913
+ if (globalThis.__VXRN_ON_MODULE_UPDATED__) {
914
+ globalThis.__VXRN_ON_MODULE_UPDATED__(changedIds[p]);
915
+ }
834
916
  } catch (error) {
835
917
  console.error('[vxrn HMR]: module update hook failed', error);
836
918
  }
837
919
  }
920
+ return true;
838
921
  }
839
922
 
840
- setup(socket, origin) {
841
- if (this._socket) return;
842
- this._socket = socket;
843
- // also set the shared messenger socket so queued messages can flush
844
- if (this._shared) this._shared._socket = socket;
845
-
846
- var flushQueues = function() {
847
- // flush messenger queue
848
- if (this._shared && this._shared._queue.length) {
849
- for (var i = 0; i < this._shared._queue.length; i++) socket.send(this._shared._queue[i]);
850
- this._shared._queue = [];
851
- }
852
- // flush instance queue
853
- for (var i = 0; i < this._queue.length; i++) socket.send(this._queue[i]);
854
- this._queue = [];
855
- }.bind(this);
856
-
857
- if (socket.readyState === 1) {
858
- flushQueues();
859
- } else {
860
- socket.addEventListener('open', function() {
861
- flushQueues();
862
- }, { once: true });
923
+ requestReload(reason) {
924
+ if (this._socket && this._socket.readyState === 1) {
925
+ this._socket.send(JSON.stringify({ type: 'hmr:invalidate', reason: reason }));
863
926
  }
927
+ }
864
928
 
865
- // HMR message handling is done by the outro WebSocket handler
866
- // the runtime's setup() only needs to flush queued messages
929
+ setup(socket) {
930
+ if (this._socket) return;
931
+ this._socket = socket;
867
932
  }
868
933
  }
869
934
 
870
935
  globalThis.__rolldown_runtime__ = new ReactNativeDevRuntime();
871
936
  `;
872
937
  }
873
- export { buildNativeBundle, createNativeDevEngine, getHermesSWCIncludes, getNativeTransformConfig, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope };
938
+ export { buildNativeBundle, createNativeDevEngine, getHermesSWCIncludes, getHmrRuntimeSource, getNativeTransformConfig, hmrClientNoopPlugin, vxrnCompilerPlugin, wrapNativeBundleModuleScope };
874
939
  //# sourceMappingURL=createNativeDevEngine.mjs.map