@weapp-vite/web 1.3.37 → 1.4.1

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 (334) hide show
  1. package/README.md +144 -5
  2. package/dist/_virtual/_rolldown/runtime.mjs +19 -1
  3. package/dist/compiler/wxml/attributes.mjs +1 -1
  4. package/dist/compiler/wxml/attributes.mjs.map +1 -1
  5. package/dist/compiler/wxml/compile.mjs +6 -3
  6. package/dist/compiler/wxml/compile.mjs.map +1 -1
  7. package/dist/compiler/wxml/interpolation.mjs +1 -2
  8. package/dist/compiler/wxml/interpolation.mjs.map +1 -1
  9. package/dist/compiler/wxml/navigation.mjs +5 -7
  10. package/dist/compiler/wxml/navigation.mjs.map +1 -1
  11. package/dist/compiler/wxml/parser.mjs +5 -5
  12. package/dist/compiler/wxml/parser.mjs.map +1 -1
  13. package/dist/compiler/wxml/renderer.mjs +16 -12
  14. package/dist/compiler/wxml/renderer.mjs.map +1 -1
  15. package/dist/compiler/wxml/specialNodes.mjs +8 -2
  16. package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
  17. package/dist/compiler/wxml/types.d.mts +12 -0
  18. package/dist/compiler/wxs.mjs +5 -5
  19. package/dist/compiler/wxs.mjs.map +1 -1
  20. package/dist/css/wxss.d.mts +1 -0
  21. package/dist/css/wxss.mjs +110 -9
  22. package/dist/css/wxss.mjs.map +1 -1
  23. package/dist/index.d.mts +24 -6
  24. package/dist/index.mjs +21 -4
  25. package/dist/plugin/assets.d.mts +7 -0
  26. package/dist/plugin/assets.mjs +122 -0
  27. package/dist/plugin/assets.mjs.map +1 -0
  28. package/dist/plugin/constants.mjs +10 -1
  29. package/dist/plugin/constants.mjs.map +1 -1
  30. package/dist/plugin/dependencyScan.mjs +41 -0
  31. package/dist/plugin/dependencyScan.mjs.map +1 -0
  32. package/dist/plugin/entry.mjs +55 -6
  33. package/dist/plugin/entry.mjs.map +1 -1
  34. package/dist/plugin/files.mjs +1 -1
  35. package/dist/plugin/files.mjs.map +1 -1
  36. package/dist/plugin/index.d.mts +37 -3
  37. package/dist/plugin/index.mjs +244 -73
  38. package/dist/plugin/index.mjs.map +1 -1
  39. package/dist/plugin/layout.mjs +24 -0
  40. package/dist/plugin/layout.mjs.map +1 -0
  41. package/dist/plugin/path.mjs +6 -2
  42. package/dist/plugin/path.mjs.map +1 -1
  43. package/dist/plugin/register.mjs +45 -33
  44. package/dist/plugin/register.mjs.map +1 -1
  45. package/dist/plugin/scan.mjs +211 -92
  46. package/dist/plugin/scan.mjs.map +1 -1
  47. package/dist/plugin/scanSfc.mjs +65 -0
  48. package/dist/plugin/scanSfc.mjs.map +1 -0
  49. package/dist/plugin/state.mjs +3 -2
  50. package/dist/plugin/state.mjs.map +1 -1
  51. package/dist/plugin/styleModule.mjs +52 -0
  52. package/dist/plugin/styleModule.mjs.map +1 -0
  53. package/dist/plugin/types.d.mts +37 -1
  54. package/dist/plugin/vueSfc.mjs +150 -0
  55. package/dist/plugin/vueSfc.mjs.map +1 -0
  56. package/dist/runtime/appShell/container.mjs +25 -0
  57. package/dist/runtime/appShell/container.mjs.map +1 -0
  58. package/dist/runtime/appShell/tabBar/index.mjs +192 -0
  59. package/dist/runtime/appShell/tabBar/index.mjs.map +1 -0
  60. package/dist/runtime/appShell/tabBar/style.mjs +127 -0
  61. package/dist/runtime/appShell/tabBar/style.mjs.map +1 -0
  62. package/dist/runtime/button/helpers.mjs +1 -58
  63. package/dist/runtime/button/helpers.mjs.map +1 -1
  64. package/dist/runtime/button/index.d.mts +4 -5
  65. package/dist/runtime/button/index.mjs +6 -28
  66. package/dist/runtime/button/index.mjs.map +1 -1
  67. package/dist/runtime/button/style.mjs +53 -28
  68. package/dist/runtime/button/style.mjs.map +1 -1
  69. package/dist/runtime/component/behavior.mjs +26 -2
  70. package/dist/runtime/component/behavior.mjs.map +1 -1
  71. package/dist/runtime/component/element.mjs +107 -31
  72. package/dist/runtime/component/element.mjs.map +1 -1
  73. package/dist/runtime/component/observers.mjs +36 -0
  74. package/dist/runtime/component/observers.mjs.map +1 -0
  75. package/dist/runtime/component/publicInstance.mjs +48 -0
  76. package/dist/runtime/component/publicInstance.mjs.map +1 -0
  77. package/dist/runtime/component/relations.mjs +36 -0
  78. package/dist/runtime/component/relations.mjs.map +1 -0
  79. package/dist/runtime/component/slots.mjs +24 -0
  80. package/dist/runtime/component/slots.mjs.map +1 -0
  81. package/dist/runtime/component/state.mjs +13 -3
  82. package/dist/runtime/component/state.mjs.map +1 -1
  83. package/dist/runtime/component/types.d.mts +29 -4
  84. package/dist/runtime/component/virtualHost.mjs +83 -0
  85. package/dist/runtime/component/virtualHost.mjs.map +1 -0
  86. package/dist/runtime/host/index.d.mts +13 -0
  87. package/dist/runtime/host/index.mjs +47 -0
  88. package/dist/runtime/host/index.mjs.map +1 -0
  89. package/dist/runtime/host/types.d.mts +28 -0
  90. package/dist/runtime/hostGlobals.d.mts +9 -0
  91. package/dist/runtime/hostGlobals.mjs +39 -0
  92. package/dist/runtime/hostGlobals.mjs.map +1 -0
  93. package/dist/runtime/index.d.mts +21 -3
  94. package/dist/runtime/index.mjs +26 -4
  95. package/dist/runtime/index.mjs.map +1 -0
  96. package/dist/runtime/legacyTemplate/dom.mjs +3 -3
  97. package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
  98. package/dist/runtime/legacyTemplate/expression.mjs +9 -9
  99. package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
  100. package/dist/runtime/legacyTemplate/index.mjs +6 -6
  101. package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
  102. package/dist/runtime/nativeComponents/canvas/index.mjs +53 -0
  103. package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -0
  104. package/dist/runtime/nativeComponents/checkbox.mjs +137 -0
  105. package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -0
  106. package/dist/runtime/nativeComponents/cover/index.mjs +23 -0
  107. package/dist/runtime/nativeComponents/cover/index.mjs.map +1 -0
  108. package/dist/runtime/nativeComponents/form.d.mts +7 -0
  109. package/dist/runtime/nativeComponents/form.mjs +50 -0
  110. package/dist/runtime/nativeComponents/form.mjs.map +1 -0
  111. package/dist/runtime/nativeComponents/formControl.mjs +61 -0
  112. package/dist/runtime/nativeComponents/formControl.mjs.map +1 -0
  113. package/dist/runtime/nativeComponents/helpers.mjs +25 -0
  114. package/dist/runtime/nativeComponents/helpers.mjs.map +1 -0
  115. package/dist/runtime/nativeComponents/icon/helpers.mjs +42 -0
  116. package/dist/runtime/nativeComponents/icon/helpers.mjs.map +1 -0
  117. package/dist/runtime/nativeComponents/icon/index.mjs +45 -0
  118. package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -0
  119. package/dist/runtime/nativeComponents/icon/style.mjs +176 -0
  120. package/dist/runtime/nativeComponents/icon/style.mjs.map +1 -0
  121. package/dist/runtime/nativeComponents/image.d.mts +8 -0
  122. package/dist/runtime/nativeComponents/image.mjs +121 -0
  123. package/dist/runtime/nativeComponents/image.mjs.map +1 -0
  124. package/dist/runtime/nativeComponents/index.d.mts +11 -0
  125. package/dist/runtime/nativeComponents/index.mjs +83 -0
  126. package/dist/runtime/nativeComponents/index.mjs.map +1 -0
  127. package/dist/runtime/nativeComponents/input.d.mts +8 -0
  128. package/dist/runtime/nativeComponents/input.mjs +131 -0
  129. package/dist/runtime/nativeComponents/input.mjs.map +1 -0
  130. package/dist/runtime/nativeComponents/label.mjs +36 -0
  131. package/dist/runtime/nativeComponents/label.mjs.map +1 -0
  132. package/dist/runtime/nativeComponents/mediaRegistry.mjs +47 -0
  133. package/dist/runtime/nativeComponents/mediaRegistry.mjs.map +1 -0
  134. package/dist/runtime/nativeComponents/movable/helpers.mjs +23 -0
  135. package/dist/runtime/nativeComponents/movable/helpers.mjs.map +1 -0
  136. package/dist/runtime/nativeComponents/movable/index.mjs +117 -0
  137. package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -0
  138. package/dist/runtime/nativeComponents/navigator.mjs +200 -0
  139. package/dist/runtime/nativeComponents/navigator.mjs.map +1 -0
  140. package/dist/runtime/nativeComponents/picker/editors.mjs +74 -0
  141. package/dist/runtime/nativeComponents/picker/editors.mjs.map +1 -0
  142. package/dist/runtime/nativeComponents/picker/helpers.mjs +57 -0
  143. package/dist/runtime/nativeComponents/picker/helpers.mjs.map +1 -0
  144. package/dist/runtime/nativeComponents/picker/index.mjs +210 -0
  145. package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -0
  146. package/dist/runtime/nativeComponents/picker/style.mjs +71 -0
  147. package/dist/runtime/nativeComponents/picker/style.mjs.map +1 -0
  148. package/dist/runtime/nativeComponents/pickerView/column.mjs +134 -0
  149. package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -0
  150. package/dist/runtime/nativeComponents/pickerView/helpers.mjs +17 -0
  151. package/dist/runtime/nativeComponents/pickerView/helpers.mjs.map +1 -0
  152. package/dist/runtime/nativeComponents/pickerView/index.mjs +128 -0
  153. package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -0
  154. package/dist/runtime/nativeComponents/pickerView/style.mjs +58 -0
  155. package/dist/runtime/nativeComponents/pickerView/style.mjs.map +1 -0
  156. package/dist/runtime/nativeComponents/primitives.mjs +16 -0
  157. package/dist/runtime/nativeComponents/primitives.mjs.map +1 -0
  158. package/dist/runtime/nativeComponents/progress/helpers.mjs +29 -0
  159. package/dist/runtime/nativeComponents/progress/helpers.mjs.map +1 -0
  160. package/dist/runtime/nativeComponents/progress/index.mjs +130 -0
  161. package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -0
  162. package/dist/runtime/nativeComponents/progress/style.mjs +40 -0
  163. package/dist/runtime/nativeComponents/progress/style.mjs.map +1 -0
  164. package/dist/runtime/nativeComponents/radio.mjs +147 -0
  165. package/dist/runtime/nativeComponents/radio.mjs.map +1 -0
  166. package/dist/runtime/nativeComponents/richText/helpers.mjs +230 -0
  167. package/dist/runtime/nativeComponents/richText/helpers.mjs.map +1 -0
  168. package/dist/runtime/nativeComponents/richText/index.mjs +74 -0
  169. package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -0
  170. package/dist/runtime/nativeComponents/scrollView.d.mts +15 -0
  171. package/dist/runtime/nativeComponents/scrollView.mjs +79 -0
  172. package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -0
  173. package/dist/runtime/nativeComponents/slider/helpers.mjs +28 -0
  174. package/dist/runtime/nativeComponents/slider/helpers.mjs.map +1 -0
  175. package/dist/runtime/nativeComponents/slider/index.mjs +120 -0
  176. package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -0
  177. package/dist/runtime/nativeComponents/slider/style.mjs +60 -0
  178. package/dist/runtime/nativeComponents/slider/style.mjs.map +1 -0
  179. package/dist/runtime/nativeComponents/style.mjs +41 -0
  180. package/dist/runtime/nativeComponents/style.mjs.map +1 -0
  181. package/dist/runtime/nativeComponents/swiper/helpers.mjs +52 -0
  182. package/dist/runtime/nativeComponents/swiper/helpers.mjs.map +1 -0
  183. package/dist/runtime/nativeComponents/swiper/index.mjs +235 -0
  184. package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -0
  185. package/dist/runtime/nativeComponents/swiper/item.mjs +14 -0
  186. package/dist/runtime/nativeComponents/swiper/item.mjs.map +1 -0
  187. package/dist/runtime/nativeComponents/swiper/style.mjs +20 -0
  188. package/dist/runtime/nativeComponents/swiper/style.mjs.map +1 -0
  189. package/dist/runtime/nativeComponents/switch.d.mts +7 -0
  190. package/dist/runtime/nativeComponents/switch.mjs +132 -0
  191. package/dist/runtime/nativeComponents/switch.mjs.map +1 -0
  192. package/dist/runtime/nativeComponents/textarea.d.mts +9 -0
  193. package/dist/runtime/nativeComponents/textarea.mjs +144 -0
  194. package/dist/runtime/nativeComponents/textarea.mjs.map +1 -0
  195. package/dist/runtime/nativeComponents/video/helpers.d.mts +12 -0
  196. package/dist/runtime/nativeComponents/video/helpers.mjs +21 -0
  197. package/dist/runtime/nativeComponents/video/helpers.mjs.map +1 -0
  198. package/dist/runtime/nativeComponents/video/index.mjs +124 -0
  199. package/dist/runtime/nativeComponents/video/index.mjs.map +1 -0
  200. package/dist/runtime/nativeComponents/video/style.mjs +14 -0
  201. package/dist/runtime/nativeComponents/video/style.mjs.map +1 -0
  202. package/dist/runtime/navigationBar/index.mjs +1 -3
  203. package/dist/runtime/navigationBar/index.mjs.map +1 -1
  204. package/dist/runtime/pageLayout.d.mts +9 -0
  205. package/dist/runtime/pageLayout.mjs +16 -0
  206. package/dist/runtime/pageLayout.mjs.map +1 -0
  207. package/dist/runtime/polyfill/animation.mjs +120 -0
  208. package/dist/runtime/polyfill/animation.mjs.map +1 -0
  209. package/dist/runtime/polyfill/appState.mjs +1 -1
  210. package/dist/runtime/polyfill/appState.mjs.map +1 -1
  211. package/dist/runtime/polyfill/async.d.mts +7 -0
  212. package/dist/runtime/polyfill/async.mjs.map +1 -1
  213. package/dist/runtime/polyfill/canvasContext.mjs +41 -0
  214. package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
  215. package/dist/runtime/polyfill/device.mjs +1 -1
  216. package/dist/runtime/polyfill/device.mjs.map +1 -1
  217. package/dist/runtime/polyfill/deviceApi.mjs +6 -3
  218. package/dist/runtime/polyfill/deviceApi.mjs.map +1 -1
  219. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +8 -2
  220. package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
  221. package/dist/runtime/polyfill/eventBus.mjs +56 -0
  222. package/dist/runtime/polyfill/eventBus.mjs.map +1 -0
  223. package/dist/runtime/polyfill/fileSystemManager.mjs +5 -2
  224. package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
  225. package/dist/runtime/polyfill/files.mjs +10 -10
  226. package/dist/runtime/polyfill/files.mjs.map +1 -1
  227. package/dist/runtime/polyfill/font.mjs +33 -0
  228. package/dist/runtime/polyfill/font.mjs.map +1 -0
  229. package/dist/runtime/polyfill/index.d.mts +2 -2
  230. package/dist/runtime/polyfill/index.mjs +49 -45
  231. package/dist/runtime/polyfill/index.mjs.map +1 -1
  232. package/dist/runtime/polyfill/interaction.mjs +7 -6
  233. package/dist/runtime/polyfill/interaction.mjs.map +1 -1
  234. package/dist/runtime/polyfill/interactionApi.mjs +9 -5
  235. package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
  236. package/dist/runtime/polyfill/intersectionObserver.mjs +106 -0
  237. package/dist/runtime/polyfill/intersectionObserver.mjs.map +1 -0
  238. package/dist/runtime/polyfill/locale.mjs +14 -0
  239. package/dist/runtime/polyfill/locale.mjs.map +1 -0
  240. package/dist/runtime/polyfill/locationApi.mjs +11 -6
  241. package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
  242. package/dist/runtime/polyfill/mediaActions.mjs +2 -2
  243. package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
  244. package/dist/runtime/polyfill/mediaApi/file.mjs +3 -2
  245. package/dist/runtime/polyfill/mediaApi/file.mjs.map +1 -1
  246. package/dist/runtime/polyfill/mediaApi/info.mjs +6 -4
  247. package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
  248. package/dist/runtime/polyfill/mediaApi/picker.mjs +16 -8
  249. package/dist/runtime/polyfill/mediaApi/picker.mjs.map +1 -1
  250. package/dist/runtime/polyfill/mediaApi/preview.mjs +4 -2
  251. package/dist/runtime/polyfill/mediaApi/preview.mjs.map +1 -1
  252. package/dist/runtime/polyfill/mediaApi/process.mjs +4 -2
  253. package/dist/runtime/polyfill/mediaApi/process.mjs.map +1 -1
  254. package/dist/runtime/polyfill/menuApi.mjs +39 -4
  255. package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
  256. package/dist/runtime/polyfill/navigationBarRuntime.mjs +6 -1
  257. package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
  258. package/dist/runtime/polyfill/network/request.mjs +2 -2
  259. package/dist/runtime/polyfill/network/request.mjs.map +1 -1
  260. package/dist/runtime/polyfill/platformApi.mjs +3 -2
  261. package/dist/runtime/polyfill/platformApi.mjs.map +1 -1
  262. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs +88 -0
  263. package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -0
  264. package/dist/runtime/polyfill/routeRuntime/dom.mjs +44 -15
  265. package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
  266. package/dist/runtime/polyfill/routeRuntime/history.d.mts +30 -0
  267. package/dist/runtime/polyfill/routeRuntime/history.mjs +148 -0
  268. package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -0
  269. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +39 -8
  270. package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
  271. package/dist/runtime/polyfill/routeRuntime/options.d.mts +11 -1
  272. package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -1
  273. package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
  274. package/dist/runtime/polyfill/routeRuntime/result.mjs +12 -0
  275. package/dist/runtime/polyfill/routeRuntime/result.mjs.map +1 -0
  276. package/dist/runtime/polyfill/routeRuntime/scroll.mjs +39 -0
  277. package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -0
  278. package/dist/runtime/polyfill/routeRuntime/stack.mjs +122 -0
  279. package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -0
  280. package/dist/runtime/polyfill/routeRuntime.d.mts +26 -17
  281. package/dist/runtime/polyfill/routeRuntime.mjs +121 -96
  282. package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
  283. package/dist/runtime/polyfill/runtimeDataApi.mjs +8 -3
  284. package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
  285. package/dist/runtime/polyfill/runtimeOps.mjs +10 -6
  286. package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
  287. package/dist/runtime/polyfill/selectorQuery.mjs +70 -14
  288. package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
  289. package/dist/runtime/polyfill/storage.mjs +5 -2
  290. package/dist/runtime/polyfill/storage.mjs.map +1 -1
  291. package/dist/runtime/polyfill/storageAsync.mjs +4 -2
  292. package/dist/runtime/polyfill/storageAsync.mjs.map +1 -1
  293. package/dist/runtime/polyfill/system.mjs +31 -4
  294. package/dist/runtime/polyfill/system.mjs.map +1 -1
  295. package/dist/runtime/polyfill/systemApi.mjs +2 -1
  296. package/dist/runtime/polyfill/systemApi.mjs.map +1 -1
  297. package/dist/runtime/polyfill/types/locationRuntime.d.mts +1 -4
  298. package/dist/runtime/polyfill/types/platformRuntime.d.mts +9 -0
  299. package/dist/runtime/polyfill/types/systemAuth.d.mts +20 -9
  300. package/dist/runtime/polyfill/types/tabBarRuntime.d.mts +25 -0
  301. package/dist/runtime/polyfill/ui.mjs +2 -6
  302. package/dist/runtime/polyfill/ui.mjs.map +1 -1
  303. package/dist/runtime/polyfill/uiMediaApi.d.mts +11 -10
  304. package/dist/runtime/polyfill/uiMediaApi.mjs +26 -2
  305. package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
  306. package/dist/runtime/polyfill/videoContext.mjs +4 -0
  307. package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
  308. package/dist/runtime/polyfill/vkSession.mjs +4 -14
  309. package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
  310. package/dist/runtime/polyfill.d.mts +2 -2
  311. package/dist/runtime/renderContext.mjs +1 -1
  312. package/dist/runtime/renderContext.mjs.map +1 -1
  313. package/dist/runtime/rpx.mjs +17 -8
  314. package/dist/runtime/rpx.mjs.map +1 -1
  315. package/dist/runtime/seo/index.d.mts +31 -0
  316. package/dist/runtime/seo/index.mjs +94 -0
  317. package/dist/runtime/seo/index.mjs.map +1 -0
  318. package/dist/runtime/viewport/index.d.mts +12 -0
  319. package/dist/runtime/viewport/index.mjs +44 -0
  320. package/dist/runtime/viewport/index.mjs.map +1 -0
  321. package/dist/runtime/viewport/style.mjs +62 -0
  322. package/dist/runtime/viewport/style.mjs.map +1 -0
  323. package/dist/runtime/viewport/types.d.mts +14 -0
  324. package/dist/runtime/wevu.d.mts +20 -0
  325. package/dist/runtime/wevu.mjs +73 -0
  326. package/dist/runtime/wevu.mjs.map +1 -0
  327. package/dist/shared/nativeComponents.mjs +401 -0
  328. package/dist/shared/nativeComponents.mjs.map +1 -0
  329. package/dist/shared/tabBar.d.mts +19 -0
  330. package/dist/shared/tabBar.mjs +37 -0
  331. package/dist/shared/tabBar.mjs.map +1 -0
  332. package/dist/shared/wxml.mjs +3 -20
  333. package/dist/shared/wxml.mjs.map +1 -1
  334. package/package.json +14 -6
@@ -1,44 +1,40 @@
1
- import { appendInlineQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from "./path.mjs";
1
+ import { STYLE_QUERY, TEMPLATE_QUERY } from "./constants.mjs";
2
+ import { appendQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from "./path.mjs";
2
3
  import { parse } from "@babel/parser";
3
4
  import _babelTraverse from "@babel/traverse";
4
5
  import * as t from "@babel/types";
5
6
  import MagicString from "magic-string";
6
7
 
7
8
  //#region src/plugin/register.ts
8
- const traverseCandidate = (() => {
9
- const mod = _babelTraverse;
9
+ function resolveBabelTraverse(mod) {
10
10
  if (typeof mod === "function") return mod;
11
11
  if (mod?.default && typeof mod.default === "function") return mod.default;
12
12
  if (mod?.traverse && typeof mod.traverse === "function") return mod.traverse;
13
- })();
14
- if (typeof traverseCandidate !== "function") throw new TypeError("[@weapp-vite/web] Failed to resolve @babel/traverse export.");
15
- const traverse = traverseCandidate;
16
- function mapRegisterIdentifier(kind) {
17
- if (kind === "page") return "Page";
18
- if (kind === "component") return "Component";
19
- if (kind === "app") return "App";
20
- return "";
13
+ throw new TypeError("[@weapp-vite/web] Failed to resolve @babel/traverse export.");
21
14
  }
22
- function getRegisterName(kind) {
23
- if (kind === "page") return "registerPage";
24
- if (kind === "component") return "registerComponent";
25
- if (kind === "app") return "registerApp";
15
+ const traverse = resolveBabelTraverse(_babelTraverse);
16
+ function getRegisterName(kind, callee) {
17
+ if (kind === "page" && (callee === "Page" || callee === "Component")) return "registerPage";
18
+ if (kind === "component" && callee === "Component") return "registerComponent";
19
+ if (kind === "app" && callee === "App") return "registerApp";
26
20
  }
27
- function overwriteCall(path, meta, registerName, templateIdent, styleIdent, s) {
28
- const node = path.node;
29
- const callee = node.callee;
30
- if (!t.isIdentifier(callee)) return;
31
- const insertPosition = node.end - 1;
21
+ function createRegisterMetaCode(meta, templateIdent, styleIdent, includeKind = false) {
32
22
  const metaParts = [`id: ${JSON.stringify(meta.id)}`];
23
+ if (includeKind) metaParts.push(`kind: ${JSON.stringify(meta.kind)}`);
33
24
  if (templateIdent) metaParts.push(`template: ${templateIdent}`);
34
25
  if (styleIdent) metaParts.push(`style: ${styleIdent}`);
35
- const metaCode = `{ ${metaParts.join(", ")} }`;
36
- s.overwrite(callee.start, callee.end, registerName);
26
+ if (meta.navigationBar) metaParts.push(`navigationBar: ${JSON.stringify(meta.navigationBar)}`);
27
+ return `{ ${metaParts.join(", ")} }`;
28
+ }
29
+ function overwriteCall(path, meta, registerName, templateIdent, styleIdent, s, includeKind = false) {
30
+ const node = path.node;
31
+ const identifier = node.callee;
32
+ const insertPosition = node.end - 1;
33
+ const metaCode = createRegisterMetaCode(meta, templateIdent, styleIdent, includeKind);
34
+ s.overwrite(identifier.start, identifier.end, registerName);
37
35
  s.appendLeft(insertPosition, `, ${metaCode}`);
38
36
  }
39
37
  function transformScriptModule({ code, cleanId, meta, enableHmr, runtimeModuleId, hmrAcceptCode }) {
40
- const registerName = getRegisterName(meta.kind);
41
- if (!registerName) return null;
42
38
  let ast;
43
39
  try {
44
40
  ast = parse(code, {
@@ -51,26 +47,42 @@ function transformScriptModule({ code, cleanId, meta, enableHmr, runtimeModuleId
51
47
  return null;
52
48
  }
53
49
  const s = new MagicString(code);
54
- let transformed = false;
50
+ const wevuDefineComponentNames = /* @__PURE__ */ new Set();
51
+ for (const statement of ast.program.body) {
52
+ if (!t.isImportDeclaration(statement) || statement.source.value !== "wevu") continue;
53
+ for (const specifier of statement.specifiers) if (t.isImportSpecifier(specifier) && t.isIdentifier(specifier.imported, { name: "defineComponent" })) wevuDefineComponentNames.add(specifier.local.name);
54
+ }
55
55
  const imports = [];
56
56
  const runtimePolyfillId = runtimeModuleId ?? toViteFsImport(resolveRuntimePolyfillPath());
57
57
  const templateIdent = meta.templatePath ? "__weapp_template__" : void 0;
58
58
  const styleIdent = meta.stylePath ? "__weapp_style__" : void 0;
59
- if (meta.templatePath && templateIdent) imports.push(`import ${templateIdent} from '${toRelativeImport(cleanId, meta.templatePath)}'`);
60
- if (meta.stylePath && styleIdent) imports.push(`import ${styleIdent} from '${appendInlineQuery(toRelativeImport(cleanId, meta.stylePath))}'`);
59
+ if (meta.templatePath && templateIdent) imports.push(`import ${templateIdent} from '${appendQuery(toRelativeImport(cleanId, meta.templatePath), TEMPLATE_QUERY)}'`);
60
+ if (meta.stylePath && styleIdent) {
61
+ const styleQuery = meta.stylePath.endsWith(".wxss") ? STYLE_QUERY : "inline";
62
+ imports.push(`import ${styleIdent} from '${appendQuery(toRelativeImport(cleanId, meta.stylePath), styleQuery)}'`);
63
+ }
61
64
  const registerImports = /* @__PURE__ */ new Set();
62
65
  traverse(ast, { CallExpression(path) {
63
66
  if (!t.isIdentifier(path.node.callee)) return;
64
- if (path.node.callee.name === mapRegisterIdentifier(meta.kind)) {
67
+ const name = path.node.callee.name;
68
+ if (wevuDefineComponentNames.has(name) && meta.kind !== "app") {
69
+ registerImports.add("registerWebWevuComponent");
70
+ overwriteCall(path, meta, "registerWebWevuComponent", templateIdent, styleIdent, s, true);
71
+ return;
72
+ }
73
+ const registerName = getRegisterName(meta.kind, name);
74
+ if (registerName) {
65
75
  registerImports.add(registerName);
66
76
  overwriteCall(path, meta, registerName, templateIdent, styleIdent, s);
67
- transformed = true;
68
77
  }
69
78
  } });
70
- if (!transformed) return null;
71
- if (registerImports.size > 0) imports.unshift(`import { ${Array.from(registerImports).join(", ")} } from '${runtimePolyfillId}'`);
72
- const prefix = `${imports.join("\n")}\n`;
79
+ registerImports.add("installWebModuleRegistration");
80
+ imports.unshift(`import { ${Array.from(registerImports).join(", ")} } from '${runtimePolyfillId}'`);
81
+ const moduleMetaCode = createRegisterMetaCode(meta, templateIdent, styleIdent, true);
82
+ const restoreIdent = "__weapp_web_restore_registration__";
83
+ const prefix = `${imports.join("\n")}\nconst ${restoreIdent} = installWebModuleRegistration(${moduleMetaCode})\n`;
73
84
  s.prepend(prefix);
85
+ s.append(`\n${restoreIdent}()\n`);
74
86
  if (enableHmr && hmrAcceptCode) s.append(`\n${hmrAcceptCode}\n`);
75
87
  return {
76
88
  code: s.toString(),
@@ -79,5 +91,5 @@ function transformScriptModule({ code, cleanId, meta, enableHmr, runtimeModuleId
79
91
  }
80
92
 
81
93
  //#endregion
82
- export { transformScriptModule };
94
+ export { resolveBabelTraverse, transformScriptModule };
83
95
  //# sourceMappingURL=register.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.mjs","names":[],"sources":["../../src/plugin/register.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse'\nimport type { CallExpression } from '@babel/types'\nimport type { SourceMap } from 'magic-string'\n\nimport type { ModuleMeta } from './types'\nimport { parse } from '@babel/parser'\nimport _babelTraverse from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport MagicString from 'magic-string'\nimport { appendInlineQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from './path'\n\ntype TraverseFunction = typeof _babelTraverse extends (...args: any[]) => any\n ? typeof _babelTraverse\n : typeof _babelTraverse extends { default: infer D }\n ? D\n : typeof _babelTraverse\n\nconst traverseCandidate: any = (() => {\n const mod: any = _babelTraverse\n if (typeof mod === 'function') {\n return mod\n }\n if (mod?.default && typeof mod.default === 'function') {\n return mod.default\n }\n if (mod?.traverse && typeof mod.traverse === 'function') {\n return mod.traverse\n }\n return undefined\n})()\n\nif (typeof traverseCandidate !== 'function') {\n throw new TypeError('[@weapp-vite/web] Failed to resolve @babel/traverse export.')\n}\n\nconst traverse: TraverseFunction = traverseCandidate\n\nfunction mapRegisterIdentifier(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'Page'\n }\n if (kind === 'component') {\n return 'Component'\n }\n if (kind === 'app') {\n return 'App'\n }\n return ''\n}\n\nfunction getRegisterName(kind: ModuleMeta['kind']) {\n if (kind === 'page') {\n return 'registerPage'\n }\n if (kind === 'component') {\n return 'registerComponent'\n }\n if (kind === 'app') {\n return 'registerApp'\n }\n return undefined\n}\n\nfunction overwriteCall(\n path: NodePath<CallExpression>,\n meta: ModuleMeta,\n registerName: string,\n templateIdent: string | undefined,\n styleIdent: string | undefined,\n s: MagicString,\n) {\n const node = path.node\n const callee = node.callee\n if (!t.isIdentifier(callee)) {\n return\n }\n const end = node.end!\n const insertPosition = end - 1\n const metaParts: string[] = [`id: ${JSON.stringify(meta.id)}`]\n if (templateIdent) {\n metaParts.push(`template: ${templateIdent}`)\n }\n if (styleIdent) {\n metaParts.push(`style: ${styleIdent}`)\n }\n const metaCode = `{ ${metaParts.join(', ')} }`\n s.overwrite(callee.start!, callee.end!, registerName)\n s.appendLeft(insertPosition, `, ${metaCode}`)\n}\n\ninterface TransformScriptModuleOptions {\n code: string\n cleanId: string\n meta: ModuleMeta\n enableHmr: boolean\n runtimeModuleId?: string\n hmrAcceptCode?: string\n}\n\nexport function transformScriptModule({\n code,\n cleanId,\n meta,\n enableHmr,\n runtimeModuleId,\n hmrAcceptCode,\n}: TransformScriptModuleOptions): null | { code: string, map: SourceMap } {\n const registerName = getRegisterName(meta.kind)\n if (!registerName) {\n return null\n }\n\n let ast: ReturnType<typeof parse> | undefined\n try {\n ast = parse(code, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n errorRecovery: true,\n ranges: true,\n })\n }\n catch {\n return null\n }\n\n const s = new MagicString(code)\n let transformed = false\n\n const imports: string[] = []\n const runtimePolyfillId = runtimeModuleId ?? toViteFsImport(resolveRuntimePolyfillPath())\n const templateIdent = meta.templatePath ? '__weapp_template__' : undefined\n const styleIdent = meta.stylePath ? '__weapp_style__' : undefined\n\n if (meta.templatePath && templateIdent) {\n imports.push(`import ${templateIdent} from '${toRelativeImport(cleanId, meta.templatePath)}'`)\n }\n\n if (meta.stylePath && styleIdent) {\n imports.push(`import ${styleIdent} from '${appendInlineQuery(toRelativeImport(cleanId, meta.stylePath))}'`)\n }\n\n const registerImports = new Set<string>()\n\n traverse(ast, {\n CallExpression(path: NodePath<CallExpression>) {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n const name = path.node.callee.name\n if (name === mapRegisterIdentifier(meta.kind)) {\n registerImports.add(registerName)\n overwriteCall(path, meta, registerName, templateIdent, styleIdent, s)\n transformed = true\n }\n },\n })\n\n if (!transformed) {\n return null\n }\n\n if (registerImports.size > 0) {\n imports.unshift(`import { ${Array.from(registerImports).join(', ')} } from '${runtimePolyfillId}'`)\n }\n\n const prefix = `${imports.join('\\n')}\\n`\n s.prepend(prefix)\n\n if (enableHmr && hmrAcceptCode) {\n s.append(`\\n${hmrAcceptCode}\\n`)\n }\n\n return {\n code: s.toString(),\n map: s.generateMap({\n hires: true,\n }),\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"register.mjs","names":[],"sources":["../../src/plugin/register.ts"],"sourcesContent":["import type { NodePath } from '@babel/traverse'\nimport type { CallExpression } from '@babel/types'\nimport type { SourceMap } from 'magic-string'\n\nimport type { ModuleMeta } from './types'\nimport { parse } from '@babel/parser'\nimport _babelTraverse from '@babel/traverse'\nimport * as t from '@babel/types'\n\nimport MagicString from 'magic-string'\nimport { STYLE_QUERY, TEMPLATE_QUERY } from './constants'\nimport { appendQuery, resolveRuntimePolyfillPath, toRelativeImport, toViteFsImport } from './path'\n\ntype TraverseFunction = typeof _babelTraverse extends (...args: any[]) => any\n ? typeof _babelTraverse\n : typeof _babelTraverse extends { default: infer D }\n ? D\n : typeof _babelTraverse\n\nexport function resolveBabelTraverse(mod: any): TraverseFunction {\n if (typeof mod === 'function') {\n return mod\n }\n if (mod?.default && typeof mod.default === 'function') {\n return mod.default\n }\n if (mod?.traverse && typeof mod.traverse === 'function') {\n return mod.traverse\n }\n throw new TypeError('[@weapp-vite/web] Failed to resolve @babel/traverse export.')\n}\n\nconst traverse = resolveBabelTraverse(_babelTraverse)\n\nfunction getRegisterName(kind: ModuleMeta['kind'], callee: string) {\n if (kind === 'page' && (callee === 'Page' || callee === 'Component')) {\n return 'registerPage'\n }\n if (kind === 'component' && callee === 'Component') {\n return 'registerComponent'\n }\n if (kind === 'app' && callee === 'App') {\n return 'registerApp'\n }\n return undefined\n}\n\nfunction createRegisterMetaCode(\n meta: ModuleMeta,\n templateIdent: string | undefined,\n styleIdent: string | undefined,\n includeKind = false,\n) {\n const metaParts: string[] = [`id: ${JSON.stringify(meta.id)}`]\n if (includeKind) {\n metaParts.push(`kind: ${JSON.stringify(meta.kind)}`)\n }\n if (templateIdent) {\n metaParts.push(`template: ${templateIdent}`)\n }\n if (styleIdent) {\n metaParts.push(`style: ${styleIdent}`)\n }\n if (meta.navigationBar) {\n metaParts.push(`navigationBar: ${JSON.stringify(meta.navigationBar)}`)\n }\n return `{ ${metaParts.join(', ')} }`\n}\n\nfunction overwriteCall(\n path: NodePath<CallExpression>,\n meta: ModuleMeta,\n registerName: string,\n templateIdent: string | undefined,\n styleIdent: string | undefined,\n s: MagicString,\n includeKind = false,\n) {\n const node = path.node\n const callee = node.callee\n const identifier = callee as t.Identifier\n const end = node.end!\n const insertPosition = end - 1\n const metaCode = createRegisterMetaCode(meta, templateIdent, styleIdent, includeKind)\n s.overwrite(identifier.start!, identifier.end!, registerName)\n s.appendLeft(insertPosition, `, ${metaCode}`)\n}\n\ninterface TransformScriptModuleOptions {\n code: string\n cleanId: string\n meta: ModuleMeta\n enableHmr: boolean\n runtimeModuleId?: string\n hmrAcceptCode?: string\n}\n\nexport function transformScriptModule({\n code,\n cleanId,\n meta,\n enableHmr,\n runtimeModuleId,\n hmrAcceptCode,\n}: TransformScriptModuleOptions): null | { code: string, map: SourceMap } {\n let ast: ReturnType<typeof parse> | undefined\n try {\n ast = parse(code, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n errorRecovery: true,\n ranges: true,\n })\n }\n catch {\n return null\n }\n\n const s = new MagicString(code)\n const wevuDefineComponentNames = new Set<string>()\n for (const statement of ast.program.body) {\n if (!t.isImportDeclaration(statement) || statement.source.value !== 'wevu') {\n continue\n }\n for (const specifier of statement.specifiers) {\n if (t.isImportSpecifier(specifier)\n && t.isIdentifier(specifier.imported, { name: 'defineComponent' })) {\n wevuDefineComponentNames.add(specifier.local.name)\n }\n }\n }\n\n const imports: string[] = []\n const runtimePolyfillId = runtimeModuleId ?? toViteFsImport(resolveRuntimePolyfillPath())\n const templateIdent = meta.templatePath ? '__weapp_template__' : undefined\n const styleIdent = meta.stylePath ? '__weapp_style__' : undefined\n\n if (meta.templatePath && templateIdent) {\n imports.push(`import ${templateIdent} from '${appendQuery(toRelativeImport(cleanId, meta.templatePath), TEMPLATE_QUERY)}'`)\n }\n\n if (meta.stylePath && styleIdent) {\n const styleQuery = meta.stylePath.endsWith('.wxss') ? STYLE_QUERY : 'inline'\n imports.push(`import ${styleIdent} from '${appendQuery(toRelativeImport(cleanId, meta.stylePath), styleQuery)}'`)\n }\n\n const registerImports = new Set<string>()\n\n traverse(ast, {\n CallExpression(path: NodePath<CallExpression>) {\n if (!t.isIdentifier(path.node.callee)) {\n return\n }\n const name = path.node.callee.name\n if (wevuDefineComponentNames.has(name) && meta.kind !== 'app') {\n registerImports.add('registerWebWevuComponent')\n overwriteCall(path, meta, 'registerWebWevuComponent', templateIdent, styleIdent, s, true)\n return\n }\n const registerName = getRegisterName(meta.kind, name)\n if (registerName) {\n registerImports.add(registerName)\n overwriteCall(path, meta, registerName, templateIdent, styleIdent, s)\n }\n },\n })\n\n registerImports.add('installWebModuleRegistration')\n imports.unshift(`import { ${Array.from(registerImports).join(', ')} } from '${runtimePolyfillId}'`)\n\n const moduleMetaCode = createRegisterMetaCode(meta, templateIdent, styleIdent, true)\n const restoreIdent = '__weapp_web_restore_registration__'\n const prefix = `${imports.join('\\n')}\\nconst ${restoreIdent} = installWebModuleRegistration(${moduleMetaCode})\\n`\n s.prepend(prefix)\n\n s.append(`\\n${restoreIdent}()\\n`)\n\n if (enableHmr && hmrAcceptCode) {\n s.append(`\\n${hmrAcceptCode}\\n`)\n }\n\n return {\n code: s.toString(),\n map: s.generateMap({\n hires: true,\n }),\n }\n}\n"],"mappings":"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"}
@@ -1,77 +1,136 @@
1
- import { normalizePath, toPosixId } from "./path.mjs";
1
+ import { SCRIPT_EXTS } from "./constants.mjs";
2
+ import { isInsideDir, normalizePath, toPosixId } from "./path.mjs";
2
3
  import { slugify } from "../shared/slugify.mjs";
4
+ import { normalizeWebTabBarConfig } from "../shared/tabBar.mjs";
3
5
  import { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from "./files.mjs";
4
6
  import { mergeNavigationConfig, pickNavigationConfig } from "./navigation.mjs";
5
7
  import { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags } from "./scanConfig.mjs";
8
+ import { compileScannedSfc, discoverWebPageIds } from "./scanSfc.mjs";
9
+ import { readdir } from "node:fs/promises";
6
10
  import process from "node:process";
7
11
  import { dirname, extname, join, posix, relative, resolve } from "pathe";
8
12
 
9
13
  //#region src/plugin/scan.ts
10
- async function scanProject({ srcRoot, warn, state }) {
14
+ function getStableWebComponentId(script, srcRoot) {
15
+ const normalized = script.replace(/\\/g, "/");
16
+ const nodeModulesIndex = normalized.lastIndexOf("/node_modules/");
17
+ const extension = extname(script);
18
+ if (nodeModulesIndex >= 0) return `__external__/${normalized.slice(nodeModulesIndex + 14).slice(0, -extension.length)}`;
19
+ return toPosixId(relative(srcRoot, script).slice(0, -extension.length));
20
+ }
21
+ function resolveComponentBase(raw, importerDir, srcRoot) {
22
+ if (!raw) return;
23
+ if (raw.startsWith(".")) return resolve(importerDir, raw);
24
+ if (raw.startsWith("/")) return resolve(srcRoot, raw.slice(1));
25
+ }
26
+ async function scanProject({ srcRoot, warn, state, resolveId, resolveAutoImportTag, resolveAppConfig, uniApp }) {
11
27
  state.moduleMeta.clear();
12
28
  state.pageNavigationMap.clear();
13
29
  state.templateComponentMap.clear();
14
30
  state.templatePathSet.clear();
15
31
  state.componentTagMap.clear();
16
- state.componentIdMap.clear();
32
+ state.sfcResults.clear();
17
33
  let appNavigationDefaults = {};
18
34
  let appComponentTags = {};
35
+ let appTabBar;
19
36
  const pages = /* @__PURE__ */ new Map();
20
37
  const components = /* @__PURE__ */ new Map();
38
+ const layouts = /* @__PURE__ */ new Map();
39
+ async function walk(current, files) {
40
+ const entries = await readdir(current, { withFileTypes: true });
41
+ for (const entry of entries) {
42
+ const pathname = join(current, entry.name);
43
+ if (entry.isDirectory()) await walk(pathname, files);
44
+ else files.push(pathname);
45
+ }
46
+ }
21
47
  const reportWarning = (message) => {
22
48
  if (warn) {
23
49
  warn(message);
24
50
  return;
25
51
  }
26
- if (typeof process !== "undefined" && typeof process.emitWarning === "function") process.emitWarning(message);
52
+ process.emitWarning(message);
27
53
  };
28
54
  const appScript = await resolveScriptFile(join(srcRoot, "app"));
29
- if (appScript) state.moduleMeta.set(normalizePath(appScript), {
30
- kind: "app",
31
- id: "app",
32
- scriptPath: appScript,
33
- stylePath: await resolveStyleFile(appScript)
34
- });
55
+ if (appScript) {
56
+ const appMeta = {
57
+ kind: "app",
58
+ id: "app",
59
+ scriptPath: appScript,
60
+ stylePath: await resolveStyleFile(appScript),
61
+ sourceType: appScript.endsWith(".vue") ? "vue-sfc" : "native"
62
+ };
63
+ state.moduleMeta.set(normalizePath(appScript), appMeta);
64
+ }
35
65
  const resolveComponentScript = async (raw, importerDir) => {
36
66
  const base = resolveComponentBase(raw, importerDir, srcRoot);
37
- if (!base) return;
38
- return resolveScriptFile(base);
67
+ if (base) {
68
+ const resolved = await resolveScriptFile(base);
69
+ return resolved ? normalizePath(resolved) : void 0;
70
+ }
71
+ const importer = join(importerDir, "__weapp_web_using_components__.ts");
72
+ const resolved = await resolveId?.(raw, importer);
73
+ const script = resolved ? await resolveScriptFile(resolved) : void 0;
74
+ return script ? normalizePath(script) : void 0;
39
75
  };
40
- const getComponentId = (script) => {
41
- const cached = state.componentIdMap.get(script);
42
- if (cached) return cached;
43
- const componentIdPosix = toPosixId(relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), ""));
44
- state.componentIdMap.set(script, componentIdPosix);
45
- return componentIdPosix;
76
+ const getStableComponentId = (script) => {
77
+ return getStableWebComponentId(script, srcRoot);
46
78
  };
47
79
  const getComponentTag = (script) => {
48
80
  const cached = state.componentTagMap.get(script);
49
81
  if (cached) return cached;
50
- const tag = slugify(getComponentId(script), "wv-component");
82
+ const id = getStableComponentId(script);
83
+ const tag = slugify(id, "wv-component");
51
84
  state.componentTagMap.set(script, tag);
52
85
  return tag;
53
86
  };
54
87
  const collectComponent = async (componentId, importerDir) => {
55
- const base = resolveComponentBase(componentId, importerDir, srcRoot);
56
- const script = base ? await resolveScriptFile(base) : void 0;
57
- if (!script || components.has(script)) return;
58
- const componentIdPosix = toPosixId(relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), ""));
88
+ const script = await resolveComponentScript(componentId, importerDir);
89
+ if (!script) return;
90
+ const existing = components.get(script);
91
+ if (existing) {
92
+ existing.importId ??= resolveComponentBase(componentId, importerDir, srcRoot) ? void 0 : componentId;
93
+ return;
94
+ }
95
+ const componentIdPosix = getStableComponentId(script);
96
+ const importId = resolveComponentBase(componentId, importerDir, srcRoot) ? isInsideDir(script, srcRoot) ? void 0 : componentIdPosix : componentId;
59
97
  const template = await resolveTemplateFile(script);
60
98
  const style = await resolveStyleFile(script);
61
99
  if (template) state.templatePathSet.add(normalizePath(template));
62
- state.moduleMeta.set(normalizePath(script), {
100
+ const componentMeta = {
63
101
  kind: "component",
64
102
  id: componentIdPosix,
65
103
  scriptPath: script,
66
104
  templatePath: template,
67
- stylePath: style
68
- });
105
+ stylePath: style,
106
+ sourceType: script.endsWith(".vue") ? "vue-sfc" : "native"
107
+ };
108
+ state.moduleMeta.set(normalizePath(script), componentMeta);
69
109
  components.set(script, {
70
110
  script,
71
- id: componentIdPosix
111
+ id: componentIdPosix,
112
+ importId
72
113
  });
73
- const componentTags = await collectComponentTagsFromJson({
74
- jsonBasePath: `${script.replace(new RegExp(`${extname(script)}$`), "")}.json`,
114
+ const componentJsonBasePath = `${script.replace(new RegExp(`${extname(script)}$`), "")}.json`;
115
+ const sfcConfig = script.endsWith(".vue") ? (await compileScannedSfc({
116
+ filename: script,
117
+ meta: componentMeta,
118
+ srcRoot,
119
+ state,
120
+ resolveId,
121
+ resolveAutoImportTag,
122
+ uniApp
123
+ })).config : void 0;
124
+ const componentTags = sfcConfig ? await collectComponentTagsFromConfig({
125
+ json: sfcConfig,
126
+ importerDir: dirname(script),
127
+ jsonPath: script,
128
+ warn: reportWarning,
129
+ resolveComponentScript,
130
+ getComponentTag,
131
+ collectComponent
132
+ }) : await collectComponentTagsFromJson({
133
+ jsonBasePath: componentJsonBasePath,
75
134
  importerDir: dirname(script),
76
135
  warn: reportWarning,
77
136
  collectFromConfig: (json, nextImporterDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({
@@ -84,6 +143,7 @@ async function scanProject({ srcRoot, warn, state }) {
84
143
  collectComponent
85
144
  })
86
145
  });
146
+ componentMeta.componentTags = mergeComponentTags(appComponentTags, componentTags);
87
147
  if (!template) return;
88
148
  const mergedTags = mergeComponentTags(appComponentTags, componentTags);
89
149
  if (Object.keys(mergedTags).length > 0) {
@@ -92,41 +152,6 @@ async function scanProject({ srcRoot, warn, state }) {
92
152
  }
93
153
  state.templateComponentMap.delete(normalizePath(template));
94
154
  };
95
- const appJsonPath = await resolveJsonPath(join(srcRoot, "app.json"));
96
- if (appJsonPath) {
97
- const appJson = await readJsonFile(appJsonPath);
98
- if (appJson) appComponentTags = await collectComponentTagsFromConfig({
99
- json: appJson,
100
- importerDir: srcRoot,
101
- jsonPath: appJsonPath,
102
- warn: reportWarning,
103
- resolveComponentScript,
104
- getComponentTag,
105
- collectComponent,
106
- onResolved: (tags) => {
107
- appComponentTags = tags;
108
- }
109
- });
110
- if (appJson?.pages && Array.isArray(appJson.pages)) {
111
- for (const page of appJson.pages) if (typeof page === "string") await collectPage(page);
112
- }
113
- if (appJson?.subPackages && Array.isArray(appJson.subPackages)) for (const pkg of appJson.subPackages) {
114
- if (!pkg || typeof pkg !== "object" || !Array.isArray(pkg.pages)) continue;
115
- const root = typeof pkg.root === "string" ? pkg.root : "";
116
- for (const page of pkg.pages) {
117
- if (typeof page !== "string") continue;
118
- await collectPage(posix.join(root, page));
119
- }
120
- }
121
- appNavigationDefaults = pickNavigationConfig(isRecord(appJson?.window) ? appJson.window : void 0);
122
- }
123
- state.appNavigationDefaults = appNavigationDefaults;
124
- state.appComponentTags = appComponentTags;
125
- state.scanResult = {
126
- app: appScript,
127
- pages: Array.from(pages.values()),
128
- components: Array.from(components.values())
129
- };
130
155
  async function collectPage(pageId) {
131
156
  const base = join(srcRoot, pageId);
132
157
  const script = await resolveScriptFile(base);
@@ -137,59 +162,153 @@ async function scanProject({ srcRoot, warn, state }) {
137
162
  const pageJsonBasePath = join(srcRoot, `${pageId}.json`);
138
163
  const pageJsonPath = await resolveJsonPath(pageJsonBasePath);
139
164
  const pageJson = pageJsonPath ? await readJsonFile(pageJsonPath) : void 0;
140
- state.moduleMeta.set(normalizePath(script), {
165
+ const pageMeta = {
141
166
  kind: "page",
142
167
  id: toPosixId(pageId),
143
168
  scriptPath: script,
144
169
  templatePath: template,
145
- stylePath: style
146
- });
170
+ stylePath: style,
171
+ sourceType: script.endsWith(".vue") ? "vue-sfc" : "native"
172
+ };
173
+ const sfcConfig = script.endsWith(".vue") ? (await compileScannedSfc({
174
+ filename: script,
175
+ meta: pageMeta,
176
+ srcRoot,
177
+ state,
178
+ resolveId,
179
+ resolveAutoImportTag,
180
+ uniApp
181
+ })).config : void 0;
182
+ const resolvedNavigationConfig = mergeNavigationConfig(appNavigationDefaults, sfcConfig ? pickNavigationConfig(sfcConfig) : pageJson ? pickNavigationConfig(pageJson) : {});
183
+ pageMeta.navigationBar = Object.keys(resolvedNavigationConfig).length > 0 ? resolvedNavigationConfig : void 0;
184
+ state.moduleMeta.set(normalizePath(script), pageMeta);
147
185
  pages.set(script, {
148
186
  script,
149
187
  id: toPosixId(pageId)
150
188
  });
151
- const pageComponentTags = pageJson && pageJsonPath ? await collectComponentTagsFromConfig({
152
- json: pageJson,
189
+ const pageComponentTags = sfcConfig ? await collectComponentTagsFromConfig({
190
+ json: sfcConfig,
153
191
  importerDir: dirname(script),
154
- jsonPath: pageJsonPath,
192
+ jsonPath: script,
155
193
  warn: reportWarning,
156
194
  resolveComponentScript,
157
195
  getComponentTag,
158
196
  collectComponent
159
- }) : await collectComponentTagsFromJson({
160
- jsonBasePath: pageJsonBasePath,
197
+ }) : pageJson && pageJsonPath ? await collectComponentTagsFromConfig({
198
+ json: pageJson,
161
199
  importerDir: dirname(script),
200
+ jsonPath: pageJsonPath,
162
201
  warn: reportWarning,
163
- collectFromConfig: (json, importerDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({
164
- json,
165
- importerDir,
166
- jsonPath,
167
- warn: nextWarn,
168
- resolveComponentScript,
169
- getComponentTag,
170
- collectComponent
171
- })
172
- });
202
+ resolveComponentScript,
203
+ getComponentTag,
204
+ collectComponent
205
+ }) : {};
173
206
  if (template) {
174
207
  const mergedTags = mergeComponentTags(appComponentTags, pageComponentTags);
175
208
  if (Object.keys(mergedTags).length > 0) state.templateComponentMap.set(normalizePath(template), mergedTags);
176
209
  else state.templateComponentMap.delete(normalizePath(template));
177
210
  }
211
+ pageMeta.componentTags = mergeComponentTags(appComponentTags, pageComponentTags);
178
212
  if (!template) return;
179
- if (pageJson) {
180
- state.pageNavigationMap.set(normalizePath(template), mergeNavigationConfig(appNavigationDefaults, pickNavigationConfig(pageJson)));
213
+ state.pageNavigationMap.set(normalizePath(template), resolvedNavigationConfig);
214
+ }
215
+ async function collectLayouts() {
216
+ const layoutsRoot = join(srcRoot, "layouts");
217
+ const files = [];
218
+ try {
219
+ await walk(layoutsRoot, files);
220
+ } catch {
181
221
  return;
182
222
  }
183
- state.pageNavigationMap.set(normalizePath(template), { ...appNavigationDefaults });
223
+ for (const filename of files.sort()) {
224
+ const script = SCRIPT_EXTS.includes(extname(filename)) ? filename : void 0;
225
+ if (!script) continue;
226
+ const segments = relative(layoutsRoot, script).replace(/\\/g, "/").split("/");
227
+ segments.pop();
228
+ if (segments[segments.length - 1] === "index") segments.pop();
229
+ const name = segments.join("/");
230
+ if (!name) continue;
231
+ const id = `layouts/${name}`;
232
+ const template = await resolveTemplateFile(script);
233
+ const style = await resolveStyleFile(script);
234
+ const tag = slugify(id, "wv-component");
235
+ state.moduleMeta.set(normalizePath(script), {
236
+ kind: "component",
237
+ id,
238
+ scriptPath: script,
239
+ templatePath: template,
240
+ stylePath: style,
241
+ sourceType: "native"
242
+ });
243
+ layouts.set(script, {
244
+ script,
245
+ id,
246
+ name,
247
+ tag,
248
+ template,
249
+ style
250
+ });
251
+ if (template) state.templatePathSet.add(normalizePath(template));
252
+ }
184
253
  }
185
- }
186
- function resolveComponentBase(raw, importerDir, srcRoot) {
187
- if (!raw) return;
188
- if (raw.startsWith(".")) return resolve(importerDir, raw);
189
- if (raw.startsWith("/")) return resolve(srcRoot, raw.slice(1));
190
- return resolve(srcRoot, raw);
254
+ const appJsonBasePath = join(srcRoot, "app.json");
255
+ const appJsonPath = await resolveJsonPath(appJsonBasePath);
256
+ let appJson = appJsonPath ? await (resolveAppConfig ? resolveAppConfig(appJsonPath) : readJsonFile(appJsonPath)) : void 0;
257
+ if (appScript?.endsWith(".vue")) {
258
+ const appMeta = state.moduleMeta.get(normalizePath(appScript));
259
+ appJson = {
260
+ ...(await compileScannedSfc({
261
+ filename: appScript,
262
+ meta: appMeta,
263
+ srcRoot,
264
+ state,
265
+ resolveId,
266
+ resolveAutoImportTag,
267
+ uniApp
268
+ })).config ?? {},
269
+ ...appJson ?? {}
270
+ };
271
+ }
272
+ if (appJson) {
273
+ appComponentTags = await collectComponentTagsFromConfig({
274
+ json: appJson,
275
+ importerDir: srcRoot,
276
+ jsonPath: appJsonPath ?? appScript,
277
+ warn: reportWarning,
278
+ resolveComponentScript,
279
+ getComponentTag,
280
+ collectComponent,
281
+ onResolved: (tags) => {
282
+ appComponentTags = tags;
283
+ }
284
+ });
285
+ const windowConfig = isRecord(appJson?.window) ? appJson.window : void 0;
286
+ appNavigationDefaults = pickNavigationConfig(windowConfig);
287
+ const configuredPages = Array.isArray(appJson.pages) ? appJson.pages.filter((page) => typeof page === "string") : [];
288
+ for (const page of configuredPages.length > 0 ? configuredPages : await discoverWebPageIds(srcRoot)) await collectPage(page);
289
+ const subPackages = Array.isArray(appJson.subPackages) ? appJson.subPackages : Array.isArray(appJson.subpackages) ? appJson.subpackages : [];
290
+ if (subPackages.length > 0) for (const pkg of subPackages) {
291
+ if (!pkg || typeof pkg !== "object" || !Array.isArray(pkg.pages)) continue;
292
+ const root = typeof pkg.root === "string" ? pkg.root : "";
293
+ for (const page of pkg.pages) {
294
+ if (typeof page !== "string") continue;
295
+ await collectPage(posix.join(root, page));
296
+ }
297
+ }
298
+ appTabBar = normalizeWebTabBarConfig(appJson?.tabBar);
299
+ } else for (const page of await discoverWebPageIds(srcRoot)) await collectPage(page);
300
+ await collectLayouts();
301
+ state.appNavigationDefaults = appNavigationDefaults;
302
+ state.appComponentTags = appComponentTags;
303
+ state.scanResult = {
304
+ app: appScript,
305
+ pages: Array.from(pages.values()),
306
+ components: Array.from(components.values()),
307
+ layouts: Array.from(layouts.values()),
308
+ tabBar: appTabBar
309
+ };
191
310
  }
192
311
 
193
312
  //#endregion
194
- export { scanProject };
313
+ export { getStableWebComponentId, scanProject };
195
314
  //# sourceMappingURL=scan.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"scan.mjs","names":[],"sources":["../../src/plugin/scan.ts"],"sourcesContent":["import type { ComponentEntry, PageEntry, ScanState, WarnFn } from './types'\nimport process from 'node:process'\n\nimport { dirname, extname, join, posix, relative, resolve } from 'pathe'\nimport { slugify } from '../shared/slugify'\nimport { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from './files'\nimport { mergeNavigationConfig, pickNavigationConfig } from './navigation'\nimport { normalizePath, toPosixId } from './path'\nimport { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags } from './scanConfig'\n\ninterface ScanProjectOptions {\n srcRoot: string\n warn?: WarnFn\n state: ScanState\n}\n\nexport async function scanProject({ srcRoot, warn, state }: ScanProjectOptions) {\n state.moduleMeta.clear()\n state.pageNavigationMap.clear()\n state.templateComponentMap.clear()\n state.templatePathSet.clear()\n state.componentTagMap.clear()\n state.componentIdMap.clear()\n\n let appNavigationDefaults = {}\n let appComponentTags: Record<string, string> = {}\n\n const pages = new Map<string, PageEntry>()\n const components = new Map<string, ComponentEntry>()\n\n const reportWarning = (message: string) => {\n if (warn) {\n warn(message)\n return\n }\n if (typeof process !== 'undefined' && typeof process.emitWarning === 'function') {\n process.emitWarning(message)\n }\n }\n\n const appScript = await resolveScriptFile(join(srcRoot, 'app'))\n if (appScript) {\n state.moduleMeta.set(normalizePath(appScript), {\n kind: 'app',\n id: 'app',\n scriptPath: appScript,\n stylePath: await resolveStyleFile(appScript),\n })\n }\n\n const resolveComponentScript = async (raw: string, importerDir: string) => {\n const base = resolveComponentBase(raw, importerDir, srcRoot)\n if (!base) {\n return undefined\n }\n return resolveScriptFile(base)\n }\n\n const getComponentId = (script: string) => {\n const cached = state.componentIdMap.get(script)\n if (cached) {\n return cached\n }\n const idRelative = relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), '')\n const componentIdPosix = toPosixId(idRelative)\n state.componentIdMap.set(script, componentIdPosix)\n return componentIdPosix\n }\n\n const getComponentTag = (script: string) => {\n const cached = state.componentTagMap.get(script)\n if (cached) {\n return cached\n }\n const id = getComponentId(script)\n const tag = slugify(id, 'wv-component')\n state.componentTagMap.set(script, tag)\n return tag\n }\n\n const collectComponent = async (componentId: string, importerDir: string) => {\n const base = resolveComponentBase(componentId, importerDir, srcRoot)\n const script = base ? await resolveScriptFile(base) : undefined\n if (!script || components.has(script)) {\n return\n }\n\n const idRelative = relative(srcRoot, script).replace(new RegExp(`${extname(script)}$`), '')\n const componentIdPosix = toPosixId(idRelative)\n const template = await resolveTemplateFile(script)\n const style = await resolveStyleFile(script)\n\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n state.moduleMeta.set(normalizePath(script), {\n kind: 'component',\n id: componentIdPosix,\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n })\n\n components.set(script, { script, id: componentIdPosix })\n\n const componentJsonBasePath = `${script.replace(new RegExp(`${extname(script)}$`), '')}.json`\n const componentTags = await collectComponentTagsFromJson({\n jsonBasePath: componentJsonBasePath,\n importerDir: dirname(script),\n warn: reportWarning,\n collectFromConfig: (json, nextImporterDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({\n json,\n importerDir: nextImporterDir,\n jsonPath,\n warn: nextWarn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n }),\n })\n\n if (!template) {\n return\n }\n\n const mergedTags = mergeComponentTags(appComponentTags, componentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n return\n }\n state.templateComponentMap.delete(normalizePath(template))\n }\n\n const appJsonBasePath = join(srcRoot, 'app.json')\n const appJsonPath = await resolveJsonPath(appJsonBasePath)\n if (appJsonPath) {\n const appJson = await readJsonFile(appJsonPath)\n\n if (appJson) {\n appComponentTags = await collectComponentTagsFromConfig({\n json: appJson,\n importerDir: srcRoot,\n jsonPath: appJsonPath,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n onResolved: (tags) => {\n appComponentTags = tags\n },\n })\n }\n\n if (appJson?.pages && Array.isArray(appJson.pages)) {\n for (const page of appJson.pages) {\n if (typeof page === 'string') {\n await collectPage(page)\n }\n }\n }\n\n if (appJson?.subPackages && Array.isArray(appJson.subPackages)) {\n for (const pkg of appJson.subPackages) {\n if (!pkg || typeof pkg !== 'object' || !Array.isArray(pkg.pages)) {\n continue\n }\n const root = typeof pkg.root === 'string' ? pkg.root : ''\n for (const page of pkg.pages) {\n if (typeof page !== 'string') {\n continue\n }\n await collectPage(posix.join(root, page))\n }\n }\n }\n\n const windowConfig = isRecord(appJson?.window) ? appJson.window : undefined\n appNavigationDefaults = pickNavigationConfig(windowConfig)\n }\n\n state.appNavigationDefaults = appNavigationDefaults\n state.appComponentTags = appComponentTags\n state.scanResult = {\n app: appScript,\n pages: Array.from(pages.values()),\n components: Array.from(components.values()),\n }\n\n async function collectPage(pageId: string) {\n const base = join(srcRoot, pageId)\n const script = await resolveScriptFile(base)\n if (!script) {\n return\n }\n\n const template = await resolveTemplateFile(base)\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n const style = await resolveStyleFile(base)\n const pageJsonBasePath = join(srcRoot, `${pageId}.json`)\n const pageJsonPath = await resolveJsonPath(pageJsonBasePath)\n const pageJson = pageJsonPath ? await readJsonFile(pageJsonPath) : undefined\n\n state.moduleMeta.set(normalizePath(script), {\n kind: 'page',\n id: toPosixId(pageId),\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n })\n\n pages.set(script, {\n script,\n id: toPosixId(pageId),\n })\n\n const pageComponentTags = pageJson && pageJsonPath\n ? await collectComponentTagsFromConfig({\n json: pageJson,\n importerDir: dirname(script),\n jsonPath: pageJsonPath,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n })\n : await collectComponentTagsFromJson({\n jsonBasePath: pageJsonBasePath,\n importerDir: dirname(script),\n warn: reportWarning,\n collectFromConfig: (json, importerDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({\n json,\n importerDir,\n jsonPath,\n warn: nextWarn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n }),\n })\n\n if (template) {\n const mergedTags = mergeComponentTags(appComponentTags, pageComponentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n }\n else {\n state.templateComponentMap.delete(normalizePath(template))\n }\n }\n\n if (!template) {\n return\n }\n\n if (pageJson) {\n state.pageNavigationMap.set(\n normalizePath(template),\n mergeNavigationConfig(appNavigationDefaults, pickNavigationConfig(pageJson)),\n )\n return\n }\n\n state.pageNavigationMap.set(normalizePath(template), { ...appNavigationDefaults })\n }\n}\n\nfunction resolveComponentBase(raw: string, importerDir: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n if (raw.startsWith('.')) {\n return resolve(importerDir, raw)\n }\n if (raw.startsWith('/')) {\n return resolve(srcRoot, raw.slice(1))\n }\n return resolve(srcRoot, raw)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"scan.mjs","names":[],"sources":["../../src/plugin/scan.ts"],"sourcesContent":["import type { WebTabBarConfig } from '../shared/tabBar'\nimport type { ComponentEntry, LayoutEntry, ModuleMeta, PageEntry, ResolveWebAutoImportTag, ResolveWebModuleId, ScanState, WarnFn } from './types'\n\nimport { readdir } from 'node:fs/promises'\nimport process from 'node:process'\nimport { dirname, extname, join, posix, relative, resolve } from 'pathe'\nimport { slugify } from '../shared/slugify'\nimport { normalizeWebTabBarConfig } from '../shared/tabBar'\nimport { SCRIPT_EXTS } from './constants'\nimport { isRecord, readJsonFile, resolveJsonPath, resolveScriptFile, resolveStyleFile, resolveTemplateFile } from './files'\nimport { mergeNavigationConfig, pickNavigationConfig } from './navigation'\nimport { isInsideDir, normalizePath, toPosixId } from './path'\nimport { collectComponentTagsFromConfig, collectComponentTagsFromJson, mergeComponentTags } from './scanConfig'\nimport { compileScannedSfc, discoverWebPageIds } from './scanSfc'\n\ninterface ScanProjectOptions {\n srcRoot: string\n warn?: WarnFn\n state: ScanState\n resolveId?: ResolveWebModuleId\n resolveAutoImportTag?: ResolveWebAutoImportTag\n resolveAppConfig?: (appConfigPath: string) => Promise<Record<string, unknown> | undefined>\n uniApp?: { include: string[] }\n}\n\nexport function getStableWebComponentId(script: string, srcRoot: string) {\n const normalized = script.replace(/\\\\/g, '/')\n const nodeModulesIndex = normalized.lastIndexOf('/node_modules/')\n const extension = extname(script)\n if (nodeModulesIndex >= 0) {\n const packageRelative = normalized.slice(nodeModulesIndex + '/node_modules/'.length)\n return `__external__/${packageRelative.slice(0, -extension.length)}`\n }\n return toPosixId(relative(srcRoot, script).slice(0, -extension.length))\n}\n\nfunction resolveComponentBase(raw: string, importerDir: string, srcRoot: string) {\n if (!raw) {\n return undefined\n }\n if (raw.startsWith('.')) {\n return resolve(importerDir, raw)\n }\n if (raw.startsWith('/')) {\n return resolve(srcRoot, raw.slice(1))\n }\n return undefined\n}\n\nexport async function scanProject({ srcRoot, warn, state, resolveId, resolveAutoImportTag, resolveAppConfig, uniApp }: ScanProjectOptions) {\n state.moduleMeta.clear()\n state.pageNavigationMap.clear()\n state.templateComponentMap.clear()\n state.templatePathSet.clear()\n state.componentTagMap.clear()\n state.sfcResults.clear()\n\n let appNavigationDefaults = {}\n let appComponentTags: Record<string, string> = {}\n let appTabBar: WebTabBarConfig | undefined\n\n const pages = new Map<string, PageEntry>()\n const components = new Map<string, ComponentEntry>()\n const layouts = new Map<string, LayoutEntry>()\n\n async function walk(current: string, files: string[]) {\n const entries = await readdir(current, { withFileTypes: true })\n for (const entry of entries) {\n const pathname = join(current, entry.name)\n if (entry.isDirectory()) {\n await walk(pathname, files)\n }\n else {\n files.push(pathname)\n }\n }\n }\n\n const reportWarning = (message: string) => {\n if (warn) {\n warn(message)\n return\n }\n process.emitWarning(message)\n }\n\n const appScript = await resolveScriptFile(join(srcRoot, 'app'))\n if (appScript) {\n const appMeta: ModuleMeta = {\n kind: 'app',\n id: 'app',\n scriptPath: appScript,\n stylePath: await resolveStyleFile(appScript),\n sourceType: appScript.endsWith('.vue') ? 'vue-sfc' : 'native',\n }\n state.moduleMeta.set(normalizePath(appScript), appMeta)\n }\n\n const resolveComponentScript = async (raw: string, importerDir: string) => {\n const base = resolveComponentBase(raw, importerDir, srcRoot)\n if (base) {\n const resolved = await resolveScriptFile(base)\n return resolved ? normalizePath(resolved) : undefined\n }\n const importer = join(importerDir, '__weapp_web_using_components__.ts')\n const resolved = await resolveId?.(raw, importer)\n const script = resolved ? await resolveScriptFile(resolved) : undefined\n return script ? normalizePath(script) : undefined\n }\n\n const getStableComponentId = (script: string) => {\n return getStableWebComponentId(script, srcRoot)\n }\n\n const getComponentTag = (script: string) => {\n const cached = state.componentTagMap.get(script)\n if (cached) {\n return cached\n }\n const id = getStableComponentId(script)\n const tag = slugify(id, 'wv-component')\n state.componentTagMap.set(script, tag)\n return tag\n }\n\n const collectComponent = async (componentId: string, importerDir: string) => {\n const script = await resolveComponentScript(componentId, importerDir)\n if (!script) {\n return\n }\n\n const existing = components.get(script)\n if (existing) {\n existing.importId ??= resolveComponentBase(componentId, importerDir, srcRoot)\n ? undefined\n : componentId\n return\n }\n\n const componentIdPosix = getStableComponentId(script)\n const importId = resolveComponentBase(componentId, importerDir, srcRoot)\n ? (isInsideDir(script, srcRoot) ? undefined : componentIdPosix)\n : componentId\n const template = await resolveTemplateFile(script)\n const style = await resolveStyleFile(script)\n\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n const componentMeta: ModuleMeta = {\n kind: 'component',\n id: componentIdPosix,\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n sourceType: script.endsWith('.vue') ? 'vue-sfc' : 'native',\n }\n state.moduleMeta.set(normalizePath(script), componentMeta)\n\n components.set(script, { script, id: componentIdPosix, importId })\n\n const componentJsonBasePath = `${script.replace(new RegExp(`${extname(script)}$`), '')}.json`\n const sfcConfig = script.endsWith('.vue')\n ? (await compileScannedSfc({ filename: script, meta: componentMeta, srcRoot, state, resolveId, resolveAutoImportTag, uniApp })).config\n : undefined\n const componentTags = sfcConfig\n ? await collectComponentTagsFromConfig({\n json: sfcConfig,\n importerDir: dirname(script),\n jsonPath: script,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n })\n : await collectComponentTagsFromJson({\n jsonBasePath: componentJsonBasePath,\n importerDir: dirname(script),\n warn: reportWarning,\n collectFromConfig: (json, nextImporterDir, jsonPath, nextWarn) => collectComponentTagsFromConfig({\n json,\n importerDir: nextImporterDir,\n jsonPath,\n warn: nextWarn,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n }),\n })\n componentMeta.componentTags = mergeComponentTags(appComponentTags, componentTags)\n\n if (!template) {\n return\n }\n\n const mergedTags = mergeComponentTags(appComponentTags, componentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n return\n }\n state.templateComponentMap.delete(normalizePath(template))\n }\n\n async function collectPage(pageId: string) {\n const base = join(srcRoot, pageId)\n const script = await resolveScriptFile(base)\n if (!script) {\n return\n }\n\n const template = await resolveTemplateFile(base)\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n\n const style = await resolveStyleFile(base)\n const pageJsonBasePath = join(srcRoot, `${pageId}.json`)\n const pageJsonPath = await resolveJsonPath(pageJsonBasePath)\n const pageJson = pageJsonPath ? await readJsonFile(pageJsonPath) : undefined\n const pageMeta: ModuleMeta = {\n kind: 'page',\n id: toPosixId(pageId),\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n sourceType: script.endsWith('.vue') ? 'vue-sfc' : 'native',\n }\n\n const sfcConfig = script.endsWith('.vue')\n ? (await compileScannedSfc({ filename: script, meta: pageMeta, srcRoot, state, resolveId, resolveAutoImportTag, uniApp })).config\n : undefined\n const resolvedNavigationConfig = mergeNavigationConfig(\n appNavigationDefaults,\n sfcConfig ? pickNavigationConfig(sfcConfig) : pageJson ? pickNavigationConfig(pageJson) : {},\n )\n pageMeta.navigationBar = Object.keys(resolvedNavigationConfig).length > 0\n ? resolvedNavigationConfig\n : undefined\n state.moduleMeta.set(normalizePath(script), pageMeta)\n\n pages.set(script, {\n script,\n id: toPosixId(pageId),\n })\n\n const pageComponentTags = sfcConfig\n ? await collectComponentTagsFromConfig({\n json: sfcConfig,\n importerDir: dirname(script),\n jsonPath: script,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n })\n : pageJson && pageJsonPath\n ? await collectComponentTagsFromConfig({\n json: pageJson,\n importerDir: dirname(script),\n jsonPath: pageJsonPath,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n })\n : {}\n\n if (template) {\n const mergedTags = mergeComponentTags(appComponentTags, pageComponentTags)\n if (Object.keys(mergedTags).length > 0) {\n state.templateComponentMap.set(normalizePath(template), mergedTags)\n }\n else {\n state.templateComponentMap.delete(normalizePath(template))\n }\n }\n pageMeta.componentTags = mergeComponentTags(appComponentTags, pageComponentTags)\n\n if (!template) {\n return\n }\n\n state.pageNavigationMap.set(normalizePath(template), resolvedNavigationConfig)\n }\n\n async function collectLayouts() {\n const layoutsRoot = join(srcRoot, 'layouts')\n const files: string[] = []\n try {\n await walk(layoutsRoot, files)\n }\n catch {\n return\n }\n for (const filename of files.sort()) {\n const script = SCRIPT_EXTS.includes(extname(filename)) ? filename : undefined\n if (!script) {\n continue\n }\n const relativePath = relative(layoutsRoot, script).replace(/\\\\/g, '/')\n const segments = relativePath.split('/')\n segments.pop()\n if (segments[segments.length - 1] === 'index') {\n segments.pop()\n }\n const name = segments.join('/')\n if (!name) {\n continue\n }\n const id = `layouts/${name}`\n const template = await resolveTemplateFile(script)\n const style = await resolveStyleFile(script)\n const tag = slugify(id, 'wv-component')\n state.moduleMeta.set(normalizePath(script), {\n kind: 'component',\n id,\n scriptPath: script,\n templatePath: template,\n stylePath: style,\n sourceType: 'native',\n })\n layouts.set(script, { script, id, name, tag, template, style })\n if (template) {\n state.templatePathSet.add(normalizePath(template))\n }\n }\n }\n\n const appJsonBasePath = join(srcRoot, 'app.json')\n const appJsonPath = await resolveJsonPath(appJsonBasePath)\n let appJson = appJsonPath\n ? await (resolveAppConfig ? resolveAppConfig(appJsonPath) : readJsonFile(appJsonPath))\n : undefined\n if (appScript?.endsWith('.vue')) {\n const appMeta = state.moduleMeta.get(normalizePath(appScript))!\n const sfcConfig = (await compileScannedSfc({ filename: appScript, meta: appMeta, srcRoot, state, resolveId, resolveAutoImportTag, uniApp })).config\n appJson = {\n ...(sfcConfig ?? {}),\n ...(appJson ?? {}),\n }\n }\n if (appJson) {\n appComponentTags = await collectComponentTagsFromConfig({\n json: appJson,\n importerDir: srcRoot,\n jsonPath: appJsonPath ?? appScript!,\n warn: reportWarning,\n resolveComponentScript,\n getComponentTag,\n collectComponent,\n onResolved: (tags) => {\n appComponentTags = tags\n },\n })\n\n const windowConfig = isRecord(appJson?.window) ? appJson.window : undefined\n appNavigationDefaults = pickNavigationConfig(windowConfig)\n\n const configuredPages = Array.isArray(appJson.pages)\n ? appJson.pages.filter((page): page is string => typeof page === 'string')\n : []\n for (const page of configuredPages.length > 0 ? configuredPages : await discoverWebPageIds(srcRoot)) {\n await collectPage(page)\n }\n\n const subPackages = Array.isArray(appJson.subPackages)\n ? appJson.subPackages\n : Array.isArray(appJson.subpackages)\n ? appJson.subpackages\n : []\n if (subPackages.length > 0) {\n for (const pkg of subPackages) {\n if (!pkg || typeof pkg !== 'object' || !Array.isArray(pkg.pages)) {\n continue\n }\n const root = typeof pkg.root === 'string' ? pkg.root : ''\n for (const page of pkg.pages) {\n if (typeof page !== 'string') {\n continue\n }\n await collectPage(posix.join(root, page))\n }\n }\n }\n\n appTabBar = normalizeWebTabBarConfig(appJson?.tabBar)\n }\n else {\n for (const page of await discoverWebPageIds(srcRoot)) {\n await collectPage(page)\n }\n }\n\n await collectLayouts()\n\n state.appNavigationDefaults = appNavigationDefaults\n state.appComponentTags = appComponentTags\n state.scanResult = {\n app: appScript,\n pages: Array.from(pages.values()),\n components: Array.from(components.values()),\n layouts: Array.from(layouts.values()),\n tabBar: appTabBar,\n }\n}\n"],"mappings":"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"}