@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,88 @@
1
+ /**
2
+ * Single canonical URL generator for `@nativescript/core` under HMR.
3
+ *
4
+ * Every public-facing reference to `@nativescript/core[/sub]` resolves to
5
+ * exactly one URL string — byte-for-byte identical across every emitter
6
+ * (bundle entry, external-urls plugin, rewriter, import map, runtime
7
+ * require). The only valid shapes are:
8
+ *
9
+ * - `/ns/core` — package main
10
+ * - `/ns/core/<sub>` — subpath form
11
+ *
12
+ * with `<sub>` always run through `normalizeCoreSub` (extensionless, no
13
+ * `/index` tail, no platform suffix). There is no version segment, no
14
+ * `?p=` query form, no `.js` tail.
15
+ *
16
+ * This module is the ONE site that constructs those URLs. Every caller in
17
+ * the repo should use `buildCoreUrl()` (or `buildCoreUrlPath()` when origin
18
+ * is not known yet). A single violation of canonical form produces a
19
+ * distinct iOS HTTP ESM cache entry for the same file — re-evaluating the
20
+ * module body, re-running `CssAnimationProperty.register(...)` side
21
+ * effects, and crashing with `Cannot redefine property`.
22
+ */
23
+ /**
24
+ * Normalize a user-provided subpath into the canonical form used by the
25
+ * /ns/core bridge. Strips:
26
+ * - Query and hash (`?v=…`, `#…`)
27
+ * - Leading / trailing slashes
28
+ * - Trailing `.js`/`.mjs`/`.cjs` extension (platform-suffixed forms are
29
+ * preserved: `.ios.js` → `.ios`)
30
+ * - Trailing `/index` segment (package-main sibling: `globals/index` →
31
+ * `globals`; `ui/core/view/index` → `ui/core/view`)
32
+ * - Canonical index forms (`index`, `index.js`, empty) → empty string
33
+ *
34
+ * Returns empty string for the main module (`@nativescript/core` itself).
35
+ */
36
+ export declare function normalizeCoreSub(sub?: string | null): string;
37
+ /**
38
+ * Canonical PATH (no origin) for a core module.
39
+ * Used by middleware/redirects where we don't have the dev-server origin.
40
+ *
41
+ * '' → '/ns/core'
42
+ * 'application' → '/ns/core/application'
43
+ * 'ui/core/view' → '/ns/core/ui/core/view'
44
+ * 'globals/index' → '/ns/core/globals'
45
+ */
46
+ export declare function buildCoreUrlPath(sub?: string | null): string;
47
+ /**
48
+ * Canonical FULL URL for a core module.
49
+ *
50
+ * origin='http://localhost:5173', sub='application'
51
+ * → 'http://localhost:5173/ns/core/application'
52
+ *
53
+ * Throws if origin is empty — callers that may not have origin should use
54
+ * `buildCoreUrlPath()` instead.
55
+ */
56
+ export declare function buildCoreUrl(origin: string, sub?: string | null): string;
57
+ /**
58
+ * Detect whether a URL or path references the /ns/core bridge.
59
+ * Accepts both relative `/ns/core/...` and absolute `http(s)://.../ns/core/...`.
60
+ */
61
+ export declare function isCoreBridgeUrl(input: string): boolean;
62
+ /**
63
+ * Extract the canonical sub path from a /ns/core URL.
64
+ * 'http://localhost:5173/ns/core' → ''
65
+ * 'http://localhost:5173/ns/core/application' → 'application'
66
+ * '/ns/core/ui/core/view' → 'ui/core/view'
67
+ * 'http://example.com/other' → null
68
+ */
69
+ export declare function extractCoreSub(input: string): string | null;
70
+ /**
71
+ * Convert a bare `@nativescript/core[/sub]` specifier or an absolute path
72
+ * pointing into `@nativescript/core`'s node_modules install into the
73
+ * canonical sub path. Returns null for anything else.
74
+ *
75
+ * '@nativescript/core' → ''
76
+ * '@nativescript/core/application' → 'application'
77
+ * '/node_modules/@nativescript/core/ui/core/view.js' → 'ui/core/view'
78
+ * '/foo/bar/baz' → null
79
+ */
80
+ export declare function specToCoreSub(spec: string): string | null;
81
+ /**
82
+ * Produce the set of "runtime module id" strings we expose in
83
+ * `globalThis.__NS_CORE_MODULES__` for a given sub. Callers of the vendor
84
+ * CJS shim may request any of these forms for the same module; we register
85
+ * all of them to the one namespace so lookups are never ambiguous.
86
+ */
87
+ export declare function moduleRegistrationKeys(sub?: string | null): string[];
88
+ export declare const CORE_SCOPE = "@nativescript/core";
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Single canonical URL generator for `@nativescript/core` under HMR.
3
+ *
4
+ * Every public-facing reference to `@nativescript/core[/sub]` resolves to
5
+ * exactly one URL string — byte-for-byte identical across every emitter
6
+ * (bundle entry, external-urls plugin, rewriter, import map, runtime
7
+ * require). The only valid shapes are:
8
+ *
9
+ * - `/ns/core` — package main
10
+ * - `/ns/core/<sub>` — subpath form
11
+ *
12
+ * with `<sub>` always run through `normalizeCoreSub` (extensionless, no
13
+ * `/index` tail, no platform suffix). There is no version segment, no
14
+ * `?p=` query form, no `.js` tail.
15
+ *
16
+ * This module is the ONE site that constructs those URLs. Every caller in
17
+ * the repo should use `buildCoreUrl()` (or `buildCoreUrlPath()` when origin
18
+ * is not known yet). A single violation of canonical form produces a
19
+ * distinct iOS HTTP ESM cache entry for the same file — re-evaluating the
20
+ * module body, re-running `CssAnimationProperty.register(...)` side
21
+ * effects, and crashing with `Cannot redefine property`.
22
+ */
23
+ const CORE_SCOPE_PREFIX = '@nativescript/core';
24
+ /**
25
+ * Normalize a user-provided subpath into the canonical form used by the
26
+ * /ns/core bridge. Strips:
27
+ * - Query and hash (`?v=…`, `#…`)
28
+ * - Leading / trailing slashes
29
+ * - Trailing `.js`/`.mjs`/`.cjs` extension (platform-suffixed forms are
30
+ * preserved: `.ios.js` → `.ios`)
31
+ * - Trailing `/index` segment (package-main sibling: `globals/index` →
32
+ * `globals`; `ui/core/view/index` → `ui/core/view`)
33
+ * - Canonical index forms (`index`, `index.js`, empty) → empty string
34
+ *
35
+ * Returns empty string for the main module (`@nativescript/core` itself).
36
+ */
37
+ export function normalizeCoreSub(sub) {
38
+ if (!sub)
39
+ return '';
40
+ let s = String(sub).split('?')[0].split('#')[0].trim();
41
+ s = s.replace(/^\/+/, '').replace(/\/+$/, '');
42
+ s = s.replace(/\.(?:mjs|cjs|js)$/, '');
43
+ // Strip a trailing platform suffix (`.ios` / `.android` / `.visionos`)
44
+ // so Vite-resolved platform-specific file paths canonicalize to the
45
+ // same form the runtime import map uses for the bare subpath.
46
+ //
47
+ // Why this matters: when the app source has
48
+ // `import { TextBase } from '@nativescript/core/ui/text-base'`, Vite's
49
+ // alias + extension resolver picks `ui/text-base/index.ios.js`. After
50
+ // `.js` is stripped above we have `ui/text-base/index.ios`. Vendor
51
+ // code, by contrast, takes the bare specifier path: the runtime
52
+ // import map's `@nativescript/core/` prefix maps it to
53
+ // `/ns/core/ui/text-base` directly (no `.ios`). The iOS HTTP ESM
54
+ // loader caches by URL string, so two spellings of the same file
55
+ // would produce two distinct V8 module records, re-evaluate
56
+ // `TextBase`, and create a realm split that leaves the
57
+ // `@nativescript-community` plugin's `setTextDecorationAndTransform`
58
+ // override visible to vendor code but invisible to the app.
59
+ //
60
+ // Stripping the suffix here normalises both shapes — `ui/text-base/`
61
+ // `index.ios` and `runtime/runtime.ios` — to the bare form. The
62
+ // trailing `/index` handler below then collapses
63
+ // `ui/text-base/index` → `ui/text-base`, and the final `index`
64
+ // guard collapses the package-main case to ''.
65
+ s = s.replace(/\.(?:ios|android|visionos)$/, '');
66
+ // Strip trailing `/index` so that `globals/index` → `globals`, matching
67
+ // the bare import form that consumers spell as `@nativescript/core/globals`.
68
+ // The main module case (`index` alone) is handled below.
69
+ if (s.endsWith('/index')) {
70
+ s = s.slice(0, -'/index'.length);
71
+ }
72
+ if (!s || s === 'index')
73
+ return '';
74
+ return s;
75
+ }
76
+ /**
77
+ * Canonical PATH (no origin) for a core module.
78
+ * Used by middleware/redirects where we don't have the dev-server origin.
79
+ *
80
+ * '' → '/ns/core'
81
+ * 'application' → '/ns/core/application'
82
+ * 'ui/core/view' → '/ns/core/ui/core/view'
83
+ * 'globals/index' → '/ns/core/globals'
84
+ */
85
+ export function buildCoreUrlPath(sub) {
86
+ const s = normalizeCoreSub(sub);
87
+ return s ? `/ns/core/${s}` : '/ns/core';
88
+ }
89
+ /**
90
+ * Canonical FULL URL for a core module.
91
+ *
92
+ * origin='http://localhost:5173', sub='application'
93
+ * → 'http://localhost:5173/ns/core/application'
94
+ *
95
+ * Throws if origin is empty — callers that may not have origin should use
96
+ * `buildCoreUrlPath()` instead.
97
+ */
98
+ export function buildCoreUrl(origin, sub) {
99
+ if (!origin) {
100
+ throw new Error('[ns-core-url] buildCoreUrl requires a non-empty origin. Use buildCoreUrlPath() when origin is not yet known.');
101
+ }
102
+ const trimmedOrigin = origin.replace(/\/+$/, '');
103
+ return `${trimmedOrigin}${buildCoreUrlPath(sub)}`;
104
+ }
105
+ /**
106
+ * Detect whether a URL or path references the /ns/core bridge.
107
+ * Accepts both relative `/ns/core/...` and absolute `http(s)://.../ns/core/...`.
108
+ */
109
+ export function isCoreBridgeUrl(input) {
110
+ if (!input)
111
+ return false;
112
+ return /\/ns\/core(?:\/|$)/.test(input);
113
+ }
114
+ /**
115
+ * Extract the canonical sub path from a /ns/core URL.
116
+ * 'http://localhost:5173/ns/core' → ''
117
+ * 'http://localhost:5173/ns/core/application' → 'application'
118
+ * '/ns/core/ui/core/view' → 'ui/core/view'
119
+ * 'http://example.com/other' → null
120
+ */
121
+ export function extractCoreSub(input) {
122
+ if (!isCoreBridgeUrl(input))
123
+ return null;
124
+ try {
125
+ const u = new URL(input, 'http://placeholder.invalid');
126
+ const pathname = u.pathname;
127
+ const afterCore = pathname.replace(/^.*\/ns\/core(?:\/|$)/, '');
128
+ return normalizeCoreSub(afterCore);
129
+ }
130
+ catch {
131
+ const m = input.match(/\/ns\/core(?:\/([^?#]*))?/);
132
+ if (!m)
133
+ return null;
134
+ return normalizeCoreSub(m[1] || '');
135
+ }
136
+ }
137
+ /**
138
+ * Convert a bare `@nativescript/core[/sub]` specifier or an absolute path
139
+ * pointing into `@nativescript/core`'s node_modules install into the
140
+ * canonical sub path. Returns null for anything else.
141
+ *
142
+ * '@nativescript/core' → ''
143
+ * '@nativescript/core/application' → 'application'
144
+ * '/node_modules/@nativescript/core/ui/core/view.js' → 'ui/core/view'
145
+ * '/foo/bar/baz' → null
146
+ */
147
+ export function specToCoreSub(spec) {
148
+ if (!spec)
149
+ return null;
150
+ const cleaned = spec.split('?')[0].split('#')[0];
151
+ if (cleaned === CORE_SCOPE_PREFIX)
152
+ return '';
153
+ if (cleaned.startsWith(CORE_SCOPE_PREFIX + '/')) {
154
+ return normalizeCoreSub(cleaned.slice(CORE_SCOPE_PREFIX.length + 1));
155
+ }
156
+ const abs = cleaned.replace(/\\/g, '/').match(/\/node_modules\/@nativescript\/core\/(.+?)$/);
157
+ if (abs)
158
+ return normalizeCoreSub(abs[1]);
159
+ // Case: the path ENDS at the core root (no subpath).
160
+ if (/\/node_modules\/@nativescript\/core\/?$/.test(cleaned.replace(/\\/g, '/'))) {
161
+ return '';
162
+ }
163
+ return null;
164
+ }
165
+ /**
166
+ * Produce the set of "runtime module id" strings we expose in
167
+ * `globalThis.__NS_CORE_MODULES__` for a given sub. Callers of the vendor
168
+ * CJS shim may request any of these forms for the same module; we register
169
+ * all of them to the one namespace so lookups are never ambiguous.
170
+ */
171
+ export function moduleRegistrationKeys(sub) {
172
+ const s = normalizeCoreSub(sub);
173
+ const keys = new Set();
174
+ if (!s) {
175
+ keys.add(CORE_SCOPE_PREFIX);
176
+ keys.add('');
177
+ }
178
+ else {
179
+ keys.add(`${CORE_SCOPE_PREFIX}/${s}`);
180
+ keys.add(s);
181
+ // Tolerate `.js` tail on the key (some consumers spell it out).
182
+ keys.add(`${CORE_SCOPE_PREFIX}/${s}.js`);
183
+ keys.add(`${s}.js`);
184
+ // Tolerate `/index` / `/index.js` suffix.
185
+ keys.add(`${CORE_SCOPE_PREFIX}/${s}/index`);
186
+ keys.add(`${CORE_SCOPE_PREFIX}/${s}/index.js`);
187
+ }
188
+ return Array.from(keys);
189
+ }
190
+ export const CORE_SCOPE = CORE_SCOPE_PREFIX;
191
+ //# sourceMappingURL=ns-core-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ns-core-url.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/ns-core-url.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import path from 'path';
2
2
  import fs from 'fs';
3
3
  import { findPackageInNodeModules } from './module-resolution.js';
4
4
  import { getProjectRootPath } from './project.js';
5
+ import { normalizeModuleId } from './normalize-id.js';
5
6
  const projectRoot = getProjectRootPath();
6
7
  export function packagePlatformResolverPlugin(opts) {
7
8
  // packages used via core transient dependencies and other vite support
@@ -41,7 +42,7 @@ export function packagePlatformResolverPlugin(opts) {
41
42
  if (opts.verbose) {
42
43
  console.log(`✅ Alias resolver: ${packageName} -> ${mainField}.${opts.platform}.js (extensionless)`);
43
44
  }
44
- return platformFile;
45
+ return normalizeModuleId(platformFile);
45
46
  }
46
47
  // Fallback to .js
47
48
  const jsFile = path.join(packagePath, `${mainField}.js`);
@@ -49,7 +50,7 @@ export function packagePlatformResolverPlugin(opts) {
49
50
  if (opts.verbose) {
50
51
  console.log(`✅ Alias resolver: ${packageName} -> ${mainField}.js (extensionless)`);
51
52
  }
52
- return jsFile;
53
+ return normalizeModuleId(jsFile);
53
54
  }
54
55
  }
55
56
  // Case 2: Main field has extension but file doesn't exist - look for platform variants
@@ -63,7 +64,7 @@ export function packagePlatformResolverPlugin(opts) {
63
64
  if (opts.verbose) {
64
65
  console.log(`✅ Alias resolver: ${packageName} -> ${baseName}.${opts.platform}${ext} (missing main)`);
65
66
  }
66
- return platformFile;
67
+ return normalizeModuleId(platformFile);
67
68
  }
68
69
  // If main file exists, let normal resolution handle it
69
70
  // If it doesn't exist and no platform variant found, let it fail naturally
@@ -1 +1 @@
1
- {"version":3,"file":"package-platform-aliases.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/package-platform-aliases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-platform-aliases.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/package-platform-aliases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** The platforms NativeScript builds for. Single source of truth for the build pipeline. */
2
+ export type Platform = 'android' | 'ios' | 'visionos';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=platform-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-types.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/platform-types.ts"],"names":[],"mappings":""}
@@ -1,6 +1,7 @@
1
1
  import path from 'node:path';
2
2
  import { promises as fs } from 'node:fs';
3
3
  import { createRequire } from 'node:module';
4
+ import { getAngularLinkerFactory, runAngularLinker } from './angular/shared-linker.js';
4
5
  async function pathExists(p) {
5
6
  try {
6
7
  await fs.access(p);
@@ -13,28 +14,19 @@ async function pathExists(p) {
13
14
  async function ensureDir(p) {
14
15
  await fs.mkdir(p, { recursive: true });
15
16
  }
16
- async function linkFile(babel, createLinker, src) {
17
+ async function linkFile(src, projectRoot) {
17
18
  const code = await fs.readFile(src, 'utf8');
18
19
  if (!code)
19
20
  return null;
20
21
  // Quick check to skip non-partial files
21
22
  if (code.indexOf('\u0275\u0275ngDeclare') === -1 && code.indexOf('ɵɵngDeclare') === -1 && code.indexOf('ngDeclare') === -1)
22
23
  return null;
23
- const plugin = createLinker({ sourceMapping: false });
24
- const res = await babel.transformAsync(code, {
25
- filename: src,
26
- configFile: false,
27
- babelrc: false,
28
- sourceMaps: false,
29
- compact: false,
30
- plugins: [plugin],
31
- });
32
- return res?.code && res.code !== code ? res.code : null;
24
+ return runAngularLinker(code, { filename: src, projectRoot, freshPlugin: true });
33
25
  }
34
- async function copyOrLinkInto(babel, createLinker, srcFile, cacheFile) {
26
+ async function copyOrLinkInto(srcFile, cacheFile, projectRoot) {
35
27
  const dir = path.dirname(cacheFile);
36
28
  await ensureDir(dir);
37
- const linked = await linkFile(babel, createLinker, srcFile);
29
+ const linked = await linkFile(srcFile, projectRoot);
38
30
  if (linked) {
39
31
  await fs.writeFile(cacheFile, linked, 'utf8');
40
32
  }
@@ -42,37 +34,24 @@ async function copyOrLinkInto(babel, createLinker, srcFile, cacheFile) {
42
34
  await fs.copyFile(srcFile, cacheFile);
43
35
  }
44
36
  }
45
- async function prelinkPackage(req, pkgName, cacheRoot, debug) {
37
+ async function prelinkPackage(req, pkgName, cacheRoot, debug, projectRoot) {
46
38
  const pkgEntry = req.resolve(path.join(pkgName, 'package.json'));
47
39
  const pkgDir = path.dirname(pkgEntry);
48
40
  const fesmDir = path.join(pkgDir, 'fesm2022');
49
41
  if (!(await pathExists(fesmDir)))
50
42
  return;
51
- // Lazy load linker deps from app
52
- let babel = null;
53
- let createLinker = null;
54
- try {
55
- const babelPath = req.resolve('@babel/core');
56
- const linkerPath = req.resolve('@angular/compiler-cli/linker/babel');
57
- babel = await import(babelPath);
58
- const linkerMod = await import(linkerPath);
59
- createLinker = linkerMod.createLinkerPlugin || linkerMod.createEs2015LinkerPlugin;
60
- }
61
- catch {
43
+ const { babel, createLinker } = await getAngularLinkerFactory(projectRoot);
44
+ if (!babel || !createLinker)
62
45
  return; // Can't link without deps; skip quietly
63
- }
64
46
  const destDir = path.join(cacheRoot, pkgName, 'fesm2022');
65
47
  await ensureDir(destDir);
66
48
  const files = (await fs.readdir(fesmDir)).filter((f) => f.endsWith('.mjs'));
67
49
  for (const file of files) {
68
50
  const srcFile = path.join(fesmDir, file);
69
51
  const cacheFile = path.join(destDir, file);
70
- await copyOrLinkInto(babel, createLinker, srcFile, cacheFile);
52
+ await copyOrLinkInto(srcFile, cacheFile, projectRoot);
71
53
  if (debug) {
72
- try {
73
- console.log(`[ns-angular-prelink] cached`, `${pkgName}/fesm2022/${file}`);
74
- }
75
- catch { }
54
+ console.log(`[ns-angular-prelink] cached`, `${pkgName}/fesm2022/${file}`);
76
55
  }
77
56
  }
78
57
  }
@@ -91,7 +70,7 @@ export function createAngularPrelinkPlugin(projectRoot) {
91
70
  return {};
92
71
  // Prelink synchronously to ensure alias points to ready files.
93
72
  for (const pkg of pkgs) {
94
- await prelinkPackage(req, pkg, cacheRoot, !!debug);
73
+ await prelinkPackage(req, pkg, cacheRoot, !!debug, projectRoot);
95
74
  }
96
75
  done = true;
97
76
  const alias = [
@@ -108,7 +87,7 @@ export function createAngularPrelinkPlugin(projectRoot) {
108
87
  return;
109
88
  // Fallback: in case config() path was skipped (edge), run once.
110
89
  for (const pkg of pkgs) {
111
- await prelinkPackage(req, pkg, cacheRoot, false);
90
+ await prelinkPackage(req, pkg, cacheRoot, false, projectRoot);
112
91
  }
113
92
  done = true;
114
93
  },
@@ -1 +1 @@
1
- {"version":3,"file":"prelink-angular.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/prelink-angular.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prelink-angular.js","sourceRoot":"","sources":["../../../../packages/vite/helpers/prelink-angular.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,39 @@
1
1
  export declare function getProjectRootPath(): string;
2
+ /**
3
+ * Walk up from `start` looking for the nearest monorepo workspace root.
4
+ *
5
+ * Returns the absolute path of the workspace root, or `null` if none of
6
+ * the supported markers are found before reaching the filesystem root. The
7
+ * search returns the FIRST matching ancestor — so a deeply nested app dir
8
+ * inside an Nx monorepo that happens to also live inside a parent pnpm
9
+ * workspace returns the Nx root (closer to the app) rather than the outer
10
+ * pnpm one. This matches Vite's own `searchForWorkspaceRoot` behaviour.
11
+ *
12
+ * Recognized markers (see {@link MONOREPO_WORKSPACE_MARKERS}):
13
+ * - `pnpm-workspace.yaml` / `pnpm-workspace.yml`
14
+ * - `lerna.json`
15
+ * - `nx.json` (Nx)
16
+ * - `rush.json` (Rush)
17
+ * - `turbo.json` (Turborepo)
18
+ * - `deno.json` / `deno.jsonc` containing a `workspace` field
19
+ * - `package.json` containing a `workspaces` field (npm/yarn workspaces)
20
+ */
21
+ export declare function findMonorepoWorkspaceRoot(start?: string): string | null;
22
+ /**
23
+ * Memoized variant of {@link findMonorepoWorkspaceRoot}.
24
+ *
25
+ * The dev server resolves hoisted `node_modules/<pkg>/...` candidates on
26
+ * every `/ns/m/` request, and each lookup walks the directory tree once
27
+ * doing `existsSync` calls. Since the workspace layout doesn't change at
28
+ * runtime, the result is safe to cache per `start` directory for the
29
+ * lifetime of the dev server process.
30
+ */
31
+ export declare function getMonorepoWorkspaceRoot(start?: string): string | null;
32
+ /**
33
+ * Clear the {@link getMonorepoWorkspaceRoot} memoization cache. Intended
34
+ * for tests that mutate the filesystem inside a temp dir between calls.
35
+ */
36
+ export declare function clearMonorepoWorkspaceRootCache(): void;
2
37
  export declare const __dirname: string;
3
38
  interface IPackageJson {
4
39
  name?: string;
@@ -1,10 +1,128 @@
1
- import { existsSync } from 'fs';
2
- import { resolve } from 'path';
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { dirname, join, resolve } from 'path';
3
3
  import { createRequire } from 'node:module';
4
4
  const require = createRequire(import.meta.url);
5
5
  export function getProjectRootPath() {
6
6
  return process.cwd();
7
7
  }
8
+ // Markers that indicate the directory is a monorepo workspace root. Vite's
9
+ // own `searchForWorkspaceRoot` only knows about pnpm/lerna/yarn|npm
10
+ // `workspaces` and Deno; this list extends it to cover popular JS/TS
11
+ // monorepo tools (Nx, Rush, Turborepo) and any future tool by simply adding
12
+ // a marker file name. The order doesn't matter — we return the first
13
+ // ancestor that has any one of them.
14
+ //
15
+ // Why this matters: when an app lives at `apps/<name>/` inside a monorepo,
16
+ // `process.cwd()` (and therefore Vite's `config.root`) is the app dir. The
17
+ // hoisted `node_modules/` is at the workspace root. If Vite's default
18
+ // `fs.allow` doesn't reach that high, every transform-time fs read of a
19
+ // hoisted package fails with `Failed to load url … Does the file exist?`
20
+ // even though the file is right there on disk. The fix is to widen
21
+ // `server.fs.allow` to the detected workspace root.
22
+ const MONOREPO_WORKSPACE_MARKERS = [
23
+ // Standard JS package-manager workspace files (pnpm/yarn-classic/lerna).
24
+ 'pnpm-workspace.yaml',
25
+ 'pnpm-workspace.yml',
26
+ 'lerna.json',
27
+ // Build orchestrators that are monorepo-by-design.
28
+ 'nx.json',
29
+ 'rush.json',
30
+ 'turbo.json',
31
+ // Deno workspaces.
32
+ 'deno.json',
33
+ 'deno.jsonc',
34
+ ];
35
+ function packageJsonHasWorkspaces(dir) {
36
+ const pkgPath = join(dir, 'package.json');
37
+ if (!existsSync(pkgPath))
38
+ return false;
39
+ try {
40
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
41
+ return !!(pkg && pkg.workspaces);
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ function denoConfigHasWorkspace(dir) {
48
+ for (const name of ['deno.json', 'deno.jsonc']) {
49
+ const p = join(dir, name);
50
+ if (!existsSync(p))
51
+ continue;
52
+ try {
53
+ const cfg = JSON.parse(readFileSync(p, 'utf-8'));
54
+ if (cfg && cfg.workspace)
55
+ return true;
56
+ }
57
+ catch { }
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Walk up from `start` looking for the nearest monorepo workspace root.
63
+ *
64
+ * Returns the absolute path of the workspace root, or `null` if none of
65
+ * the supported markers are found before reaching the filesystem root. The
66
+ * search returns the FIRST matching ancestor — so a deeply nested app dir
67
+ * inside an Nx monorepo that happens to also live inside a parent pnpm
68
+ * workspace returns the Nx root (closer to the app) rather than the outer
69
+ * pnpm one. This matches Vite's own `searchForWorkspaceRoot` behaviour.
70
+ *
71
+ * Recognized markers (see {@link MONOREPO_WORKSPACE_MARKERS}):
72
+ * - `pnpm-workspace.yaml` / `pnpm-workspace.yml`
73
+ * - `lerna.json`
74
+ * - `nx.json` (Nx)
75
+ * - `rush.json` (Rush)
76
+ * - `turbo.json` (Turborepo)
77
+ * - `deno.json` / `deno.jsonc` containing a `workspace` field
78
+ * - `package.json` containing a `workspaces` field (npm/yarn workspaces)
79
+ */
80
+ export function findMonorepoWorkspaceRoot(start = getProjectRootPath()) {
81
+ let current = resolve(start);
82
+ while (true) {
83
+ for (const marker of MONOREPO_WORKSPACE_MARKERS) {
84
+ if (marker.startsWith('deno.')) {
85
+ if (denoConfigHasWorkspace(current))
86
+ return current;
87
+ continue;
88
+ }
89
+ if (existsSync(join(current, marker)))
90
+ return current;
91
+ }
92
+ if (packageJsonHasWorkspaces(current))
93
+ return current;
94
+ const parent = dirname(current);
95
+ if (!parent || parent === current)
96
+ return null;
97
+ current = parent;
98
+ }
99
+ }
100
+ const monorepoWorkspaceRootCache = new Map();
101
+ /**
102
+ * Memoized variant of {@link findMonorepoWorkspaceRoot}.
103
+ *
104
+ * The dev server resolves hoisted `node_modules/<pkg>/...` candidates on
105
+ * every `/ns/m/` request, and each lookup walks the directory tree once
106
+ * doing `existsSync` calls. Since the workspace layout doesn't change at
107
+ * runtime, the result is safe to cache per `start` directory for the
108
+ * lifetime of the dev server process.
109
+ */
110
+ export function getMonorepoWorkspaceRoot(start = getProjectRootPath()) {
111
+ const key = resolve(start);
112
+ if (monorepoWorkspaceRootCache.has(key)) {
113
+ return monorepoWorkspaceRootCache.get(key) ?? null;
114
+ }
115
+ const result = findMonorepoWorkspaceRoot(key);
116
+ monorepoWorkspaceRootCache.set(key, result);
117
+ return result;
118
+ }
119
+ /**
120
+ * Clear the {@link getMonorepoWorkspaceRoot} memoization cache. Intended
121
+ * for tests that mutate the filesystem inside a temp dir between calls.
122
+ */
123
+ export function clearMonorepoWorkspaceRootCache() {
124
+ monorepoWorkspaceRootCache.clear();
125
+ }
8
126
  // Get current directory for ES modules (equivalent to __dirname)
9
127
  export const __dirname = import.meta.dirname;
10
128
  /**