@nativescript/vite 8.0.0-alpha.67 → 8.0.0-alpha.69

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 (186) hide show
  1. package/configuration/angular.js +78 -182
  2. package/configuration/angular.js.map +1 -1
  3. package/configuration/base.js +10 -139
  4. package/configuration/base.js.map +1 -1
  5. package/helpers/app-css-refresh.d.ts +31 -0
  6. package/helpers/app-css-refresh.js +43 -0
  7. package/helpers/app-css-refresh.js.map +1 -0
  8. package/helpers/app-css-state.d.ts +9 -0
  9. package/helpers/app-css-state.js.map +1 -1
  10. package/helpers/main-entry.js +27 -24
  11. package/helpers/main-entry.js.map +1 -1
  12. package/helpers/ns-core-external-urls.d.ts +32 -0
  13. package/helpers/ns-core-external-urls.js +107 -0
  14. package/helpers/ns-core-external-urls.js.map +1 -0
  15. package/helpers/typescript-check.js +2 -2
  16. package/helpers/typescript-check.js.map +1 -1
  17. package/helpers/workers.d.ts +0 -8
  18. package/helpers/workers.js +43 -381
  19. package/helpers/workers.js.map +1 -1
  20. package/hmr/client/css-handler.js +14 -6
  21. package/hmr/client/css-handler.js.map +1 -1
  22. package/hmr/client/framework-client-strategy.d.ts +17 -9
  23. package/hmr/client/framework-client-strategy.js +3 -4
  24. package/hmr/client/framework-client-strategy.js.map +1 -1
  25. package/hmr/client/hmr-pending-overlay.js +2 -21
  26. package/hmr/client/hmr-pending-overlay.js.map +1 -1
  27. package/hmr/client/index.d.ts +9 -1
  28. package/hmr/client/index.js +34 -2621
  29. package/hmr/client/index.js.map +1 -1
  30. package/hmr/client/overlay-driver.d.ts +10 -0
  31. package/hmr/client/overlay-driver.js +33 -0
  32. package/hmr/client/overlay-driver.js.map +1 -0
  33. package/hmr/client/protocol-dispatch.d.ts +8 -0
  34. package/hmr/client/protocol-dispatch.js +308 -0
  35. package/hmr/client/protocol-dispatch.js.map +1 -0
  36. package/hmr/client/root-reset.d.ts +15 -0
  37. package/hmr/client/root-reset.js +358 -0
  38. package/hmr/client/root-reset.js.map +1 -0
  39. package/hmr/client/strategy-loader.d.ts +24 -0
  40. package/hmr/client/strategy-loader.js +83 -0
  41. package/hmr/client/strategy-loader.js.map +1 -0
  42. package/hmr/client/update-pipeline.d.ts +27 -0
  43. package/hmr/client/update-pipeline.js +464 -0
  44. package/hmr/client/update-pipeline.js.map +1 -0
  45. package/hmr/client/utils.d.ts +7 -0
  46. package/hmr/client/utils.js +12 -2
  47. package/hmr/client/utils.js.map +1 -1
  48. package/hmr/client/ws-transport.d.ts +21 -0
  49. package/hmr/client/ws-transport.js +344 -0
  50. package/hmr/client/ws-transport.js.map +1 -0
  51. package/hmr/frameworks/angular/build/angular-linker.js +4 -0
  52. package/hmr/frameworks/angular/build/angular-linker.js.map +1 -1
  53. package/hmr/frameworks/angular/build/linker-stats.d.ts +18 -0
  54. package/hmr/frameworks/angular/build/linker-stats.js +29 -0
  55. package/hmr/frameworks/angular/build/linker-stats.js.map +1 -0
  56. package/hmr/frameworks/angular/build/ts-fallback-transform.d.ts +5 -0
  57. package/hmr/frameworks/angular/build/ts-fallback-transform.js +138 -0
  58. package/hmr/frameworks/angular/build/ts-fallback-transform.js.map +1 -0
  59. package/hmr/frameworks/angular/build/worker-url-preserve.d.ts +5 -0
  60. package/hmr/frameworks/angular/build/worker-url-preserve.js +140 -0
  61. package/hmr/frameworks/angular/build/worker-url-preserve.js.map +1 -0
  62. package/hmr/frameworks/angular/client/index.js +28 -42
  63. package/hmr/frameworks/angular/client/index.js.map +1 -1
  64. package/hmr/frameworks/angular/server/ng-component-route.d.ts +43 -0
  65. package/hmr/frameworks/angular/server/ng-component-route.js +113 -0
  66. package/hmr/frameworks/angular/server/ng-component-route.js.map +1 -0
  67. package/hmr/frameworks/angular/server/strategy.js +22 -11
  68. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  69. package/hmr/frameworks/angular/server/websocket-angular-hot-update.d.ts +12 -0
  70. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js +51 -9
  71. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js.map +1 -1
  72. package/hmr/frameworks/react/client/strategy.d.ts +12 -0
  73. package/hmr/frameworks/react/client/strategy.js +27 -0
  74. package/hmr/frameworks/react/client/strategy.js.map +1 -0
  75. package/hmr/frameworks/solid/client/strategy.d.ts +7 -0
  76. package/hmr/frameworks/solid/client/strategy.js +391 -0
  77. package/hmr/frameworks/solid/client/strategy.js.map +1 -0
  78. package/hmr/frameworks/solid/server/strategy.js +2 -0
  79. package/hmr/frameworks/solid/server/strategy.js.map +1 -1
  80. package/hmr/frameworks/typescript/client/strategy.d.ts +7 -0
  81. package/hmr/frameworks/typescript/client/strategy.js +418 -0
  82. package/hmr/frameworks/typescript/client/strategy.js.map +1 -0
  83. package/hmr/frameworks/typescript/server/strategy.js +2 -0
  84. package/hmr/frameworks/typescript/server/strategy.js.map +1 -1
  85. package/hmr/frameworks/vue/client/index.d.ts +1 -1
  86. package/hmr/frameworks/vue/client/index.js +44 -323
  87. package/hmr/frameworks/vue/client/index.js.map +1 -1
  88. package/hmr/frameworks/vue/client/navigate-app.d.ts +3 -0
  89. package/hmr/frameworks/vue/client/navigate-app.js +178 -0
  90. package/hmr/frameworks/vue/client/navigate-app.js.map +1 -0
  91. package/hmr/frameworks/vue/client/strategy.d.ts +1 -1
  92. package/hmr/frameworks/vue/client/strategy.js +9 -14
  93. package/hmr/frameworks/vue/client/strategy.js.map +1 -1
  94. package/hmr/frameworks/vue/client/vue-sfc-update-overlay.js +2 -20
  95. package/hmr/frameworks/vue/client/vue-sfc-update-overlay.js.map +1 -1
  96. package/hmr/frameworks/vue/server/strategy.js +3 -0
  97. package/hmr/frameworks/vue/server/strategy.js.map +1 -1
  98. package/hmr/server/content-css-update.d.ts +54 -0
  99. package/hmr/server/content-css-update.js +78 -0
  100. package/hmr/server/content-css-update.js.map +1 -0
  101. package/hmr/server/css-connect-sync.d.ts +28 -0
  102. package/hmr/server/css-connect-sync.js +59 -0
  103. package/hmr/server/css-connect-sync.js.map +1 -0
  104. package/hmr/server/css-update-message.d.ts +23 -0
  105. package/hmr/server/css-update-message.js +41 -0
  106. package/hmr/server/css-update-message.js.map +1 -0
  107. package/hmr/server/framework-strategy.d.ts +42 -0
  108. package/hmr/server/socket-utils.d.ts +10 -0
  109. package/hmr/server/socket-utils.js +14 -0
  110. package/hmr/server/socket-utils.js.map +1 -0
  111. package/hmr/server/vite-plugin.js +35 -0
  112. package/hmr/server/vite-plugin.js.map +1 -1
  113. package/hmr/server/websocket-hmr-pending.d.ts +0 -8
  114. package/hmr/server/websocket-hmr-pending.js +0 -22
  115. package/hmr/server/websocket-hmr-pending.js.map +1 -1
  116. package/hmr/server/websocket-hot-update.d.ts +3 -0
  117. package/hmr/server/websocket-hot-update.js +30 -99
  118. package/hmr/server/websocket-hot-update.js.map +1 -1
  119. package/hmr/server/websocket-module-bindings.js +23 -5
  120. package/hmr/server/websocket-module-bindings.js.map +1 -1
  121. package/hmr/server/websocket-module-specifiers.d.ts +0 -5
  122. package/hmr/server/websocket-module-specifiers.js +0 -28
  123. package/hmr/server/websocket-module-specifiers.js.map +1 -1
  124. package/hmr/server/websocket-ns-m-paths.d.ts +18 -0
  125. package/hmr/server/websocket-ns-m-paths.js +79 -0
  126. package/hmr/server/websocket-ns-m-paths.js.map +1 -1
  127. package/hmr/server/websocket-ns-m-request.d.ts +2 -1
  128. package/hmr/server/websocket-ns-m-request.js +3 -2
  129. package/hmr/server/websocket-ns-m-request.js.map +1 -1
  130. package/hmr/server/websocket-ns-m.js +100 -374
  131. package/hmr/server/websocket-ns-m.js.map +1 -1
  132. package/hmr/server/websocket-served-module-helpers.d.ts +7 -0
  133. package/hmr/server/websocket-served-module-helpers.js +93 -69
  134. package/hmr/server/websocket-served-module-helpers.js.map +1 -1
  135. package/hmr/server/websocket.d.ts +0 -1
  136. package/hmr/server/websocket.js +41 -35
  137. package/hmr/server/websocket.js.map +1 -1
  138. package/hmr/shared/ns-globals.d.ts +0 -1
  139. package/hmr/shared/ns-globals.js.map +1 -1
  140. package/hmr/shared/protocol.d.ts +12 -0
  141. package/hmr/shared/protocol.js.map +1 -1
  142. package/hmr/shared/runtime/dev-overlay-ios.d.ts +87 -0
  143. package/hmr/shared/runtime/dev-overlay-ios.js +521 -0
  144. package/hmr/shared/runtime/dev-overlay-ios.js.map +1 -0
  145. package/hmr/shared/runtime/dev-overlay-shared.d.ts +58 -0
  146. package/hmr/shared/runtime/dev-overlay-shared.js +116 -0
  147. package/hmr/shared/runtime/dev-overlay-shared.js.map +1 -0
  148. package/hmr/shared/runtime/dev-overlay-tree.d.ts +59 -0
  149. package/hmr/shared/runtime/dev-overlay-tree.js +712 -0
  150. package/hmr/shared/runtime/dev-overlay-tree.js.map +1 -0
  151. package/hmr/shared/runtime/dev-overlay.d.ts +15 -107
  152. package/hmr/shared/runtime/dev-overlay.js +19 -1336
  153. package/hmr/shared/runtime/dev-overlay.js.map +1 -1
  154. package/hmr/shared/runtime/overlay-flag.d.ts +9 -0
  155. package/hmr/shared/runtime/overlay-flag.js +34 -0
  156. package/hmr/shared/runtime/overlay-flag.js.map +1 -0
  157. package/hmr/shared/runtime/root-placeholder.js +3 -2
  158. package/hmr/shared/runtime/root-placeholder.js.map +1 -1
  159. package/hmr/shared/runtime/session-bootstrap.js +2 -1
  160. package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
  161. package/hmr/shared/runtime/vendor-resolve.d.ts +22 -0
  162. package/hmr/shared/runtime/vendor-resolve.js +45 -0
  163. package/hmr/shared/runtime/vendor-resolve.js.map +1 -0
  164. package/hmr/shared/vendor/manifest-collect.js +0 -3
  165. package/hmr/shared/vendor/manifest-collect.js.map +1 -1
  166. package/package.json +1 -3
  167. package/runtime/core-aliases-early.js +3 -2
  168. package/runtime/core-aliases-early.js.map +1 -1
  169. package/helpers/module-runner-patch.d.ts +0 -3
  170. package/helpers/module-runner-patch.js +0 -63
  171. package/helpers/module-runner-patch.js.map +0 -1
  172. package/hmr/server/websocket-css-hot-update.d.ts +0 -33
  173. package/hmr/server/websocket-css-hot-update.js +0 -65
  174. package/hmr/server/websocket-css-hot-update.js.map +0 -1
  175. package/hmr/shared/runtime/http-only-boot.d.ts +0 -2
  176. package/hmr/shared/runtime/http-only-boot.js +0 -172
  177. package/hmr/shared/runtime/http-only-boot.js.map +0 -1
  178. package/hmr/vendor-bootstrap.d.ts +0 -1
  179. package/hmr/vendor-bootstrap.js +0 -30
  180. package/hmr/vendor-bootstrap.js.map +0 -1
  181. package/shims/react-reconciler-constants.d.ts +0 -14
  182. package/shims/react-reconciler-constants.js +0 -21
  183. package/shims/react-reconciler-constants.js.map +0 -1
  184. package/shims/react-reconciler.d.ts +0 -8
  185. package/shims/react-reconciler.js +0 -15
  186. package/shims/react-reconciler.js.map +0 -1
@@ -0,0 +1,344 @@
1
+ /**
2
+ * WebSocket transport — connect/reconnect candidate loop plus the connection
3
+ * overlay state machine ('connecting' / 'reconnecting' / 'synchronizing' /
4
+ * 'offline').
5
+ *
6
+ * Protocol handling is injected via `setHmrMessageHandler` (wired by the
7
+ * client entry) so this module knows nothing about message shapes; it only
8
+ * owns socket lifecycle and the "is the connection healthy" UX.
9
+ */
10
+ import { getHMRWsUrl, deriveHttpOrigin, setHttpOriginForVite, normalizeSpec, requestModuleFromServer, hmrMetrics, emitHmrModeBannerOnce, ENV_VERBOSE } from './utils.js';
11
+ import { getGlobalScope } from '../shared/runtime/global-scope.js';
12
+ import { getOverlayApi } from './overlay-driver.js';
13
+ import { getNsHotRegistry } from './hot-context.js';
14
+ const VERBOSE = ENV_VERBOSE;
15
+ function setConnectionOverlayStage(stage, detail) {
16
+ try {
17
+ const api = getOverlayApi();
18
+ if (api && typeof api.setConnectionStage === 'function') {
19
+ api.setConnectionStage(stage, { detail });
20
+ }
21
+ }
22
+ catch { }
23
+ }
24
+ function hideConnectionOverlay() {
25
+ try {
26
+ const api = getOverlayApi();
27
+ if (api && typeof api.hide === 'function') {
28
+ api.hide('healthy');
29
+ }
30
+ }
31
+ catch { }
32
+ }
33
+ let connectionOverlayTimer = null;
34
+ let connectionOverlayVisible = false;
35
+ let hasOpenedHmrSocket = false;
36
+ let awaitingHealthyHmrMessage = false;
37
+ let pendingConnectionOverlayStage = 'connecting';
38
+ let pendingConnectionOverlayDetail = '';
39
+ // The stage currently PAINTED on screen (set only when we actually show
40
+ // the overlay, not when we merely schedule it). Used to suppress the
41
+ // sub-perceptible offline↔reconnecting flicker during the reconnect
42
+ // retry loop — see the deferral in `connectHmr`/`tryNext`.
43
+ let shownConnectionOverlayStage = null;
44
+ // While the terminal 'offline' frame is showing, a fresh reconnect
45
+ // attempt that is refused near-instantly (the norm when the dev server
46
+ // is down — especially on the Android emulator, where connection-refused
47
+ // returns in ~1ms) would flip the overlay to 'reconnecting' and straight
48
+ // back to 'offline', producing a jarring 1-frame flicker. We defer the
49
+ // 'reconnecting' frame by this much so an instant failure (→ back to
50
+ // 'offline') or a success (→ 'synchronizing') cancels it before it ever
51
+ // paints; only a genuinely in-flight attempt surfaces 'reconnecting'.
52
+ // On iOS real connect attempts exceed this threshold, so the behaviour
53
+ // there is unchanged.
54
+ const RECONNECTING_OVER_OFFLINE_DELAY_MS = 500;
55
+ function clearConnectionOverlayTimer() {
56
+ if (connectionOverlayTimer) {
57
+ clearTimeout(connectionOverlayTimer);
58
+ connectionOverlayTimer = null;
59
+ }
60
+ }
61
+ function showConnectionOverlayNow(stage, detail) {
62
+ // Painting a stage now supersedes any scheduled (deferred) stage, so
63
+ // cancel the pending timer — otherwise a deferred 'reconnecting' could
64
+ // fire moments after we settle back on 'offline' and revive the flicker.
65
+ clearConnectionOverlayTimer();
66
+ pendingConnectionOverlayStage = stage;
67
+ pendingConnectionOverlayDetail = detail || '';
68
+ connectionOverlayVisible = true;
69
+ shownConnectionOverlayStage = stage;
70
+ setConnectionOverlayStage(stage, detail);
71
+ }
72
+ function scheduleConnectionOverlay(stage, detail, delayMs = 1200) {
73
+ pendingConnectionOverlayStage = stage;
74
+ pendingConnectionOverlayDetail = detail || '';
75
+ clearConnectionOverlayTimer();
76
+ connectionOverlayTimer = setTimeout(() => {
77
+ showConnectionOverlayNow(pendingConnectionOverlayStage, pendingConnectionOverlayDetail);
78
+ }, delayMs);
79
+ }
80
+ function updateConnectionOverlay(stage, detail) {
81
+ pendingConnectionOverlayStage = stage;
82
+ pendingConnectionOverlayDetail = detail || '';
83
+ if (connectionOverlayVisible) {
84
+ showConnectionOverlayNow(stage, detail);
85
+ }
86
+ }
87
+ function markHmrConnectionHealthy() {
88
+ awaitingHealthyHmrMessage = false;
89
+ clearConnectionOverlayTimer();
90
+ shownConnectionOverlayStage = null;
91
+ if (connectionOverlayVisible) {
92
+ connectionOverlayVisible = false;
93
+ hideConnectionOverlay();
94
+ }
95
+ }
96
+ /**
97
+ * Called by the protocol dispatcher for every parsed message. The first
98
+ * message after a (re)connect proves the pipe is healthy end-to-end, which is
99
+ * what dismisses the connection overlay — `onopen` alone doesn't (the server
100
+ * may accept the socket and still be mid-restart).
101
+ */
102
+ export function noteHealthyHmrMessage() {
103
+ if (awaitingHealthyHmrMessage) {
104
+ markHmrConnectionHealthy();
105
+ }
106
+ }
107
+ let hmrSocket = null;
108
+ let messageHandler = null;
109
+ /** Wire the protocol dispatcher. Must be set before `connectHmr()` runs. */
110
+ export function setHmrMessageHandler(handler) {
111
+ messageHandler = handler;
112
+ }
113
+ /** Best-effort send; silently drops when the socket isn't open. */
114
+ export function sendHmrMessage(payload) {
115
+ try {
116
+ hmrSocket?.send(JSON.stringify(payload));
117
+ }
118
+ catch { }
119
+ }
120
+ // Single reconnect timer. Overlapping close/timeout events used to each schedule
121
+ // their own `setTimeout(connectHmr, …)`, stacking multiple pending reconnects
122
+ // that could spawn (and leak) duplicate sockets/listeners. Route all reconnect
123
+ // scheduling through here so only one is ever pending.
124
+ let reconnectTimer = null;
125
+ function scheduleReconnect(delayMs) {
126
+ if (reconnectTimer)
127
+ clearTimeout(reconnectTimer);
128
+ reconnectTimer = setTimeout(() => {
129
+ reconnectTimer = null;
130
+ connectHmr();
131
+ }, delayMs);
132
+ }
133
+ // Public hook for NativeScript runtime to call from ImportModuleDynamicallyCallback later.
134
+ globalThis.__nsHmrRequestModule = async function (spec) {
135
+ let normalized = normalizeSpec(spec);
136
+ // Remove extension for transform lookup variants (server will try .ts/.js/.mjs)
137
+ normalized = normalized.replace(/\.(ts|js|tsx|jsx|mjs)$/i, '');
138
+ if (!normalized.startsWith('/'))
139
+ normalized = '/' + normalized;
140
+ if (normalized === '@') {
141
+ // Soft-handle instead of throwing to avoid breaking evaluation paths: return a safe empty module stub.
142
+ try {
143
+ const err = new Error('[hmr-fetch] anomalous @ spec');
144
+ const stack = err.stack || '';
145
+ hmrMetrics.invalidAtSpec = (hmrMetrics.invalidAtSpec || 0) + 1;
146
+ console.warn('[hmr-fetch] refusing to fetch bare @ spec; returning stub; original=', spec, 'stack=\n' + stack);
147
+ }
148
+ catch { }
149
+ return '/__invalid_at__.mjs';
150
+ }
151
+ const url = await requestModuleFromServer(normalized);
152
+ return url;
153
+ };
154
+ export function connectHmr() {
155
+ if (hmrSocket?.readyState === WebSocket.OPEN)
156
+ return;
157
+ if (hmrSocket?.readyState === WebSocket.CONNECTING) {
158
+ if (VERBOSE)
159
+ console.log('[hmr-client] Already connecting to HMR WebSocket, skipping');
160
+ return;
161
+ }
162
+ // A reconnect fired (or a manual connect raced one) — cancel any other pending
163
+ // reconnect so we don't end up with overlapping connect attempts.
164
+ if (reconnectTimer) {
165
+ clearTimeout(reconnectTimer);
166
+ reconnectTimer = null;
167
+ }
168
+ try {
169
+ globalThis.__NS_HMR_CLIENT_SOCKET_READY__ = false;
170
+ }
171
+ catch { }
172
+ const overlayStage = hasOpenedHmrSocket ? 'reconnecting' : 'connecting';
173
+ const baseUrl = getHMRWsUrl() || 'ws://localhost:5173/ns-hmr';
174
+ const buildCandidates = (url) => {
175
+ const candidates = [];
176
+ try {
177
+ const u = new URL(url);
178
+ const proto = u.protocol === 'wss:' ? ['wss'] : ['ws'];
179
+ const defaultPort = u.port || '5173';
180
+ // Build ordered host candidates with preference to the active HTTP origin
181
+ const orderedHosts = [];
182
+ try {
183
+ const g = getGlobalScope();
184
+ const httpOrigin = g && typeof g.__NS_HTTP_ORIGIN__ === 'string' ? g.__NS_HTTP_ORIGIN__ : undefined;
185
+ if (httpOrigin) {
186
+ try {
187
+ const ho = new URL(httpOrigin);
188
+ orderedHosts.push({
189
+ host: ho.hostname,
190
+ port: ho.port || defaultPort,
191
+ });
192
+ }
193
+ catch { }
194
+ }
195
+ }
196
+ catch { }
197
+ // From provided URL
198
+ orderedHosts.push({ host: u.hostname, port: defaultPort });
199
+ // Explicit override
200
+ try {
201
+ const h = globalThis.__NS_HMR_HOST;
202
+ if (h)
203
+ orderedHosts.push({ host: String(h), port: defaultPort });
204
+ }
205
+ catch { }
206
+ // Common fallbacks
207
+ orderedHosts.push({ host: '10.0.2.2', port: defaultPort });
208
+ orderedHosts.push({ host: 'localhost', port: defaultPort });
209
+ const seen = new Set();
210
+ for (const p of proto) {
211
+ for (const { host, port } of orderedHosts) {
212
+ const key = `${host}:${port}`;
213
+ if (seen.has(key))
214
+ continue;
215
+ seen.add(key);
216
+ const cand = `${p}://${host}:${port}${u.pathname || '/ns-hmr'}${u.search || ''}`;
217
+ candidates.push(cand);
218
+ }
219
+ }
220
+ }
221
+ catch {
222
+ candidates.push(url);
223
+ }
224
+ // Deduplicate while preserving order
225
+ const seen = new Set();
226
+ return candidates.filter((c) => (seen.has(c) ? false : (seen.add(c), true)));
227
+ };
228
+ const candidates = buildCandidates(baseUrl);
229
+ let idx = 0;
230
+ const tryNext = () => {
231
+ if (idx >= candidates.length) {
232
+ showConnectionOverlayNow('offline', 'Waiting for the Vite websocket to come back.');
233
+ console.warn('[hmr-client] All WS candidates failed:', candidates.join(', '));
234
+ scheduleReconnect(1500);
235
+ return;
236
+ }
237
+ const url = candidates[idx++];
238
+ const connectionDetail = `${overlayStage === 'reconnecting' ? 'Retrying' : 'Opening'} ${url}`;
239
+ if (overlayStage === 'reconnecting' && shownConnectionOverlayStage === 'offline') {
240
+ // Don't flip the visible 'offline' frame to 'reconnecting' for an
241
+ // attempt that may fail instantly — defer it so only a genuinely
242
+ // in-flight attempt surfaces. The deferred show is cancelled by
243
+ // showConnectionOverlayNow (offline re-show / synchronizing) the
244
+ // moment this attempt resolves. Keeps 'offline' stable instead of
245
+ // flickering once per retry. (Checking the PAINTED stage, not the
246
+ // pending one, so every candidate in the loop keeps deferring.)
247
+ scheduleConnectionOverlay(overlayStage, connectionDetail, RECONNECTING_OVER_OFFLINE_DELAY_MS);
248
+ }
249
+ else if (connectionOverlayVisible) {
250
+ updateConnectionOverlay(overlayStage, connectionDetail);
251
+ }
252
+ else {
253
+ scheduleConnectionOverlay(overlayStage, connectionDetail);
254
+ }
255
+ try {
256
+ if (VERBOSE)
257
+ console.log('[hmr-client] Connecting to HMR WebSocket:', url);
258
+ const sock = new WebSocket(url);
259
+ hmrSocket = sock;
260
+ setHttpOriginForVite(deriveHttpOrigin(url));
261
+ let opened = false;
262
+ const timeout = setTimeout(() => {
263
+ if (!opened && sock.readyState !== WebSocket.OPEN) {
264
+ try {
265
+ sock.close();
266
+ }
267
+ catch { }
268
+ if (VERBOSE)
269
+ console.warn('[hmr-client] WS connect timeout, trying next…');
270
+ tryNext();
271
+ }
272
+ }, 3500);
273
+ sock.onopen = () => {
274
+ opened = true;
275
+ clearTimeout(timeout);
276
+ clearConnectionOverlayTimer();
277
+ hasOpenedHmrSocket = true;
278
+ awaitingHealthyHmrMessage = true;
279
+ try {
280
+ globalThis.__NS_HMR_CLIENT_SOCKET_READY__ = true;
281
+ }
282
+ catch { }
283
+ // Wire the JS hot registry's server channel to this socket so
284
+ // `import.meta.hot.send(event, data)` reaches Vite plugins as
285
+ // `{ type: 'custom', event, data }` (Vite wire protocol).
286
+ try {
287
+ getNsHotRegistry().setSendToServer((event, data) => {
288
+ try {
289
+ if (sock.readyState === WebSocket.OPEN) {
290
+ sock.send(JSON.stringify({ type: 'custom', event, data }));
291
+ }
292
+ }
293
+ catch { }
294
+ });
295
+ }
296
+ catch { }
297
+ if (connectionOverlayVisible) {
298
+ showConnectionOverlayNow('synchronizing', 'Connected. Synchronizing the HMR graph.');
299
+ }
300
+ if (VERBOSE)
301
+ console.log('[hmr-client] Connected to HMR WebSocket');
302
+ // Print the active module reload mode once on first
303
+ // successful connect so the user can correlate HMR latency
304
+ // with runtime capability without grepping for protocol
305
+ // details. The banner is verbose-gated.
306
+ try {
307
+ emitHmrModeBannerOnce();
308
+ }
309
+ catch { }
310
+ };
311
+ sock.onmessage = (ev) => messageHandler?.(ev);
312
+ sock.onerror = (error) => {
313
+ clearTimeout(timeout);
314
+ console.warn('[hmr-client] WebSocket error:', (error && (error.message || error)) || error);
315
+ };
316
+ sock.onclose = (ev) => {
317
+ clearTimeout(timeout);
318
+ try {
319
+ globalThis.__NS_HMR_CLIENT_SOCKET_READY__ = false;
320
+ }
321
+ catch { }
322
+ if (!opened) {
323
+ // immediate failure during connect → try another candidate
324
+ if (VERBOSE)
325
+ console.warn('[hmr-client] WS close before open (code', ev?.code, '), trying next…');
326
+ tryNext();
327
+ }
328
+ else {
329
+ if (VERBOSE)
330
+ console.log('[hmr-client] WebSocket closed (code', ev?.code, '), will reconnect…');
331
+ scheduleConnectionOverlay('reconnecting', 'The websocket closed. Waiting to reconnect.', 700);
332
+ // try to reconnect with full candidate list again
333
+ scheduleReconnect(1000);
334
+ }
335
+ };
336
+ }
337
+ catch (e) {
338
+ console.warn('[hmr-client] Failed to connect WebSocket', e);
339
+ tryNext();
340
+ }
341
+ };
342
+ tryNext();
343
+ }
344
+ //# sourceMappingURL=ws-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-transport.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/client/ws-transport.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { runAngularLinker } from './shared-linker.js';
2
2
  import { containsRealNgDeclare } from './util.js';
3
+ import { recordLinkerHit } from './linker-stats.js';
3
4
  function normalizeAngularLinkerId(id) {
4
5
  return id.split('?', 1)[0].replace(/\\/g, '/');
5
6
  }
@@ -48,6 +49,7 @@ export function angularLinkerVitePlugin(projectRoot) {
48
49
  return null;
49
50
  const linked = await runAngularLinker(code, { filename: cleanId, projectRoot });
50
51
  if (linked) {
52
+ recordLinkerHit('vite-load');
51
53
  if (isDebug())
52
54
  console.log('[ns-angular-linker][vite-load] linked', cleanId);
53
55
  return { code: linked, map: null };
@@ -69,6 +71,7 @@ export function angularLinkerVitePlugin(projectRoot) {
69
71
  try {
70
72
  const linked = await runAngularLinker(code, { filename: cleanId, projectRoot, freshPlugin: true });
71
73
  if (linked) {
74
+ recordLinkerHit('vite');
72
75
  if (isDebug())
73
76
  console.log('[ns-angular-linker][vite] linked', cleanId);
74
77
  return { code: linked, map: null };
@@ -96,6 +99,7 @@ export function angularLinkerVitePluginPost(projectRoot) {
96
99
  const filename = id.split('?', 1)[0];
97
100
  const linked = await runAngularLinker(code, { filename, projectRoot });
98
101
  if (linked) {
102
+ recordLinkerHit('vite-post');
99
103
  if (isDebug())
100
104
  console.log('[ns-angular-linker][vite-post] linked', filename);
101
105
  return { code: linked, map: null };
@@ -1 +1 @@
1
- {"version":3,"file":"angular-linker.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/build/angular-linker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular-linker.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/build/angular-linker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Per-layer hit counters for the stacked Angular linker passes.
3
+ *
4
+ * Five layers can each link partial declarations (vite pre, rollup pre,
5
+ * vite post, renderChunk, generateBundle). Some exist purely as safety nets
6
+ * and may never fire for a given flavor/build mode. Before any layer can be
7
+ * removed we need evidence across the flavor matrix — these counters make a
8
+ * build print exactly which layers did work, without grepping the per-file
9
+ * VITE_DEBUG_LOGS output.
10
+ */
11
+ export declare function recordLinkerHit(layer: string): void;
12
+ /**
13
+ * Print a one-line summary of which linker layers linked anything this build.
14
+ * Called from the generateBundle-phase linker (the last layer to run). Prints
15
+ * only when at least one layer fired, or unconditionally under VITE_DEBUG_LOGS
16
+ * so a zero-hit matrix run is still observable.
17
+ */
18
+ export declare function reportLinkerLayerStats(): void;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Per-layer hit counters for the stacked Angular linker passes.
3
+ *
4
+ * Five layers can each link partial declarations (vite pre, rollup pre,
5
+ * vite post, renderChunk, generateBundle). Some exist purely as safety nets
6
+ * and may never fire for a given flavor/build mode. Before any layer can be
7
+ * removed we need evidence across the flavor matrix — these counters make a
8
+ * build print exactly which layers did work, without grepping the per-file
9
+ * VITE_DEBUG_LOGS output.
10
+ */
11
+ const layerHits = new Map();
12
+ export function recordLinkerHit(layer) {
13
+ layerHits.set(layer, (layerHits.get(layer) ?? 0) + 1);
14
+ }
15
+ /**
16
+ * Print a one-line summary of which linker layers linked anything this build.
17
+ * Called from the generateBundle-phase linker (the last layer to run). Prints
18
+ * only when at least one layer fired, or unconditionally under VITE_DEBUG_LOGS
19
+ * so a zero-hit matrix run is still observable.
20
+ */
21
+ export function reportLinkerLayerStats() {
22
+ const debug = process.env.VITE_DEBUG_LOGS === '1' || process.env.VITE_DEBUG_LOGS === 'true';
23
+ const total = [...layerHits.values()].reduce((sum, n) => sum + n, 0);
24
+ if (total === 0 && !debug)
25
+ return;
26
+ const parts = ['vite-load', 'vite', 'vite-post', 'rollup-load', 'rollup', 'render', 'post'].map((layer) => `${layer}=${layerHits.get(layer) ?? 0}`);
27
+ console.log(`[ns-angular-linker] layer hits this build: ${parts.join(' ')}`);
28
+ }
29
+ //# sourceMappingURL=linker-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linker-stats.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/build/linker-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,KAAa;IAC5C,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,CAAC;IAC5F,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO;IAClC,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpJ,OAAO,CAAC,GAAG,CAAC,8CAA8C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Plugin } from 'vite';
2
+ export interface TsFallbackTransformPluginOptions {
3
+ verbose?: boolean;
4
+ }
5
+ export declare function tsFallbackTransformPlugin(opts?: TsFallbackTransformPluginOptions): Plugin;
@@ -0,0 +1,138 @@
1
+ // Safety-net TypeScript fallback transform.
2
+ //
3
+ // Problem: In HMR mode (where `useAngularCompilationAPI = false`), the
4
+ // `@analogjs/vite-plugin-angular` `config` hook forcibly sets `oxc: false` on
5
+ // the Vite config (see `angular-vite-plugin.js`:
6
+ // `const oxc = pluginOptions.useAngularCompilationAPI ? undefined : (config.oxc ?? false);`).
7
+ // That disables Vite's built-in oxc TypeScript transformer for the whole dev
8
+ // session. The Analog plugin then expects its own `fileEmitter` to strip types
9
+ // from every `.ts` file in the project — but `fileEmitter` only knows about
10
+ // files that are part of the Angular TypeScript program (anything imported
11
+ // directly, or referenced via `templateUrl` / `styleUrls` from a decorated
12
+ // class).
13
+ //
14
+ // Worker entry files fall outside the program. They are only loaded via
15
+ // `new Worker(new URL('./foo.worker', import.meta.url))`, which is NOT an
16
+ // import — it's a URL constructor expression the device resolves at runtime.
17
+ // `fileEmitter(id)` returns nothing for those files, the Analog plugin's
18
+ // transform returns `undefined`, oxc doesn't run (because Analog disabled it),
19
+ // and the raw `.ts` source reaches the device with type annotations intact.
20
+ // V8's parser then chokes on the first `(x: Type)` parameter annotation with
21
+ // `SyntaxError: Unexpected token ':'`.
22
+ //
23
+ // The fix is a small post-enforce transform that re-runs Vite's own
24
+ // `transformWithOxc` on any `.ts`/`.tsx` file that still looks like raw
25
+ // TypeScript after the rest of the pipeline is done. For already-compiled
26
+ // Angular output (pure JS), the detection heuristic short-circuits and we
27
+ // never invoke oxc, so the fast path stays fast.
28
+ //
29
+ // Scope intentionally narrow:
30
+ // * `enforce: 'post'` — only sees final code after every other plugin had a
31
+ // chance to transform.
32
+ // * `apply: 'serve'` — dev/HMR only. Production builds use Rolldown which
33
+ // handles TS natively without needing this net.
34
+ // * Skips `node_modules` / `.vite` — third-party code has its own pipeline,
35
+ // and hitting every transitive dep would be wasteful.
36
+ // * Skips files containing Angular decorators (`@Component`, `@Injectable`,
37
+ // `@NgModule`, `@Directive`, `@Pipe`). Those files belong to the Angular
38
+ // program; if they fell through the Angular plugin we surface Angular's
39
+ // own `"contains Angular decorators but is not in the TypeScript program"`
40
+ // warning rather than silently transforming them with oxc (which would
41
+ // emit a `@oxc-project/runtime/helpers/decorate` import that the app does
42
+ // not depend on, breaking Vite's import-analysis pass).
43
+ // * Regex-based detection — catches the tokens V8 would actually reject.
44
+ // False positives (running oxc on valid JS) are harmless because oxc with
45
+ // `lang: 'ts'` is a no-op on JS; false negatives would only surface as the
46
+ // same error the fix is designed to prevent, so the detector errs toward
47
+ // running the transform when in doubt.
48
+ const TS_ONLY_SYNTAX_RE = new RegExp([
49
+ // `import type { … } from '…'` / `export type { … } from '…'`
50
+ String.raw `\b(?:import|export)\s+type\s`,
51
+ // `interface Foo { … }`
52
+ String.raw `\binterface\s+[A-Z_$][\w$]*\s*[<{]`,
53
+ // `type Foo = …`
54
+ String.raw `\btype\s+[A-Z_$][\w$]*\s*[<=]`,
55
+ // `as Type` assertions — restrict right-hand side to common primitives
56
+ // or PascalCase identifiers to avoid catching unrelated tokens.
57
+ String.raw `\bas\s+(?:string|number|boolean|any|unknown|never|void|[A-Z][\w$]*)\b`,
58
+ // Parameter / destructured type annotations: `(msg: any)`, `(x: T, y: U)`.
59
+ // Anchored to `(` or `,` so we don't match object literal keys like `{ a: 1 }`.
60
+ String.raw `[(,]\s*[\w$]+\s*\??\s*:\s*(?:string|number|boolean|any|unknown|never|void|null|undefined|object|[A-Z][\w$]*(?:<[^>]*>)?(?:\[\])?)\b`,
61
+ // Variable type annotations: `let x: T = …` / `const y: T`
62
+ String.raw `\b(?:const|let|var)\s+[\w$]+\s*:\s*[\w$<>[\]|&., ]+\s*[;=]`,
63
+ // Return type annotations on arrow functions: `): T =>`
64
+ String.raw `\)\s*:\s*(?:string|number|boolean|any|unknown|never|void|[A-Z][\w$]*(?:<[^>]*>)?)\s*(?:=>|\{)`,
65
+ ].join('|'));
66
+ // Decorator shapes that mean "the Angular plugin owns this file, stay out of
67
+ // its way." We do NOT try to compile these ourselves even if the Angular
68
+ // plugin's `fileEmitter` didn't produce output for them — oxc would rewrite
69
+ // the decorators into `import _decorate from "@oxc-project/runtime/helpers/decorate"`
70
+ // calls, Vite's import-analysis would fail to resolve that helper package,
71
+ // and we'd turn a harmless "not in TypeScript program" warning into a fatal
72
+ // import error. Better to let Angular's own warning surface and leave the
73
+ // code untouched.
74
+ const ANGULAR_DECORATOR_RE = /@(?:Component|Directive|Injectable|NgModule|Pipe)\s*\(/;
75
+ const TS_FALLBACK_SKIP_ID_RE = /(?:^|\/)(?:node_modules|\.vite)\//;
76
+ export function tsFallbackTransformPlugin(opts) {
77
+ const { verbose } = opts || {};
78
+ // Cached after the first successful import so repeated transforms don't
79
+ // pay the dynamic-import cost. `null` = not loaded yet; `false` = load
80
+ // attempted and failed (older Vite with no oxc export — we'll skip).
81
+ let cachedTransformWithOxc = null;
82
+ return {
83
+ name: 'nativescript-ts-fallback-transform',
84
+ enforce: 'post',
85
+ apply: 'serve',
86
+ async transform(code, id) {
87
+ if (cachedTransformWithOxc === false)
88
+ return null;
89
+ const cleanId = id.split('?', 1)[0];
90
+ if (!cleanId || !/\.(m?ts|[jt]sx)$/.test(cleanId))
91
+ return null;
92
+ if (TS_FALLBACK_SKIP_ID_RE.test(cleanId))
93
+ return null;
94
+ if (ANGULAR_DECORATOR_RE.test(code))
95
+ return null;
96
+ if (!TS_ONLY_SYNTAX_RE.test(code))
97
+ return null;
98
+ if (cachedTransformWithOxc === null) {
99
+ try {
100
+ // Dynamic import keeps this plugin cross-version-safe: older
101
+ // Vite installs without `transformWithOxc` (pre-Rolldown
102
+ // builds) cleanly disable this fallback instead of crashing.
103
+ const vite = await import('vite');
104
+ if (typeof vite.transformWithOxc === 'function') {
105
+ cachedTransformWithOxc = vite.transformWithOxc;
106
+ }
107
+ else {
108
+ cachedTransformWithOxc = false;
109
+ return null;
110
+ }
111
+ }
112
+ catch {
113
+ cachedTransformWithOxc = false;
114
+ return null;
115
+ }
116
+ }
117
+ try {
118
+ const lang = cleanId.endsWith('tsx') ? 'tsx' : cleanId.endsWith('jsx') ? 'jsx' : 'ts';
119
+ const result = await cachedTransformWithOxc(code, cleanId, { lang });
120
+ if (!result || typeof result.code !== 'string')
121
+ return null;
122
+ if (verbose) {
123
+ // eslint-disable-next-line no-console
124
+ console.log(`[ns-ts-fallback] type-stripped ${cleanId}`);
125
+ }
126
+ return { code: result.code, map: result.map ?? null };
127
+ }
128
+ catch (err) {
129
+ if (verbose) {
130
+ // eslint-disable-next-line no-console
131
+ console.warn(`[ns-ts-fallback] transformWithOxc failed for ${cleanId}:`, err);
132
+ }
133
+ return null;
134
+ }
135
+ },
136
+ };
137
+ }
138
+ //# sourceMappingURL=ts-fallback-transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ts-fallback-transform.js","sourceRoot":"","sources":["../../../../../../../packages/vite/hmr/frameworks/angular/build/ts-fallback-transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Plugin } from 'vite';
2
+ export interface AngularWorkerUrlPreservePluginOptions {
3
+ verbose?: boolean;
4
+ }
5
+ export declare function angularWorkerUrlPreservePlugin(opts?: AngularWorkerUrlPreservePluginOptions): Plugin;