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

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 +37 -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
@@ -1,1117 +0,0 @@
1
- import { createRequire } from 'node:module';
2
- import { createHash } from 'crypto';
3
- import { readFileSync } from 'fs';
4
- import * as path from 'path';
5
- import babelCore from '@babel/core';
6
- import { parse as babelParse } from '@babel/parser';
7
- import traverse from '@babel/traverse';
8
- import * as t from '@babel/types';
9
- import { genCode } from '../helpers/babel.js';
10
- import { astExtractImportsAndStripTypes } from '../helpers/ast-extract.js';
11
- import { astNormalizeModuleImportsAndHelpers, astVerifyAndAnnotateDuplicates } from '../helpers/ast-normalizer.js';
12
- import { stripRtCoreSentinel, stripDanglingViteCjsImports } from '../helpers/sanitize.js';
13
- import { vueSfcCompiler } from '../frameworks/vue/server/compiler.js';
14
- import { buildInlineTemplateBlock, extractTemplateRender, processTemplateVariantMinimal } from '../frameworks/vue/server/sfc-transforms.js';
15
- import { NS_NATIVE_TAGS } from './compiler.js';
16
- import { ensureDestructureCoreImports, ensureGuardPlainDynamicImports, ensureVariableDynamicImportHelper, ensureVersionedRtImports, extractExportMetadata, } from './websocket-served-module-helpers.js';
17
- const babelTraverse = traverse?.default || traverse;
18
- const { parse, compileTemplate, compileScript } = vueSfcCompiler;
19
- const pluginTransformTypescript = (() => {
20
- const requireFromHere = createRequire(import.meta.url);
21
- const loaded = requireFromHere('@babel/plugin-transform-typescript');
22
- return loaded?.default || loaded;
23
- })();
24
- function setJavascriptResponseHeaders(res) {
25
- res.setHeader('Access-Control-Allow-Origin', '*');
26
- res.setHeader('Content-Type', 'application/javascript; charset=utf-8');
27
- res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');
28
- res.setHeader('Pragma', 'no-cache');
29
- res.setHeader('Expires', '0');
30
- }
31
- function setJsonResponseHeaders(res) {
32
- res.setHeader('Access-Control-Allow-Origin', '*');
33
- res.setHeader('Content-Type', 'application/json; charset=utf-8');
34
- res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');
35
- res.setHeader('Pragma', 'no-cache');
36
- res.setHeader('Expires', '0');
37
- }
38
- export function parseVersionedEndpointPath(basePath, pathname) {
39
- const rawRemainder = pathname.slice(basePath.length) || '';
40
- let verFromPath = null;
41
- let pathStyle = rawRemainder;
42
- if (rawRemainder && rawRemainder.startsWith('/')) {
43
- const parts = rawRemainder.split('/');
44
- if (parts.length > 2 && /^[0-9]+$/.test(parts[1] || '')) {
45
- verFromPath = parts[1];
46
- pathStyle = '/' + parts.slice(2).join('/');
47
- }
48
- }
49
- return { verFromPath, pathStyle };
50
- }
51
- export function buildSfcDelegatedModule(importerPath, version) {
52
- const asmPath = `/ns/asm/${version}?path=${encodeURIComponent(importerPath)}`;
53
- return `// [sfc] kind=full (delegated to assembler) path=${importerPath}\nexport * from ${JSON.stringify(asmPath)};\nexport { default } from ${JSON.stringify(asmPath)};\n`;
54
- }
55
- export function templateHasRender(templateCode) {
56
- return /export\s+function\s+render\s*\(/.test(templateCode) || /(?:^|\n)\s*function\s+render\s*\(/.test(templateCode) || /export\s+(?:const|let|var)\s+render\s*=/.test(templateCode) || /(?:^|\n)\s*(?:const|let|var)\s+render\s*=/.test(templateCode) || /\brender\s*[:=]\s*/.test(templateCode) || /export\s*\{\s*render\s*(?:as\s*render)?\s*\}/.test(templateCode);
57
- }
58
- function normalizeRequestedSpec(spec, appVirtualWithSlash) {
59
- let normalized = spec || '';
60
- if (normalized.startsWith('@/'))
61
- normalized = appVirtualWithSlash + normalized.slice(2);
62
- if (!normalized.startsWith('/'))
63
- normalized = '/' + normalized;
64
- return normalized;
65
- }
66
- export function registerVueSfcHandlers(server, options) {
67
- server.middlewares.use(async (req, res, next) => {
68
- try {
69
- const urlObj = new URL(req.url || '', 'http://localhost');
70
- const pathname = urlObj.pathname;
71
- const isNs = pathname === '/ns/sfc' || pathname.startsWith('/ns/sfc/');
72
- if (!isNs)
73
- return next();
74
- if (pathname.startsWith('/ns/asm') || pathname.startsWith('/ns/sfc-meta'))
75
- return next();
76
- setJavascriptResponseHeaders(res);
77
- const basePath = '/ns/sfc';
78
- let pathParam = urlObj.searchParams.get('path') || '';
79
- const { verFromPath, pathStyle: rawPathStyle } = parseVersionedEndpointPath(basePath, pathname);
80
- let pathStyle = rawPathStyle;
81
- if (pathStyle && pathStyle !== '/' && !pathParam) {
82
- if (!pathStyle.startsWith('/'))
83
- pathStyle = '/' + pathStyle;
84
- pathParam = pathStyle + (urlObj.search || '');
85
- }
86
- let fullSpec = pathParam || '';
87
- if (!fullSpec) {
88
- res.statusCode = 200;
89
- res.end('export {}\n');
90
- return;
91
- }
92
- fullSpec = normalizeRequestedSpec(fullSpec, options.appVirtualWithSlash);
93
- const isVariant = /[?&]vue&type=/.test(fullSpec);
94
- const variantTypeMatch = /[?&]type=([^&]+)/.exec(fullSpec);
95
- const variantType = variantTypeMatch?.[1] || null;
96
- const isStyleVariant = /[?&]type=style\b/.test(fullSpec);
97
- let candidate = fullSpec;
98
- let transformed = null;
99
- if (!isVariant) {
100
- const baseFilePath = fullSpec.replace(/[?#].*$/, '');
101
- const candidates = [baseFilePath + (baseFilePath.includes('?') ? '&' : '?') + 'vue', baseFilePath];
102
- for (const currentCandidate of candidates) {
103
- try {
104
- const result = await server.transformRequest(currentCandidate);
105
- if (result?.code) {
106
- transformed = result;
107
- candidate = currentCandidate;
108
- break;
109
- }
110
- }
111
- catch { }
112
- }
113
- if (!transformed?.code) {
114
- if (options.verbose) {
115
- try {
116
- console.warn('[sfc][serve] transform miss for', fullSpec);
117
- }
118
- catch { }
119
- }
120
- try {
121
- const tried = candidates.slice(0, 8);
122
- const out = `// [sfc] transform miss kind=full path=${fullSpec.replace(/\n/g, '')} tried=${tried.length}\n` + `throw new Error(${JSON.stringify('[ns/sfc] transform failed for full SFC: ' + fullSpec + ' (tried ' + tried.length + ')')});\nexport {}\n`;
123
- res.statusCode = 404;
124
- res.end(out);
125
- return;
126
- }
127
- catch {
128
- res.statusCode = 404;
129
- res.end('export {}\n');
130
- return;
131
- }
132
- }
133
- }
134
- else {
135
- try {
136
- transformed = await server.transformRequest(candidate);
137
- }
138
- catch { }
139
- if (!transformed?.code) {
140
- try {
141
- const out = `// [sfc] transform miss kind=variant path=${fullSpec.replace(/\n/g, '')}\n` + `throw new Error(${JSON.stringify('[ns/sfc] transform failed for variant: ' + fullSpec)});\nexport {}\n`;
142
- res.statusCode = 404;
143
- res.end(out);
144
- return;
145
- }
146
- catch {
147
- res.statusCode = 404;
148
- res.end('export {}\n');
149
- return;
150
- }
151
- }
152
- }
153
- if (isStyleVariant) {
154
- const sig = `// [sfc] kind=variant:style path=${fullSpec.replace(/\n/g, '')} len=0 default=false\n`;
155
- res.statusCode = 200;
156
- res.end(`${sig}export {}\n`);
157
- return;
158
- }
159
- let code = transformed.code;
160
- code = options.requireGuardSnippet + code;
161
- const projectRoot = server.config?.root || process.cwd();
162
- if (!isVariant) {
163
- const importerPath = fullSpec.replace(/[?#].*$/, '');
164
- const version = verFromPath || '0';
165
- res.statusCode = 200;
166
- res.end(buildSfcDelegatedModule(importerPath, version));
167
- return;
168
- }
169
- if (variantType === 'template') {
170
- const preferSelfCompile = !!process.env.NS_HMR_SELF_COMPILE_TEMPLATE;
171
- if (preferSelfCompile) {
172
- try {
173
- const projectRootTemplate = server.config?.root || process.cwd();
174
- const baseFilePath = fullSpec.replace(/[?#].*$/, '');
175
- const absolutePath = path.join(projectRootTemplate, baseFilePath.replace(/^\//, ''));
176
- let sfcSource = '';
177
- try {
178
- sfcSource = readFileSync(absolutePath, 'utf-8');
179
- }
180
- catch { }
181
- if (sfcSource) {
182
- const { descriptor } = parse(sfcSource, { filename: absolutePath });
183
- const id = createHash('md5').update(absolutePath).digest('hex').slice(0, 8);
184
- let bindingMetadata = undefined;
185
- try {
186
- const script = compileScript(descriptor, {
187
- id,
188
- inlineTemplate: false,
189
- reactivityTransform: false,
190
- });
191
- bindingMetadata = script?.bindings;
192
- }
193
- catch { }
194
- const templateSource = descriptor.template?.content || '';
195
- const compiledTemplate = compileTemplate({
196
- source: templateSource,
197
- id,
198
- filename: absolutePath,
199
- isProd: false,
200
- ssr: false,
201
- compilerOptions: {
202
- bindingMetadata,
203
- isCustomElement: (tag) => NS_NATIVE_TAGS.has(tag),
204
- },
205
- });
206
- let out = (compiledTemplate && (compiledTemplate.code || '')) || '';
207
- try {
208
- out = out.replace(/from\s+["'](?:nativescript-vue|vue)[^"']*["']/g, 'from "/ns/rt"');
209
- }
210
- catch { }
211
- code = processTemplateVariantMinimal(out);
212
- }
213
- else {
214
- code = 'export {}\n';
215
- }
216
- }
217
- catch (templateError) {
218
- if (options.verbose) {
219
- try {
220
- console.warn('[sfc][template][self-compile][fail]', fullSpec, templateError?.message);
221
- }
222
- catch { }
223
- }
224
- code = transformed.code || 'export {}\n';
225
- code = processTemplateVariantMinimal(code);
226
- }
227
- }
228
- else {
229
- code = transformed.code || 'export {}\n';
230
- code = processTemplateVariantMinimal(code);
231
- }
232
- }
233
- try {
234
- const ast = babelParse(code, {
235
- sourceType: 'module',
236
- plugins: ['typescript'],
237
- });
238
- const templateBindings = new Set();
239
- const navToLocals = [];
240
- const navBackLocals = [];
241
- babelTraverse(ast, {
242
- ImportDeclaration(pathNode) {
243
- const spec = pathNode.node.source.value || '';
244
- if (typeof spec === 'string' && /\.vue\?[^\n]*type=template/.test(spec)) {
245
- const ids = [];
246
- for (const currentSpecifier of pathNode.node.specifiers) {
247
- if (t.isImportSpecifier(currentSpecifier)) {
248
- const imported = t.isIdentifier(currentSpecifier.imported) ? currentSpecifier.imported.name : undefined;
249
- const local = t.isIdentifier(currentSpecifier.local) ? currentSpecifier.local.name : undefined;
250
- if ((imported === 'render' || imported === undefined) && local)
251
- ids.push(local);
252
- }
253
- else if (t.isImportDefaultSpecifier(currentSpecifier) || t.isImportNamespaceSpecifier(currentSpecifier)) {
254
- if (t.isIdentifier(currentSpecifier.local))
255
- ids.push(currentSpecifier.local.name);
256
- }
257
- }
258
- ids.forEach((name) => templateBindings.add(name));
259
- pathNode.remove();
260
- return;
261
- }
262
- const isNsVue = typeof spec === 'string' && (/nativescript-vue/.test(spec) || /vendor\.mjs$/.test(spec) || /\/node_modules\/\.vite\/deps\/nativescript-vue\.js/.test(spec));
263
- if (isNsVue) {
264
- const remain = [];
265
- for (const currentSpecifier of pathNode.node.specifiers) {
266
- if (t.isImportSpecifier(currentSpecifier)) {
267
- const imported = t.isIdentifier(currentSpecifier.imported) ? currentSpecifier.imported.name : undefined;
268
- const local = t.isIdentifier(currentSpecifier.local) ? currentSpecifier.local.name : undefined;
269
- if (local && (imported === '$navigateTo' || imported === 'navigateTo')) {
270
- navToLocals.push(local);
271
- continue;
272
- }
273
- if (local && (imported === '$navigateBack' || imported === 'navigateBack')) {
274
- navBackLocals.push(local);
275
- continue;
276
- }
277
- }
278
- remain.push(currentSpecifier);
279
- }
280
- if (remain.length) {
281
- pathNode.node.specifiers = remain;
282
- }
283
- else {
284
- pathNode.remove();
285
- }
286
- }
287
- },
288
- });
289
- if (templateBindings.size) {
290
- babelTraverse(ast, {
291
- Identifier(pathNode) {
292
- if (templateBindings.has(pathNode.node.name)) {
293
- pathNode.replaceWith(t.identifier('undefined'));
294
- }
295
- },
296
- AssignmentExpression(pathNode) {
297
- if (t.isMemberExpression(pathNode.node.left) && t.isIdentifier(pathNode.node.left.property, { name: 'render' })) {
298
- const e = t.identifier('__e');
299
- const guarded = t.tryStatement(t.blockStatement([
300
- t.variableDeclaration('const', [t.variableDeclarator(e, pathNode.node.right)]),
301
- t.ifStatement(t.logicalExpression('&&', t.binaryExpression('!==', t.unaryExpression('typeof', pathNode.node.left.object, true), t.stringLiteral('undefined')), t.binaryExpression('!==', t.unaryExpression('typeof', e, true), t.stringLiteral('undefined'))), t.blockStatement([t.expressionStatement(t.assignmentExpression('=', pathNode.node.left, e))])),
302
- ]), t.catchClause(t.identifier('_e'), t.blockStatement([])));
303
- pathNode.replaceWithMultiple([guarded]);
304
- }
305
- },
306
- });
307
- }
308
- let outCode = genCode(ast).code;
309
- if (navToLocals.length || navBackLocals.length) {
310
- const shimLines = [];
311
- for (const currentName of navToLocals)
312
- shimLines.push(`import __ns_rt_nav_to_mod from "/ns/rt";\nconst ${currentName} = (...args) => __ns_rt_nav_to_mod.$navigateTo(...args);`);
313
- for (const currentName of navBackLocals)
314
- shimLines.push(`import __ns_rt_nav_back_mod from "/ns/rt";\nconst ${currentName} = (...args) => __ns_rt_nav_back_mod.$navigateBack(...args);`);
315
- outCode = shimLines.join('\n') + '\n' + outCode;
316
- }
317
- code = outCode;
318
- }
319
- catch { }
320
- code = options.processCodeForDevice(code, false, true, /(?:^|\/)node_modules\//.test(fullSpec), fullSpec);
321
- try {
322
- const importerPath = fullSpec.replace(/[?#].*$/, '');
323
- const version = verFromPath || '0';
324
- const ast = babelParse(code, {
325
- sourceType: 'module',
326
- plugins: ['typescript'],
327
- });
328
- babelTraverse(ast, {
329
- ImportDeclaration(pathNode) {
330
- const src = pathNode.node.source.value || '';
331
- if (typeof src !== 'string')
332
- return;
333
- if (/^https?:\/\//.test(src))
334
- return;
335
- if (/\.vue(?:$|\?)/.test(src)) {
336
- let spec = src;
337
- if (spec.startsWith('./') || spec.startsWith('../')) {
338
- spec = path.posix.normalize(path.posix.join(path.posix.dirname(importerPath), spec));
339
- if (!spec.startsWith('/'))
340
- spec = '/' + spec;
341
- }
342
- else if (!spec.startsWith('/')) {
343
- if (spec.startsWith('@@/'))
344
- spec = '/' + spec.slice(2);
345
- if (spec.startsWith('@/'))
346
- spec = options.appVirtualWithSlash + spec.slice(2);
347
- }
348
- if (!/\bvue&type=/.test(src)) {
349
- spec = spec.replace(/[?#].*$/, '');
350
- const asmUrl = `/ns/asm/${version}?path=${encodeURIComponent(spec)}&mode=inline`;
351
- pathNode.node.source = t.stringLiteral(asmUrl);
352
- }
353
- }
354
- },
355
- });
356
- code = genCode(ast).code;
357
- }
358
- catch { }
359
- try {
360
- const importerPath = fullSpec.replace(/[?#].*$/, '');
361
- const tsResult = await babelCore.transformAsync(code, {
362
- plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
363
- sourceType: 'module',
364
- filename: importerPath.endsWith('.vue') ? importerPath.replace(/\.vue$/, '.ts') : importerPath + '.ts',
365
- comments: true,
366
- configFile: false,
367
- babelrc: false,
368
- });
369
- if (tsResult?.code) {
370
- code = tsResult.code;
371
- }
372
- }
373
- catch (variantTsError) {
374
- if (options.verbose) {
375
- try {
376
- console.warn('[sfc][variant:script][babel-ts][fail]', fullSpec, variantTsError?.message);
377
- }
378
- catch { }
379
- }
380
- }
381
- const importerPath = fullSpec.replace(/[?#].*$/, '');
382
- if (variantType !== 'template') {
383
- code = options.cleanCode(code);
384
- }
385
- code = options.rewriteImports(code, importerPath, options.sfcFileMap, options.depFileMap, projectRoot, !!options.verbose, undefined, options.getServerOrigin(server));
386
- code = ensureVariableDynamicImportHelper(code);
387
- try {
388
- const versionNumber = Number(verFromPath || '0');
389
- const currentVersion = Number.isFinite(versionNumber) && versionNumber > 0 ? versionNumber : options.getGraphVersion();
390
- const origin = options.getServerOrigin(server);
391
- code = ensureVersionedRtImports(code, origin, currentVersion);
392
- code = options.getStrategy().ensureVersionedImports(code, origin, currentVersion);
393
- code = options.ensureVersionedCoreImports(code, origin, currentVersion);
394
- }
395
- catch { }
396
- try {
397
- code = ensureDestructureCoreImports(code);
398
- }
399
- catch { }
400
- try {
401
- code = astNormalizeModuleImportsAndHelpers(code);
402
- }
403
- catch { }
404
- try {
405
- code = stripRtCoreSentinel(code);
406
- }
407
- catch { }
408
- try {
409
- const versionNumber = Number(verFromPath || '0');
410
- const currentVersion = Number.isFinite(versionNumber) && versionNumber > 0 ? versionNumber : options.getGraphVersion();
411
- const origin = options.getServerOrigin(server);
412
- code = ensureVersionedRtImports(code, origin, currentVersion);
413
- code = options.ensureVersionedCoreImports(code, origin, currentVersion);
414
- }
415
- catch { }
416
- try {
417
- code = stripDanglingViteCjsImports(code);
418
- }
419
- catch { }
420
- const hasDefault = /\bexport\s+default\b/.test(code);
421
- const kind = isVariant ? `variant:${variantType || 'unknown'}` : 'full';
422
- const sig = `// [sfc] kind=${kind} path=${importerPath} len=${code.length} default=${hasDefault} wrapped=${false}\n`;
423
- if (options.verbose) {
424
- try {
425
- console.log(`[sfc][serve] ${fullSpec} kind=${kind} default=${hasDefault} bytes=${code.length}`);
426
- }
427
- catch { }
428
- }
429
- if (!hasDefault) {
430
- const match = code.match(/\b(?:const|let|var)\s+(__ns_sfc__|_sfc_main)\b/);
431
- if (match && match[1]) {
432
- code += `\nexport default ${match[1]};`;
433
- }
434
- else if (/\b_defineComponent\s*\(|\bdefineComponent\s*\(/.test(code)) {
435
- code += '\nexport default (typeof __ns_sfc__ !== "undefined" ? __ns_sfc__ : (typeof _sfc_main !== "undefined" ? _sfc_main : undefined));';
436
- }
437
- }
438
- res.statusCode = 200;
439
- res.end(sig + code);
440
- }
441
- catch {
442
- res.statusCode = 500;
443
- res.end('export {}\n');
444
- }
445
- });
446
- server.middlewares.use(async (req, res, next) => {
447
- try {
448
- const urlObj = new URL(req.url || '', 'http://localhost');
449
- if (!urlObj.pathname.startsWith('/ns/sfc-meta'))
450
- return next();
451
- setJsonResponseHeaders(res);
452
- let spec = urlObj.searchParams.get('path') || '';
453
- if (!spec) {
454
- res.statusCode = 400;
455
- res.end(JSON.stringify({ error: 'missing path' }));
456
- return;
457
- }
458
- spec = normalizeRequestedSpec(spec, options.appVirtualWithSlash);
459
- const base = spec.replace(/[?#].*$/, '');
460
- const [scriptResult, templateResult] = await Promise.all([server.transformRequest(base + '?vue&type=script'), server.transformRequest(base + '?vue&type=template')]);
461
- const scriptCode = scriptResult?.code || '';
462
- const templateCode = templateResult?.code || '';
463
- const scriptMeta = extractExportMetadata(scriptCode);
464
- const hasRender = templateHasRender(templateCode);
465
- if (hasRender && options.verbose) {
466
- try {
467
- console.log('[sfc-meta] detected render for', base);
468
- }
469
- catch { }
470
- }
471
- else if (!hasRender && options.verbose) {
472
- try {
473
- console.warn('[sfc-meta] render NOT detected for', base);
474
- }
475
- catch { }
476
- }
477
- const hash = createHash('md5').update(base).digest('hex').slice(0, 8);
478
- const payload = {
479
- path: base,
480
- hasScript: !!scriptCode,
481
- hasTemplate: !!templateCode,
482
- hasStyle: false,
483
- scriptExports: scriptMeta.named,
484
- scriptHasDefault: scriptMeta.hasDefault,
485
- templateHasRender: hasRender,
486
- hmrId: hash,
487
- };
488
- res.statusCode = 200;
489
- res.end(JSON.stringify(payload));
490
- }
491
- catch (error) {
492
- res.statusCode = 500;
493
- res.end(JSON.stringify({ error: error?.message || String(error) }));
494
- }
495
- });
496
- server.middlewares.use(async (req, res, next) => {
497
- try {
498
- const urlObj = new URL(req.url || '', 'http://localhost');
499
- if (!urlObj.pathname.startsWith('/ns/asm'))
500
- return next();
501
- setJavascriptResponseHeaders(res);
502
- const asmBase = '/ns/asm';
503
- const { verFromPath } = parseVersionedEndpointPath(asmBase, urlObj.pathname);
504
- let spec = urlObj.searchParams.get('path') || '';
505
- const diag = urlObj.searchParams.get('diag') === '1';
506
- if (!spec) {
507
- res.statusCode = 400;
508
- res.end('export {}\n');
509
- return;
510
- }
511
- spec = normalizeRequestedSpec(spec, options.appVirtualWithSlash);
512
- const base = spec.replace(/[?#].*$/, '');
513
- if (diag) {
514
- 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`;
515
- res.statusCode = 200;
516
- res.end(code);
517
- return;
518
- }
519
- const projectRoot = server.config?.root || process.cwd();
520
- const safeTransform = async (candidate) => {
521
- try {
522
- return await server.transformRequest(candidate);
523
- }
524
- catch {
525
- return null;
526
- }
527
- };
528
- const scriptResult = await safeTransform(base + '?vue&type=script');
529
- const templateResult = await safeTransform(base + '?vue&type=template');
530
- await safeTransform(base + '?vue');
531
- const origin = options.getServerOrigin(server);
532
- const version = String(verFromPath || options.getGraphVersion() || Date.now());
533
- const scriptUrl = `${origin}/ns/sfc/${version}${base}?vue&type=script`;
534
- const templateCode = templateResult?.code || '';
535
- try {
536
- const root = server.config?.root || process.cwd();
537
- const absolutePath = path.join(root, base.replace(/^\//, ''));
538
- let sfcSource = '';
539
- try {
540
- sfcSource = readFileSync(absolutePath, 'utf-8');
541
- }
542
- catch { }
543
- if (sfcSource) {
544
- const { descriptor } = parse(sfcSource, { filename: absolutePath });
545
- const id = createHash('md5').update(absolutePath).digest('hex').slice(0, 8);
546
- let compiledScript = '';
547
- let bindingMetadata = undefined;
548
- let usedInlineScript = false;
549
- try {
550
- const isNSNative = (tag) => NS_NATIVE_TAGS.has(tag);
551
- const inlineScript = compileScript(descriptor, {
552
- id,
553
- inlineTemplate: true,
554
- reactivityTransform: false,
555
- templateOptions: {
556
- compilerOptions: { isCustomElement: isNSNative },
557
- },
558
- });
559
- if (/export\s+default/.test(inlineScript?.content || '')) {
560
- compiledScript = inlineScript.content;
561
- bindingMetadata = inlineScript?.bindings;
562
- usedInlineScript = true;
563
- }
564
- else {
565
- const fallbackScript = compileScript(descriptor, {
566
- id,
567
- inlineTemplate: false,
568
- reactivityTransform: false,
569
- });
570
- compiledScript = fallbackScript?.content || '';
571
- bindingMetadata = fallbackScript?.bindings;
572
- }
573
- }
574
- catch (scriptError) {
575
- if (options.verbose) {
576
- try {
577
- console.warn('[sfc-asm][compileScript] failed', base, scriptError?.message);
578
- }
579
- catch { }
580
- }
581
- try {
582
- const fallbackScript = compileScript(descriptor, {
583
- id,
584
- inlineTemplate: false,
585
- reactivityTransform: false,
586
- });
587
- compiledScript = fallbackScript?.content || '';
588
- bindingMetadata = fallbackScript?.bindings;
589
- }
590
- catch (fallbackError) {
591
- if (options.verbose) {
592
- try {
593
- console.warn('[sfc-asm][compileScript][no-inline-fallback] failed', base, fallbackError?.message);
594
- }
595
- catch { }
596
- }
597
- }
598
- }
599
- if (!compiledScript && scriptResult?.code) {
600
- compiledScript = scriptResult.code;
601
- }
602
- if (usedInlineScript) {
603
- try {
604
- const noInlineScript = compileScript(descriptor, {
605
- id,
606
- inlineTemplate: false,
607
- reactivityTransform: false,
608
- });
609
- compiledScript = noInlineScript?.content || compiledScript;
610
- bindingMetadata = noInlineScript?.bindings || bindingMetadata;
611
- }
612
- catch (noInlineError) {
613
- if (options.verbose) {
614
- try {
615
- console.warn('[sfc-asm][compileScript][no-inline-fallback] failed', base, noInlineError?.message);
616
- }
617
- catch { }
618
- }
619
- }
620
- }
621
- let compiledTemplateCode = '';
622
- try {
623
- const templateSource = descriptor.template?.content || '';
624
- if (templateSource) {
625
- const compiledTemplate = compileTemplate({
626
- source: templateSource,
627
- id,
628
- filename: absolutePath,
629
- isProd: false,
630
- ssr: false,
631
- compilerOptions: {
632
- bindingMetadata,
633
- isCustomElement: (tag) => NS_NATIVE_TAGS.has(tag),
634
- },
635
- });
636
- compiledTemplateCode = (compiledTemplate && (compiledTemplate.code || '')) || '';
637
- if (compiledTemplate?.errors?.length && options.verbose) {
638
- try {
639
- console.warn('[sfc-asm][compileTemplate][errors]', base, compiledTemplate.errors);
640
- }
641
- catch { }
642
- }
643
- }
644
- }
645
- catch (templateError) {
646
- if (options.verbose) {
647
- try {
648
- console.warn('[sfc-asm][compileTemplate] failed', base, templateError?.message);
649
- }
650
- catch { }
651
- }
652
- if (templateResult?.code)
653
- compiledTemplateCode = templateResult.code;
654
- }
655
- if (!compiledTemplateCode) {
656
- compiledTemplateCode = "export function render(){ const _ = (globalThis.createElementVNode||globalThis._createElementVNode); return _? _('StackLayout') : {}; }\n";
657
- }
658
- let scriptBody = compiledScript || '';
659
- if (scriptBody) {
660
- scriptBody = scriptBody.replace(/(^|\n)\s*import\s+([^;\n]+)\s+from\s+["'](?:vue|nativescript-vue|~\/vendor\.mjs)(?:\/[^\"]*)?["'];?/g, (_match, prefix, clause) => `${prefix}import ${clause} from "/ns/rt";`);
661
- try {
662
- const importerDir = path.posix.dirname(base);
663
- scriptBody = scriptBody.replace(/(^|\n)\s*import\s+([^;\n]+)\s+from\s+["']([^"'\n]+\.vue)(?:\?[^"'\n]*)?["'];?/g, (_match, prefix, clause, importSpec) => {
664
- let absoluteImport = importSpec;
665
- if (importSpec.startsWith('./') || importSpec.startsWith('../')) {
666
- absoluteImport = path.posix.normalize(path.posix.join(importerDir, importSpec));
667
- if (!absoluteImport.startsWith('/'))
668
- absoluteImport = '/' + absoluteImport;
669
- }
670
- else if (!importSpec.startsWith('/')) {
671
- if (absoluteImport.startsWith('@/'))
672
- absoluteImport = options.appVirtualWithSlash + absoluteImport.slice(2);
673
- }
674
- const asmUrl = `/ns/asm/${version}?path=${encodeURIComponent(absoluteImport)}&mode=inline`;
675
- return `${prefix}import ${clause} from ${JSON.stringify(asmUrl)};`;
676
- });
677
- }
678
- catch { }
679
- }
680
- let helperBindings = '';
681
- let renderDecl = '';
682
- let inlineBlock;
683
- let renderOk = false;
684
- if (compiledTemplateCode) {
685
- try {
686
- inlineBlock = buildInlineTemplateBlock(compiledTemplateCode) || undefined;
687
- if (!inlineBlock) {
688
- const extracted = extractTemplateRender(compiledTemplateCode);
689
- helperBindings = extracted.helperBindings;
690
- renderDecl = extracted.renderDecl;
691
- inlineBlock = extracted.inlineBlock;
692
- renderOk = extracted.ok;
693
- }
694
- else {
695
- renderOk = true;
696
- }
697
- }
698
- catch (extractError) {
699
- if (options.verbose) {
700
- try {
701
- console.warn('[sfc-asm][extractTemplateRender] failed', base, extractError?.message);
702
- }
703
- catch { }
704
- }
705
- }
706
- }
707
- if (!renderOk && !inlineBlock) {
708
- try {
709
- const templateUrl = `${origin}/ns/sfc/${version}${base}?vue&type=template`;
710
- const importLine = `import * as __template from ${JSON.stringify(templateUrl)};`;
711
- helperBindings += `\n${importLine}`;
712
- 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`;
713
- renderOk = true;
714
- }
715
- catch { }
716
- }
717
- let scriptTransformed = scriptBody;
718
- if (scriptTransformed) {
719
- 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');
720
- scriptTransformed = scriptTransformed.replace(/(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\s*=\s*/g, '$1__ns_sfc__ = ');
721
- if (!/(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\b/.test(scriptTransformed)) {
722
- scriptTransformed = 'let __ns_sfc__;\n' + scriptTransformed;
723
- }
724
- scriptTransformed = scriptTransformed.replace(/^\s*\}+(?=\s*[^}])/, (value) => `/* [asm-fix] removed ${value.length} stray leading braces */\n`);
725
- }
726
- else {
727
- try {
728
- const componentName = (base.split('/').pop() || 'Component').replace(/\.vue$/i, '') || 'Component';
729
- scriptTransformed = `import { defineComponent as _defineComponent } from "/ns/rt";\nlet __ns_sfc__;\n__ns_sfc__ = /*@__PURE__*/_defineComponent({ __name: ${JSON.stringify(componentName)} });`;
730
- }
731
- catch {
732
- scriptTransformed = 'import { defineComponent as _defineComponent } from "/ns/rt";\nlet __ns_sfc__;\n__ns_sfc__ = /*@__PURE__*/_defineComponent({});';
733
- }
734
- }
735
- const parts = [];
736
- parts.push(`// [sfc-asm] ${base} (inline-compiled)`);
737
- if (helperBindings)
738
- parts.push(helperBindings);
739
- parts.push(scriptTransformed);
740
- parts.push(renderDecl);
741
- 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){}`);
742
- 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; }');
743
- parts.push('export default __ns_sfc__');
744
- let inlineCode = parts.filter(Boolean).join('\n');
745
- inlineCode = options.processCodeForDevice(inlineCode, false, true);
746
- try {
747
- inlineCode = options.ensureVersionedCoreImports(inlineCode, options.getServerOrigin(server), Number(version));
748
- }
749
- catch { }
750
- try {
751
- inlineCode = ensureDestructureCoreImports(inlineCode);
752
- }
753
- catch { }
754
- try {
755
- const tsResult = await babelCore.transformAsync(scriptTransformed, {
756
- plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
757
- ast: false,
758
- sourceType: 'module',
759
- configFile: false,
760
- babelrc: false,
761
- });
762
- if (tsResult?.code)
763
- scriptTransformed = tsResult.code;
764
- }
765
- catch (tsError) {
766
- if (options.verbose) {
767
- try {
768
- console.warn('[sfc-asm][babel-ts][fail]', base, tsError?.message);
769
- }
770
- catch { }
771
- }
772
- }
773
- let importLines = [];
774
- try {
775
- const astResult = astExtractImportsAndStripTypes(scriptTransformed);
776
- importLines = astResult.imports;
777
- scriptTransformed = astResult.body;
778
- if (astResult.diagnostics.length && options.verbose) {
779
- try {
780
- console.warn('[sfc-asm][ast]', base, astResult.diagnostics.join('; '));
781
- }
782
- catch { }
783
- }
784
- }
785
- catch (astError) {
786
- if (options.verbose) {
787
- try {
788
- console.warn('[sfc-asm][ast][fail]', base, astError?.message);
789
- }
790
- catch { }
791
- }
792
- }
793
- if (renderDecl && /(^|\n)\s*(?:export\s+)?function\s+__ns_render\s*\(/.test(renderDecl) && !/\}\s*$/.test(renderDecl)) {
794
- renderDecl = renderDecl.trimEnd() + '\n}';
795
- }
796
- const outParts = [];
797
- outParts.push(`// [sfc-asm] ${base} (inline-compiled)`);
798
- outParts.push('// [sfc-asm][canonical]');
799
- if (importLines.length)
800
- outParts.push(Array.from(new Set(importLines)).join('\n'));
801
- outParts.push(scriptTransformed);
802
- if (inlineBlock) {
803
- outParts.push(inlineBlock);
804
- }
805
- else {
806
- if (helperBindings)
807
- outParts.push(helperBindings);
808
- if (renderDecl && renderDecl.trim())
809
- outParts.push(renderDecl);
810
- }
811
- 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){}`);
812
- 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; }');
813
- outParts.push('export default __ns_sfc__');
814
- let inlineCode2 = outParts.filter(Boolean).join('\n');
815
- inlineCode2 = options.processCodeForDevice(inlineCode2, false, true);
816
- try {
817
- inlineCode2 = options.ensureVersionedCoreImports(inlineCode2, options.getServerOrigin(server), Number(version));
818
- }
819
- catch { }
820
- try {
821
- inlineCode2 = ensureDestructureCoreImports(inlineCode2);
822
- }
823
- catch { }
824
- try {
825
- const lateImportPattern = /^(?!\/\/).*^\s*import\s+[^;]+;?$/gm;
826
- const allImports = [];
827
- inlineCode2 = inlineCode2.replace(lateImportPattern, (value) => {
828
- allImports.push(value);
829
- return '';
830
- });
831
- if (allImports.length) {
832
- inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\]\n)/, `$1${Array.from(new Set(allImports)).join('\n')}\n/* [asm-fix] re-hoisted ${allImports.length} imports */\n`);
833
- }
834
- }
835
- catch { }
836
- try {
837
- inlineCode2 = astNormalizeModuleImportsAndHelpers(inlineCode2);
838
- }
839
- catch { }
840
- try {
841
- inlineCode2 = astVerifyAndAnnotateDuplicates(inlineCode2);
842
- if (/^\s*\/\/ \[ast-verify\]\[duplicate-bindings\]/m.test(inlineCode2)) {
843
- const diagnosticLine = (inlineCode2.match(/^\s*\/\/ \[ast-verify\]\[duplicate-bindings\][^\n]*/m) || [])[0] || '// [ast-verify][duplicate-bindings]';
844
- const brief = diagnosticLine.replace(/^[^:]*:?\s?/, '');
845
- const escaped = brief.replace(/["\\]/g, '\\$&');
846
- const thrower = `throw new Error("[nsv-hmr] Duplicate top-level bindings detected post-hoist: ${escaped}");`;
847
- inlineCode2 = `${thrower}\n` + inlineCode2;
848
- }
849
- }
850
- catch { }
851
- try {
852
- inlineCode2 = inlineCode2.replace(/\bdefault\b\s*(?=\}|,|\n)/g, 'default: undefined');
853
- inlineCode2 = inlineCode2.replace(/<unknown>/g, '');
854
- inlineCode2 = inlineCode2.replace(/}\s*=>\s*\{/g, '');
855
- }
856
- catch { }
857
- try {
858
- inlineCode2 = options.rewriteImports(inlineCode2, base, options.sfcFileMap, options.depFileMap, projectRoot, !!options.verbose, undefined, options.getServerOrigin(server));
859
- }
860
- catch { }
861
- try {
862
- const finalTs = await babelCore.transformAsync(inlineCode2, {
863
- plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
864
- ast: false,
865
- sourceType: 'module',
866
- configFile: false,
867
- babelrc: false,
868
- });
869
- if (finalTs?.code)
870
- inlineCode2 = finalTs.code;
871
- }
872
- catch { }
873
- try {
874
- const missingElse = /"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;
875
- inlineCode2 = inlineCode2.replace(missingElse, (_match, idx, expr) => `"onUpdate:modelValue": _cache[${idx}] || (_cache[${idx}] = $event => (_isRef(${expr}) ? (${expr}.value = $event) : (${expr} = $event)))`);
876
- const malformed = /"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;
877
- inlineCode2 = inlineCode2.replace(malformed, (_match, idx, expr) => `"onUpdate:modelValue": _cache[${idx}] || (_cache[${idx}] = $event => (_isRef(${expr}) ? (${expr}.value = $event) : (${expr} = $event)))`);
878
- }
879
- catch { }
880
- try {
881
- const firstImportIndex = inlineCode2.search(/^[\t ]*import\b/m);
882
- if (firstImportIndex > 0) {
883
- const prefix = inlineCode2.slice(0, firstImportIndex);
884
- let open = 0;
885
- let close = 0;
886
- let inSingle = false;
887
- let inDouble = false;
888
- let inTemplate = false;
889
- let inLineComment = false;
890
- let inBlockComment = false;
891
- for (let index = 0; index < prefix.length; index++) {
892
- const ch = prefix[index];
893
- const nextChar = prefix[index + 1];
894
- if (inLineComment) {
895
- if (ch === '\n')
896
- inLineComment = false;
897
- continue;
898
- }
899
- if (inBlockComment) {
900
- if (ch === '*' && nextChar === '/') {
901
- inBlockComment = false;
902
- index++;
903
- }
904
- continue;
905
- }
906
- if (inSingle) {
907
- if (ch === '\\') {
908
- index++;
909
- continue;
910
- }
911
- if (ch === "'")
912
- inSingle = false;
913
- continue;
914
- }
915
- if (inDouble) {
916
- if (ch === '\\') {
917
- index++;
918
- continue;
919
- }
920
- if (ch === '"')
921
- inDouble = false;
922
- continue;
923
- }
924
- if (inTemplate) {
925
- if (ch === '\\') {
926
- index++;
927
- continue;
928
- }
929
- if (ch === '`')
930
- inTemplate = false;
931
- continue;
932
- }
933
- if (ch === '/' && nextChar === '/') {
934
- inLineComment = true;
935
- index++;
936
- continue;
937
- }
938
- if (ch === '/' && nextChar === '*') {
939
- inBlockComment = true;
940
- index++;
941
- continue;
942
- }
943
- if (ch === "'") {
944
- inSingle = true;
945
- continue;
946
- }
947
- if (ch === '"') {
948
- inDouble = true;
949
- continue;
950
- }
951
- if (ch === '`') {
952
- inTemplate = true;
953
- continue;
954
- }
955
- if (ch === '{')
956
- open++;
957
- else if (ch === '}')
958
- close++;
959
- }
960
- const missing = open - close;
961
- if (missing > 0) {
962
- inlineCode2 = inlineCode2.slice(0, firstImportIndex) + '}'.repeat(missing) + '\n' + inlineCode2.slice(firstImportIndex);
963
- }
964
- }
965
- }
966
- catch { }
967
- try {
968
- const finalTs = await babelCore.transformAsync(inlineCode2, {
969
- plugins: [[pluginTransformTypescript, { allowDeclareFields: true }]],
970
- ast: false,
971
- sourceType: 'module',
972
- configFile: false,
973
- babelrc: false,
974
- });
975
- if (finalTs?.code)
976
- inlineCode2 = finalTs.code;
977
- }
978
- catch { }
979
- inlineCode2 = ensureVariableDynamicImportHelper(inlineCode2);
980
- inlineCode2 = ensureGuardPlainDynamicImports(inlineCode2, origin);
981
- inlineCode2 = options.requireGuardSnippet + inlineCode2;
982
- try {
983
- const lacksRender = !/__ns_render\b/.test(inlineCode2) && !/__ns_sfc__\.render\s*=/.test(inlineCode2);
984
- if (lacksRender) {
985
- const err = `throw new Error("[sfc-asm] ${base}: no render generated by assembler");\nexport default {};`;
986
- res.statusCode = 200;
987
- res.end(err);
988
- return;
989
- }
990
- }
991
- catch { }
992
- try {
993
- inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\])(?!\n)/, '$1\n');
994
- }
995
- catch { }
996
- try {
997
- const origin = options.getServerOrigin(server);
998
- inlineCode2 = ensureVersionedRtImports(inlineCode2, origin, Number(version));
999
- inlineCode2 = options.getStrategy().ensureVersionedImports(inlineCode2, origin, Number(version));
1000
- inlineCode2 = options.ensureVersionedCoreImports(inlineCode2, origin, Number(version));
1001
- }
1002
- catch { }
1003
- try {
1004
- inlineCode2 = astNormalizeModuleImportsAndHelpers(inlineCode2);
1005
- }
1006
- catch { }
1007
- try {
1008
- const hasDecl = /(^|[\n;])\s*(?:const|let|var)\s+__ns_sfc__\b/.test(inlineCode2);
1009
- if (!hasDecl) {
1010
- inlineCode2 = inlineCode2.replace(/(\/\/ \[sfc-asm\]\[canonical\]\n)/, '$1let __ns_sfc__ = {};\n');
1011
- }
1012
- inlineCode2 = inlineCode2.replace(/(^|[\n;])\s*let\s+__ns_sfc__\s*;?/g, '$1let __ns_sfc__ = {};');
1013
- inlineCode2 = inlineCode2.replace(/(^|[\n;])\s*var\s+__ns_sfc__\s*;?/g, '$1var __ns_sfc__ = {};');
1014
- }
1015
- catch { }
1016
- if (!/export\s+default\s+__ns_sfc__/.test(inlineCode2) && /__ns_sfc__/.test(inlineCode2))
1017
- inlineCode2 += '\nexport default __ns_sfc__';
1018
- res.statusCode = 200;
1019
- res.end(inlineCode2);
1020
- return;
1021
- }
1022
- }
1023
- catch { }
1024
- let inlineOk = false;
1025
- let helperBindings = '';
1026
- let renderDecl = '';
1027
- let inlineBlock;
1028
- try {
1029
- const root = server.config?.root || process.cwd();
1030
- const absolutePath = path.join(root, base.replace(/^\//, ''));
1031
- let sfcSource = '';
1032
- try {
1033
- sfcSource = readFileSync(absolutePath, 'utf-8');
1034
- }
1035
- catch { }
1036
- if (sfcSource) {
1037
- const { descriptor } = parse(sfcSource, { filename: absolutePath });
1038
- const templateSource = descriptor.template?.content || '';
1039
- if (templateSource) {
1040
- const id = createHash('md5').update(absolutePath).digest('hex').slice(0, 8);
1041
- const compiledTemplate = compileTemplate({
1042
- source: templateSource,
1043
- id,
1044
- filename: absolutePath,
1045
- isProd: false,
1046
- ssr: false,
1047
- compilerOptions: {
1048
- isCustomElement: (tag) => NS_NATIVE_TAGS.has(tag),
1049
- },
1050
- });
1051
- const compiled = (compiledTemplate?.code || '');
1052
- if (compiled) {
1053
- inlineBlock = buildInlineTemplateBlock(compiled) || undefined;
1054
- if (inlineBlock) {
1055
- inlineOk = true;
1056
- }
1057
- else {
1058
- const extracted = extractTemplateRender(compiled);
1059
- inlineOk = extracted.ok;
1060
- helperBindings = extracted.helperBindings;
1061
- renderDecl = extracted.renderDecl;
1062
- inlineBlock = extracted.inlineBlock;
1063
- }
1064
- }
1065
- }
1066
- }
1067
- }
1068
- catch { }
1069
- if (!inlineOk) {
1070
- const extracted = extractTemplateRender(templateCode);
1071
- inlineOk = extracted.ok;
1072
- helperBindings = extracted.helperBindings;
1073
- renderDecl = extracted.renderDecl;
1074
- inlineBlock = extracted.inlineBlock;
1075
- }
1076
- if (!inlineOk) {
1077
- res.statusCode = 500;
1078
- res.end(`throw new Error('[sfc-asm] ${base}: template extraction failed');\nexport default {};`);
1079
- return;
1080
- }
1081
- let asm;
1082
- if (inlineBlock && inlineBlock.trim()) {
1083
- 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');
1084
- }
1085
- else {
1086
- 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');
1087
- }
1088
- let code = options.requireGuardSnippet + asm;
1089
- code = options.processCodeForDevice(code, false, true, /(?:^|\/)node_modules\//.test(base), base);
1090
- try {
1091
- code = options.ensureVersionedCoreImports(code, options.getServerOrigin(server), Number(version));
1092
- }
1093
- catch { }
1094
- code = options.rewriteImports(code, base, options.sfcFileMap, options.depFileMap, projectRoot, !!options.verbose, undefined, options.getServerOrigin(server));
1095
- try {
1096
- code = ensureDestructureCoreImports(code);
1097
- }
1098
- catch { }
1099
- code = ensureVariableDynamicImportHelper(code);
1100
- code = ensureGuardPlainDynamicImports(code, origin);
1101
- try {
1102
- const origin = options.getServerOrigin(server);
1103
- code = ensureVersionedRtImports(code, origin, Number(version));
1104
- code = options.getStrategy().ensureVersionedImports(code, origin, Number(version));
1105
- code = options.ensureVersionedCoreImports(code, origin, Number(version));
1106
- }
1107
- catch { }
1108
- res.statusCode = 200;
1109
- res.end(code);
1110
- }
1111
- catch {
1112
- res.statusCode = 500;
1113
- res.end('export {}\n');
1114
- }
1115
- });
1116
- }
1117
- //# sourceMappingURL=websocket-vue-sfc.js.map