@nativescript/vite 8.0.0-alpha.3 → 8.0.0-alpha.30

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 (295) hide show
  1. package/README.md +51 -11
  2. package/configuration/angular.d.ts +34 -1
  3. package/configuration/angular.js +369 -159
  4. package/configuration/angular.js.map +1 -1
  5. package/configuration/base.js +184 -14
  6. package/configuration/base.js.map +1 -1
  7. package/configuration/javascript.js +5 -72
  8. package/configuration/javascript.js.map +1 -1
  9. package/configuration/solid.js +27 -1
  10. package/configuration/solid.js.map +1 -1
  11. package/configuration/typescript.js +5 -75
  12. package/configuration/typescript.js.map +1 -1
  13. package/helpers/angular/angular-linker.d.ts +5 -6
  14. package/helpers/angular/angular-linker.js +36 -121
  15. package/helpers/angular/angular-linker.js.map +1 -1
  16. package/helpers/angular/inject-component-hmr-registration.d.ts +112 -0
  17. package/helpers/angular/inject-component-hmr-registration.js +291 -0
  18. package/helpers/angular/inject-component-hmr-registration.js.map +1 -0
  19. package/helpers/angular/inject-hmr-vite-ignore.d.ts +75 -0
  20. package/helpers/angular/inject-hmr-vite-ignore.js +221 -0
  21. package/helpers/angular/inject-hmr-vite-ignore.js.map +1 -0
  22. package/helpers/angular/inline-decorator-component-templates.js +1 -170
  23. package/helpers/angular/inline-decorator-component-templates.js.map +1 -1
  24. package/helpers/angular/js-lexer.d.ts +4 -0
  25. package/helpers/angular/js-lexer.js +182 -0
  26. package/helpers/angular/js-lexer.js.map +1 -0
  27. package/helpers/angular/shared-linker.d.ts +31 -3
  28. package/helpers/angular/shared-linker.js +67 -14
  29. package/helpers/angular/shared-linker.js.map +1 -1
  30. package/helpers/angular/synthesize-decorator-ctor-parameters.js +2 -170
  31. package/helpers/angular/synthesize-decorator-ctor-parameters.js.map +1 -1
  32. package/helpers/angular/synthesize-injectable-factories.js +1 -174
  33. package/helpers/angular/synthesize-injectable-factories.js.map +1 -1
  34. package/helpers/angular/util.d.ts +1 -0
  35. package/helpers/angular/util.js +88 -0
  36. package/helpers/angular/util.js.map +1 -1
  37. package/helpers/app-components.d.ts +2 -1
  38. package/helpers/app-components.js.map +1 -1
  39. package/helpers/app-css-state.d.ts +8 -0
  40. package/helpers/app-css-state.js +8 -0
  41. package/helpers/app-css-state.js.map +1 -0
  42. package/helpers/bundler-context.d.ts +11 -0
  43. package/helpers/bundler-context.js +71 -0
  44. package/helpers/bundler-context.js.map +1 -0
  45. package/helpers/config-as-json.js +10 -0
  46. package/helpers/config-as-json.js.map +1 -1
  47. package/helpers/dev-host.d.ts +341 -0
  48. package/helpers/dev-host.js +617 -0
  49. package/helpers/dev-host.js.map +1 -0
  50. package/helpers/esbuild-platform-resolver.js +4 -1
  51. package/helpers/esbuild-platform-resolver.js.map +1 -1
  52. package/helpers/global-defines.d.ts +51 -0
  53. package/helpers/global-defines.js +77 -0
  54. package/helpers/global-defines.js.map +1 -1
  55. package/helpers/hmr-scope.d.ts +26 -0
  56. package/helpers/hmr-scope.js +67 -0
  57. package/helpers/hmr-scope.js.map +1 -0
  58. package/helpers/init.js +0 -18
  59. package/helpers/init.js.map +1 -1
  60. package/helpers/logging.d.ts +1 -0
  61. package/helpers/logging.js +63 -3
  62. package/helpers/logging.js.map +1 -1
  63. package/helpers/main-entry.d.ts +2 -1
  64. package/helpers/main-entry.js +430 -47
  65. package/helpers/main-entry.js.map +1 -1
  66. package/helpers/nativeclass-esbuild-plugin.d.ts +2 -1
  67. package/helpers/nativeclass-esbuild-plugin.js.map +1 -1
  68. package/helpers/nativeclass-transform.js.map +1 -1
  69. package/helpers/nativeclass-transformer-plugin.d.ts +9 -2
  70. package/helpers/nativeclass-transformer-plugin.js +157 -14
  71. package/helpers/nativeclass-transformer-plugin.js.map +1 -1
  72. package/helpers/nativescript-package-resolver.js +8 -3
  73. package/helpers/nativescript-package-resolver.js.map +1 -1
  74. package/helpers/normalize-id.d.ts +42 -0
  75. package/helpers/normalize-id.js +60 -0
  76. package/helpers/normalize-id.js.map +1 -0
  77. package/helpers/ns-core-url.d.ts +88 -0
  78. package/helpers/ns-core-url.js +191 -0
  79. package/helpers/ns-core-url.js.map +1 -0
  80. package/helpers/package-platform-aliases.js +4 -3
  81. package/helpers/package-platform-aliases.js.map +1 -1
  82. package/helpers/platform-types.d.ts +2 -0
  83. package/helpers/platform-types.js +2 -0
  84. package/helpers/platform-types.js.map +1 -0
  85. package/helpers/prelink-angular.js +12 -33
  86. package/helpers/prelink-angular.js.map +1 -1
  87. package/helpers/project.d.ts +35 -0
  88. package/helpers/project.js +120 -2
  89. package/helpers/project.js.map +1 -1
  90. package/helpers/resolver.js +17 -2
  91. package/helpers/resolver.js.map +1 -1
  92. package/helpers/solid-jsx-deps.d.ts +15 -0
  93. package/helpers/solid-jsx-deps.js +178 -0
  94. package/helpers/solid-jsx-deps.js.map +1 -0
  95. package/helpers/ts-config-paths.d.ts +14 -0
  96. package/helpers/ts-config-paths.js +89 -8
  97. package/helpers/ts-config-paths.js.map +1 -1
  98. package/helpers/typescript-check.d.ts +2 -1
  99. package/helpers/typescript-check.js.map +1 -1
  100. package/helpers/workers.d.ts +20 -19
  101. package/helpers/workers.js +624 -4
  102. package/helpers/workers.js.map +1 -1
  103. package/hmr/client/css-handler.d.ts +1 -0
  104. package/hmr/client/css-handler.js +33 -20
  105. package/hmr/client/css-handler.js.map +1 -1
  106. package/hmr/client/css-update-overlay.d.ts +18 -0
  107. package/hmr/client/css-update-overlay.js +27 -0
  108. package/hmr/client/css-update-overlay.js.map +1 -0
  109. package/hmr/client/hmr-pending-overlay.d.ts +27 -0
  110. package/hmr/client/hmr-pending-overlay.js +50 -0
  111. package/hmr/client/hmr-pending-overlay.js.map +1 -0
  112. package/hmr/client/index.js +419 -15
  113. package/hmr/client/index.js.map +1 -1
  114. package/hmr/client/utils.d.ts +6 -1
  115. package/hmr/client/utils.js +184 -8
  116. package/hmr/client/utils.js.map +1 -1
  117. package/hmr/client/vue-sfc-update-overlay.d.ts +82 -0
  118. package/hmr/client/vue-sfc-update-overlay.js +133 -0
  119. package/hmr/client/vue-sfc-update-overlay.js.map +1 -0
  120. package/hmr/entry-runtime.d.ts +2 -1
  121. package/hmr/entry-runtime.js +252 -65
  122. package/hmr/entry-runtime.js.map +1 -1
  123. package/hmr/frameworks/angular/client/index.d.ts +1 -0
  124. package/hmr/frameworks/angular/client/index.js +778 -20
  125. package/hmr/frameworks/angular/client/index.js.map +1 -1
  126. package/hmr/frameworks/angular/server/linker.js +1 -4
  127. package/hmr/frameworks/angular/server/linker.js.map +1 -1
  128. package/hmr/frameworks/angular/server/strategy.js +13 -15
  129. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  130. package/hmr/frameworks/solid/server/strategy.js +3 -18
  131. package/hmr/frameworks/solid/server/strategy.js.map +1 -1
  132. package/hmr/frameworks/typescript/server/strategy.js +2 -15
  133. package/hmr/frameworks/typescript/server/strategy.js.map +1 -1
  134. package/hmr/frameworks/vue/client/index.js +30 -199
  135. package/hmr/frameworks/vue/client/index.js.map +1 -1
  136. package/hmr/helpers/ast-normalizer.js +52 -5
  137. package/hmr/helpers/ast-normalizer.js.map +1 -1
  138. package/hmr/helpers/cjs-named-exports.d.ts +23 -0
  139. package/hmr/helpers/cjs-named-exports.js +152 -0
  140. package/hmr/helpers/cjs-named-exports.js.map +1 -0
  141. package/hmr/helpers/package-exports.d.ts +16 -0
  142. package/hmr/helpers/package-exports.js +396 -0
  143. package/hmr/helpers/package-exports.js.map +1 -0
  144. package/hmr/server/angular-root-component.d.ts +79 -0
  145. package/hmr/server/angular-root-component.js +149 -0
  146. package/hmr/server/angular-root-component.js.map +1 -0
  147. package/hmr/server/constants.js +13 -4
  148. package/hmr/server/constants.js.map +1 -1
  149. package/hmr/server/core-sanitize.d.ts +90 -7
  150. package/hmr/server/core-sanitize.js +211 -56
  151. package/hmr/server/core-sanitize.js.map +1 -1
  152. package/hmr/server/framework-strategy.d.ts +9 -19
  153. package/hmr/server/hmr-module-graph.d.ts +37 -0
  154. package/hmr/server/hmr-module-graph.js +214 -0
  155. package/hmr/server/hmr-module-graph.js.map +1 -0
  156. package/hmr/server/import-map.js +60 -8
  157. package/hmr/server/import-map.js.map +1 -1
  158. package/hmr/server/index.js +1 -0
  159. package/hmr/server/index.js.map +1 -1
  160. package/hmr/server/ns-core-cjs-shape.d.ts +204 -0
  161. package/hmr/server/ns-core-cjs-shape.js +271 -0
  162. package/hmr/server/ns-core-cjs-shape.js.map +1 -0
  163. package/hmr/server/ns-rt-bridge.d.ts +51 -0
  164. package/hmr/server/ns-rt-bridge.js +131 -0
  165. package/hmr/server/ns-rt-bridge.js.map +1 -0
  166. package/hmr/server/ns-rt-route.d.ts +5 -0
  167. package/hmr/server/ns-rt-route.js +35 -0
  168. package/hmr/server/ns-rt-route.js.map +1 -0
  169. package/hmr/server/perf-instrumentation.d.ts +114 -0
  170. package/hmr/server/perf-instrumentation.js +195 -0
  171. package/hmr/server/perf-instrumentation.js.map +1 -0
  172. package/hmr/server/require-guard.d.ts +1 -0
  173. package/hmr/server/require-guard.js +12 -0
  174. package/hmr/server/require-guard.js.map +1 -0
  175. package/hmr/server/route-helpers.d.ts +7 -0
  176. package/hmr/server/route-helpers.js +13 -0
  177. package/hmr/server/route-helpers.js.map +1 -0
  178. package/hmr/server/server-origin.d.ts +12 -0
  179. package/hmr/server/server-origin.js +66 -0
  180. package/hmr/server/server-origin.js.map +1 -0
  181. package/hmr/server/shared-transform-request.js +12 -5
  182. package/hmr/server/shared-transform-request.js.map +1 -1
  183. package/hmr/server/vendor-bare-module-shims.d.ts +4 -0
  184. package/hmr/server/vendor-bare-module-shims.js +80 -0
  185. package/hmr/server/vendor-bare-module-shims.js.map +1 -0
  186. package/hmr/server/vite-plugin.js +60 -42
  187. package/hmr/server/vite-plugin.js.map +1 -1
  188. package/hmr/server/websocket-angular-entry.js +1 -1
  189. package/hmr/server/websocket-angular-entry.js.map +1 -1
  190. package/hmr/server/websocket-angular-hot-update.d.ts +17 -0
  191. package/hmr/server/websocket-angular-hot-update.js +176 -2
  192. package/hmr/server/websocket-angular-hot-update.js.map +1 -1
  193. package/hmr/server/websocket-core-bridge.d.ts +41 -6
  194. package/hmr/server/websocket-core-bridge.js +72 -75
  195. package/hmr/server/websocket-core-bridge.js.map +1 -1
  196. package/hmr/server/websocket-css-hot-update.d.ts +33 -0
  197. package/hmr/server/websocket-css-hot-update.js +65 -0
  198. package/hmr/server/websocket-css-hot-update.js.map +1 -0
  199. package/hmr/server/websocket-device-transform.d.ts +21 -0
  200. package/hmr/server/websocket-device-transform.js +1570 -0
  201. package/hmr/server/websocket-device-transform.js.map +1 -0
  202. package/hmr/server/websocket-graph-upsert.d.ts +15 -0
  203. package/hmr/server/websocket-graph-upsert.js +20 -0
  204. package/hmr/server/websocket-graph-upsert.js.map +1 -1
  205. package/hmr/server/websocket-hmr-pending.d.ts +43 -0
  206. package/hmr/server/websocket-hmr-pending.js +55 -0
  207. package/hmr/server/websocket-hmr-pending.js.map +1 -0
  208. package/hmr/server/websocket-hot-update.d.ts +51 -0
  209. package/hmr/server/websocket-hot-update.js +1160 -0
  210. package/hmr/server/websocket-hot-update.js.map +1 -0
  211. package/hmr/server/websocket-import-map-route.d.ts +15 -0
  212. package/hmr/server/websocket-import-map-route.js +44 -0
  213. package/hmr/server/websocket-import-map-route.js.map +1 -0
  214. package/hmr/server/websocket-module-bindings.js +3 -3
  215. package/hmr/server/websocket-module-bindings.js.map +1 -1
  216. package/hmr/server/websocket-module-specifiers.d.ts +66 -2
  217. package/hmr/server/websocket-module-specifiers.js +202 -19
  218. package/hmr/server/websocket-module-specifiers.js.map +1 -1
  219. package/hmr/server/websocket-ns-core.d.ts +21 -0
  220. package/hmr/server/websocket-ns-core.js +305 -0
  221. package/hmr/server/websocket-ns-core.js.map +1 -0
  222. package/hmr/server/websocket-ns-entry.d.ts +22 -0
  223. package/hmr/server/websocket-ns-entry.js +150 -0
  224. package/hmr/server/websocket-ns-entry.js.map +1 -0
  225. package/hmr/server/websocket-ns-m-paths.d.ts +3 -0
  226. package/hmr/server/websocket-ns-m-paths.js +92 -0
  227. package/hmr/server/websocket-ns-m-paths.js.map +1 -0
  228. package/hmr/server/websocket-ns-m-request.d.ts +45 -0
  229. package/hmr/server/websocket-ns-m-request.js +196 -0
  230. package/hmr/server/websocket-ns-m-request.js.map +1 -0
  231. package/hmr/server/websocket-ns-m.d.ts +34 -0
  232. package/hmr/server/websocket-ns-m.js +853 -0
  233. package/hmr/server/websocket-ns-m.js.map +1 -0
  234. package/hmr/server/websocket-served-module-helpers.d.ts +39 -0
  235. package/hmr/server/websocket-served-module-helpers.js +654 -0
  236. package/hmr/server/websocket-served-module-helpers.js.map +1 -0
  237. package/hmr/server/websocket-sfc.d.ts +24 -0
  238. package/hmr/server/websocket-sfc.js +1223 -0
  239. package/hmr/server/websocket-sfc.js.map +1 -0
  240. package/hmr/server/websocket-txn.d.ts +6 -0
  241. package/hmr/server/websocket-txn.js +39 -0
  242. package/hmr/server/websocket-txn.js.map +1 -0
  243. package/hmr/server/websocket-vendor-unifier.d.ts +10 -0
  244. package/hmr/server/websocket-vendor-unifier.js +45 -0
  245. package/hmr/server/websocket-vendor-unifier.js.map +1 -0
  246. package/hmr/server/websocket.d.ts +0 -30
  247. package/hmr/server/websocket.js +599 -6038
  248. package/hmr/server/websocket.js.map +1 -1
  249. package/hmr/shared/runtime/boot-placeholder-ui.d.ts +69 -0
  250. package/hmr/shared/runtime/boot-placeholder-ui.js +101 -0
  251. package/hmr/shared/runtime/boot-placeholder-ui.js.map +1 -0
  252. package/hmr/shared/runtime/boot-progress.d.ts +40 -0
  253. package/hmr/shared/runtime/boot-progress.js +128 -0
  254. package/hmr/shared/runtime/boot-progress.js.map +1 -0
  255. package/hmr/shared/runtime/boot-timeline.d.ts +18 -0
  256. package/hmr/shared/runtime/boot-timeline.js +52 -0
  257. package/hmr/shared/runtime/boot-timeline.js.map +1 -0
  258. package/hmr/shared/runtime/dev-overlay-snapshots.d.ts +31 -0
  259. package/hmr/shared/runtime/dev-overlay-snapshots.js +324 -0
  260. package/hmr/shared/runtime/dev-overlay-snapshots.js.map +1 -0
  261. package/hmr/shared/runtime/dev-overlay.d.ts +75 -26
  262. package/hmr/shared/runtime/dev-overlay.js +990 -260
  263. package/hmr/shared/runtime/dev-overlay.js.map +1 -1
  264. package/hmr/shared/runtime/module-provenance.js +1 -4
  265. package/hmr/shared/runtime/module-provenance.js.map +1 -1
  266. package/hmr/shared/runtime/root-placeholder-view.d.ts +19 -0
  267. package/hmr/shared/runtime/root-placeholder-view.js +310 -0
  268. package/hmr/shared/runtime/root-placeholder-view.js.map +1 -0
  269. package/hmr/shared/runtime/root-placeholder.js +352 -194
  270. package/hmr/shared/runtime/root-placeholder.js.map +1 -1
  271. package/hmr/shared/runtime/session-bootstrap.js +164 -1
  272. package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
  273. package/hmr/shared/runtime/vendor-bootstrap.js +1 -9
  274. package/hmr/shared/runtime/vendor-bootstrap.js.map +1 -1
  275. package/hmr/shared/vendor/manifest-collect.d.ts +32 -0
  276. package/hmr/shared/vendor/manifest-collect.js +512 -0
  277. package/hmr/shared/vendor/manifest-collect.js.map +1 -0
  278. package/hmr/shared/vendor/manifest-loader.d.ts +2 -1
  279. package/hmr/shared/vendor/manifest-loader.js +3 -2
  280. package/hmr/shared/vendor/manifest-loader.js.map +1 -1
  281. package/hmr/shared/vendor/manifest.d.ts +1 -5
  282. package/hmr/shared/vendor/manifest.js +102 -739
  283. package/hmr/shared/vendor/manifest.js.map +1 -1
  284. package/hmr/shared/vendor/vendor-device-shim.d.ts +1 -0
  285. package/hmr/shared/vendor/vendor-device-shim.js +208 -0
  286. package/hmr/shared/vendor/vendor-device-shim.js.map +1 -0
  287. package/hmr/shared/vendor/vendor-esbuild-plugins.d.ts +16 -0
  288. package/hmr/shared/vendor/vendor-esbuild-plugins.js +203 -0
  289. package/hmr/shared/vendor/vendor-esbuild-plugins.js.map +1 -0
  290. package/index.d.ts +1 -0
  291. package/index.js +5 -0
  292. package/index.js.map +1 -1
  293. package/package.json +55 -11
  294. package/runtime/core-aliases-early.js +17 -41
  295. package/runtime/core-aliases-early.js.map +1 -1
@@ -0,0 +1,150 @@
1
+ import { createRequire } from 'node:module';
2
+ import { existsSync, readFileSync } from 'fs';
3
+ import * as path from 'path';
4
+ import babelCore from '@babel/core';
5
+ import { getPackageJson, getProjectFilePath } from '../../helpers/project.js';
6
+ import { REQUIRE_GUARD_SNIPPET } from './require-guard.js';
7
+ import { setDeviceModuleHeaders } from './route-helpers.js';
8
+ // Lazily loaded only for the source-tree fallback below (transform
9
+ // entry-runtime.ts on the fly when the built .js isn't present).
10
+ const pluginTransformTypescript = (() => {
11
+ const requireFromHere = createRequire(import.meta.url);
12
+ const loaded = requireFromHere('@babel/plugin-transform-typescript');
13
+ return loaded?.default || loaded;
14
+ })();
15
+ /**
16
+ * Registers the device bootstrap endpoints:
17
+ * - `GET /ns/entry-rt[?v=<ver>]` — serves the compiled entry runtime module
18
+ * (built `entry-runtime.js`, or a transformed `entry-runtime.ts` fallback), and
19
+ * - `GET /ns/entry[/<ver>]` — a script-safe wrapper that fetches the entry
20
+ * runtime and starts the app with `{ origin, main, ver }`.
21
+ */
22
+ export function registerNsEntryRoutes(server, options) {
23
+ const verbose = options.verbose;
24
+ const APP_ROOT_DIR = options.appRootDir;
25
+ const DEFAULT_MAIN_ENTRY = options.defaultMainEntry;
26
+ const DEFAULT_MAIN_ENTRY_VIRTUAL = options.defaultMainEntryVirtual;
27
+ const getGraphVersion = options.getGraphVersion;
28
+ const getServerOrigin = options.getServerOrigin;
29
+ // 2.6a) Serve compiled entry runtime module: GET /ns/entry-rt[?v=<ver>]
30
+ server.middlewares.use(async (req, res, next) => {
31
+ try {
32
+ const urlObj = new URL(req.url || '', 'http://localhost');
33
+ if (!(urlObj.pathname === '/ns/entry-rt'))
34
+ return next();
35
+ if (verbose) {
36
+ const ra = req.socket?.remoteAddress;
37
+ const rp = req.socket?.remotePort;
38
+ console.log('[hmr-http] GET /ns/entry-rt from', ra + (rp ? ':' + rp : ''));
39
+ }
40
+ setDeviceModuleHeaders(res);
41
+ let content = '';
42
+ try {
43
+ const _req = createRequire(import.meta.url);
44
+ const entryRtPath = _req.resolve('@nativescript/vite/hmr/entry-runtime.js');
45
+ content = readFileSync(entryRtPath, 'utf-8');
46
+ }
47
+ catch (e) {
48
+ // .js not found (source tree without build) — transform .ts on the fly
49
+ try {
50
+ const tsPath = path.resolve(path.dirname(new URL(import.meta.url).pathname), '..', 'entry-runtime.ts');
51
+ if (existsSync(tsPath)) {
52
+ const tsSource = readFileSync(tsPath, 'utf-8');
53
+ const result = babelCore.transformSync(tsSource, {
54
+ filename: tsPath,
55
+ plugins: [[pluginTransformTypescript, { isTSX: false, allowDeclareFields: true }]],
56
+ sourceType: 'module',
57
+ });
58
+ if (result?.code) {
59
+ content = result.code;
60
+ }
61
+ }
62
+ }
63
+ catch (e2) {
64
+ if (verbose)
65
+ console.warn('[hmr-http] entry-runtime.ts transform failed', e2);
66
+ }
67
+ if (!content) {
68
+ content = 'export default async function start(){ console.error("[/ns/entry-rt] not found"); }\n';
69
+ }
70
+ }
71
+ if (verbose)
72
+ console.log('[hmr-http] /ns/entry-rt serving', content.length, 'bytes');
73
+ res.statusCode = 200;
74
+ res.end(content);
75
+ }
76
+ catch (e) {
77
+ console.warn('[hmr-http] /ns/entry-rt error', e);
78
+ next();
79
+ }
80
+ });
81
+ // 2.6b) HTTP-only app entry endpoint: GET /ns/entry[/<ver>]
82
+ // Thin wrapper that imports the compiled entry runtime and starts it with parameters.
83
+ server.middlewares.use(async (req, res, next) => {
84
+ try {
85
+ const urlObj = new URL(req.url || '', 'http://localhost');
86
+ if (!(urlObj.pathname === '/ns/entry' || /^\/ns\/entry\/[\d]+$/.test(urlObj.pathname)))
87
+ return next();
88
+ try {
89
+ if (verbose) {
90
+ const ra = req.socket?.remoteAddress;
91
+ const rp = req.socket?.remotePort;
92
+ console.log('[hmr-http] GET /ns/entry from', ra + (rp ? ':' + rp : ''));
93
+ }
94
+ }
95
+ catch { }
96
+ const verSeg = urlObj.pathname.replace(/^\/ns\/entry\/?/, '');
97
+ // Resolve app main entry to an absolute path-like key used by /ns/m
98
+ res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');
99
+ res.setHeader('Pragma', 'no-cache');
100
+ res.setHeader('Expires', '0');
101
+ const ver = /^[0-9]+$/.test(verSeg) ? verSeg : String(getGraphVersion() || 0);
102
+ const origin = getServerOrigin(server) || `${urlObj.protocol}//${urlObj.host}`;
103
+ // Resolve app main entry to an absolute path-like key used by /ns/m
104
+ let mainEntry = '/';
105
+ try {
106
+ const pkg = getPackageJson();
107
+ const main = pkg?.main || DEFAULT_MAIN_ENTRY;
108
+ const abs = getProjectFilePath(main).replace(/\\/g, '/');
109
+ // Normalize to '/app/...'
110
+ const marker = `/${APP_ROOT_DIR}/`;
111
+ const idx = abs.indexOf(marker);
112
+ mainEntry = idx >= 0 ? abs.substring(idx) : DEFAULT_MAIN_ENTRY_VIRTUAL;
113
+ }
114
+ catch { }
115
+ // Build a tiny wrapper that imports the compiled entry runtime from the dev server
116
+ let code = REQUIRE_GUARD_SNIPPET +
117
+ `// [ns-entry][v${ver}] wrapper (script-safe) bytes will follow\n` +
118
+ `(async function(){\n` +
119
+ ` let origin = ${JSON.stringify(origin)}; const main = ${JSON.stringify(mainEntry)}; const __ns_graph_ver = ${JSON.stringify(ver)};\n` +
120
+ ` try { const __b = (globalThis && globalThis.__NS_ENTRY_BASE__) ? String(globalThis.__NS_ENTRY_BASE__) : ''; if (__b) { try { const __o = new URL(__b).origin; if (__o) origin = __o; } catch {} } } catch {}\n` +
121
+ ` const __VERBOSE__ = (typeof __NS_ENV_VERBOSE__ !== 'undefined' && __NS_ENV_VERBOSE__) || (globalThis && globalThis.process && globalThis.process.env && globalThis.process.env.verbose) || (globalThis && globalThis.__NS_ENV_VERBOSE__) || ${JSON.stringify(!!verbose)};\n` +
122
+ ` if (__VERBOSE__) console.info('[ns-entry][wrapper] start', { origin, main, ver: __ns_graph_ver });\n` +
123
+ ` async function __ns_import_entry_rt(u){\n` +
124
+ ` // Prefer fetch+eval script transformation to avoid module import limitations on device\n` +
125
+ ` try { const r = await fetch(u); const t = await r.text(); if (__VERBOSE__) console.info('[ns-entry][wrapper] entry-rt fetched bytes', (t&&t.length)||0);\n` +
126
+ ` // Transform 'export default function' or 'export default async function' into global assignment\n` +
127
+ ` let s = t.replace(/export\\s+default\\s+async\\s+function\\s+([A-Za-z0-9_$]+)?/,'globalThis.__NS_START_ENTRY__=async function $1')\n` +
128
+ ` .replace(/export\\s+default\\s+function\\s+([A-Za-z0-9_$]+)?/,'globalThis.__NS_START_ENTRY__=function $1');\n` +
129
+ ` // Fallback: if function-form replacements didn't run, handle expression default export too\n` +
130
+ ` if (String(s).indexOf('__NS_START_ENTRY__') === -1) { s = 'globalThis.__NS_START_ENTRY__=' + s.replace(/export\\s+default\\s*/,''); }\n` +
131
+ ` try { (0,eval)(s); } catch (ee) { console.error('[ns-entry][wrapper] eval entry-rt failed', ee && (ee.message||ee)); throw ee; }\n` +
132
+ ` const fn = globalThis.__NS_START_ENTRY__; if (!fn) { throw new Error('entry-rt missing __NS_START_ENTRY__'); }\n` +
133
+ ` return { default: fn };\n` +
134
+ ` } catch(e) { console.error('[ns-entry][wrapper] entry-rt fetch/eval failed', e && (e.message||e)); throw e; }\n` +
135
+ ` }\n` +
136
+ ` const __entryRtUrl = '/ns/entry-rt?v=' + String(__ns_graph_ver);\n` +
137
+ ` let __mod; try { __mod = await __ns_import_entry_rt(__entryRtUrl); if (__VERBOSE__) console.info('[ns-entry][wrapper] entry-rt ready'); } catch (e) { console.error('[ns-entry][wrapper] failed to prepare entry-rt', e && (e.message||e)); throw e; }\n` +
138
+ ` const startEntry = (__mod && (__mod.default || __mod));\n` +
139
+ ` try { await startEntry({ origin, main, ver: __ns_graph_ver, verbose: !!__VERBOSE__ }); if (__VERBOSE__) console.info('[ns-entry][wrapper] startEntry() resolved'); } catch (e) { console.error('[ns-entry][wrapper] startEntry() failed', e && (e.message||e)); throw e; }\n` +
140
+ `})();\n`;
141
+ code = code + `\n//# sourceURL=${origin}/ns/entry`;
142
+ res.statusCode = 200;
143
+ res.end(code);
144
+ }
145
+ catch (e) {
146
+ next();
147
+ }
148
+ });
149
+ }
150
+ //# sourceMappingURL=websocket-ns-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-ns-entry.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/websocket-ns-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function formatNsMHmrServeTag(value: string | number): string;
2
+ export declare function rewriteNsMImportPathForHmr(p: string, _ver: string | number, bootTaggedRequest: boolean): string;
3
+ export declare function getNumericServeVersionTag(tag: string | null | undefined, fallback: number): number;
@@ -0,0 +1,92 @@
1
+ // Stable URL + explicit invalidation contract for `/ns/m/...` modules.
2
+ //
3
+ // Older versions emitted `/ns/m/__ns_hmr__/v<N>/<rel>` URLs in every
4
+ // served module so that V8's HTTP module cache (`g_moduleRegistry`)
5
+ // would see a fresh URL on each save and re-fetch the dependency
6
+ // closure. On every save the server also bumped a global `graphVersion`
7
+ // counter, which propagated into every emitted URL — effectively
8
+ // invalidating the ENTIRE cached graph on every save (Vite's
9
+ // single-threaded transform pipeline became the wall-clock bottleneck).
10
+ //
11
+ // The current contract inverts that:
12
+ // - The runtime registers a canonical key for every URL via
13
+ // `CanonicalizeHttpUrlKey` (HMRSupport.mm), which strips
14
+ // `__ns_hmr__/<tag>/` and `__ns_boot__/b1/` segments before lookup.
15
+ // - The Angular HMR client receives an explicit `evictPaths` list in
16
+ // `ns:angular-update` and calls `__nsInvalidateModules` to drop only
17
+ // the modules that actually need re-evaluation.
18
+ // - The server emits STABLE URLs for app modules. No version segment.
19
+ //
20
+ // `rewriteNsMImportPathForHmr` collapses any inbound URL shape to the
21
+ // canonical stable form. We still preserve `__ns_boot__/b1/` for
22
+ // boot-tagged requests because that wrapper drives boot-progress
23
+ // instrumentation (see `buildBootProgressSnippet`), and we still pass
24
+ // `node_modules` through unchanged because vendor packages live on a
25
+ // stable namespace already.
26
+ export function formatNsMHmrServeTag(value) {
27
+ const raw = String(value ?? '').trim();
28
+ if (!raw) {
29
+ return 'v0';
30
+ }
31
+ if (raw === 'live' || /^n\d+$/i.test(raw) || /^v[^/]+$/i.test(raw)) {
32
+ return raw;
33
+ }
34
+ if (/^\d+$/.test(raw)) {
35
+ return `v${raw}`;
36
+ }
37
+ return raw;
38
+ }
39
+ export function rewriteNsMImportPathForHmr(p, _ver, bootTaggedRequest) {
40
+ if (!p || !p.startsWith('/ns/m/')) {
41
+ return p;
42
+ }
43
+ // Step 1: collapse any legacy boot+hmr or hmr-only prefix back to the
44
+ // canonical `/ns/m/<rest>` form. Inputs we may see in the wild include:
45
+ // * `/ns/m/__ns_boot__/b1/__ns_hmr__/v<N>/<rest>` (legacy cold-boot
46
+ // served code)
47
+ // * `/ns/m/__ns_hmr__/v<N>/<rest>` (legacy HMR served code)
48
+ // * `/ns/m/__ns_boot__/b1/<rest>` (current cold boot)
49
+ // * `/ns/m/<rest>` (current HMR)
50
+ // We strip `__ns_hmr__/<tag>/` regardless of `<tag>` (handles `live`,
51
+ // `v<N>`, `n<N>`, anything matched by `formatNsMHmrServeTag`). The
52
+ // `__ns_boot__/b1/` segment is stripped here too — we'll re-add it
53
+ // below if `bootTaggedRequest` is set, so the canonicalization is
54
+ // idempotent (a boot URL that flows through twice ends up correct).
55
+ let canonical = p
56
+ .replace(/^\/ns\/m\/__ns_boot__\/b1\/__ns_hmr__\/[^/]+\//, '/ns/m/')
57
+ .replace(/^\/ns\/m\/__ns_hmr__\/[^/]+\//, '/ns/m/')
58
+ .replace(/^\/ns\/m\/__ns_boot__\/b1\//, '/ns/m/');
59
+ // Vendor packages: always serve under the canonical
60
+ // `/ns/m/node_modules/<rest>` path, never under the boot prefix. This
61
+ // preserves the longstanding invariant that node_modules paths are
62
+ // stable across boot and HMR (so V8 dedups them in the module
63
+ // registry regardless of which load triggered the fetch first).
64
+ if (canonical.startsWith('/ns/m/node_modules/')) {
65
+ return canonical;
66
+ }
67
+ // Boot-tagged request: app-module URL gets wrapped with the boot
68
+ // prefix. The runtime canonicalizer collapses this back to the same
69
+ // cache key as the unprefixed URL, so cold boot and HMR share module
70
+ // identity. The boot prefix is still useful at request time because
71
+ // the server detects it and injects the boot-progress snippet.
72
+ if (bootTaggedRequest) {
73
+ return `/ns/m/__ns_boot__/b1${canonical.slice('/ns/m'.length)}`;
74
+ }
75
+ // HMR / steady-state request: stable canonical URL.
76
+ return canonical;
77
+ }
78
+ export function getNumericServeVersionTag(tag, fallback) {
79
+ const raw = String(tag || '').trim();
80
+ if (!raw) {
81
+ return fallback;
82
+ }
83
+ const versionMatch = raw.match(/^v(\d+)$/);
84
+ if (versionMatch?.[1]) {
85
+ return Number(versionMatch[1]);
86
+ }
87
+ if (/^\d+$/.test(raw)) {
88
+ return Number(raw);
89
+ }
90
+ return fallback;
91
+ }
92
+ //# sourceMappingURL=websocket-ns-m-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-ns-m-paths.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/websocket-ns-m-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { TransformResult } from 'vite';
2
+ export interface NsMRequestContext {
3
+ requestUrl: string;
4
+ spec: string;
5
+ forcedVer: string | null;
6
+ bootTaggedRequest: boolean;
7
+ serverRoot: string;
8
+ /**
9
+ * Optional monorepo workspace root for the dev server. When the app
10
+ * lives under `apps/<name>/` inside a hoisted-`node_modules` workspace
11
+ * (Nx / Rush / Turborepo / pnpm / yarn workspaces / npm workspaces),
12
+ * `serverRoot` is the app dir but most packages live at the workspace
13
+ * root. Candidates that resolve there are routed through `/@fs/...`
14
+ * to bypass the package's `package.json#exports` gating which would
15
+ * otherwise refuse internal sub-paths like `css-tree/lib/syntax/...`.
16
+ */
17
+ workspaceRoot?: string | null;
18
+ candidates: string[];
19
+ transformCandidates: string[];
20
+ }
21
+ export type NsMRequestContextResult = {
22
+ kind: 'next';
23
+ } | {
24
+ kind: 'response';
25
+ statusCode: number;
26
+ code: string;
27
+ } | {
28
+ kind: 'context';
29
+ value: NsMRequestContext;
30
+ };
31
+ export interface ResolveNsMTransformedModuleOptions {
32
+ context: NsMRequestContext;
33
+ transformRequest: (url: string, timeoutMs?: number) => Promise<TransformResult | null>;
34
+ resolveId: (id: string) => Promise<string | null>;
35
+ loadVirtualId: (id: string) => Promise<string | {
36
+ code?: string;
37
+ } | TransformResult | null>;
38
+ timeoutMs?: number;
39
+ }
40
+ export interface NsMResolvedTransform {
41
+ transformed: TransformResult | null;
42
+ resolvedCandidate: string | null;
43
+ }
44
+ export declare function createNsMRequestContext(requestUrl: string, serverRoot: string, appVirtualWithSlash: string, workspaceRoot?: string | null): NsMRequestContextResult;
45
+ export declare function resolveNsMTransformedModule(options: ResolveNsMTransformedModuleOptions): Promise<NsMResolvedTransform>;
@@ -0,0 +1,196 @@
1
+ import * as path from 'path';
2
+ import { filterExistingNodeModulesTransformCandidates, getBlockedDeviceNodeModulesReason, resolveCandidateFilePath, stripDecoratedServePrefixes, tryReadRawExplicitJavaScriptModule } from './websocket-module-specifiers.js';
3
+ function normalizeAbsoluteFilesystemSpec(spec, serverRoot) {
4
+ const toPosix = (value) => value.replace(/\\/g, '/');
5
+ const rootPosix = toPosix(serverRoot);
6
+ const specPosix = toPosix(spec);
7
+ const isAbsoluteFilesystemPath = /^\//.test(specPosix) || /^[A-Za-z]:\//.test(spec);
8
+ if (!isAbsoluteFilesystemPath) {
9
+ return spec;
10
+ }
11
+ let relative = specPosix.startsWith(rootPosix) ? specPosix.slice(rootPosix.length) : path.posix.relative(rootPosix, specPosix);
12
+ if (relative.startsWith('..')) {
13
+ return spec;
14
+ }
15
+ if (!relative.startsWith('/')) {
16
+ relative = `/${relative}`;
17
+ }
18
+ return relative;
19
+ }
20
+ export function createNsMRequestContext(requestUrl, serverRoot, appVirtualWithSlash, workspaceRoot) {
21
+ try {
22
+ const urlObj = new URL(requestUrl || '', 'http://localhost');
23
+ if (!urlObj.pathname.startsWith('/ns/m')) {
24
+ return { kind: 'next' };
25
+ }
26
+ let spec = urlObj.searchParams.get('path') || '';
27
+ let forcedVer = urlObj.searchParams.get('v');
28
+ let bootTaggedRequest = false;
29
+ if (!spec) {
30
+ const base = '/ns/m';
31
+ const rest = urlObj.pathname.slice(base.length);
32
+ if (rest && rest !== '/') {
33
+ spec = rest;
34
+ }
35
+ }
36
+ if (spec === '/__invalid_at__.mjs' || spec === '__invalid_at__.mjs') {
37
+ return {
38
+ kind: 'response',
39
+ statusCode: 200,
40
+ code: "// invalid '@' import stub\nexport {}\n",
41
+ };
42
+ }
43
+ if (!spec) {
44
+ return {
45
+ kind: 'response',
46
+ statusCode: 200,
47
+ code: 'export {}\n',
48
+ };
49
+ }
50
+ spec = spec.replace(/[?#].*$/, '');
51
+ const decorated = stripDecoratedServePrefixes(spec);
52
+ spec = decorated.cleanedSpec;
53
+ bootTaggedRequest = decorated.bootTaggedRequest;
54
+ forcedVer || (forcedVer = decorated.forcedVer);
55
+ spec = normalizeAbsoluteFilesystemSpec(spec, serverRoot);
56
+ if (spec.startsWith('@/')) {
57
+ spec = appVirtualWithSlash + spec.slice(2);
58
+ }
59
+ if (spec.startsWith('./')) {
60
+ spec = spec.slice(1);
61
+ }
62
+ const blockedNodeModulesReason = getBlockedDeviceNodeModulesReason(spec);
63
+ if (blockedNodeModulesReason) {
64
+ return {
65
+ kind: 'response',
66
+ statusCode: 404,
67
+ code: `// [ns:m] blocked device import\nthrow new Error(${JSON.stringify(`[ns/m] ${blockedNodeModulesReason}`)});\nexport {};\n`,
68
+ };
69
+ }
70
+ if (!spec.startsWith('/')) {
71
+ spec = `/${spec}`;
72
+ }
73
+ const hasExt = /\.(ts|tsx|js|jsx|mjs|mts|cts|vue)$/i.test(spec);
74
+ const baseNoExt = hasExt ? spec.replace(/\.(ts|tsx|js|jsx|mjs|mts|cts)$/i, '') : spec;
75
+ const candidates = [...(hasExt ? [spec] : []), `${baseNoExt}.ts`, `${baseNoExt}.js`, `${baseNoExt}.tsx`, `${baseNoExt}.jsx`, `${baseNoExt}.mjs`, `${baseNoExt}.mts`, `${baseNoExt}.cts`, `${baseNoExt}.vue`, `${baseNoExt}/index.ts`, `${baseNoExt}/index.js`, `${baseNoExt}/index.tsx`, `${baseNoExt}/index.jsx`, `${baseNoExt}/index.mjs`];
76
+ const transformCandidates = filterExistingNodeModulesTransformCandidates(spec, candidates, serverRoot, workspaceRoot);
77
+ return {
78
+ kind: 'context',
79
+ value: {
80
+ requestUrl,
81
+ spec,
82
+ forcedVer,
83
+ bootTaggedRequest,
84
+ serverRoot,
85
+ workspaceRoot: workspaceRoot ?? null,
86
+ candidates,
87
+ transformCandidates,
88
+ },
89
+ };
90
+ }
91
+ catch {
92
+ return { kind: 'next' };
93
+ }
94
+ }
95
+ async function tryTransformRequest(transformRequest, url, timeoutMs) {
96
+ try {
97
+ return await transformRequest(url, timeoutMs);
98
+ }
99
+ catch {
100
+ return null;
101
+ }
102
+ }
103
+ function getLoadedCode(loadResult) {
104
+ if (!loadResult) {
105
+ return null;
106
+ }
107
+ if (typeof loadResult === 'string') {
108
+ return loadResult;
109
+ }
110
+ return typeof loadResult.code === 'string' ? loadResult.code : null;
111
+ }
112
+ export async function resolveNsMTransformedModule(options) {
113
+ const { context, transformRequest, resolveId, loadVirtualId, timeoutMs = 120000 } = options;
114
+ const { spec, serverRoot, workspaceRoot, transformCandidates } = context;
115
+ let transformed = null;
116
+ let resolvedCandidate = null;
117
+ if (spec.startsWith('/@id/')) {
118
+ transformed = await tryTransformRequest(transformRequest, spec, timeoutMs);
119
+ if (transformed?.code) {
120
+ return { transformed, resolvedCandidate };
121
+ }
122
+ try {
123
+ const rawId = spec.slice('/@id/'.length).replace(/__x00__/g, '\0');
124
+ const loadedCode = getLoadedCode(await loadVirtualId(rawId));
125
+ if (loadedCode) {
126
+ return {
127
+ transformed: { code: loadedCode },
128
+ resolvedCandidate: rawId,
129
+ };
130
+ }
131
+ }
132
+ catch { }
133
+ }
134
+ const rawExplicitModule = tryReadRawExplicitJavaScriptModule(spec, serverRoot);
135
+ if (rawExplicitModule) {
136
+ return {
137
+ transformed: { code: rawExplicitModule.code },
138
+ resolvedCandidate: rawExplicitModule.resolvedId,
139
+ };
140
+ }
141
+ for (const candidate of transformCandidates) {
142
+ transformed = await tryTransformRequest(transformRequest, candidate, timeoutMs);
143
+ if (transformed?.code) {
144
+ resolvedCandidate = candidate;
145
+ return { transformed, resolvedCandidate };
146
+ }
147
+ }
148
+ const resolvedId = await resolveId(spec);
149
+ if (resolvedId) {
150
+ transformed = await tryTransformRequest(transformRequest, resolvedId, timeoutMs);
151
+ if (transformed?.code) {
152
+ return { transformed, resolvedCandidate: resolvedId };
153
+ }
154
+ }
155
+ if (spec.includes('/node_modules/')) {
156
+ const nodeModulesIndex = spec.lastIndexOf('/node_modules/');
157
+ const bareSpecifier = spec.slice(nodeModulesIndex + '/node_modules/'.length);
158
+ if (bareSpecifier && !bareSpecifier.startsWith('.')) {
159
+ const resolvedBareId = await resolveId(bareSpecifier);
160
+ if (resolvedBareId) {
161
+ transformed = await tryTransformRequest(transformRequest, resolvedBareId, timeoutMs);
162
+ if (transformed?.code) {
163
+ return { transformed, resolvedCandidate: resolvedBareId };
164
+ }
165
+ }
166
+ }
167
+ }
168
+ const buildFsCandidate = (root) => {
169
+ const rootPosix = root.replace(/\\/g, '/').replace(/\/$/, '');
170
+ const absolutePosixPath = `${rootPosix}${spec.startsWith('/') ? '' : '/'}${spec}`;
171
+ return `/@fs${absolutePosixPath}`;
172
+ };
173
+ const fsRootsToTry = [serverRoot, ...(workspaceRoot && path.resolve(workspaceRoot) !== path.resolve(serverRoot) ? [workspaceRoot] : [])];
174
+ for (const root of fsRootsToTry) {
175
+ const fsId = buildFsCandidate(root);
176
+ if (resolveCandidateFilePath(fsId, serverRoot, workspaceRoot)) {
177
+ transformed = await tryTransformRequest(transformRequest, fsId, timeoutMs);
178
+ if (transformed?.code) {
179
+ return { transformed, resolvedCandidate: fsId };
180
+ }
181
+ }
182
+ }
183
+ for (const candidate of transformCandidates) {
184
+ const importHintCandidate = `${candidate}${candidate.includes('?') ? '&' : '?'}import`;
185
+ transformed = await tryTransformRequest(transformRequest, importHintCandidate, timeoutMs);
186
+ if (transformed?.code) {
187
+ resolvedCandidate = importHintCandidate;
188
+ return { transformed, resolvedCandidate };
189
+ }
190
+ }
191
+ return {
192
+ transformed: null,
193
+ resolvedCandidate,
194
+ };
195
+ }
196
+ //# sourceMappingURL=websocket-ns-m-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-ns-m-request.js","sourceRoot":"","sources":["../../../../../packages/vite/hmr/server/websocket-ns-m-request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { TransformResult, ViteDevServer } from 'vite';
2
+ import type { FrameworkServerStrategy } from './framework-strategy.js';
3
+ type SharedTransformRequestFn = (url: string, timeoutMs?: number) => Promise<TransformResult | null>;
4
+ type UpsertGraphModuleFn = (rawId: string, code: string, deps: string[], options?: {
5
+ bumpVersion?: boolean;
6
+ emitDeltaOnInsert?: boolean;
7
+ broadcastDelta?: boolean;
8
+ }) => void;
9
+ /**
10
+ * Plugin-closure dependencies the `/ns/m` device module server needs. The pure
11
+ * transform/codegen functions are imported directly from
12
+ * `websocket-device-transform.ts`; only genuine plugin state (graph version,
13
+ * strategy, shared transform runner, graph upsert) is injected here.
14
+ */
15
+ export interface RegisterNsModuleServerRouteOptions {
16
+ verbose: boolean;
17
+ appVirtualWithSlash: string;
18
+ sfcFileMap: Map<string, string>;
19
+ depFileMap: Map<string, string>;
20
+ getGraphVersion(): number;
21
+ getStrategy(): FrameworkServerStrategy;
22
+ getServerOrigin(server: ViteDevServer): string;
23
+ sharedTransformRequest: SharedTransformRequestFn;
24
+ ensureInitialGraphPopulationStarted(server: ViteDevServer): void;
25
+ upsertGraphModule: UpsertGraphModuleFn;
26
+ }
27
+ /**
28
+ * Registers the `/ns/m/*` device module server: the HTTP endpoint every
29
+ * NativeScript device uses to fetch app/source modules (and AnalogJS Angular
30
+ * `/@ng/component` live-reload requests) as device-ready ESM. This is the
31
+ * single hottest route in the HMR server.
32
+ */
33
+ export declare function registerNsModuleServerRoute(server: ViteDevServer, options: RegisterNsModuleServerRouteOptions): void;
34
+ export {};