@nativescript/vite 8.0.0-alpha.5 → 8.0.0-alpha.51

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 (424) hide show
  1. package/README.md +51 -11
  2. package/bin/cli.cjs +8 -14
  3. package/configuration/angular.d.ts +34 -1
  4. package/configuration/angular.js +376 -165
  5. package/configuration/angular.js.map +1 -1
  6. package/configuration/base.js +241 -51
  7. package/configuration/base.js.map +1 -1
  8. package/configuration/javascript.js +14 -93
  9. package/configuration/javascript.js.map +1 -1
  10. package/configuration/react.js +41 -73
  11. package/configuration/react.js.map +1 -1
  12. package/configuration/solid.js +51 -6
  13. package/configuration/solid.js.map +1 -1
  14. package/configuration/typescript.js +12 -93
  15. package/configuration/typescript.js.map +1 -1
  16. package/helpers/app-components.d.ts +2 -1
  17. package/helpers/app-components.js.map +1 -1
  18. package/helpers/app-css-state.d.ts +8 -0
  19. package/helpers/app-css-state.js +8 -0
  20. package/helpers/app-css-state.js.map +1 -0
  21. package/helpers/bundler-context.d.ts +11 -0
  22. package/helpers/bundler-context.js +71 -0
  23. package/helpers/bundler-context.js.map +1 -0
  24. package/helpers/cli-flags.d.ts +12 -0
  25. package/helpers/cli-flags.js +34 -0
  26. package/helpers/cli-flags.js.map +1 -1
  27. package/helpers/css-platform-plugin.d.ts +14 -0
  28. package/helpers/css-platform-plugin.js +43 -25
  29. package/helpers/css-platform-plugin.js.map +1 -1
  30. package/helpers/dev-host.d.ts +360 -0
  31. package/helpers/dev-host.js +694 -0
  32. package/helpers/dev-host.js.map +1 -0
  33. package/helpers/dynamic-import-plugin.js +1 -1
  34. package/helpers/dynamic-import-plugin.js.map +1 -1
  35. package/helpers/esbuild-platform-resolver.js +4 -1
  36. package/helpers/esbuild-platform-resolver.js.map +1 -1
  37. package/helpers/external-configs.d.ts +10 -12
  38. package/helpers/external-configs.js +58 -35
  39. package/helpers/external-configs.js.map +1 -1
  40. package/helpers/global-defines.d.ts +142 -0
  41. package/helpers/global-defines.js +213 -11
  42. package/helpers/global-defines.js.map +1 -1
  43. package/helpers/hmr-scope.d.ts +26 -0
  44. package/helpers/hmr-scope.js +67 -0
  45. package/helpers/hmr-scope.js.map +1 -0
  46. package/helpers/init.js +0 -18
  47. package/helpers/init.js.map +1 -1
  48. package/helpers/logging.d.ts +1 -0
  49. package/helpers/logging.js +65 -4
  50. package/helpers/logging.js.map +1 -1
  51. package/helpers/main-entry.d.ts +3 -1
  52. package/helpers/main-entry.js +301 -53
  53. package/helpers/main-entry.js.map +1 -1
  54. package/helpers/nativeclass-esbuild-plugin.d.ts +2 -1
  55. package/helpers/nativeclass-esbuild-plugin.js.map +1 -1
  56. package/helpers/nativeclass-transform.js +5 -6
  57. package/helpers/nativeclass-transform.js.map +1 -1
  58. package/helpers/nativeclass-transformer-plugin.d.ts +9 -2
  59. package/helpers/nativeclass-transformer-plugin.js +157 -14
  60. package/helpers/nativeclass-transformer-plugin.js.map +1 -1
  61. package/helpers/nativescript-package-resolver.js +10 -62
  62. package/helpers/nativescript-package-resolver.js.map +1 -1
  63. package/helpers/normalize-id.d.ts +42 -0
  64. package/helpers/normalize-id.js +60 -0
  65. package/helpers/normalize-id.js.map +1 -0
  66. package/helpers/ns-core-url.d.ts +29 -7
  67. package/helpers/ns-core-url.js +69 -12
  68. package/helpers/ns-core-url.js.map +1 -1
  69. package/helpers/optimize-deps.d.ts +16 -0
  70. package/helpers/optimize-deps.js +17 -0
  71. package/helpers/optimize-deps.js.map +1 -0
  72. package/helpers/package-platform-aliases.js +34 -49
  73. package/helpers/package-platform-aliases.js.map +1 -1
  74. package/helpers/platform-types.d.ts +2 -0
  75. package/helpers/platform-types.js +2 -0
  76. package/helpers/platform-types.js.map +1 -0
  77. package/helpers/postcss-platform-config.d.ts +17 -1
  78. package/helpers/postcss-platform-config.js +20 -37
  79. package/helpers/postcss-platform-config.js.map +1 -1
  80. package/helpers/project.d.ts +35 -0
  81. package/helpers/project.js +120 -2
  82. package/helpers/project.js.map +1 -1
  83. package/helpers/resolve-main-field-platform.d.ts +20 -0
  84. package/helpers/resolve-main-field-platform.js +49 -0
  85. package/helpers/resolve-main-field-platform.js.map +1 -0
  86. package/helpers/resolver.js +17 -2
  87. package/helpers/resolver.js.map +1 -1
  88. package/helpers/theme-core-plugins.js +1 -1
  89. package/helpers/theme-core-plugins.js.map +1 -1
  90. package/helpers/ts-config-paths.d.ts +14 -0
  91. package/helpers/ts-config-paths.js +90 -9
  92. package/helpers/ts-config-paths.js.map +1 -1
  93. package/helpers/typescript-check.d.ts +2 -1
  94. package/helpers/typescript-check.js +2 -2
  95. package/helpers/typescript-check.js.map +1 -1
  96. package/helpers/ui-registration.d.ts +21 -0
  97. package/helpers/ui-registration.js +156 -0
  98. package/helpers/ui-registration.js.map +1 -0
  99. package/helpers/utils.d.ts +9 -0
  100. package/helpers/utils.js +22 -2
  101. package/helpers/utils.js.map +1 -1
  102. package/helpers/workers.d.ts +20 -19
  103. package/helpers/workers.js +624 -4
  104. package/helpers/workers.js.map +1 -1
  105. package/hmr/client/css-handler.d.ts +2 -1
  106. package/hmr/client/css-handler.js +50 -26
  107. package/hmr/client/css-handler.js.map +1 -1
  108. package/hmr/client/css-update-overlay.d.ts +18 -0
  109. package/hmr/client/css-update-overlay.js +27 -0
  110. package/hmr/client/css-update-overlay.js.map +1 -0
  111. package/hmr/client/framework-client-strategy.d.ts +79 -0
  112. package/hmr/client/framework-client-strategy.js +19 -0
  113. package/hmr/client/framework-client-strategy.js.map +1 -0
  114. package/hmr/client/hmr-pending-overlay.d.ts +13 -0
  115. package/hmr/client/hmr-pending-overlay.js +60 -0
  116. package/hmr/client/hmr-pending-overlay.js.map +1 -0
  117. package/hmr/client/index.js +891 -220
  118. package/hmr/client/index.js.map +1 -1
  119. package/hmr/client/utils.d.ts +7 -1
  120. package/hmr/client/utils.js +207 -29
  121. package/hmr/client/utils.js.map +1 -1
  122. package/hmr/entry-runtime.d.ts +2 -1
  123. package/hmr/entry-runtime.js +256 -69
  124. package/hmr/entry-runtime.js.map +1 -1
  125. package/hmr/frameworks/angular/build/angular-linker.d.ts +12 -0
  126. package/hmr/frameworks/angular/build/angular-linker.js +109 -0
  127. package/hmr/frameworks/angular/build/angular-linker.js.map +1 -0
  128. package/hmr/frameworks/angular/build/inject-component-hmr-registration.d.ts +112 -0
  129. package/hmr/frameworks/angular/build/inject-component-hmr-registration.js +291 -0
  130. package/hmr/frameworks/angular/build/inject-component-hmr-registration.js.map +1 -0
  131. package/hmr/frameworks/angular/build/inject-hmr-vite-ignore.d.ts +75 -0
  132. package/hmr/frameworks/angular/build/inject-hmr-vite-ignore.js +221 -0
  133. package/hmr/frameworks/angular/build/inject-hmr-vite-ignore.js.map +1 -0
  134. package/{helpers/angular → hmr/frameworks/angular/build}/inline-decorator-component-templates.js +1 -170
  135. package/hmr/frameworks/angular/build/inline-decorator-component-templates.js.map +1 -0
  136. package/hmr/frameworks/angular/build/js-lexer.d.ts +4 -0
  137. package/{helpers/angular/synthesize-decorator-ctor-parameters.js → hmr/frameworks/angular/build/js-lexer.js} +22 -96
  138. package/hmr/frameworks/angular/build/js-lexer.js.map +1 -0
  139. package/hmr/frameworks/angular/build/shared-linker.d.ts +39 -0
  140. package/hmr/frameworks/angular/build/shared-linker.js +128 -0
  141. package/hmr/frameworks/angular/build/shared-linker.js.map +1 -0
  142. package/hmr/frameworks/angular/build/synthesize-decorator-ctor-parameters.js +88 -0
  143. package/hmr/frameworks/angular/build/synthesize-decorator-ctor-parameters.js.map +1 -0
  144. package/{helpers/angular → hmr/frameworks/angular/build}/synthesize-injectable-factories.js +1 -174
  145. package/hmr/frameworks/angular/build/synthesize-injectable-factories.js.map +1 -0
  146. package/{helpers/angular → hmr/frameworks/angular/build}/util.d.ts +1 -0
  147. package/hmr/frameworks/angular/build/util.js +155 -0
  148. package/hmr/frameworks/angular/build/util.js.map +1 -0
  149. package/hmr/frameworks/angular/client/index.d.ts +1 -0
  150. package/hmr/frameworks/angular/client/index.js +859 -21
  151. package/hmr/frameworks/angular/client/index.js.map +1 -1
  152. package/hmr/frameworks/angular/client/strategy.d.ts +9 -0
  153. package/hmr/frameworks/angular/client/strategy.js +19 -0
  154. package/hmr/frameworks/angular/client/strategy.js.map +1 -0
  155. package/hmr/frameworks/angular/server/angular-root-component.d.ts +79 -0
  156. package/hmr/frameworks/angular/server/angular-root-component.js +149 -0
  157. package/hmr/frameworks/angular/server/angular-root-component.js.map +1 -0
  158. package/hmr/frameworks/angular/server/linker.js +1 -4
  159. package/hmr/frameworks/angular/server/linker.js.map +1 -1
  160. package/hmr/frameworks/angular/server/strategy.js +460 -12
  161. package/hmr/frameworks/angular/server/strategy.js.map +1 -1
  162. package/hmr/{server → frameworks/angular/server}/websocket-angular-entry.js +2 -2
  163. package/hmr/frameworks/angular/server/websocket-angular-entry.js.map +1 -0
  164. package/hmr/{server → frameworks/angular/server}/websocket-angular-hot-update.d.ts +17 -11
  165. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js +336 -0
  166. package/hmr/frameworks/angular/server/websocket-angular-hot-update.js.map +1 -0
  167. package/hmr/frameworks/react/server/strategy.d.ts +2 -0
  168. package/hmr/frameworks/react/server/strategy.js +150 -0
  169. package/hmr/frameworks/react/server/strategy.js.map +1 -0
  170. package/hmr/frameworks/solid/build/solid-jsx-deps.d.ts +15 -0
  171. package/hmr/frameworks/solid/build/solid-jsx-deps.js +178 -0
  172. package/hmr/frameworks/solid/build/solid-jsx-deps.js.map +1 -0
  173. package/hmr/frameworks/solid/client/app-runtime.d.ts +54 -0
  174. package/hmr/frameworks/solid/client/app-runtime.js +184 -0
  175. package/hmr/frameworks/solid/client/app-runtime.js.map +1 -0
  176. package/hmr/frameworks/solid/server/strategy.js +291 -16
  177. package/hmr/frameworks/solid/server/strategy.js.map +1 -1
  178. package/hmr/frameworks/typescript/server/strategy.js +38 -14
  179. package/hmr/frameworks/typescript/server/strategy.js.map +1 -1
  180. package/hmr/frameworks/vue/client/dep-propagation.d.ts +36 -0
  181. package/hmr/frameworks/vue/client/dep-propagation.js +101 -0
  182. package/hmr/frameworks/vue/client/dep-propagation.js.map +1 -0
  183. package/hmr/frameworks/vue/client/index.d.ts +8 -0
  184. package/hmr/frameworks/vue/client/index.js +56 -243
  185. package/hmr/frameworks/vue/client/index.js.map +1 -1
  186. package/hmr/frameworks/vue/client/strategy.d.ts +33 -0
  187. package/hmr/frameworks/vue/client/strategy.js +157 -0
  188. package/hmr/frameworks/vue/client/strategy.js.map +1 -0
  189. package/hmr/frameworks/vue/client/vue-sfc-update-overlay.d.ts +49 -0
  190. package/hmr/frameworks/vue/client/vue-sfc-update-overlay.js +142 -0
  191. package/hmr/frameworks/vue/client/vue-sfc-update-overlay.js.map +1 -0
  192. package/hmr/frameworks/vue/server/sfc-route-assemble.d.ts +7 -0
  193. package/hmr/frameworks/vue/server/sfc-route-assemble.js +747 -0
  194. package/hmr/frameworks/vue/server/sfc-route-assemble.js.map +1 -0
  195. package/hmr/frameworks/vue/server/sfc-route-meta.d.ts +7 -0
  196. package/hmr/frameworks/vue/server/sfc-route-meta.js +80 -0
  197. package/hmr/frameworks/vue/server/sfc-route-meta.js.map +1 -0
  198. package/hmr/frameworks/vue/server/sfc-route-serve.d.ts +8 -0
  199. package/hmr/frameworks/vue/server/sfc-route-serve.js +459 -0
  200. package/hmr/frameworks/vue/server/sfc-route-serve.js.map +1 -0
  201. package/hmr/frameworks/vue/server/sfc-route-shared.d.ts +38 -0
  202. package/hmr/frameworks/vue/server/sfc-route-shared.js +48 -0
  203. package/hmr/frameworks/vue/server/sfc-route-shared.js.map +1 -0
  204. package/hmr/frameworks/vue/server/strategy.d.ts +35 -0
  205. package/hmr/frameworks/vue/server/strategy.js +278 -1
  206. package/hmr/frameworks/vue/server/strategy.js.map +1 -1
  207. package/hmr/frameworks/vue/server/websocket-sfc.d.ts +15 -0
  208. package/hmr/frameworks/vue/server/websocket-sfc.js +20 -0
  209. package/hmr/frameworks/vue/server/websocket-sfc.js.map +1 -0
  210. package/hmr/helpers/ast-normalizer.d.ts +3 -1
  211. package/hmr/helpers/ast-normalizer.js +77 -10
  212. package/hmr/helpers/ast-normalizer.js.map +1 -1
  213. package/hmr/helpers/cjs-named-exports.d.ts +23 -0
  214. package/hmr/helpers/cjs-named-exports.js +152 -0
  215. package/hmr/helpers/cjs-named-exports.js.map +1 -0
  216. package/hmr/helpers/package-exports.d.ts +16 -0
  217. package/hmr/helpers/package-exports.js +396 -0
  218. package/hmr/helpers/package-exports.js.map +1 -0
  219. package/hmr/server/constants.js +20 -5
  220. package/hmr/server/constants.js.map +1 -1
  221. package/hmr/server/core-sanitize.d.ts +86 -7
  222. package/hmr/server/core-sanitize.js +170 -45
  223. package/hmr/server/core-sanitize.js.map +1 -1
  224. package/hmr/server/device-transform-helpers.d.ts +24 -0
  225. package/hmr/server/device-transform-helpers.js +408 -0
  226. package/hmr/server/device-transform-helpers.js.map +1 -0
  227. package/hmr/server/framework-strategy.d.ts +108 -11
  228. package/hmr/server/hmr-module-graph.d.ts +37 -0
  229. package/hmr/server/hmr-module-graph.js +214 -0
  230. package/hmr/server/hmr-module-graph.js.map +1 -0
  231. package/hmr/server/import-map.d.ts +11 -2
  232. package/hmr/server/import-map.js +92 -45
  233. package/hmr/server/import-map.js.map +1 -1
  234. package/hmr/server/index.js +7 -16
  235. package/hmr/server/index.js.map +1 -1
  236. package/hmr/server/ns-core-cjs-shape.d.ts +2 -4
  237. package/hmr/server/ns-core-cjs-shape.js +4 -6
  238. package/hmr/server/ns-core-cjs-shape.js.map +1 -1
  239. package/hmr/server/ns-rt-bridge.d.ts +51 -0
  240. package/hmr/server/ns-rt-bridge.js +131 -0
  241. package/hmr/server/ns-rt-bridge.js.map +1 -0
  242. package/hmr/server/ns-rt-route.d.ts +5 -0
  243. package/hmr/server/ns-rt-route.js +38 -0
  244. package/hmr/server/ns-rt-route.js.map +1 -0
  245. package/hmr/server/perf-instrumentation.d.ts +114 -0
  246. package/hmr/server/perf-instrumentation.js +197 -0
  247. package/hmr/server/perf-instrumentation.js.map +1 -0
  248. package/hmr/server/process-code-for-device.d.ts +14 -0
  249. package/hmr/server/process-code-for-device.js +699 -0
  250. package/hmr/server/process-code-for-device.js.map +1 -0
  251. package/hmr/server/require-guard.d.ts +1 -0
  252. package/hmr/server/require-guard.js +12 -0
  253. package/hmr/server/require-guard.js.map +1 -0
  254. package/hmr/server/rewrite-imports.d.ts +2 -0
  255. package/hmr/server/rewrite-imports.js +630 -0
  256. package/hmr/server/rewrite-imports.js.map +1 -0
  257. package/hmr/server/route-helpers.d.ts +7 -0
  258. package/hmr/server/route-helpers.js +13 -0
  259. package/hmr/server/route-helpers.js.map +1 -0
  260. package/hmr/server/server-origin.d.ts +2 -0
  261. package/hmr/server/server-origin.js +83 -0
  262. package/hmr/server/server-origin.js.map +1 -0
  263. package/hmr/server/shared-transform-request.js +13 -7
  264. package/hmr/server/shared-transform-request.js.map +1 -1
  265. package/hmr/server/transform-cache-invalidation.d.ts +37 -0
  266. package/hmr/server/transform-cache-invalidation.js +156 -0
  267. package/hmr/server/transform-cache-invalidation.js.map +1 -0
  268. package/hmr/server/vendor-bare-module-shims.d.ts +4 -0
  269. package/hmr/server/vendor-bare-module-shims.js +80 -0
  270. package/hmr/server/vendor-bare-module-shims.js.map +1 -0
  271. package/hmr/server/vite-plugin.js +78 -42
  272. package/hmr/server/vite-plugin.js.map +1 -1
  273. package/hmr/server/websocket-core-bridge.d.ts +45 -4
  274. package/hmr/server/websocket-core-bridge.js +50 -48
  275. package/hmr/server/websocket-core-bridge.js.map +1 -1
  276. package/hmr/server/websocket-css-hot-update.d.ts +33 -0
  277. package/hmr/server/websocket-css-hot-update.js +65 -0
  278. package/hmr/server/websocket-css-hot-update.js.map +1 -0
  279. package/hmr/server/websocket-device-transform.d.ts +3 -0
  280. package/hmr/server/websocket-device-transform.js +7 -0
  281. package/hmr/server/websocket-device-transform.js.map +1 -0
  282. package/hmr/server/websocket-graph-upsert.d.ts +15 -0
  283. package/hmr/server/websocket-graph-upsert.js +20 -0
  284. package/hmr/server/websocket-graph-upsert.js.map +1 -1
  285. package/hmr/server/websocket-hmr-pending.d.ts +37 -0
  286. package/hmr/server/websocket-hmr-pending.js +55 -0
  287. package/hmr/server/websocket-hmr-pending.js.map +1 -0
  288. package/hmr/server/websocket-hot-update.d.ts +77 -0
  289. package/hmr/server/websocket-hot-update.js +360 -0
  290. package/hmr/server/websocket-hot-update.js.map +1 -0
  291. package/hmr/server/websocket-import-map-route.d.ts +15 -0
  292. package/hmr/server/websocket-import-map-route.js +50 -0
  293. package/hmr/server/websocket-import-map-route.js.map +1 -0
  294. package/hmr/server/websocket-module-bindings.js +3 -3
  295. package/hmr/server/websocket-module-bindings.js.map +1 -1
  296. package/hmr/server/websocket-module-specifiers.d.ts +66 -2
  297. package/hmr/server/websocket-module-specifiers.js +191 -20
  298. package/hmr/server/websocket-module-specifiers.js.map +1 -1
  299. package/hmr/server/websocket-ns-core.d.ts +21 -0
  300. package/hmr/server/websocket-ns-core.js +311 -0
  301. package/hmr/server/websocket-ns-core.js.map +1 -0
  302. package/hmr/server/websocket-ns-entry.d.ts +21 -0
  303. package/hmr/server/websocket-ns-entry.js +164 -0
  304. package/hmr/server/websocket-ns-entry.js.map +1 -0
  305. package/hmr/server/websocket-ns-m-paths.d.ts +1 -1
  306. package/hmr/server/websocket-ns-m-paths.js +58 -13
  307. package/hmr/server/websocket-ns-m-paths.js.map +1 -1
  308. package/hmr/server/websocket-ns-m-request.d.ts +11 -1
  309. package/hmr/server/websocket-ns-m-request.js +18 -25
  310. package/hmr/server/websocket-ns-m-request.js.map +1 -1
  311. package/hmr/server/websocket-ns-m.d.ts +33 -0
  312. package/hmr/server/websocket-ns-m.js +752 -0
  313. package/hmr/server/websocket-ns-m.js.map +1 -0
  314. package/hmr/server/websocket-served-module-helpers.d.ts +49 -3
  315. package/hmr/server/websocket-served-module-helpers.js +403 -87
  316. package/hmr/server/websocket-served-module-helpers.js.map +1 -1
  317. package/hmr/server/websocket-txn.js +2 -8
  318. package/hmr/server/websocket-txn.js.map +1 -1
  319. package/hmr/server/websocket-vendor-unifier.d.ts +0 -1
  320. package/hmr/server/websocket-vendor-unifier.js +4 -9
  321. package/hmr/server/websocket-vendor-unifier.js.map +1 -1
  322. package/hmr/server/websocket.d.ts +8 -39
  323. package/hmr/server/websocket.js +608 -6300
  324. package/hmr/server/websocket.js.map +1 -1
  325. package/hmr/shared/ns-globals.d.ts +118 -0
  326. package/hmr/shared/ns-globals.js +29 -0
  327. package/hmr/shared/ns-globals.js.map +1 -0
  328. package/hmr/shared/protocol.d.ts +145 -0
  329. package/hmr/shared/protocol.js +28 -0
  330. package/hmr/shared/protocol.js.map +1 -0
  331. package/hmr/shared/runtime/boot-placeholder-ui.d.ts +69 -0
  332. package/hmr/shared/runtime/boot-placeholder-ui.js +101 -0
  333. package/hmr/shared/runtime/boot-placeholder-ui.js.map +1 -0
  334. package/hmr/shared/runtime/boot-progress.d.ts +44 -0
  335. package/hmr/shared/runtime/boot-progress.js +133 -0
  336. package/hmr/shared/runtime/boot-progress.js.map +1 -0
  337. package/hmr/shared/runtime/boot-timeline.d.ts +18 -0
  338. package/hmr/shared/runtime/boot-timeline.js +42 -0
  339. package/hmr/shared/runtime/boot-timeline.js.map +1 -0
  340. package/hmr/shared/runtime/browser-runtime-contract.js.map +1 -1
  341. package/hmr/shared/runtime/dev-overlay-snapshots.d.ts +31 -0
  342. package/hmr/shared/runtime/dev-overlay-snapshots.js +324 -0
  343. package/hmr/shared/runtime/dev-overlay-snapshots.js.map +1 -0
  344. package/hmr/shared/runtime/dev-overlay.d.ts +119 -26
  345. package/hmr/shared/runtime/dev-overlay.js +1196 -262
  346. package/hmr/shared/runtime/dev-overlay.js.map +1 -1
  347. package/hmr/shared/runtime/global-scope.d.ts +18 -0
  348. package/hmr/shared/runtime/global-scope.js +21 -0
  349. package/hmr/shared/runtime/global-scope.js.map +1 -0
  350. package/hmr/shared/runtime/hooks.js +2 -1
  351. package/hmr/shared/runtime/hooks.js.map +1 -1
  352. package/hmr/shared/runtime/http-only-boot.js +7 -6
  353. package/hmr/shared/runtime/http-only-boot.js.map +1 -1
  354. package/hmr/shared/runtime/module-provenance.js +4 -6
  355. package/hmr/shared/runtime/module-provenance.js.map +1 -1
  356. package/hmr/shared/runtime/root-placeholder-view.d.ts +19 -0
  357. package/hmr/shared/runtime/root-placeholder-view.js +311 -0
  358. package/hmr/shared/runtime/root-placeholder-view.js.map +1 -0
  359. package/hmr/shared/runtime/root-placeholder.js +393 -200
  360. package/hmr/shared/runtime/root-placeholder.js.map +1 -1
  361. package/hmr/shared/runtime/session-bootstrap.js +168 -4
  362. package/hmr/shared/runtime/session-bootstrap.js.map +1 -1
  363. package/hmr/shared/runtime/vendor-bootstrap.js +3 -10
  364. package/hmr/shared/runtime/vendor-bootstrap.js.map +1 -1
  365. package/hmr/shared/vendor/manifest-collect.d.ts +4 -0
  366. package/hmr/shared/vendor/manifest-collect.js +549 -0
  367. package/hmr/shared/vendor/manifest-collect.js.map +1 -0
  368. package/hmr/shared/vendor/manifest-loader.d.ts +2 -1
  369. package/hmr/shared/vendor/manifest-loader.js +5 -3
  370. package/hmr/shared/vendor/manifest-loader.js.map +1 -1
  371. package/hmr/shared/vendor/manifest.d.ts +1 -7
  372. package/hmr/shared/vendor/manifest.js +84 -819
  373. package/hmr/shared/vendor/manifest.js.map +1 -1
  374. package/hmr/shared/vendor/vendor-device-shim.d.ts +1 -0
  375. package/hmr/shared/vendor/vendor-device-shim.js +208 -0
  376. package/hmr/shared/vendor/vendor-device-shim.js.map +1 -0
  377. package/hmr/shared/vendor/vendor-esbuild-plugins.d.ts +38 -0
  378. package/hmr/shared/vendor/vendor-esbuild-plugins.js +296 -0
  379. package/hmr/shared/vendor/vendor-esbuild-plugins.js.map +1 -0
  380. package/hmr/vendor-bootstrap.d.ts +1 -3
  381. package/hmr/vendor-bootstrap.js +4 -6
  382. package/hmr/vendor-bootstrap.js.map +1 -1
  383. package/index.d.ts +1 -0
  384. package/index.js +5 -0
  385. package/index.js.map +1 -1
  386. package/package.json +61 -11
  387. package/runtime/core-aliases-early.js +25 -55
  388. package/runtime/core-aliases-early.js.map +1 -1
  389. package/shims/react-jsx-runtime.d.ts +4 -0
  390. package/shims/react-jsx-runtime.js +61 -0
  391. package/shims/react-jsx-runtime.js.map +1 -0
  392. package/helpers/angular/angular-linker.d.ts +0 -13
  393. package/helpers/angular/angular-linker.js +0 -194
  394. package/helpers/angular/angular-linker.js.map +0 -1
  395. package/helpers/angular/inline-decorator-component-templates.js.map +0 -1
  396. package/helpers/angular/shared-linker.d.ts +0 -11
  397. package/helpers/angular/shared-linker.js +0 -75
  398. package/helpers/angular/shared-linker.js.map +0 -1
  399. package/helpers/angular/synthesize-decorator-ctor-parameters.js.map +0 -1
  400. package/helpers/angular/synthesize-injectable-factories.js.map +0 -1
  401. package/helpers/angular/util.js +0 -67
  402. package/helpers/angular/util.js.map +0 -1
  403. package/helpers/prelink-angular.d.ts +0 -2
  404. package/helpers/prelink-angular.js +0 -117
  405. package/helpers/prelink-angular.js.map +0 -1
  406. package/hmr/server/websocket-angular-entry.js.map +0 -1
  407. package/hmr/server/websocket-angular-hot-update.js +0 -239
  408. package/hmr/server/websocket-angular-hot-update.js.map +0 -1
  409. package/hmr/server/websocket-ns-m-finalize.d.ts +0 -22
  410. package/hmr/server/websocket-ns-m-finalize.js +0 -88
  411. package/hmr/server/websocket-ns-m-finalize.js.map +0 -1
  412. package/hmr/server/websocket-runtime-compat.d.ts +0 -19
  413. package/hmr/server/websocket-runtime-compat.js +0 -286
  414. package/hmr/server/websocket-runtime-compat.js.map +0 -1
  415. package/hmr/server/websocket-vue-sfc.d.ts +0 -27
  416. package/hmr/server/websocket-vue-sfc.js +0 -1117
  417. package/hmr/server/websocket-vue-sfc.js.map +0 -1
  418. package/transformers/NativeClass/index.d.ts +0 -2
  419. package/transformers/NativeClass/index.js +0 -222
  420. package/transformers/NativeClass/index.js.map +0 -1
  421. /package/{helpers/angular → hmr/frameworks/angular/build}/inline-decorator-component-templates.d.ts +0 -0
  422. /package/{helpers/angular → hmr/frameworks/angular/build}/synthesize-decorator-ctor-parameters.d.ts +0 -0
  423. /package/{helpers/angular → hmr/frameworks/angular/build}/synthesize-injectable-factories.d.ts +0 -0
  424. /package/hmr/{server → frameworks/angular/server}/websocket-angular-entry.d.ts +0 -0
@@ -0,0 +1,747 @@
1
+ import { createHash } from 'crypto';
2
+ import { readFileSync } from 'fs';
3
+ import * as path from 'path';
4
+ import babelCore from '@babel/core';
5
+ import { setDeviceModuleHeaders } from '../../../server/route-helpers.js';
6
+ import { astExtractImportsAndStripTypes } from '../../../helpers/ast-extract.js';
7
+ import { astNormalizeModuleImportsAndHelpers, astVerifyAndAnnotateDuplicates } from '../../../helpers/ast-normalizer.js';
8
+ import { buildInlineTemplateBlock, extractTemplateRender } from './sfc-transforms.js';
9
+ import { NS_NATIVE_TAGS } from '../../../server/compiler.js';
10
+ import { ensureDestructureCoreImports, ensureGuardPlainDynamicImports, ensureVariableDynamicImportHelper, ensureVersionedRtImports } from '../../../server/websocket-served-module-helpers.js';
11
+ import { processCodeForDevice, rewriteImports } from '../../../server/websocket-device-transform.js';
12
+ import { REQUIRE_GUARD_SNIPPET } from '../../../server/require-guard.js';
13
+ import { getServerOrigin } from '../../../server/server-origin.js';
14
+ import { compileScript, compileTemplate, ensureVersionedNsMAppImports, parse, pluginTransformTypescript } from './sfc-route-shared.js';
15
+ // Cache assembled SFC modules keyed on `base | version | source-content-hash`.
16
+ // The source hash in the key means a changed SFC always produces a new key —
17
+ // stale output can never be served — and a new graph version (HMR) also rotates
18
+ // the key. This skips the full compile (compileScript ×N + multiple Babel
19
+ // passes) on repeat requests for unchanged content. Bounded with FIFO eviction.
20
+ const sfcAsmCache = new Map();
21
+ const SFC_ASM_CACHE_MAX = 128;
22
+ function setAsmCache(key, value) {
23
+ if (sfcAsmCache.has(key))
24
+ sfcAsmCache.delete(key);
25
+ sfcAsmCache.set(key, value);
26
+ if (sfcAsmCache.size > SFC_ASM_CACHE_MAX) {
27
+ const oldest = sfcAsmCache.keys().next().value;
28
+ if (oldest !== undefined)
29
+ sfcAsmCache.delete(oldest);
30
+ }
31
+ }
32
+ /**
33
+ * Registers `GET /ns/asm` — the deterministic, self-contained SFC assembler module.
34
+ * Extracted verbatim from `websocket-sfc.ts` (pure move, no behavior change).
35
+ */
36
+ export function registerSfcAsmRoute(server, options) {
37
+ // 5) Deterministic SFC assembler: GET /ns/asm?path=/src/Comp.vue
38
+ // Place BEFORE any broader /ns/sfc* handlers that might accidentally match and delegate.
39
+ server.middlewares.use(async (req, res, next) => {
40
+ const strategy = options.getStrategy();
41
+ let asmCacheKey = null;
42
+ try {
43
+ const urlObj = new URL(req.url || '', 'http://localhost');
44
+ if (!urlObj.pathname.startsWith('/ns/asm'))
45
+ return next();
46
+ setDeviceModuleHeaders(res);
47
+ // Optional version segment as first path component after /ns/asm
48
+ const asmBase = '/ns/asm';
49
+ const asmRemainder = urlObj.pathname.slice(asmBase.length) || '';
50
+ let verFromPath = null;
51
+ if (asmRemainder && asmRemainder.startsWith('/')) {
52
+ const p = asmRemainder.split('/');
53
+ if (p.length > 1 && /^[0-9]+$/.test(p[1] || '')) {
54
+ verFromPath = p[1];
55
+ }
56
+ }
57
+ let spec = urlObj.searchParams.get('path') || '';
58
+ const diag = urlObj.searchParams.get('diag') === '1';
59
+ if (!spec) {
60
+ res.statusCode = 400;
61
+ res.end('export {}\n');
62
+ return;
63
+ }
64
+ if (spec.startsWith('@/'))
65
+ spec = options.appVirtualWithSlash + spec.slice(2);
66
+ if (!spec.startsWith('/'))
67
+ spec = '/' + spec;
68
+ const base = spec.replace(/[?#].*$/, '');
69
+ if (diag) {
70
+ const code = `// [sfc-asm] ${base} (diag)\n` + `// vue shim for diag-only instantiation\n` + `var _createElementVNode = globalThis.createElementVNode || globalThis._createElementVNode;\n` + `const __ns_sfc__ = { name: ${JSON.stringify(base.split('/').pop() || 'DiagComp')}, render(){ return _createElementVNode ? _createElementVNode('StackLayout') : (globalThis.createElementVNode ? globalThis.createElementVNode('StackLayout') : {}); } };\nexport default __ns_sfc__;\n`;
71
+ res.statusCode = 200;
72
+ res.end(code);
73
+ return;
74
+ }
75
+ const projectRoot = server.config?.root || process.cwd();
76
+ // Ensure variant transforms exist so imports resolve (avoid Promise.all short-circuit on single failure)
77
+ const safeTransform = async (cand) => {
78
+ try {
79
+ return await server.transformRequest(cand);
80
+ }
81
+ catch {
82
+ return null;
83
+ }
84
+ };
85
+ const scriptR = await safeTransform(base + '?vue&type=script');
86
+ const templateR = await safeTransform(base + '?vue&type=template');
87
+ // Warm Vite's transform cache for the full-SFC URL; result is unused (the
88
+ // assembler reads the SFC from disk and compiles it inline below).
89
+ await safeTransform(base + '?vue');
90
+ const origin = getServerOrigin(server);
91
+ // Preserve graph version 0 (a valid, falsy version): `||` would fall
92
+ // through to a non-deterministic Date.now() timestamp, giving the same
93
+ // SFC a different URL on every fetch (defeats the device module cache
94
+ // and disagrees with the client, which sends ver='0').
95
+ const graphVer = options.getGraphVersion();
96
+ const ver = String(verFromPath ?? (graphVer != null ? graphVer : Date.now()));
97
+ const scriptUrl = `${origin}/ns/sfc/${ver}${base}?vue&type=script`;
98
+ const templateCode = templateR?.code || '';
99
+ // INLINE-FIRST assembler: compile SFC source into a self-contained ESM module (enhanced diagnostics)
100
+ try {
101
+ const root = server.config?.root || process.cwd();
102
+ const abs = path.join(root, base.replace(/^\//, ''));
103
+ let sfcSrc = '';
104
+ try {
105
+ sfcSrc = readFileSync(abs, 'utf-8');
106
+ }
107
+ catch { }
108
+ if (sfcSrc) {
109
+ // Content+version keyed cache: serve a prior assembly of identical
110
+ // source for this base/version without recompiling.
111
+ asmCacheKey = `${base}|${ver}|${createHash('md5').update(sfcSrc).digest('hex')}`;
112
+ const cachedAsm = sfcAsmCache.get(asmCacheKey);
113
+ if (cachedAsm !== undefined) {
114
+ res.statusCode = 200;
115
+ res.end(cachedAsm);
116
+ return;
117
+ }
118
+ const { descriptor } = parse(sfcSrc, { filename: abs });
119
+ const id = createHash('md5').update(abs).digest('hex').slice(0, 8);
120
+ // 1) Compile script (prefer inlineTemplate for a complete module)
121
+ let compiledScript = '';
122
+ let bindingMetadata = undefined;
123
+ let usedInlineScript = false;
124
+ try {
125
+ // First try inlineTemplate for a holistic, self-contained module with render + hoists
126
+ // Use a strict NativeScript native element detector for inlineTemplate that does NOT treat generic PascalCase as native.
127
+ // This ensures imported components like PageWrapper remain true components and get referenced via bindings.
128
+ const isNSNative = (tag) => NS_NATIVE_TAGS.has(tag);
129
+ const sInline = compileScript(descriptor, {
130
+ id,
131
+ inlineTemplate: true,
132
+ reactivityTransform: false,
133
+ // Pass only strict NS native element predicate; avoid broad PascalCase heuristic here.
134
+ templateOptions: {
135
+ compilerOptions: { isCustomElement: isNSNative },
136
+ },
137
+ });
138
+ if (/export\s+default/.test(sInline?.content || '')) {
139
+ compiledScript = sInline.content;
140
+ bindingMetadata = sInline?.bindings;
141
+ usedInlineScript = true;
142
+ }
143
+ else {
144
+ // Fallback to standard script (no inline) and attempt separate template compile
145
+ const s = compileScript(descriptor, {
146
+ id,
147
+ inlineTemplate: false,
148
+ reactivityTransform: false,
149
+ });
150
+ compiledScript = s?.content || '';
151
+ bindingMetadata = s?.bindings;
152
+ usedInlineScript = false;
153
+ }
154
+ }
155
+ catch (eScript) {
156
+ if (options.verbose) {
157
+ console.warn('[sfc-asm][compileScript] failed', base, eScript?.message);
158
+ }
159
+ // Retry without inlineTemplate
160
+ try {
161
+ const s = compileScript(descriptor, {
162
+ id,
163
+ inlineTemplate: false,
164
+ reactivityTransform: false,
165
+ });
166
+ compiledScript = s?.content || '';
167
+ bindingMetadata = s?.bindings;
168
+ usedInlineScript = false;
169
+ }
170
+ catch (eNoInline) {
171
+ if (options.verbose) {
172
+ console.warn('[sfc-asm][compileScript][no-inline-fallback] failed', base, eNoInline?.message);
173
+ }
174
+ }
175
+ }
176
+ // Final fallback: if script compile yielded nothing, use the variant-transformed script
177
+ if (!compiledScript && scriptR?.code) {
178
+ try {
179
+ compiledScript = scriptR.code;
180
+ }
181
+ catch { }
182
+ }
183
+ // Always use the canonical assembler path; we deliberately avoid the
184
+ // inlineTemplate early-return which can miss render attachment.
185
+ // If we reached here, we are going to assemble canonically. Ensure the script we use does NOT include inlineTemplate render.
186
+ if (usedInlineScript) {
187
+ try {
188
+ const sNoInline = compileScript(descriptor, {
189
+ id,
190
+ inlineTemplate: false,
191
+ reactivityTransform: false,
192
+ });
193
+ compiledScript = sNoInline?.content || compiledScript;
194
+ bindingMetadata = sNoInline?.bindings || bindingMetadata;
195
+ }
196
+ catch (eNoInline) {
197
+ if (options.verbose) {
198
+ console.warn('[sfc-asm][compileScript][no-inline-fallback] failed', base, eNoInline?.message);
199
+ }
200
+ }
201
+ }
202
+ // 2) Compile template
203
+ let compiledTplCode = '';
204
+ try {
205
+ const tplSrc = descriptor.template?.content || '';
206
+ if (tplSrc) {
207
+ const ct = compileTemplate({
208
+ source: tplSrc,
209
+ id,
210
+ filename: abs,
211
+ isProd: false,
212
+ ssr: false,
213
+ compilerOptions: {
214
+ bindingMetadata,
215
+ isCustomElement: (tag) => NS_NATIVE_TAGS.has(tag),
216
+ },
217
+ });
218
+ compiledTplCode = (ct && (ct.code || '')) || '';
219
+ if (ct?.errors?.length && options.verbose) {
220
+ console.warn('[sfc-asm][compileTemplate][errors]', base, ct.errors);
221
+ }
222
+ }
223
+ }
224
+ catch (eTpl) {
225
+ if (options.verbose) {
226
+ console.warn('[sfc-asm][compileTemplate] failed', base, eTpl?.message);
227
+ }
228
+ // Fallback: use the variant-transformed template code if available
229
+ try {
230
+ if (templateR?.code)
231
+ compiledTplCode = templateR.code;
232
+ }
233
+ catch { }
234
+ }
235
+ // If still no template code, synthesize a minimal render stub so the module is valid
236
+ if (!compiledTplCode) {
237
+ try {
238
+ compiledTplCode = "export function render(){ const _ = (globalThis.createElementVNode||globalThis._createElementVNode); return _? _('StackLayout') : {}; }\n";
239
+ }
240
+ catch { }
241
+ }
242
+ // 3) Sanitize script and rewrite .vue imports to inline assembler
243
+ let scriptBody = compiledScript || '';
244
+ if (scriptBody) {
245
+ // Do NOT strip Vue/nativescript-vue imports; retarget them to the runtime bridge so helpers (e.g., onMounted) are bound.
246
+ // Preserve the import clause and only rewrite the source to '/ns/rt'.
247
+ scriptBody = scriptBody.replace(/(^|\n)\s*import\s+([^;\n]+)\s+from\s+["'](?:vue|nativescript-vue|~\/vendor\.mjs)(?:\/[^"]*)?["'];?/g, (_m, pfx, clause) => `${pfx}import ${clause} from "/ns/rt";`);
248
+ try {
249
+ const importerDir = path.posix.dirname(base);
250
+ scriptBody = scriptBody.replace(/(^|\n)\s*import\s+([^;\n]+)\s+from\s+["']([^"'\n]+\.vue)(?:\?[^"'\n]*)?["'];?/g, (_m, pfx, clause, spec) => {
251
+ let absImp = spec;
252
+ if (spec.startsWith('./') || spec.startsWith('../')) {
253
+ absImp = path.posix.normalize(path.posix.join(importerDir, spec));
254
+ if (!absImp.startsWith('/'))
255
+ absImp = '/' + absImp;
256
+ }
257
+ else if (!spec.startsWith('/')) {
258
+ if (absImp.startsWith('@/'))
259
+ absImp = options.appVirtualWithSlash + absImp.slice(2);
260
+ }
261
+ const asmUrl = `/ns/asm/${ver}?path=${encodeURIComponent(absImp)}&mode=inline`;
262
+ return `${pfx}import ${clause} from ${JSON.stringify(asmUrl)};`;
263
+ });
264
+ }
265
+ catch { }
266
+ }
267
+ // 4) Extract render from compiled template and prepare a full inline template block
268
+ let helperBindings = '';
269
+ let renderDecl = '';
270
+ let inlineBlock = undefined;
271
+ let renderOk = false;
272
+ if (compiledTplCode) {
273
+ try {
274
+ // Build a full inline template block to preserve hoists where possible
275
+ inlineBlock = buildInlineTemplateBlock(compiledTplCode) || undefined;
276
+ if (!inlineBlock) {
277
+ const extracted = extractTemplateRender(compiledTplCode);
278
+ helperBindings = extracted.helperBindings;
279
+ renderDecl = extracted.renderDecl;
280
+ inlineBlock = extracted.inlineBlock;
281
+ renderOk = extracted.ok;
282
+ }
283
+ else {
284
+ renderOk = true;
285
+ }
286
+ }
287
+ catch (eExtract) {
288
+ if (options.verbose) {
289
+ console.warn('[sfc-asm][extractTemplateRender] failed', base, eExtract?.message);
290
+ }
291
+ }
292
+ }
293
+ // Final guard: if no inline render extracted, attempt to import template variant or synthesize a no-op render
294
+ if (!renderOk && !inlineBlock) {
295
+ try {
296
+ const templateUrl = `${origin}/ns/sfc/${ver}${base}?vue&type=template`;
297
+ const importLine = `import * as __template from ${JSON.stringify(templateUrl)};`;
298
+ // Attach only if scriptTransformed produces __ns_sfc__ later
299
+ helperBindings += `\n${importLine}`;
300
+ renderDecl += `\nfunction __ns_getRender(){\n try {\n if (__template && __template.render) return __template.render;\n } catch (_e) {}\n try {\n const _ = globalThis.createElementVNode || globalThis._createElementVNode;\n return _ ? function(){ return _('StackLayout'); } : function(){ return {}; };\n } catch (_e) { return function(){ return {}; }; }\n}\n`;
301
+ renderOk = true;
302
+ }
303
+ catch { }
304
+ }
305
+ // 5) Convert default export to const __ns_sfc__
306
+ let scriptTransformed = scriptBody;
307
+ if (scriptTransformed) {
308
+ scriptTransformed = scriptTransformed.replace(/(^|\n)\s*export\s+default\s+/g, '$1const __ns_sfc__ = ').replace(/(^|\n)\s*export\s*\{[^}]*\}\s*;?\s*/g, '\n/* removed named exports for inline asm */\n');
309
+ // Normalize any prior declaration of __ns_sfc__ to a plain assignment to avoid redeclare
310
+ // Accept a semicolon before the declaration too
311
+ scriptTransformed = scriptTransformed.replace(/(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\s*=\s*/g, '$1__ns_sfc__ = ');
312
+ // Ensure a single declaration appears once before first assignment
313
+ if (!/(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\b/.test(scriptTransformed)) {
314
+ scriptTransformed = `let __ns_sfc__;\n` + scriptTransformed;
315
+ }
316
+ // Remove stray leading braces (artifact defense)
317
+ scriptTransformed = scriptTransformed.replace(/^\s*\}+(?=\s*[^}])/, (m) => `/* [asm-fix] removed ${m.length} stray leading braces */\n`);
318
+ }
319
+ else {
320
+ try {
321
+ const compName = (base.split('/').pop() || 'Component').replace(/\.vue$/i, '') || 'Component';
322
+ scriptTransformed = `import { defineComponent as _defineComponent } from "/ns/rt";\nlet __ns_sfc__;\n__ns_sfc__ = /*@__PURE__*/_defineComponent({ __name: ${JSON.stringify(compName)} });`;
323
+ }
324
+ catch {
325
+ scriptTransformed = `import { defineComponent as _defineComponent } from "/ns/rt";\nlet __ns_sfc__;\n__ns_sfc__ = /*@__PURE__*/_defineComponent({});`;
326
+ }
327
+ }
328
+ // 6) Emit final inline module with diagnostics comment
329
+ const parts = [];
330
+ parts.push(`// [sfc-asm] ${base} (inline-compiled)`);
331
+ // Deterministic path: always use extracted helperBindings + renderDecl + scriptTransformed (ignore inlineBlock)
332
+ // Emit hoisted template bindings first
333
+ if (helperBindings)
334
+ parts.push(helperBindings);
335
+ // IMPORTANT: place script (with its imports) BEFORE renderDecl so imports never appear inside the render function.
336
+ parts.push(scriptTransformed);
337
+ parts.push(renderDecl);
338
+ parts.push(`try { if (!__ns_sfc__.render) Object.defineProperty(__ns_sfc__, 'render', { configurable: true, enumerable: true, get(){ const r = (typeof __ns_getRender==='function' ? __ns_getRender() : undefined); Object.defineProperty(__ns_sfc__, 'render', { value: r, writable: true, configurable: true, enumerable: true }); return r; }, set(v){ Object.defineProperty(__ns_sfc__, 'render', { value: v, writable: true, configurable: true, enumerable: true }); } }); } catch(_e){}`);
339
+ parts.push(`export function render(){ const f = (typeof __ns_getRender==='function' ? __ns_getRender() : (__ns_sfc__ && __ns_sfc__.render)); return typeof f==='function' ? f.apply(this, arguments) : undefined; }`);
340
+ parts.push(`export default __ns_sfc__`);
341
+ let inlineCode = parts.filter(Boolean).join('\n');
342
+ inlineCode = processCodeForDevice(inlineCode, false, true);
343
+ try {
344
+ inlineCode = ensureDestructureCoreImports(inlineCode);
345
+ }
346
+ catch { }
347
+ // Replace legacy mutation pipeline with canonical assembler for reliability
348
+ {
349
+ // First: strip TypeScript robustly using Babel transform
350
+ try {
351
+ const tsRes = await babelCore.transformAsync(scriptTransformed, {
352
+ plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
353
+ ast: false,
354
+ sourceType: 'module',
355
+ configFile: false,
356
+ babelrc: false,
357
+ });
358
+ if (tsRes?.code)
359
+ scriptTransformed = tsRes.code;
360
+ }
361
+ catch (eTs) {
362
+ if (options.verbose) {
363
+ console.warn('[sfc-asm][babel-ts][fail]', base, eTs?.message);
364
+ }
365
+ }
366
+ // Hoist imports + strip residual TS via AST
367
+ let importLines = [];
368
+ try {
369
+ const astRes = astExtractImportsAndStripTypes(scriptTransformed);
370
+ importLines = astRes.imports;
371
+ scriptTransformed = astRes.body;
372
+ if (astRes.diagnostics.length && options.verbose) {
373
+ console.warn('[sfc-asm][ast]', base, astRes.diagnostics.join('; '));
374
+ }
375
+ }
376
+ catch (eAst) {
377
+ if (options.verbose) {
378
+ console.warn('[sfc-asm][ast][fail]', base, eAst?.message);
379
+ }
380
+ }
381
+ // Ensure renderDecl ends with closing brace ONLY for function declaration forms
382
+ // Avoid appending to const-assignment forms like: const __ns_render = (function(){ ... })();
383
+ if (renderDecl && /(^|\n)\s*(?:export\s+)?function\s+__ns_render\s*\(/.test(renderDecl) && !/\}\s*$/.test(renderDecl)) {
384
+ renderDecl = renderDecl.trimEnd() + '\n}';
385
+ }
386
+ const outParts = [];
387
+ outParts.push(`// [sfc-asm] ${base} (inline-compiled)`);
388
+ outParts.push('// [sfc-asm][canonical]');
389
+ if (importLines.length)
390
+ outParts.push(Array.from(new Set(importLines)).join('\n'));
391
+ // Place component script first so the component object exists before we attach render.
392
+ outParts.push(scriptTransformed);
393
+ // Prefer full template block to guarantee presence of all hoisted constants.
394
+ if (inlineBlock) {
395
+ outParts.push(inlineBlock);
396
+ }
397
+ else {
398
+ if (helperBindings)
399
+ outParts.push(helperBindings);
400
+ if (renderDecl && renderDecl.trim())
401
+ outParts.push(renderDecl);
402
+ }
403
+ outParts.push(`try { if (!__ns_sfc__.render) Object.defineProperty(__ns_sfc__, 'render', { configurable: true, enumerable: true, get(){ const r = (typeof __ns_getRender==='function' ? __ns_getRender() : (typeof __ns_render==='function' ? __ns_render : undefined)); Object.defineProperty(__ns_sfc__, 'render', { value: r, writable: true, configurable: true, enumerable: true }); return r; }, set(v){ Object.defineProperty(__ns_sfc__, 'render', { value: v, writable: true, configurable: true, enumerable: true }); } }); } catch(_e){}`);
404
+ // Export named render as a function that resolves lazily
405
+ outParts.push('export function render(){ const f = (typeof __ns_getRender==="function" ? __ns_getRender() : (typeof __ns_render==="function" ? __ns_render : (__ns_sfc__ && __ns_sfc__.render))); return typeof f === "function" ? f.apply(this, arguments) : undefined; }');
406
+ outParts.push('export default __ns_sfc__');
407
+ let inlineCode2 = outParts.filter(Boolean).join('\n');
408
+ inlineCode2 = processCodeForDevice(inlineCode2, false, true);
409
+ try {
410
+ inlineCode2 = ensureDestructureCoreImports(inlineCode2);
411
+ }
412
+ catch { }
413
+ // Hoist any late imports that accidentally landed after render or script assembly
414
+ try {
415
+ const lateImportRe = /^(?!\/\/).*^\s*import\s+[^;]+;?$/gm;
416
+ const allImports = [];
417
+ inlineCode2 = inlineCode2.replace(lateImportRe, (imp) => {
418
+ allImports.push(imp);
419
+ return '';
420
+ });
421
+ if (allImports.length) {
422
+ // Place after helperBindings sentinel
423
+ inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\]\n)/, `$1${Array.from(new Set(allImports)).join('\n')}\n/* [asm-fix] re-hoisted ${allImports.length} imports */\n`);
424
+ }
425
+ }
426
+ catch { }
427
+ // After hoisting, re-run AST normalization and duplicate-binding verification.
428
+ // This guards against freshly hoisted imports reintroducing identifiers that collide
429
+ // with earlier destructures (e.g., __ns_core_ns_1), which would otherwise surface at device runtime.
430
+ try {
431
+ inlineCode2 = astNormalizeModuleImportsAndHelpers(inlineCode2);
432
+ }
433
+ catch { }
434
+ try {
435
+ inlineCode2 = astVerifyAndAnnotateDuplicates(inlineCode2);
436
+ if (/^\s*\/\/ \[ast-verify\]\[duplicate-bindings\]/m.test(inlineCode2)) {
437
+ const diagnosticLine = (inlineCode2.match(/^\s*\/\/ \[ast-verify\]\[duplicate-bindings\][^\n]*/m) || [])[0] || '// [ast-verify][duplicate-bindings]';
438
+ const brief = diagnosticLine.replace(/^[^:]*:?\s?/, '');
439
+ const escaped = brief.replace(/["\\]/g, '\\$&');
440
+ const thrower = `throw new Error("[nsv-hmr] Duplicate top-level bindings detected post-hoist: ${escaped}");`;
441
+ inlineCode2 = `${thrower}\n` + inlineCode2;
442
+ }
443
+ }
444
+ catch { }
445
+ // Minimal cleanup only (avoid destructive type stripping breaking object literal property defaults)
446
+ try {
447
+ // Heal cases where a TS type strip earlier removed initializer: plain 'default' inside props objects
448
+ // becomes 'default: undefined'. We only match when followed by ',' or '}' or newline to avoid 'export default'.
449
+ inlineCode2 = inlineCode2.replace(/\bdefault\b\s*(?=\}|,|\n)/g, 'default: undefined');
450
+ // Remove obvious leftover angle generic markers
451
+ inlineCode2 = inlineCode2.replace(/<unknown>/g, '');
452
+ // Fix accidental '}=> {' sequences
453
+ inlineCode2 = inlineCode2.replace(/}\s*=>\s*\{/g, '');
454
+ // No-op: removed prior broken normalization. Handlers are fixed in the dedicated passes below.
455
+ }
456
+ catch { }
457
+ // Removed redundant render closure heal that could inject an extra '}' before component script.
458
+ // Rewrite any remaining imports (e.g., relative app paths) to HTTP ESM endpoints
459
+ try {
460
+ inlineCode2 = rewriteImports(inlineCode2, base, options.sfcFileMap, options.depFileMap, projectRoot, !!options.verbose, undefined, getServerOrigin(server));
461
+ }
462
+ catch { }
463
+ // Final TS strip on the whole assembled module (safety net)
464
+ try {
465
+ const tsFinal = await babelCore.transformAsync(inlineCode2, {
466
+ plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
467
+ ast: false,
468
+ sourceType: 'module',
469
+ configFile: false,
470
+ babelrc: false,
471
+ });
472
+ if (tsFinal?.code)
473
+ inlineCode2 = tsFinal.code;
474
+ }
475
+ catch { }
476
+ // Heal Vue v-model update handlers that lost the ": else" branch during transforms:
477
+ // "onUpdate:modelValue": _cache[N] || (_cache[N] = $event => _isRef(name) ? name.value = $event)
478
+ // → add else branch to keep syntax valid: : (name = $event)
479
+ try {
480
+ // Fix missing else branch on v-model handlers: support dotted expressions (e.g., $setup.acceptTerms)
481
+ const reMissingElse = /\"onUpdate:modelValue\"\s*:\s*_cache\[(\d+)\]\s*\|\|\s*\(_cache\[\1\]\s*=\s*\$event\s*=>\s*_isRef\(\s*([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\s*\)\s*\?\s*\2\.value\s*=\s*\$event\s*\)/g;
482
+ inlineCode2 = inlineCode2.replace(reMissingElse, (_m, idx, expr) => {
483
+ return `\"onUpdate:modelValue\": _cache[${idx}] || (_cache[${idx}] = $event => (_isRef(${expr}) ? (${expr}.value = $event) : (${expr} = $event)))`;
484
+ });
485
+ // Repair malformed handlers without an arrow (introduced by previous transforms):
486
+ // Convert pattern assigning to $event without an arrow into a proper arrow using the same target expression.
487
+ const reMalformed = /\"onUpdate:modelValue\"\s*:\s*_cache\[(\d+)\]\s*\|\|\s*\(_cache\[\1\]\s*=\s*[^=]*\(\s*([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)*)\s*\)[^=]*=\s*\$event\s*\)\s*\)/g;
488
+ inlineCode2 = inlineCode2.replace(reMalformed, (_m, idx, expr) => {
489
+ return `\"onUpdate:modelValue\": _cache[${idx}] || (_cache[${idx}] = $event => (_isRef(${expr}) ? (${expr}.value = $event) : (${expr} = $event)))`;
490
+ });
491
+ }
492
+ catch { }
493
+ // Structural heal: ensure balanced braces before the first import statement
494
+ try {
495
+ const idx = inlineCode2.search(/^[\t ]*import\b/m);
496
+ if (idx > 0) {
497
+ const prefix = inlineCode2.slice(0, idx);
498
+ let open = 0, close = 0;
499
+ let inS = false, inD = false, inT = false, inLC = false, inBC = false;
500
+ for (let i = 0; i < prefix.length; i++) {
501
+ const ch = prefix[i], nx = prefix[i + 1];
502
+ if (inLC) {
503
+ if (ch === '\n')
504
+ inLC = false;
505
+ continue;
506
+ }
507
+ if (inBC) {
508
+ if (ch === '*' && nx === '/') {
509
+ inBC = false;
510
+ i++;
511
+ }
512
+ continue;
513
+ }
514
+ if (inS) {
515
+ if (ch === '\\') {
516
+ i++;
517
+ continue;
518
+ }
519
+ if (ch === "'")
520
+ inS = false;
521
+ continue;
522
+ }
523
+ if (inD) {
524
+ if (ch === '\\') {
525
+ i++;
526
+ continue;
527
+ }
528
+ if (ch === '"')
529
+ inD = false;
530
+ continue;
531
+ }
532
+ if (inT) {
533
+ if (ch === '\\') {
534
+ i++;
535
+ continue;
536
+ }
537
+ if (ch === '`')
538
+ inT = false;
539
+ continue;
540
+ }
541
+ if (ch === '/' && nx === '/') {
542
+ inLC = true;
543
+ i++;
544
+ continue;
545
+ }
546
+ if (ch === '/' && nx === '*') {
547
+ inBC = true;
548
+ i++;
549
+ continue;
550
+ }
551
+ if (ch === "'") {
552
+ inS = true;
553
+ continue;
554
+ }
555
+ if (ch === '"') {
556
+ inD = true;
557
+ continue;
558
+ }
559
+ if (ch === '`') {
560
+ inT = true;
561
+ continue;
562
+ }
563
+ if (ch === '{')
564
+ open++;
565
+ else if (ch === '}')
566
+ close++;
567
+ }
568
+ const missing = open - close;
569
+ if (missing > 0) {
570
+ inlineCode2 = inlineCode2.slice(0, idx) + '}'.repeat(missing) + '\n' + inlineCode2.slice(idx);
571
+ }
572
+ }
573
+ }
574
+ catch { }
575
+ // Final TS strip on the whole assembled module (safety net)
576
+ try {
577
+ const tsFinal = await babelCore.transformAsync(inlineCode2, {
578
+ plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
579
+ ast: false,
580
+ sourceType: 'module',
581
+ configFile: false,
582
+ babelrc: false,
583
+ });
584
+ if (tsFinal?.code)
585
+ inlineCode2 = tsFinal.code;
586
+ }
587
+ catch { }
588
+ inlineCode2 = ensureVariableDynamicImportHelper(inlineCode2);
589
+ inlineCode2 = ensureGuardPlainDynamicImports(inlineCode2);
590
+ inlineCode2 = REQUIRE_GUARD_SNIPPET + inlineCode2;
591
+ // If no render materialized, return a clear error module for deterministic failure
592
+ try {
593
+ const lacksRender = !/__ns_render\b/.test(inlineCode2) && !/__ns_sfc__\.render\s*=/.test(inlineCode2);
594
+ if (lacksRender) {
595
+ const err = `throw new Error(\"[sfc-asm] ${base}: no render generated by assembler\");\nexport default {};`;
596
+ res.statusCode = 200;
597
+ res.end(err);
598
+ return;
599
+ }
600
+ }
601
+ catch { }
602
+ // Cosmetic and parser-friendly: ensure a newline after the canonical banner
603
+ try {
604
+ inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\])(?!\n)/, '$1\n');
605
+ }
606
+ catch { }
607
+ // Bust device cache for runtime bridge so helpers are always current for this graph version
608
+ try {
609
+ const origin = getServerOrigin(server);
610
+ inlineCode2 = ensureVersionedRtImports(inlineCode2, origin, Number(ver));
611
+ inlineCode2 = strategy.ensureVersionedImports?.(inlineCode2, origin, Number(ver)) ?? inlineCode2;
612
+ // App-source deps too: the artifact must link against the
613
+ // CURRENT dep content even when V8 still caches the stable
614
+ // `/ns/m/<app-path>` key from a previous save.
615
+ inlineCode2 = ensureVersionedNsMAppImports(inlineCode2, Number(ver));
616
+ }
617
+ catch { }
618
+ // Normalize imports/helpers via AST to ensure _defineComponent and other helpers are bound once
619
+ try {
620
+ inlineCode2 = astNormalizeModuleImportsAndHelpers(inlineCode2);
621
+ }
622
+ catch { }
623
+ // Guarantee a concrete component object exists before exporting default.
624
+ try {
625
+ // Detect an existing declaration of __ns_sfc__ even if it's appended after a semicolon on the same line
626
+ // e.g., "import ...;let __ns_sfc__;" (no newline). Accept start-of-string, newline, or semicolon as anchors.
627
+ const hasDecl = /(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\b/.test(inlineCode2);
628
+ if (!hasDecl) {
629
+ inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\]\n)/, `$1let __ns_sfc__ = {};\n`);
630
+ }
631
+ // Heal empty declarations (e.g., "let __ns_sfc__;" → initialize to {}), also when preceded by a semicolon
632
+ inlineCode2 = inlineCode2.replace(/(^|[\n;])\s*let\s+__ns_sfc__\s*;?/g, '$1let __ns_sfc__ = {};');
633
+ inlineCode2 = inlineCode2.replace(/(^|[\n;])\s*var\s+__ns_sfc__\s*;?/g, '$1var __ns_sfc__ = {};');
634
+ }
635
+ catch { }
636
+ if (!/export\s+default\s+__ns_sfc__/.test(inlineCode2) && /__ns_sfc__/.test(inlineCode2))
637
+ inlineCode2 += '\nexport default __ns_sfc__';
638
+ if (asmCacheKey)
639
+ setAsmCache(asmCacheKey, inlineCode2);
640
+ res.statusCode = 200;
641
+ res.end(inlineCode2);
642
+ return;
643
+ }
644
+ }
645
+ }
646
+ catch { }
647
+ // Do not use compiled ?vue or variant fallbacks; assembler must succeed or emit an error
648
+ // Prefer compiling template from source via compiler-sfc; fallback to variant extraction
649
+ let inlineOk = false;
650
+ let helperBindings = '';
651
+ let renderDecl = '';
652
+ let inlineBlock = undefined;
653
+ try {
654
+ const root = server.config?.root || process.cwd();
655
+ const abs = path.join(root, base.replace(/^\//, ''));
656
+ let sfcSrc = '';
657
+ try {
658
+ sfcSrc = readFileSync(abs, 'utf-8');
659
+ }
660
+ catch { }
661
+ if (sfcSrc) {
662
+ const { descriptor } = parse(sfcSrc, { filename: abs });
663
+ const tpl = descriptor.template?.content || '';
664
+ if (tpl) {
665
+ const id = createHash('md5').update(abs).digest('hex').slice(0, 8);
666
+ const ct = compileTemplate({
667
+ source: tpl,
668
+ id,
669
+ filename: abs,
670
+ isProd: false,
671
+ ssr: false,
672
+ compilerOptions: {
673
+ isCustomElement: (tag) => NS_NATIVE_TAGS.has(tag),
674
+ },
675
+ });
676
+ const compiled = (ct && (ct.code || '')) || '';
677
+ if (compiled) {
678
+ // Prefer a full inline template block preserving hoists
679
+ inlineBlock = buildInlineTemplateBlock(compiled) || undefined;
680
+ if (inlineBlock) {
681
+ inlineOk = true;
682
+ }
683
+ else {
684
+ const extracted = extractTemplateRender(compiled);
685
+ inlineOk = extracted.ok;
686
+ helperBindings = extracted.helperBindings;
687
+ renderDecl = extracted.renderDecl;
688
+ inlineBlock = extracted.inlineBlock;
689
+ }
690
+ }
691
+ }
692
+ }
693
+ }
694
+ catch { }
695
+ // If compiler-sfc path didn't succeed, attempt variant extraction once
696
+ if (!inlineOk) {
697
+ const extracted = extractTemplateRender(templateCode);
698
+ inlineOk = extracted.ok;
699
+ helperBindings = extracted.helperBindings;
700
+ renderDecl = extracted.renderDecl;
701
+ inlineBlock = extracted.inlineBlock;
702
+ }
703
+ let asm;
704
+ if (inlineOk) {
705
+ if (inlineBlock && inlineBlock.trim()) {
706
+ asm = [`// [sfc-asm] ${base} (inlined template body)`, `export * from ${JSON.stringify(scriptUrl)};`, `import * as __script from ${JSON.stringify(scriptUrl)};`, inlineBlock, `const __ns_sfc__ = (__script && __script.default) ? __script.default : {};`, `try { if (typeof __ns_render === 'function' && !__ns_sfc__.render) __ns_sfc__.render = __ns_render; } catch {}`, `export default __ns_sfc__;`].join('\n');
707
+ }
708
+ else {
709
+ asm = [`// [sfc-asm] ${base} (inlined template)`, `export * from ${JSON.stringify(scriptUrl)};`, `import * as __script from ${JSON.stringify(scriptUrl)};`, helperBindings, renderDecl, `const __ns_sfc__ = (__script && __script.default) ? __script.default : {};`, `try { if (typeof __ns_render === 'function' && !__ns_sfc__.render) __ns_sfc__.render = __ns_render; } catch {}`, `export default __ns_sfc__;`].filter(Boolean).join('\n');
710
+ }
711
+ }
712
+ else {
713
+ // Deterministic error path when template extraction failed
714
+ res.statusCode = 500;
715
+ res.end(`throw new Error('[sfc-asm] ${base}: template extraction failed');\nexport default {};`);
716
+ return;
717
+ }
718
+ // Run full device processing so helper aliasing and globals are consistent in this path too
719
+ let code = REQUIRE_GUARD_SNIPPET + asm;
720
+ code = processCodeForDevice(code, false, true, /(?:^|\/)node_modules\//.test(base), base);
721
+ code = rewriteImports(code, base, options.sfcFileMap, options.depFileMap, projectRoot, !!options.verbose, undefined, getServerOrigin(server));
722
+ try {
723
+ code = ensureDestructureCoreImports(code);
724
+ }
725
+ catch { }
726
+ code = ensureVariableDynamicImportHelper(code);
727
+ code = ensureGuardPlainDynamicImports(code);
728
+ try {
729
+ const origin = getServerOrigin(server);
730
+ code = ensureVersionedRtImports(code, origin, Number(ver));
731
+ code = strategy.ensureVersionedImports?.(code, origin, Number(ver)) ?? code;
732
+ code = ensureVersionedNsMAppImports(code, Number(ver));
733
+ }
734
+ catch { }
735
+ // Inline-template body path already runs processCodeForDevice (AST + sanitizers); no additional _defineComponent fix needed
736
+ if (asmCacheKey)
737
+ setAsmCache(asmCacheKey, code);
738
+ res.statusCode = 200;
739
+ res.end(code);
740
+ }
741
+ catch (e) {
742
+ res.statusCode = 500;
743
+ res.end('export {}\n');
744
+ }
745
+ });
746
+ }
747
+ //# sourceMappingURL=sfc-route-assemble.js.map