wevu 7.2.2 → 7.3.0

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 (348) hide show
  1. package/README.md +6 -0
  2. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +1 -1
  3. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +1 -1
  4. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +1 -1
  5. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +1 -1
  6. package/dist/dev/internal-runtime.d.mts +2 -1
  7. package/dist/dev/internal-runtime.mjs +3 -2
  8. package/dist/dev/package.mjs +1 -1
  9. package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
  10. package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
  11. package/dist/dev/reactivity/core.mjs +5 -8
  12. package/dist/dev/reactivity/core.mjs.map +1 -1
  13. package/dist/dev/reactivity/reactive/patch.mjs +3 -3
  14. package/dist/dev/reactivity/reactive/patch.mjs.map +1 -1
  15. package/dist/dev/reactivity/reactive/patchState.mjs +4 -8
  16. package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -1
  17. package/dist/dev/reactivity/reactive/shared.mjs +1 -2
  18. package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
  19. package/dist/dev/reactivity/reactive.mjs +5 -10
  20. package/dist/dev/reactivity/reactive.mjs.map +1 -1
  21. package/dist/dev/reactivity/ref.mjs +2 -2
  22. package/dist/dev/reactivity/ref.mjs.map +1 -1
  23. package/dist/dev/reactivity/shallowRef.mjs +1 -1
  24. package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
  25. package/dist/dev/reactivity/watch/helpers.mjs +1 -1
  26. package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
  27. package/dist/dev/reactivity/watch.mjs +6 -8
  28. package/dist/dev/reactivity/watch.mjs.map +1 -1
  29. package/dist/dev/router/createRouter.mjs +17 -24
  30. package/dist/dev/router/createRouter.mjs.map +1 -1
  31. package/dist/dev/router/initialNavigation.mjs +18 -16
  32. package/dist/dev/router/initialNavigation.mjs.map +1 -1
  33. package/dist/dev/router/instance.mjs +1 -2
  34. package/dist/dev/router/instance.mjs.map +1 -1
  35. package/dist/dev/router/navigationCore.mjs +2 -2
  36. package/dist/dev/router/navigationCore.mjs.map +1 -1
  37. package/dist/dev/router/navigationResult.mjs +7 -10
  38. package/dist/dev/router/navigationResult.mjs.map +1 -1
  39. package/dist/dev/router/navigationTarget.mjs +1 -3
  40. package/dist/dev/router/navigationTarget.mjs.map +1 -1
  41. package/dist/dev/router/resolve.mjs +3 -4
  42. package/dist/dev/router/resolve.mjs.map +1 -1
  43. package/dist/dev/router/routeRegistry.mjs +1 -1
  44. package/dist/dev/router/routeRegistry.mjs.map +1 -1
  45. package/dist/dev/router/routeSync.mjs +1 -1
  46. package/dist/dev/router/routeSync.mjs.map +1 -1
  47. package/dist/dev/router/useRoute.mjs +12 -19
  48. package/dist/dev/router/useRoute.mjs.map +1 -1
  49. package/dist/dev/routerInternal/location.mjs +2 -3
  50. package/dist/dev/routerInternal/location.mjs.map +1 -1
  51. package/dist/dev/routerInternal/params.mjs +2 -3
  52. package/dist/dev/routerInternal/params.mjs.map +1 -1
  53. package/dist/dev/routerInternal/records.mjs +1 -1
  54. package/dist/dev/routerInternal/records.mjs.map +1 -1
  55. package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
  56. package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
  57. package/dist/dev/runtime/app/context.mjs +13 -26
  58. package/dist/dev/runtime/app/context.mjs.map +1 -1
  59. package/dist/dev/runtime/app/diagnostics.mjs +2 -4
  60. package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
  61. package/dist/dev/runtime/app/mount.mjs +27 -33
  62. package/dist/dev/runtime/app/mount.mjs.map +1 -1
  63. package/dist/dev/runtime/app/setData/commitTracker.mjs +5 -9
  64. package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
  65. package/dist/dev/runtime/app/setData/patchScheduler.mjs +2 -4
  66. package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -1
  67. package/dist/dev/runtime/app/setData/payload.mjs +2 -3
  68. package/dist/dev/runtime/app/setData/payload.mjs.map +1 -1
  69. package/dist/dev/runtime/app/setData/scheduler.mjs +7 -9
  70. package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
  71. package/dist/dev/runtime/app/setData/snapshot.mjs +5 -6
  72. package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -1
  73. package/dist/dev/runtime/app/setDataOptions.mjs +26 -27
  74. package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
  75. package/dist/dev/runtime/app.mjs +9 -9
  76. package/dist/dev/runtime/app.mjs.map +1 -1
  77. package/dist/dev/runtime/bindingManifest.mjs +6 -14
  78. package/dist/dev/runtime/bindingManifest.mjs.map +1 -1
  79. package/dist/dev/runtime/capabilities.d.mts +4 -1
  80. package/dist/dev/runtime/capabilities.mjs.map +1 -1
  81. package/dist/dev/runtime/css.mjs +4 -8
  82. package/dist/dev/runtime/css.mjs.map +1 -1
  83. package/dist/dev/runtime/defaults.mjs +4 -4
  84. package/dist/dev/runtime/defaults.mjs.map +1 -1
  85. package/dist/dev/runtime/define/initialComputed.mjs +5 -5
  86. package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
  87. package/dist/dev/runtime/define/options.mjs +10 -12
  88. package/dist/dev/runtime/define/options.mjs.map +1 -1
  89. package/dist/dev/runtime/define/props.mjs +4 -5
  90. package/dist/dev/runtime/define/props.mjs.map +1 -1
  91. package/dist/dev/runtime/define/scopedSlotOptions.mjs +43 -61
  92. package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
  93. package/dist/dev/runtime/define/setupResult.mjs +17 -28
  94. package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
  95. package/dist/dev/runtime/define.mjs +9 -12
  96. package/dist/dev/runtime/define.mjs.map +1 -1
  97. package/dist/dev/runtime/diff.mjs +9 -11
  98. package/dist/dev/runtime/diff.mjs.map +1 -1
  99. package/dist/dev/runtime/disposables.mjs +2 -2
  100. package/dist/dev/runtime/disposables.mjs.map +1 -1
  101. package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
  102. package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
  103. package/dist/dev/runtime/features/inlineEvents.mjs +2 -3
  104. package/dist/dev/runtime/features/inlineEvents.mjs.map +1 -1
  105. package/dist/dev/runtime/features/jsxIslands.d.mts +7 -0
  106. package/dist/dev/runtime/features/jsxIslands.mjs +20 -0
  107. package/dist/dev/runtime/features/jsxIslands.mjs.map +1 -0
  108. package/dist/dev/runtime/features/layout.mjs +2 -3
  109. package/dist/dev/runtime/features/layout.mjs.map +1 -1
  110. package/dist/dev/runtime/features/publicLayout.mjs +2 -6
  111. package/dist/dev/runtime/features/publicLayout.mjs.map +1 -1
  112. package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
  113. package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
  114. package/dist/dev/runtime/features/templateRefs.mjs +1 -1
  115. package/dist/dev/runtime/features/templateRefs.mjs.map +1 -1
  116. package/dist/dev/runtime/hooks/base.mjs +21 -32
  117. package/dist/dev/runtime/hooks/base.mjs.map +1 -1
  118. package/dist/dev/runtime/inlineDataset.mjs +1 -2
  119. package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
  120. package/dist/dev/runtime/intersectionObserver.mjs +6 -6
  121. package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
  122. package/dist/dev/runtime/jsxIsland.mjs +16 -33
  123. package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
  124. package/dist/dev/runtime/layoutBridge.mjs +32 -62
  125. package/dist/dev/runtime/layoutBridge.mjs.map +1 -1
  126. package/dist/dev/runtime/nativeBridge.mjs +1 -1
  127. package/dist/dev/runtime/nativeBridge.mjs.map +1 -1
  128. package/dist/dev/runtime/navigationLifecycle.mjs +24 -0
  129. package/dist/dev/runtime/navigationLifecycle.mjs.map +1 -0
  130. package/dist/dev/runtime/pageEnvironment.mjs +15 -18
  131. package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
  132. package/dist/dev/runtime/pageLayout.mjs +7 -11
  133. package/dist/dev/runtime/pageLayout.mjs.map +1 -1
  134. package/dist/dev/runtime/pageScroll.mjs +2 -3
  135. package/dist/dev/runtime/pageScroll.mjs.map +1 -1
  136. package/dist/dev/runtime/platform/current.mjs +12 -0
  137. package/dist/dev/runtime/platform/current.mjs.map +1 -0
  138. package/dist/dev/runtime/platform/generic.mjs +36 -0
  139. package/dist/dev/runtime/platform/generic.mjs.map +1 -0
  140. package/dist/dev/runtime/platform/globals.mjs +29 -0
  141. package/dist/dev/runtime/platform/globals.mjs.map +1 -0
  142. package/dist/dev/runtime/platform.mjs +15 -60
  143. package/dist/dev/runtime/platform.mjs.map +1 -1
  144. package/dist/dev/runtime/provideContext.mjs +7 -9
  145. package/dist/dev/runtime/provideContext.mjs.map +1 -1
  146. package/dist/dev/runtime/publicRuntime.mjs +4 -0
  147. package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
  148. package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
  149. package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
  150. package/dist/dev/runtime/register/app.mjs +18 -19
  151. package/dist/dev/runtime/register/app.mjs.map +1 -1
  152. package/dist/dev/runtime/register/component/alipay.mjs +9 -18
  153. package/dist/dev/runtime/register/component/alipay.mjs.map +1 -1
  154. package/dist/dev/runtime/register/component/alipayRegistration.mjs +60 -0
  155. package/dist/dev/runtime/register/component/alipayRegistration.mjs.map +1 -0
  156. package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -9
  157. package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
  158. package/dist/dev/runtime/register/component/lifecycle.mjs +7 -12
  159. package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -1
  160. package/dist/dev/runtime/register/component/methods.mjs +13 -18
  161. package/dist/dev/runtime/register/component/methods.mjs.map +1 -1
  162. package/dist/dev/runtime/register/component/options.mjs +3 -4
  163. package/dist/dev/runtime/register/component/options.mjs.map +1 -1
  164. package/dist/dev/runtime/register/component/props.mjs +25 -31
  165. package/dist/dev/runtime/register/component/props.mjs.map +1 -1
  166. package/dist/dev/runtime/register/component/registerDefinition.mjs +18 -40
  167. package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
  168. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +18 -60
  169. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
  170. package/dist/dev/runtime/register/component.mjs +3 -5
  171. package/dist/dev/runtime/register/component.mjs.map +1 -1
  172. package/dist/dev/runtime/register/inline.mjs +8 -10
  173. package/dist/dev/runtime/register/inline.mjs.map +1 -1
  174. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +7 -8
  175. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
  176. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  177. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
  178. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +25 -34
  179. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -1
  180. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +6 -13
  181. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
  182. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs +2 -2
  183. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs.map +1 -1
  184. package/dist/dev/runtime/register/runtimeInstance/utils.mjs +9 -9
  185. package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
  186. package/dist/dev/runtime/register/runtimeInstance.mjs +74 -100
  187. package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
  188. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +12 -15
  189. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -1
  190. package/dist/dev/runtime/register/setup.mjs +2 -3
  191. package/dist/dev/runtime/register/setup.mjs.map +1 -1
  192. package/dist/dev/runtime/register/snapshot.mjs +1 -4
  193. package/dist/dev/runtime/register/snapshot.mjs.map +1 -1
  194. package/dist/dev/runtime/register/watch.mjs +3 -5
  195. package/dist/dev/runtime/register/watch.mjs.map +1 -1
  196. package/dist/dev/runtime/scopedSlots.mjs +14 -21
  197. package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
  198. package/dist/dev/runtime/selectorQuery.mjs +5 -9
  199. package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
  200. package/dist/dev/runtime/template.mjs +1 -1
  201. package/dist/dev/runtime/template.mjs.map +1 -1
  202. package/dist/dev/runtime/templateRefs/helpers.mjs +14 -24
  203. package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -1
  204. package/dist/dev/runtime/templateRefs.mjs +8 -15
  205. package/dist/dev/runtime/templateRefs.mjs.map +1 -1
  206. package/dist/dev/runtime/uniAppHost.mjs +6 -14
  207. package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
  208. package/dist/dev/runtime/updatePerformance.mjs +1 -1
  209. package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
  210. package/dist/dev/runtime/use.mjs +1 -1
  211. package/dist/dev/runtime/use.mjs.map +1 -1
  212. package/dist/dev/runtime/vueCompat/context.mjs +3 -5
  213. package/dist/dev/runtime/vueCompat/context.mjs.map +1 -1
  214. package/dist/dev/runtime/vueCompat/model.mjs +9 -13
  215. package/dist/dev/runtime/vueCompat/model.mjs.map +1 -1
  216. package/dist/dev/runtime/vueCompat/router.mjs +4 -4
  217. package/dist/dev/runtime/vueCompat/router.mjs.map +1 -1
  218. package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
  219. package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
  220. package/dist/dev/scheduler.mjs +3 -4
  221. package/dist/dev/scheduler.mjs.map +1 -1
  222. package/dist/dev/store/base.mjs +1 -2
  223. package/dist/dev/store/base.mjs.map +1 -1
  224. package/dist/dev/store/define/create.mjs +11 -22
  225. package/dist/dev/store/define/create.mjs.map +1 -1
  226. package/dist/dev/store/define.mjs +1 -1
  227. package/dist/dev/store/define.mjs.map +1 -1
  228. package/dist/dev/store/view.mjs +1 -1
  229. package/dist/dev/store/view.mjs.map +1 -1
  230. package/dist/internal-runtime.d.mts +2 -1
  231. package/dist/internal-runtime.mjs +1 -1
  232. package/dist/package.mjs +1 -1
  233. package/dist/reactivity/asyncDerivation.mjs +1 -1
  234. package/dist/reactivity/core.mjs +1 -1
  235. package/dist/reactivity/reactive/patch.mjs +1 -1
  236. package/dist/reactivity/reactive/patchState.mjs +1 -1
  237. package/dist/reactivity/reactive/shared.mjs +1 -1
  238. package/dist/reactivity/reactive.mjs +1 -1
  239. package/dist/reactivity/ref.mjs +1 -1
  240. package/dist/reactivity/shallowRef.mjs +1 -1
  241. package/dist/reactivity/watch/helpers.mjs +1 -1
  242. package/dist/reactivity/watch.mjs +1 -1
  243. package/dist/router/createRouter.mjs +1 -1
  244. package/dist/router/initialNavigation.mjs +1 -1
  245. package/dist/router/instance.mjs +1 -1
  246. package/dist/router/navigationCore.mjs +1 -1
  247. package/dist/router/navigationResult.mjs +1 -1
  248. package/dist/router/navigationTarget.mjs +1 -1
  249. package/dist/router/resolve.mjs +1 -1
  250. package/dist/router/routeRegistry.mjs +1 -1
  251. package/dist/router/routeSync.mjs +1 -1
  252. package/dist/router/useRoute.mjs +1 -1
  253. package/dist/routerInternal/location.mjs +1 -1
  254. package/dist/routerInternal/params.mjs +1 -1
  255. package/dist/routerInternal/records.mjs +1 -1
  256. package/dist/routerInternal/recordsWarnings.mjs +1 -1
  257. package/dist/runtime/app/context.mjs +1 -1
  258. package/dist/runtime/app/diagnostics.mjs +1 -1
  259. package/dist/runtime/app/mount.mjs +1 -1
  260. package/dist/runtime/app/setData/commitTracker.mjs +1 -1
  261. package/dist/runtime/app/setData/patchScheduler.mjs +1 -1
  262. package/dist/runtime/app/setData/payload.mjs +1 -1
  263. package/dist/runtime/app/setData/scheduler.mjs +1 -1
  264. package/dist/runtime/app/setData/snapshot.mjs +1 -1
  265. package/dist/runtime/app/setDataOptions.mjs +1 -1
  266. package/dist/runtime/app.mjs +1 -1
  267. package/dist/runtime/bindingManifest.mjs +1 -1
  268. package/dist/runtime/capabilities.d.mts +4 -1
  269. package/dist/runtime/css.mjs +1 -1
  270. package/dist/runtime/defaults.mjs +1 -1
  271. package/dist/runtime/define/initialComputed.mjs +1 -1
  272. package/dist/runtime/define/options.mjs +1 -1
  273. package/dist/runtime/define/props.mjs +1 -1
  274. package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
  275. package/dist/runtime/define/setupResult.mjs +1 -1
  276. package/dist/runtime/define.mjs +1 -1
  277. package/dist/runtime/diff.mjs +1 -1
  278. package/dist/runtime/disposables.mjs +1 -1
  279. package/dist/runtime/elementIntersectionObserver.mjs +1 -1
  280. package/dist/runtime/features/inlineEvents.mjs +1 -1
  281. package/dist/runtime/features/jsxIslands.d.mts +6 -0
  282. package/dist/runtime/features/jsxIslands.mjs +1 -0
  283. package/dist/runtime/features/layout.mjs +1 -1
  284. package/dist/runtime/features/publicLayout.mjs +1 -1
  285. package/dist/runtime/features/scopedSlots.mjs +1 -1
  286. package/dist/runtime/features/templateRefs.mjs +1 -1
  287. package/dist/runtime/hooks/base.mjs +1 -1
  288. package/dist/runtime/inlineDataset.mjs +1 -1
  289. package/dist/runtime/intersectionObserver.mjs +1 -1
  290. package/dist/runtime/jsxIsland.mjs +1 -1
  291. package/dist/runtime/layoutBridge.mjs +1 -1
  292. package/dist/runtime/nativeBridge.mjs +1 -1
  293. package/dist/runtime/navigationLifecycle.mjs +1 -0
  294. package/dist/runtime/pageEnvironment.mjs +1 -1
  295. package/dist/runtime/pageLayout.mjs +1 -1
  296. package/dist/runtime/pageScroll.mjs +1 -1
  297. package/dist/runtime/platform/current.mjs +1 -0
  298. package/dist/runtime/platform/generic.mjs +1 -0
  299. package/dist/runtime/platform/globals.mjs +1 -0
  300. package/dist/runtime/platform.mjs +1 -1
  301. package/dist/runtime/provideContext.mjs +1 -1
  302. package/dist/runtime/publicRuntime.mjs +1 -1
  303. package/dist/runtime/pullDownRefresh.mjs +1 -1
  304. package/dist/runtime/register/app.mjs +1 -1
  305. package/dist/runtime/register/component/alipay.mjs +1 -1
  306. package/dist/runtime/register/component/alipayRegistration.mjs +1 -0
  307. package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
  308. package/dist/runtime/register/component/lifecycle.mjs +1 -1
  309. package/dist/runtime/register/component/methods.mjs +1 -1
  310. package/dist/runtime/register/component/options.mjs +1 -1
  311. package/dist/runtime/register/component/props.mjs +1 -1
  312. package/dist/runtime/register/component/registerDefinition.mjs +1 -1
  313. package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
  314. package/dist/runtime/register/component.mjs +1 -1
  315. package/dist/runtime/register/inline.mjs +1 -1
  316. package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
  317. package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  318. package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -1
  319. package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
  320. package/dist/runtime/register/runtimeInstance/setupSnapshot.mjs +1 -1
  321. package/dist/runtime/register/runtimeInstance/utils.mjs +1 -1
  322. package/dist/runtime/register/runtimeInstance.mjs +1 -1
  323. package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -1
  324. package/dist/runtime/register/setup.mjs +1 -1
  325. package/dist/runtime/register/snapshot.mjs +1 -1
  326. package/dist/runtime/register/watch.mjs +1 -1
  327. package/dist/runtime/scopedSlots.mjs +1 -1
  328. package/dist/runtime/selectorQuery.mjs +1 -1
  329. package/dist/runtime/template.mjs +1 -1
  330. package/dist/runtime/templateRefs/helpers.mjs +1 -1
  331. package/dist/runtime/templateRefs.mjs +1 -1
  332. package/dist/runtime/uniAppHost.mjs +1 -1
  333. package/dist/runtime/updatePerformance.mjs +1 -1
  334. package/dist/runtime/use.mjs +1 -1
  335. package/dist/runtime/vueCompat/context.mjs +1 -1
  336. package/dist/runtime/vueCompat/model.mjs +1 -1
  337. package/dist/runtime/vueCompat/router.mjs +1 -1
  338. package/dist/runtime/vueCompat/templateRef.mjs +1 -1
  339. package/dist/scheduler.mjs +1 -1
  340. package/dist/store/base.mjs +1 -1
  341. package/dist/store/define/create.mjs +1 -1
  342. package/dist/store/define.mjs +1 -1
  343. package/dist/store/view.mjs +1 -1
  344. package/package.json +7 -7
  345. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +0 -0
  346. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +0 -0
  347. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +0 -0
  348. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +0 -0
@@ -4,7 +4,7 @@ import { WEVU_IS_APP_INSTANCE_KEY, WEVU_RUNTIME_APP_KEY } from "@weapp-core/cons
4
4
  //#region src/runtime/use.ts
5
5
  function resolveCurrentRuntimeApp() {
6
6
  const instance = getCurrentInstance();
7
- if ((instance === null || instance === void 0 ? void 0 : instance[WEVU_IS_APP_INSTANCE_KEY]) && instance[WEVU_RUNTIME_APP_KEY]) return instance[WEVU_RUNTIME_APP_KEY];
7
+ if (instance?.[WEVU_IS_APP_INSTANCE_KEY] && instance[WEVU_RUNTIME_APP_KEY]) return instance[WEVU_RUNTIME_APP_KEY];
8
8
  throw new Error("defineAppSetup() / use() 只能在 app setup 上下文中调用");
9
9
  }
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"use.mjs","names":[],"sources":["../../../src/runtime/use.ts"],"sourcesContent":["import type { RuntimeApp, WevuPlugin } from './types'\nimport {\n WEVU_IS_APP_INSTANCE_KEY,\n WEVU_RUNTIME_APP_KEY,\n} from '@weapp-core/constants'\nimport { getCurrentInstance } from './hooks'\n\nfunction resolveCurrentRuntimeApp(): RuntimeApp<any, any, any> {\n const instance = getCurrentInstance() as {\n [WEVU_IS_APP_INSTANCE_KEY]?: boolean\n [WEVU_RUNTIME_APP_KEY]?: RuntimeApp<any, any, any>\n } | undefined\n\n if (instance?.[WEVU_IS_APP_INSTANCE_KEY] && instance[WEVU_RUNTIME_APP_KEY]) {\n return instance[WEVU_RUNTIME_APP_KEY]\n }\n\n throw new Error('defineAppSetup() / use() 只能在 app setup 上下文中调用')\n}\n\n/**\n * 在 `app` 级 `setup()` 中显式获取运行时 app,提供与 `app.use()` / `app.provide()` 对齐的 SFC 写法。\n */\nexport function defineAppSetup<T>(setup: (app: RuntimeApp<any, any, any>) => T): T {\n return setup(resolveCurrentRuntimeApp())\n}\n\n/**\n * 在 `app` 级 `setup()` 中安装插件,提供与 `app.use()` 对齐的 SFC 调用方式。\n */\nexport function use(plugin: WevuPlugin, ...options: any[]) {\n return resolveCurrentRuntimeApp().use(plugin, ...options)\n}\n"],"mappings":";;;;AAOA,SAAS,2BAAsD;CAC7D,MAAM,WAAW,mBAAmB;CAKpC,yDAAI,SAAW,8BAA6B,SAAS,uBACnD,OAAO,SAAS;CAGlB,MAAM,IAAI,MAAM,+CAA+C;AACjE;;;;AAKA,SAAgB,eAAkB,OAAiD;CACjF,OAAO,MAAM,yBAAyB,CAAC;AACzC;;;;AAKA,SAAgB,IAAI,QAAoB,GAAG,SAAgB;CACzD,OAAO,yBAAyB,CAAC,CAAC,IAAI,QAAQ,GAAG,OAAO;AAC1D"}
1
+ {"version":3,"file":"use.mjs","names":[],"sources":["../../../src/runtime/use.ts"],"sourcesContent":["import type { RuntimeApp, WevuPlugin } from './types'\nimport {\n WEVU_IS_APP_INSTANCE_KEY,\n WEVU_RUNTIME_APP_KEY,\n} from '@weapp-core/constants'\nimport { getCurrentInstance } from './hooks'\n\nfunction resolveCurrentRuntimeApp(): RuntimeApp<any, any, any> {\n const instance = getCurrentInstance() as {\n [WEVU_IS_APP_INSTANCE_KEY]?: boolean\n [WEVU_RUNTIME_APP_KEY]?: RuntimeApp<any, any, any>\n } | undefined\n\n if (instance?.[WEVU_IS_APP_INSTANCE_KEY] && instance[WEVU_RUNTIME_APP_KEY]) {\n return instance[WEVU_RUNTIME_APP_KEY]\n }\n\n throw new Error('defineAppSetup() / use() 只能在 app setup 上下文中调用')\n}\n\n/**\n * 在 `app` 级 `setup()` 中显式获取运行时 app,提供与 `app.use()` / `app.provide()` 对齐的 SFC 写法。\n */\nexport function defineAppSetup<T>(setup: (app: RuntimeApp<any, any, any>) => T): T {\n return setup(resolveCurrentRuntimeApp())\n}\n\n/**\n * 在 `app` 级 `setup()` 中安装插件,提供与 `app.use()` 对齐的 SFC 调用方式。\n */\nexport function use(plugin: WevuPlugin, ...options: any[]) {\n return resolveCurrentRuntimeApp().use(plugin, ...options)\n}\n"],"mappings":";;;;AAOA,SAAS,2BAAsD;CAC7D,MAAM,WAAW,mBAAmB;CAKpC,IAAI,WAAW,6BAA6B,SAAS,uBACnD,OAAO,SAAS;CAGlB,MAAM,IAAI,MAAM,+CAA+C;AACjE;;;;AAKA,SAAgB,eAAkB,OAAiD;CACjF,OAAO,MAAM,yBAAyB,CAAC;AACzC;;;;AAKA,SAAgB,IAAI,QAAoB,GAAG,SAAgB;CACzD,OAAO,yBAAyB,CAAC,CAAC,IAAI,QAAQ,GAAG,OAAO;AAC1D"}
@@ -3,20 +3,18 @@ import { getCurrentSetupContext } from "../hooks/base.mjs";
3
3
  //#region src/runtime/vueCompat/context.ts
4
4
  const EMPTY_SETUP_SLOTS = Object.freeze(Object.create(null));
5
5
  function useAttrs() {
6
- var _ctx$attrs;
7
6
  const ctx = getCurrentSetupContext();
8
7
  if (!ctx) throw new Error("useAttrs() 必须在 setup() 的同步阶段调用");
9
- return (_ctx$attrs = ctx.attrs) !== null && _ctx$attrs !== void 0 ? _ctx$attrs : {};
8
+ return ctx.attrs ?? {};
10
9
  }
11
10
  function useSlots() {
12
- var _ctx$slots;
13
11
  const ctx = getCurrentSetupContext();
14
12
  if (!ctx) throw new Error("useSlots() 必须在 setup() 的同步阶段调用");
15
- return (_ctx$slots = ctx.slots) !== null && _ctx$slots !== void 0 ? _ctx$slots : EMPTY_SETUP_SLOTS;
13
+ return ctx.slots ?? EMPTY_SETUP_SLOTS;
16
14
  }
17
15
  function useNativeInstance() {
18
16
  const ctx = getCurrentSetupContext();
19
- if (!(ctx === null || ctx === void 0 ? void 0 : ctx.instance)) throw new Error("useNativeInstance() 必须在 setup() 的同步阶段调用");
17
+ if (!ctx?.instance) throw new Error("useNativeInstance() 必须在 setup() 的同步阶段调用");
20
18
  return ctx.instance;
21
19
  }
22
20
 
@@ -1 +1 @@
1
- {"version":3,"file":"context.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/context.ts"],"sourcesContent":["import type { SetupContextNativeInstance } from '../types'\nimport { getCurrentSetupContext } from '../hooks'\n\nconst EMPTY_SETUP_SLOTS = Object.freeze(Object.create(null)) as Record<string, never>\n\nexport function useAttrs(): Record<string, any> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useAttrs() 必须在 setup() 的同步阶段调用')\n }\n return ctx.attrs ?? {}\n}\n\nexport function useSlots(): Record<string, any> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useSlots() 必须在 setup() 的同步阶段调用')\n }\n // 小程序场景通过编译期 slot 名元数据恢复可枚举 slots 对象。\n return ctx.slots ?? EMPTY_SETUP_SLOTS\n}\n\nexport function useNativeInstance(): SetupContextNativeInstance {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx?.instance) {\n throw new Error('useNativeInstance() 必须在 setup() 的同步阶段调用')\n }\n return ctx.instance as SetupContextNativeInstance\n}\n"],"mappings":";;;AAGA,MAAM,oBAAoB,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAE3D,SAAgB,WAAgC;;CAC9C,MAAM,MAAM,uBAA4B;CACxC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gCAAgC;CAElD,qBAAO,IAAI,wDAAS,CAAC;AACvB;AAEA,SAAgB,WAAgC;;CAC9C,MAAM,MAAM,uBAA4B;CACxC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gCAAgC;CAGlD,qBAAO,IAAI,wDAAS;AACtB;AAEA,SAAgB,oBAAgD;CAC9D,MAAM,MAAM,uBAA4B;CACxC,IAAI,4CAAC,IAAK,WACR,MAAM,IAAI,MAAM,yCAAyC;CAE3D,OAAO,IAAI;AACb"}
1
+ {"version":3,"file":"context.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/context.ts"],"sourcesContent":["import type { SetupContextNativeInstance } from '../types'\nimport { getCurrentSetupContext } from '../hooks'\n\nconst EMPTY_SETUP_SLOTS = Object.freeze(Object.create(null)) as Record<string, never>\n\nexport function useAttrs(): Record<string, any> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useAttrs() 必须在 setup() 的同步阶段调用')\n }\n return ctx.attrs ?? {}\n}\n\nexport function useSlots(): Record<string, any> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useSlots() 必须在 setup() 的同步阶段调用')\n }\n // 小程序场景通过编译期 slot 名元数据恢复可枚举 slots 对象。\n return ctx.slots ?? EMPTY_SETUP_SLOTS\n}\n\nexport function useNativeInstance(): SetupContextNativeInstance {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx?.instance) {\n throw new Error('useNativeInstance() 必须在 setup() 的同步阶段调用')\n }\n return ctx.instance as SetupContextNativeInstance\n}\n"],"mappings":";;;AAGA,MAAM,oBAAoB,OAAO,OAAO,OAAO,OAAO,IAAI,CAAC;AAE3D,SAAgB,WAAgC;CAC9C,MAAM,MAAM,uBAA4B;CACxC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gCAAgC;CAElD,OAAO,IAAI,SAAS,CAAC;AACvB;AAEA,SAAgB,WAAgC;CAC9C,MAAM,MAAM,uBAA4B;CACxC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,gCAAgC;CAGlD,OAAO,IAAI,SAAS;AACtB;AAEA,SAAgB,oBAAgD;CAC9D,MAAM,MAAM,uBAA4B;CACxC,IAAI,CAAC,KAAK,UACR,MAAM,IAAI,MAAM,yCAAyC;CAE3D,OAAO,IAAI;AACb"}
@@ -6,7 +6,7 @@ import { capitalize } from "../../utils.mjs";
6
6
  const EMPTY_MODEL_MODIFIERS = Object.freeze(Object.create(null));
7
7
  function resolveModelModifiers(props, name) {
8
8
  const key = name === "modelValue" ? "modelModifiers" : `${name}Modifiers`;
9
- const modifiers = props === null || props === void 0 ? void 0 : props[key];
9
+ const modifiers = props?.[key];
10
10
  if (!modifiers || typeof modifiers !== "object") return EMPTY_MODEL_MODIFIERS;
11
11
  return modifiers;
12
12
  }
@@ -39,7 +39,7 @@ function attachModelTuple(model, getModifiers) {
39
39
  } };
40
40
  }
41
41
  });
42
- } catch (_unused) {}
42
+ } catch {}
43
43
  return tupleModel;
44
44
  }
45
45
  function useModel(props, name, options = {}) {
@@ -50,19 +50,19 @@ function useModel(props, name, options = {}) {
50
50
  const getModifiers = () => resolveModelModifiers(props, name);
51
51
  return attachModelTuple(customRef({
52
52
  get: () => {
53
- const rawValue = props === null || props === void 0 ? void 0 : props[name];
53
+ const rawValue = props?.[name];
54
54
  if (!options.get) return rawValue;
55
55
  return options.get(rawValue, getModifiers());
56
56
  },
57
57
  set: (value) => {
58
58
  const nextValue = options.set ? options.set(value, getModifiers()) : value;
59
- emit === null || emit === void 0 || emit(eventName, nextValue);
59
+ emit?.(eventName, nextValue);
60
60
  }
61
61
  }), getModifiers);
62
62
  }
63
63
  function useBindModel(defaultOptions) {
64
64
  const instance = getCurrentInstance();
65
- if (!(instance === null || instance === void 0 ? void 0 : instance.__wevu) || typeof instance.__wevu.bindModel !== "function") throw new Error("useBindModel() 必须在 setup() 的同步阶段调用");
65
+ if (!instance?.__wevu || typeof instance.__wevu.bindModel !== "function") throw new Error("useBindModel() 必须在 setup() 的同步阶段调用");
66
66
  const rawBindModel = instance.__wevu.bindModel.bind(instance.__wevu);
67
67
  const bindModel = ((path, options) => {
68
68
  if (!defaultOptions) return rawBindModel(path, options);
@@ -74,21 +74,17 @@ function useBindModel(defaultOptions) {
74
74
  });
75
75
  bindModel.model = (path, options) => bindModel(path).model(options);
76
76
  bindModel.value = (path, options) => {
77
- var _merged$valueProp;
78
- const merged = {
77
+ const valueProp = {
79
78
  ...defaultOptions,
80
79
  ...options
81
- };
82
- const valueProp = (_merged$valueProp = merged === null || merged === void 0 ? void 0 : merged.valueProp) !== null && _merged$valueProp !== void 0 ? _merged$valueProp : "value";
80
+ }.valueProp ?? "value";
83
81
  return bindModel.model(path, options)[valueProp];
84
82
  };
85
83
  bindModel.on = (path, options) => {
86
- var _merged$event;
87
- const merged = {
84
+ const eventName = {
88
85
  ...defaultOptions,
89
86
  ...options
90
- };
91
- const eventName = (_merged$event = merged === null || merged === void 0 ? void 0 : merged.event) !== null && _merged$event !== void 0 ? _merged$event : "input";
87
+ }.event ?? "input";
92
88
  const handlerKey = `on${capitalize(eventName)}`;
93
89
  return bindModel.model(path, options)[handlerKey];
94
90
  };
@@ -1 +1 @@
1
- {"version":3,"file":"model.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/model.ts"],"sourcesContent":["import type { Ref } from '../../reactivity'\nimport type {\n ModelBinding,\n ModelBindingOptions,\n ModelBindingPayload,\n} from '../types'\nimport { customRef } from '../../reactivity/ref'\nimport { capitalize } from '../../utils'\nimport { getCurrentInstance, getCurrentSetupContext } from '../hooks'\n\nexport type ModelModifiers<M extends PropertyKey = string> = Record<M, true | undefined>\nexport type ModelRef<T, M extends PropertyKey = string, G = T, S = T> = Ref<G, S> & [ModelRef<T, M, G, S>, ModelModifiers<M>]\n\nexport interface UseModelOptions<T, M extends PropertyKey = string, G = T, S = T> {\n get?: (value: T, modifiers: ModelModifiers<M>) => G\n set?: (value: S, modifiers: ModelModifiers<M>) => T\n}\n\nconst EMPTY_MODEL_MODIFIERS = Object.freeze(Object.create(null)) as ModelModifiers<any>\n\nfunction resolveModelModifiers<M extends PropertyKey = string>(\n props: Record<string, any>,\n name: string,\n): ModelModifiers<M> {\n const key = name === 'modelValue' ? 'modelModifiers' : `${name}Modifiers`\n const modifiers = props?.[key]\n if (!modifiers || typeof modifiers !== 'object') {\n return EMPTY_MODEL_MODIFIERS as ModelModifiers<M>\n }\n return modifiers as ModelModifiers<M>\n}\n\nfunction attachModelTuple<T, M extends PropertyKey = string, G = T, S = T>(\n model: Ref<G, S>,\n getModifiers: () => ModelModifiers<M>,\n): ModelRef<T, M, G, S> {\n const tupleModel = model as ModelRef<T, M, G, S>\n try {\n Object.defineProperty(tupleModel, Symbol.iterator, {\n configurable: true,\n value: () => {\n let index = 0\n return {\n next: () => {\n if (index === 0) {\n index += 1\n return { value: tupleModel, done: false }\n }\n if (index === 1) {\n index += 1\n return { value: getModifiers(), done: false }\n }\n return { value: undefined, done: true }\n },\n }\n },\n })\n }\n catch {\n // 忽略 defineProperty 失败场景,降级为普通 Ref 返回\n }\n return tupleModel\n}\n\nexport function useModel<T = any, M extends PropertyKey = string>(\n props: Record<string, any>,\n name: string,\n): ModelRef<T, M, T, T>\nexport function useModel<T = any, M extends PropertyKey = string, G = T, S = T>(\n props: Record<string, any>,\n name: string,\n options: UseModelOptions<T, M, G, S>,\n): ModelRef<T, M, G, S>\nexport function useModel<T = any, M extends PropertyKey = string, G = T, S = T>(\n props: Record<string, any>,\n name: string,\n options: UseModelOptions<T, M, G, S> = {},\n): ModelRef<T, M, G, S> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useModel() 必须在 setup() 的同步阶段调用')\n }\n\n const emit: ((event: string, ...args: any[]) => void) | undefined = ctx.emit\n const eventName = `update:${name}`\n const getModifiers = () => resolveModelModifiers<M>(props, name)\n const model = customRef<G>({\n get: () => {\n const rawValue = (props as any)?.[name] as T\n if (!options.get) {\n return rawValue as unknown as G\n }\n return options.get(rawValue, getModifiers())\n },\n set: (value: G) => {\n const nextValue = options.set\n ? options.set(value as unknown as S, getModifiers())\n : (value as unknown as T)\n emit?.(eventName, nextValue)\n },\n })\n return attachModelTuple<T, M, G, S>(model, getModifiers)\n}\n\n/**\n * useBindModel 返回绑定到当前运行时实例的 bindModel。\n * 该方法必须在 setup() 的同步阶段调用。\n */\ntype BindModelWithHelper<\n DefaultEvent extends string = 'input',\n DefaultValueProp extends string = 'value',\n> = (<T = any>(path: string, options?: ModelBindingOptions<T>) => ModelBinding<T>) & {\n model: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => ModelBindingPayload<T, Event, ValueProp, Formatted>\n value: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => Formatted\n on: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => (event: any) => void\n}\n\nexport function useBindModel<\n DefaultEvent extends string = 'input',\n DefaultValueProp extends string = 'value',\n>(defaultOptions?: ModelBindingOptions<any, DefaultEvent, DefaultValueProp, any>) {\n const instance = getCurrentInstance()\n if (!instance?.__wevu || typeof instance.__wevu.bindModel !== 'function') {\n throw new Error('useBindModel() 必须在 setup() 的同步阶段调用')\n }\n const rawBindModel = instance.__wevu.bindModel.bind(instance.__wevu) as <T = any>(\n path: string,\n options?: ModelBindingOptions<T>,\n ) => ModelBinding<T>\n const bindModel: BindModelWithHelper<DefaultEvent, DefaultValueProp> = (<T = any>(path: string, options?: ModelBindingOptions<T>) => {\n if (!defaultOptions) {\n return rawBindModel(path, options)\n }\n const merged = {\n ...(defaultOptions as ModelBindingOptions<T, DefaultEvent, DefaultValueProp, any>),\n ...(options as ModelBindingOptions<T, DefaultEvent, DefaultValueProp, any>),\n } as ModelBindingOptions<T>\n return rawBindModel(path, merged)\n }) as BindModelWithHelper<DefaultEvent, DefaultValueProp>\n\n bindModel.model = (path, options) => bindModel(path).model(options)\n bindModel.value = (path, options) => {\n const merged = { ...defaultOptions, ...options } as ModelBindingOptions<any>\n const valueProp = merged?.valueProp ?? 'value'\n const payload = bindModel.model(path, options) as Record<string, any>\n return payload[valueProp]\n }\n bindModel.on = (path, options) => {\n const merged = { ...defaultOptions, ...options } as ModelBindingOptions<any>\n const eventName = merged?.event ?? 'input'\n const handlerKey = `on${capitalize(eventName)}`\n const payload = bindModel.model(path, options) as Record<string, any>\n return payload[handlerKey]\n }\n\n return bindModel\n}\n\n/**\n * useChangeModel 返回以 change 事件为默认更新事件的 model 绑定助手。\n */\nexport function useChangeModel() {\n const bindModel = useBindModel({ event: 'change' })\n\n return function changeModel<T = any, ValueProp extends string = 'value', Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, 'change', ValueProp, Formatted>,\n ): ModelBindingPayload<T, 'change', ValueProp, Formatted> {\n return bindModel.model<T, 'change', ValueProp, Formatted>(path, options)\n }\n}\n\nexport function mergeModels<T>(a: T, b: T): T {\n if (a == null) {\n return b\n }\n if (b == null) {\n return a\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return [...new Set([...a, ...b])] as any\n }\n if (typeof a === 'object' && typeof b === 'object') {\n return { ...(a as any), ...(b as any) }\n }\n return b\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"model.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/model.ts"],"sourcesContent":["import type { Ref } from '../../reactivity'\nimport type {\n ModelBinding,\n ModelBindingOptions,\n ModelBindingPayload,\n} from '../types'\nimport { customRef } from '../../reactivity/ref'\nimport { capitalize } from '../../utils'\nimport { getCurrentInstance, getCurrentSetupContext } from '../hooks'\n\nexport type ModelModifiers<M extends PropertyKey = string> = Record<M, true | undefined>\nexport type ModelRef<T, M extends PropertyKey = string, G = T, S = T> = Ref<G, S> & [ModelRef<T, M, G, S>, ModelModifiers<M>]\n\nexport interface UseModelOptions<T, M extends PropertyKey = string, G = T, S = T> {\n get?: (value: T, modifiers: ModelModifiers<M>) => G\n set?: (value: S, modifiers: ModelModifiers<M>) => T\n}\n\nconst EMPTY_MODEL_MODIFIERS = Object.freeze(Object.create(null)) as ModelModifiers<any>\n\nfunction resolveModelModifiers<M extends PropertyKey = string>(\n props: Record<string, any>,\n name: string,\n): ModelModifiers<M> {\n const key = name === 'modelValue' ? 'modelModifiers' : `${name}Modifiers`\n const modifiers = props?.[key]\n if (!modifiers || typeof modifiers !== 'object') {\n return EMPTY_MODEL_MODIFIERS as ModelModifiers<M>\n }\n return modifiers as ModelModifiers<M>\n}\n\nfunction attachModelTuple<T, M extends PropertyKey = string, G = T, S = T>(\n model: Ref<G, S>,\n getModifiers: () => ModelModifiers<M>,\n): ModelRef<T, M, G, S> {\n const tupleModel = model as ModelRef<T, M, G, S>\n try {\n Object.defineProperty(tupleModel, Symbol.iterator, {\n configurable: true,\n value: () => {\n let index = 0\n return {\n next: () => {\n if (index === 0) {\n index += 1\n return { value: tupleModel, done: false }\n }\n if (index === 1) {\n index += 1\n return { value: getModifiers(), done: false }\n }\n return { value: undefined, done: true }\n },\n }\n },\n })\n }\n catch {\n // 忽略 defineProperty 失败场景,降级为普通 Ref 返回\n }\n return tupleModel\n}\n\nexport function useModel<T = any, M extends PropertyKey = string>(\n props: Record<string, any>,\n name: string,\n): ModelRef<T, M, T, T>\nexport function useModel<T = any, M extends PropertyKey = string, G = T, S = T>(\n props: Record<string, any>,\n name: string,\n options: UseModelOptions<T, M, G, S>,\n): ModelRef<T, M, G, S>\nexport function useModel<T = any, M extends PropertyKey = string, G = T, S = T>(\n props: Record<string, any>,\n name: string,\n options: UseModelOptions<T, M, G, S> = {},\n): ModelRef<T, M, G, S> {\n const ctx = getCurrentSetupContext<any>()\n if (!ctx) {\n throw new Error('useModel() 必须在 setup() 的同步阶段调用')\n }\n\n const emit: ((event: string, ...args: any[]) => void) | undefined = ctx.emit\n const eventName = `update:${name}`\n const getModifiers = () => resolveModelModifiers<M>(props, name)\n const model = customRef<G>({\n get: () => {\n const rawValue = (props as any)?.[name] as T\n if (!options.get) {\n return rawValue as unknown as G\n }\n return options.get(rawValue, getModifiers())\n },\n set: (value: G) => {\n const nextValue = options.set\n ? options.set(value as unknown as S, getModifiers())\n : (value as unknown as T)\n emit?.(eventName, nextValue)\n },\n })\n return attachModelTuple<T, M, G, S>(model, getModifiers)\n}\n\n/**\n * useBindModel 返回绑定到当前运行时实例的 bindModel。\n * 该方法必须在 setup() 的同步阶段调用。\n */\ntype BindModelWithHelper<\n DefaultEvent extends string = 'input',\n DefaultValueProp extends string = 'value',\n> = (<T = any>(path: string, options?: ModelBindingOptions<T>) => ModelBinding<T>) & {\n model: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => ModelBindingPayload<T, Event, ValueProp, Formatted>\n value: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => Formatted\n on: <T = any, Event extends string = DefaultEvent, ValueProp extends string = DefaultValueProp, Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, Event, ValueProp, Formatted>,\n ) => (event: any) => void\n}\n\nexport function useBindModel<\n DefaultEvent extends string = 'input',\n DefaultValueProp extends string = 'value',\n>(defaultOptions?: ModelBindingOptions<any, DefaultEvent, DefaultValueProp, any>) {\n const instance = getCurrentInstance()\n if (!instance?.__wevu || typeof instance.__wevu.bindModel !== 'function') {\n throw new Error('useBindModel() 必须在 setup() 的同步阶段调用')\n }\n const rawBindModel = instance.__wevu.bindModel.bind(instance.__wevu) as <T = any>(\n path: string,\n options?: ModelBindingOptions<T>,\n ) => ModelBinding<T>\n const bindModel: BindModelWithHelper<DefaultEvent, DefaultValueProp> = (<T = any>(path: string, options?: ModelBindingOptions<T>) => {\n if (!defaultOptions) {\n return rawBindModel(path, options)\n }\n const merged = {\n ...(defaultOptions as ModelBindingOptions<T, DefaultEvent, DefaultValueProp, any>),\n ...(options as ModelBindingOptions<T, DefaultEvent, DefaultValueProp, any>),\n } as ModelBindingOptions<T>\n return rawBindModel(path, merged)\n }) as BindModelWithHelper<DefaultEvent, DefaultValueProp>\n\n bindModel.model = (path, options) => bindModel(path).model(options)\n bindModel.value = (path, options) => {\n const merged = { ...defaultOptions, ...options } as ModelBindingOptions<any>\n const valueProp = merged?.valueProp ?? 'value'\n const payload = bindModel.model(path, options) as Record<string, any>\n return payload[valueProp]\n }\n bindModel.on = (path, options) => {\n const merged = { ...defaultOptions, ...options } as ModelBindingOptions<any>\n const eventName = merged?.event ?? 'input'\n const handlerKey = `on${capitalize(eventName)}`\n const payload = bindModel.model(path, options) as Record<string, any>\n return payload[handlerKey]\n }\n\n return bindModel\n}\n\n/**\n * useChangeModel 返回以 change 事件为默认更新事件的 model 绑定助手。\n */\nexport function useChangeModel() {\n const bindModel = useBindModel({ event: 'change' })\n\n return function changeModel<T = any, ValueProp extends string = 'value', Formatted = T>(\n path: string,\n options?: ModelBindingOptions<T, 'change', ValueProp, Formatted>,\n ): ModelBindingPayload<T, 'change', ValueProp, Formatted> {\n return bindModel.model<T, 'change', ValueProp, Formatted>(path, options)\n }\n}\n\nexport function mergeModels<T>(a: T, b: T): T {\n if (a == null) {\n return b\n }\n if (b == null) {\n return a\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n return [...new Set([...a, ...b])] as any\n }\n if (typeof a === 'object' && typeof b === 'object') {\n return { ...(a as any), ...(b as any) }\n }\n return b\n}\n"],"mappings":"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"}
@@ -50,9 +50,9 @@ function resolveScopedRouterUrl(url, basePath) {
50
50
  return `${resolvedPath}${queryString ? `?${queryString}` : ""}${hash}`;
51
51
  }
52
52
  function createScopedRuntimeRouter(rawRouter, basePath) {
53
- const cacheKey = basePath !== null && basePath !== void 0 ? basePath : "";
53
+ const cacheKey = basePath ?? "";
54
54
  const cachedByBasePath = runtimeRouterWrapperCache.get(rawRouter);
55
- const cachedRouter = cachedByBasePath === null || cachedByBasePath === void 0 ? void 0 : cachedByBasePath.get(cacheKey);
55
+ const cachedRouter = cachedByBasePath?.get(cacheKey);
56
56
  if (cachedRouter) return cachedRouter;
57
57
  const scopedRouter = Object.create(null);
58
58
  for (const methodName of RUNTIME_ROUTER_METHODS) scopedRouter[methodName] = (option) => {
@@ -74,14 +74,14 @@ function createScopedRuntimeRouter(rawRouter, basePath) {
74
74
  };
75
75
  return rawMethod.call(rawRouter, nextOption);
76
76
  };
77
- const nextCache = cachedByBasePath !== null && cachedByBasePath !== void 0 ? cachedByBasePath : /* @__PURE__ */ new Map();
77
+ const nextCache = cachedByBasePath ?? /* @__PURE__ */ new Map();
78
78
  nextCache.set(cacheKey, scopedRouter);
79
79
  runtimeRouterWrapperCache.set(rawRouter, nextCache);
80
80
  return scopedRouter;
81
81
  }
82
82
  function useRuntimeRouterByAccessor(primaryAccessor, fallbackAccessor, helperName) {
83
83
  const ctx = getCurrentSetupContext();
84
- const nativeInstance = (ctx === null || ctx === void 0 ? void 0 : ctx.instance) && typeof ctx.instance === "object" ? ctx.instance : void 0;
84
+ const nativeInstance = ctx?.instance && typeof ctx.instance === "object" ? ctx.instance : void 0;
85
85
  if (nativeInstance) {
86
86
  const basePath = resolveRouterBasePath(nativeInstance, primaryAccessor);
87
87
  const primaryRouter = nativeInstance[primaryAccessor];
@@ -1 +1 @@
1
- {"version":3,"file":"router.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/router.ts"],"sourcesContent":["import type { SetupContextRouter } from '../types'\nimport { notifyRouteStateSync } from '../../router/routeSync'\nimport { parsePathInput } from '../../routerInternal/location'\nimport { createAbsoluteRoutePath, resolvePath, stringifyQuery } from '../../routerInternal/shared'\nimport { getCurrentSetupContext } from '../hooks'\nimport { getCurrentMiniProgramGlobalRouter } from '../platform'\n\ntype RuntimeRouter = SetupContextRouter\ntype RuntimeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype RuntimeRouterAccessor = 'router' | 'pageRouter'\n\nconst RUNTIME_ROUTER_METHODS: RuntimeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst runtimeRouterWrapperCache = new WeakMap<RuntimeRouter, Map<string, RuntimeRouter>>()\n\nfunction isRuntimeRouter(candidate: unknown): candidate is RuntimeRouter {\n if (!candidate || typeof candidate !== 'object') {\n return false\n }\n return RUNTIME_ROUTER_METHODS.every((methodName) => {\n return typeof (candidate as Record<string, any>)[methodName] === 'function'\n })\n}\n\nfunction createGlobalRouterFallback(): RuntimeRouter | undefined {\n return getCurrentMiniProgramGlobalRouter()\n}\n\nfunction resolveBasePathCandidate(candidate: unknown): string | undefined {\n if (typeof candidate !== 'string' || !candidate) {\n return undefined\n }\n const normalized = resolvePath(candidate, '')\n return normalized || undefined\n}\n\nfunction resolveRouterBasePath(\n nativeInstance: Record<string, unknown>,\n accessor: RuntimeRouterAccessor,\n): string | undefined {\n const candidates = accessor === 'pageRouter'\n ? [nativeInstance.route, nativeInstance.__route__, nativeInstance.is]\n : [nativeInstance.is, nativeInstance.route, nativeInstance.__route__]\n\n for (const candidate of candidates) {\n const resolved = resolveBasePathCandidate(candidate)\n if (resolved) {\n return resolved\n }\n }\n\n return undefined\n}\n\nfunction resolveScopedRouterUrl(url: string, basePath?: string): string {\n if (!basePath || (!url.startsWith('./') && !url.startsWith('../'))) {\n return url\n }\n\n const { path, query, hash } = parsePathInput(url)\n const resolvedPath = createAbsoluteRoutePath(resolvePath(path, basePath))\n const queryString = stringifyQuery(query)\n return `${resolvedPath}${queryString ? `?${queryString}` : ''}${hash}`\n}\n\nfunction createScopedRuntimeRouter(rawRouter: RuntimeRouter, basePath?: string): RuntimeRouter {\n const cacheKey = basePath ?? ''\n const cachedByBasePath = runtimeRouterWrapperCache.get(rawRouter)\n const cachedRouter = cachedByBasePath?.get(cacheKey)\n if (cachedRouter) {\n return cachedRouter\n }\n\n const scopedRouter = Object.create(null) as RuntimeRouter\n for (const methodName of RUNTIME_ROUTER_METHODS) {\n ;(scopedRouter as Record<string, any>)[methodName] = (option: Record<string, any>) => {\n const rawMethod = (rawRouter as Record<string, any>)[methodName]\n if (methodName === 'navigateBack' || !option || typeof option !== 'object') {\n return rawMethod.call(rawRouter, option)\n }\n\n const nextUrl = typeof option.url === 'string'\n ? resolveScopedRouterUrl(option.url, basePath)\n : option.url\n const originalSuccess = option.success\n const nextOption = {\n ...option,\n url: nextUrl,\n success: (...args: any[]) => {\n if (typeof nextUrl === 'string') {\n notifyRouteStateSync({\n method: methodName,\n source: 'native',\n url: nextUrl,\n })\n }\n return typeof originalSuccess === 'function'\n ? originalSuccess(...args)\n : undefined\n },\n }\n return rawMethod.call(rawRouter, nextOption)\n }\n }\n\n const nextCache = cachedByBasePath ?? new Map<string, RuntimeRouter>()\n nextCache.set(cacheKey, scopedRouter)\n runtimeRouterWrapperCache.set(rawRouter, nextCache)\n return scopedRouter\n}\n\nfunction useRuntimeRouterByAccessor(\n primaryAccessor: RuntimeRouterAccessor,\n fallbackAccessor: RuntimeRouterAccessor,\n helperName: 'useNativeRouter' | 'useNativePageRouter',\n): RuntimeRouter {\n const ctx = getCurrentSetupContext<Record<string, unknown>>()\n const nativeInstance = ctx?.instance && typeof ctx.instance === 'object'\n ? ctx.instance as Record<string, unknown>\n : undefined\n\n if (nativeInstance) {\n const basePath = resolveRouterBasePath(nativeInstance, primaryAccessor)\n const primaryRouter = nativeInstance[primaryAccessor]\n if (isRuntimeRouter(primaryRouter)) {\n return createScopedRuntimeRouter(primaryRouter, basePath)\n }\n\n const fallbackRouter = nativeInstance[fallbackAccessor]\n if (isRuntimeRouter(fallbackRouter)) {\n return createScopedRuntimeRouter(fallbackRouter, basePath)\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter, basePath)\n }\n\n throw new Error('当前运行环境不支持 Router,请升级宿主基础库或检查平台路由能力')\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter)\n }\n\n throw new Error(`${helperName}() 必须在 setup() 的同步阶段调用`)\n}\n\n/**\n * 获取与当前组件路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.router`(组件路径语义)。\n * - 不可用时回退到 `this.pageRouter`。\n * - App setup 或低版本基础库再回退到宿主全局路由方法。\n * - 无 setup 上下文且宿主全局路由可用时,仍可创建应用级路由器。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativeRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('router', 'pageRouter', 'useNativeRouter')\n}\n\n/**\n * 获取与当前页面路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.pageRouter`(页面路径语义)。\n * - 不可用时回退到 `this.router`。\n * - App setup 或低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativePageRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('pageRouter', 'router', 'useNativePageRouter')\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"router.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/router.ts"],"sourcesContent":["import type { SetupContextRouter } from '../types'\nimport { notifyRouteStateSync } from '../../router/routeSync'\nimport { parsePathInput } from '../../routerInternal/location'\nimport { createAbsoluteRoutePath, resolvePath, stringifyQuery } from '../../routerInternal/shared'\nimport { getCurrentSetupContext } from '../hooks'\nimport { getCurrentMiniProgramGlobalRouter } from '../platform'\n\ntype RuntimeRouter = SetupContextRouter\ntype RuntimeRouterMethodName = 'switchTab' | 'reLaunch' | 'redirectTo' | 'navigateTo' | 'navigateBack'\ntype RuntimeRouterAccessor = 'router' | 'pageRouter'\n\nconst RUNTIME_ROUTER_METHODS: RuntimeRouterMethodName[] = ['switchTab', 'reLaunch', 'redirectTo', 'navigateTo', 'navigateBack']\nconst runtimeRouterWrapperCache = new WeakMap<RuntimeRouter, Map<string, RuntimeRouter>>()\n\nfunction isRuntimeRouter(candidate: unknown): candidate is RuntimeRouter {\n if (!candidate || typeof candidate !== 'object') {\n return false\n }\n return RUNTIME_ROUTER_METHODS.every((methodName) => {\n return typeof (candidate as Record<string, any>)[methodName] === 'function'\n })\n}\n\nfunction createGlobalRouterFallback(): RuntimeRouter | undefined {\n return getCurrentMiniProgramGlobalRouter()\n}\n\nfunction resolveBasePathCandidate(candidate: unknown): string | undefined {\n if (typeof candidate !== 'string' || !candidate) {\n return undefined\n }\n const normalized = resolvePath(candidate, '')\n return normalized || undefined\n}\n\nfunction resolveRouterBasePath(\n nativeInstance: Record<string, unknown>,\n accessor: RuntimeRouterAccessor,\n): string | undefined {\n const candidates = accessor === 'pageRouter'\n ? [nativeInstance.route, nativeInstance.__route__, nativeInstance.is]\n : [nativeInstance.is, nativeInstance.route, nativeInstance.__route__]\n\n for (const candidate of candidates) {\n const resolved = resolveBasePathCandidate(candidate)\n if (resolved) {\n return resolved\n }\n }\n\n return undefined\n}\n\nfunction resolveScopedRouterUrl(url: string, basePath?: string): string {\n if (!basePath || (!url.startsWith('./') && !url.startsWith('../'))) {\n return url\n }\n\n const { path, query, hash } = parsePathInput(url)\n const resolvedPath = createAbsoluteRoutePath(resolvePath(path, basePath))\n const queryString = stringifyQuery(query)\n return `${resolvedPath}${queryString ? `?${queryString}` : ''}${hash}`\n}\n\nfunction createScopedRuntimeRouter(rawRouter: RuntimeRouter, basePath?: string): RuntimeRouter {\n const cacheKey = basePath ?? ''\n const cachedByBasePath = runtimeRouterWrapperCache.get(rawRouter)\n const cachedRouter = cachedByBasePath?.get(cacheKey)\n if (cachedRouter) {\n return cachedRouter\n }\n\n const scopedRouter = Object.create(null) as RuntimeRouter\n for (const methodName of RUNTIME_ROUTER_METHODS) {\n ;(scopedRouter as Record<string, any>)[methodName] = (option: Record<string, any>) => {\n const rawMethod = (rawRouter as Record<string, any>)[methodName]\n if (methodName === 'navigateBack' || !option || typeof option !== 'object') {\n return rawMethod.call(rawRouter, option)\n }\n\n const nextUrl = typeof option.url === 'string'\n ? resolveScopedRouterUrl(option.url, basePath)\n : option.url\n const originalSuccess = option.success\n const nextOption = {\n ...option,\n url: nextUrl,\n success: (...args: any[]) => {\n if (typeof nextUrl === 'string') {\n notifyRouteStateSync({\n method: methodName,\n source: 'native',\n url: nextUrl,\n })\n }\n return typeof originalSuccess === 'function'\n ? originalSuccess(...args)\n : undefined\n },\n }\n return rawMethod.call(rawRouter, nextOption)\n }\n }\n\n const nextCache = cachedByBasePath ?? new Map<string, RuntimeRouter>()\n nextCache.set(cacheKey, scopedRouter)\n runtimeRouterWrapperCache.set(rawRouter, nextCache)\n return scopedRouter\n}\n\nfunction useRuntimeRouterByAccessor(\n primaryAccessor: RuntimeRouterAccessor,\n fallbackAccessor: RuntimeRouterAccessor,\n helperName: 'useNativeRouter' | 'useNativePageRouter',\n): RuntimeRouter {\n const ctx = getCurrentSetupContext<Record<string, unknown>>()\n const nativeInstance = ctx?.instance && typeof ctx.instance === 'object'\n ? ctx.instance as Record<string, unknown>\n : undefined\n\n if (nativeInstance) {\n const basePath = resolveRouterBasePath(nativeInstance, primaryAccessor)\n const primaryRouter = nativeInstance[primaryAccessor]\n if (isRuntimeRouter(primaryRouter)) {\n return createScopedRuntimeRouter(primaryRouter, basePath)\n }\n\n const fallbackRouter = nativeInstance[fallbackAccessor]\n if (isRuntimeRouter(fallbackRouter)) {\n return createScopedRuntimeRouter(fallbackRouter, basePath)\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter, basePath)\n }\n\n throw new Error('当前运行环境不支持 Router,请升级宿主基础库或检查平台路由能力')\n }\n\n const globalFallbackRouter = createGlobalRouterFallback()\n if (globalFallbackRouter) {\n return createScopedRuntimeRouter(globalFallbackRouter)\n }\n\n throw new Error(`${helperName}() 必须在 setup() 的同步阶段调用`)\n}\n\n/**\n * 获取与当前组件路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.router`(组件路径语义)。\n * - 不可用时回退到 `this.pageRouter`。\n * - App setup 或低版本基础库再回退到宿主全局路由方法。\n * - 无 setup 上下文且宿主全局路由可用时,仍可创建应用级路由器。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativeRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('router', 'pageRouter', 'useNativeRouter')\n}\n\n/**\n * 获取与当前页面路径语义一致的原生 Router 对象。\n *\n * - 优先使用实例上的 `this.pageRouter`(页面路径语义)。\n * - 不可用时回退到 `this.router`。\n * - App setup 或低版本基础库再回退到宿主全局路由方法。\n *\n * 如需更贴近 Vue Router 的高阶能力(导航守卫、失败类型、统一解析),\n * 推荐改用 `wevu/router` 子入口的 `useRouter()`。\n */\nexport function useNativePageRouter(): RuntimeRouter {\n return useRuntimeRouterByAccessor('pageRouter', 'router', 'useNativePageRouter')\n}\n"],"mappings":"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"}
@@ -15,7 +15,7 @@ function ensureTemplateRefMap(target) {
15
15
  enumerable: false,
16
16
  writable: false
17
17
  });
18
- } catch (_unused) {
18
+ } catch {
19
19
  target[WEVU_TEMPLATE_REF_MAP_KEY] = next;
20
20
  }
21
21
  return next;
@@ -1 +1 @@
1
- {"version":3,"file":"templateRef.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/templateRef.ts"],"sourcesContent":["import type { Ref, ShallowRef } from '../../reactivity'\nimport type { InternalRuntimeState, TemplateRefs } from '../types'\nimport { WEVU_TEMPLATE_REF_MAP_KEY } from '@weapp-core/constants'\nimport { shallowRef } from '../../reactivity'\nimport { installTemplateRefs } from '../features/templateRefs'\nimport { getCurrentInstance } from '../hooks'\n\ntype TemplateRefMap = Map<string, Ref<any>>\n\nfunction ensureTemplateRefMap(target: InternalRuntimeState): TemplateRefMap {\n const existing = (target as any)[WEVU_TEMPLATE_REF_MAP_KEY] as TemplateRefMap | undefined\n if (existing) {\n return existing\n }\n const next = new Map<string, Ref<any>>()\n try {\n Object.defineProperty(target, WEVU_TEMPLATE_REF_MAP_KEY, {\n value: next,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(target as any)[WEVU_TEMPLATE_REF_MAP_KEY] = next\n }\n return next\n}\n\nexport type TemplateRef<T = unknown> = Readonly<ShallowRef<T | null>>\n\nexport function useTemplateRef<K extends keyof TemplateRefs>(name: K): TemplateRef<TemplateRefs[K]>\nexport function useTemplateRef<T = unknown>(name: string): TemplateRef<T>\nexport function useTemplateRef<T = unknown>(name: string): TemplateRef<T> {\n installTemplateRefs()\n const instance = getCurrentInstance()\n if (!instance) {\n throw new Error('useTemplateRef() 必须在 setup() 的同步阶段调用')\n }\n const normalized = typeof name === 'string' ? name.trim() : ''\n if (!normalized) {\n throw new Error('useTemplateRef() 需要传入有效的模板 ref 名称')\n }\n const map = ensureTemplateRefMap(instance)\n const existing = map.get(normalized)\n if (existing) {\n return existing as TemplateRef<T>\n }\n const target = shallowRef<T | null>(null)\n map.set(normalized, target)\n return target as TemplateRef<T>\n}\n"],"mappings":";;;;;;AASA,SAAS,qBAAqB,QAA8C;CAC1E,MAAM,WAAY,OAAe;CACjC,IAAI,UACF,OAAO;CAET,MAAM,uBAAO,IAAI,IAAsB;CACvC,IAAI;EACF,OAAO,eAAe,QAAQ,2BAA2B;GACvD,OAAO;GACP,cAAc;GACd,YAAY;GACZ,UAAU;EACZ,CAAC;CACH,kBACM;EACH,AAAC,OAAe,6BAA6B;CAChD;CACA,OAAO;AACT;AAMA,SAAgB,eAA4B,MAA8B;CACxE,oBAAoB;CACpB,MAAM,WAAW,mBAAmB;CACpC,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,sCAAsC;CAExD,MAAM,aAAa,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI;CAC5D,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,mCAAmC;CAErD,MAAM,MAAM,qBAAqB,QAAQ;CACzC,MAAM,WAAW,IAAI,IAAI,UAAU;CACnC,IAAI,UACF,OAAO;CAET,MAAM,SAAS,WAAqB,IAAI;CACxC,IAAI,IAAI,YAAY,MAAM;CAC1B,OAAO;AACT"}
1
+ {"version":3,"file":"templateRef.mjs","names":[],"sources":["../../../../src/runtime/vueCompat/templateRef.ts"],"sourcesContent":["import type { Ref, ShallowRef } from '../../reactivity'\nimport type { InternalRuntimeState, TemplateRefs } from '../types'\nimport { WEVU_TEMPLATE_REF_MAP_KEY } from '@weapp-core/constants'\nimport { shallowRef } from '../../reactivity'\nimport { installTemplateRefs } from '../features/templateRefs'\nimport { getCurrentInstance } from '../hooks'\n\ntype TemplateRefMap = Map<string, Ref<any>>\n\nfunction ensureTemplateRefMap(target: InternalRuntimeState): TemplateRefMap {\n const existing = (target as any)[WEVU_TEMPLATE_REF_MAP_KEY] as TemplateRefMap | undefined\n if (existing) {\n return existing\n }\n const next = new Map<string, Ref<any>>()\n try {\n Object.defineProperty(target, WEVU_TEMPLATE_REF_MAP_KEY, {\n value: next,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(target as any)[WEVU_TEMPLATE_REF_MAP_KEY] = next\n }\n return next\n}\n\nexport type TemplateRef<T = unknown> = Readonly<ShallowRef<T | null>>\n\nexport function useTemplateRef<K extends keyof TemplateRefs>(name: K): TemplateRef<TemplateRefs[K]>\nexport function useTemplateRef<T = unknown>(name: string): TemplateRef<T>\nexport function useTemplateRef<T = unknown>(name: string): TemplateRef<T> {\n installTemplateRefs()\n const instance = getCurrentInstance()\n if (!instance) {\n throw new Error('useTemplateRef() 必须在 setup() 的同步阶段调用')\n }\n const normalized = typeof name === 'string' ? name.trim() : ''\n if (!normalized) {\n throw new Error('useTemplateRef() 需要传入有效的模板 ref 名称')\n }\n const map = ensureTemplateRefMap(instance)\n const existing = map.get(normalized)\n if (existing) {\n return existing as TemplateRef<T>\n }\n const target = shallowRef<T | null>(null)\n map.set(normalized, target)\n return target as TemplateRef<T>\n}\n"],"mappings":";;;;;;AASA,SAAS,qBAAqB,QAA8C;CAC1E,MAAM,WAAY,OAAe;CACjC,IAAI,UACF,OAAO;CAET,MAAM,uBAAO,IAAI,IAAsB;CACvC,IAAI;EACF,OAAO,eAAe,QAAQ,2BAA2B;GACvD,OAAO;GACP,cAAc;GACd,YAAY;GACZ,UAAU;EACZ,CAAC;CACH,QACM;EACH,AAAC,OAAe,6BAA6B;CAChD;CACA,OAAO;AACT;AAMA,SAAgB,eAA4B,MAA8B;CACxE,oBAAoB;CACpB,MAAM,WAAW,mBAAmB;CACpC,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,sCAAsC;CAExD,MAAM,aAAa,OAAO,SAAS,WAAW,KAAK,KAAK,IAAI;CAC5D,IAAI,CAAC,YACH,MAAM,IAAI,MAAM,mCAAmC;CAErD,MAAM,MAAM,qBAAqB,QAAQ;CACzC,MAAM,WAAW,IAAI,IAAI,UAAU;CACnC,IAAI,UACF,OAAO;CAET,MAAM,SAAS,WAAqB,IAAI;CACxC,IAAI,IAAI,YAAY,MAAM;CAC1B,OAAO;AACT"}
@@ -16,7 +16,7 @@ function flushJobs() {
16
16
  const pendingJobs = [];
17
17
  try {
18
18
  jobQueue.forEach((job) => {
19
- flushedJobs === null || flushedJobs === void 0 || flushedJobs.add(job);
19
+ flushedJobs?.add(job);
20
20
  try {
21
21
  const result = job();
22
22
  if (result && typeof result.then === "function") pendingJobs.push(result);
@@ -54,7 +54,7 @@ function queueFlush() {
54
54
  flushPromise.then(clearCurrentFlushPromise, clearCurrentFlushPromise);
55
55
  }
56
56
  function queueJob(job) {
57
- if (isFlushing && (flushedJobs === null || flushedJobs === void 0 ? void 0 : flushedJobs.has(job))) {
57
+ if (isFlushing && flushedJobs?.has(job)) {
58
58
  deferredJobQueue.add(job);
59
59
  return;
60
60
  }
@@ -65,8 +65,7 @@ function queueJob(job) {
65
65
  }
66
66
  }
67
67
  function nextTick(fn) {
68
- var _currentFlushPromise;
69
- const promise = (_currentFlushPromise = currentFlushPromise) !== null && _currentFlushPromise !== void 0 ? _currentFlushPromise : resolvedPromise;
68
+ const promise = currentFlushPromise ?? resolvedPromise;
70
69
  return fn ? promise.then(fn) : promise;
71
70
  }
72
71
 
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.mjs","names":[],"sources":["../../src/scheduler.ts"],"sourcesContent":["const resolvedPromise: Promise<void> = Promise.resolve()\n\ntype Job = () => void | PromiseLike<void>\n\nconst jobQueue = new Set<Job>()\nconst deferredJobQueue = new Set<Job>()\nlet isFlushing = false\nlet isFlushPending = false\nlet flushedJobs: Set<Job> | undefined\nlet currentFlushPromise: Promise<void> | undefined\n\nfunction flushJobs(): void | Promise<void> {\n isFlushPending = false\n isFlushing = true\n flushedJobs = new Set()\n let shouldFlushDeferred = false\n let hasError = false\n let firstError: unknown\n const pendingJobs: PromiseLike<void>[] = []\n try {\n jobQueue.forEach((job) => {\n flushedJobs?.add(job)\n try {\n const result = job()\n if (result && typeof result.then === 'function') {\n pendingJobs.push(result)\n }\n }\n catch (error) {\n if (!hasError) {\n hasError = true\n firstError = error\n }\n }\n })\n }\n finally {\n jobQueue.clear()\n flushedJobs = undefined\n isFlushing = false\n if (deferredJobQueue.size) {\n deferredJobQueue.forEach(job => jobQueue.add(job))\n deferredJobQueue.clear()\n isFlushPending = true\n shouldFlushDeferred = true\n }\n }\n if (pendingJobs.length || shouldFlushDeferred) {\n return Promise.all(pendingJobs)\n .then(() => shouldFlushDeferred ? flushJobs() : undefined)\n .then(\n () => {\n if (hasError) {\n throw firstError\n }\n },\n (error: unknown) => {\n throw hasError ? firstError : error\n },\n )\n }\n if (hasError) {\n throw firstError\n }\n}\n\nfunction queueFlush() {\n const flushPromise = resolvedPromise.then(flushJobs)\n currentFlushPromise = flushPromise\n const clearCurrentFlushPromise = () => {\n if (currentFlushPromise === flushPromise) {\n currentFlushPromise = undefined\n }\n }\n void flushPromise.then(clearCurrentFlushPromise, clearCurrentFlushPromise)\n}\n\nexport function queueJob(job: Job) {\n if (isFlushing && flushedJobs?.has(job)) {\n deferredJobQueue.add(job)\n return\n }\n jobQueue.add(job)\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true\n queueFlush()\n }\n}\n\nexport function nextTick<T>(fn?: () => T): Promise<T> {\n const promise = currentFlushPromise ?? resolvedPromise\n return fn ? promise.then(fn) : (promise as unknown as Promise<T>)\n}\n"],"mappings":";AAAA,MAAM,kBAAiC,QAAQ,QAAQ;AAIvD,MAAM,2BAAW,IAAI,IAAS;AAC9B,MAAM,mCAAmB,IAAI,IAAS;AACtC,IAAI,aAAa;AACjB,IAAI,iBAAiB;AACrB,IAAI;AACJ,IAAI;AAEJ,SAAS,YAAkC;CACzC,iBAAiB;CACjB,aAAa;CACb,8BAAc,IAAI,IAAI;CACtB,IAAI,sBAAsB;CAC1B,IAAI,WAAW;CACf,IAAI;CACJ,MAAM,cAAmC,CAAC;CAC1C,IAAI;EACF,SAAS,SAAS,QAAQ;GACxB,8DAAa,IAAI,GAAG;GACpB,IAAI;IACF,MAAM,SAAS,IAAI;IACnB,IAAI,UAAU,OAAO,OAAO,SAAS,YACnC,YAAY,KAAK,MAAM;GAE3B,SACO,OAAO;IACZ,IAAI,CAAC,UAAU;KACb,WAAW;KACX,aAAa;IACf;GACF;EACF,CAAC;CACH,UACQ;EACN,SAAS,MAAM;EACf,cAAc;EACd,aAAa;EACb,IAAI,iBAAiB,MAAM;GACzB,iBAAiB,SAAQ,QAAO,SAAS,IAAI,GAAG,CAAC;GACjD,iBAAiB,MAAM;GACvB,iBAAiB;GACjB,sBAAsB;EACxB;CACF;CACA,IAAI,YAAY,UAAU,qBACxB,OAAO,QAAQ,IAAI,WAAW,CAAC,CAC5B,WAAW,sBAAsB,UAAU,IAAI,MAAS,CAAC,CACzD,WACO;EACJ,IAAI,UACF,MAAM;CAEV,IACC,UAAmB;EAClB,MAAM,WAAW,aAAa;CAChC,CACF;CAEJ,IAAI,UACF,MAAM;AAEV;AAEA,SAAS,aAAa;CACpB,MAAM,eAAe,gBAAgB,KAAK,SAAS;CACnD,sBAAsB;CACtB,MAAM,iCAAiC;EACrC,IAAI,wBAAwB,cAC1B,sBAAsB;CAE1B;CACA,AAAK,aAAa,KAAK,0BAA0B,wBAAwB;AAC3E;AAEA,SAAgB,SAAS,KAAU;CACjC,IAAI,yEAAc,YAAa,IAAI,GAAG,IAAG;EACvC,iBAAiB,IAAI,GAAG;EACxB;CACF;CACA,SAAS,IAAI,GAAG;CAChB,IAAI,CAAC,cAAc,CAAC,gBAAgB;EAClC,iBAAiB;EACjB,WAAW;CACb;AACF;AAEA,SAAgB,SAAY,IAA0B;;CACpD,MAAM,kCAAU,0FAAuB;CACvC,OAAO,KAAK,QAAQ,KAAK,EAAE,IAAK;AAClC"}
1
+ {"version":3,"file":"scheduler.mjs","names":[],"sources":["../../src/scheduler.ts"],"sourcesContent":["const resolvedPromise: Promise<void> = Promise.resolve()\n\ntype Job = () => void | PromiseLike<void>\n\nconst jobQueue = new Set<Job>()\nconst deferredJobQueue = new Set<Job>()\nlet isFlushing = false\nlet isFlushPending = false\nlet flushedJobs: Set<Job> | undefined\nlet currentFlushPromise: Promise<void> | undefined\n\nfunction flushJobs(): void | Promise<void> {\n isFlushPending = false\n isFlushing = true\n flushedJobs = new Set()\n let shouldFlushDeferred = false\n let hasError = false\n let firstError: unknown\n const pendingJobs: PromiseLike<void>[] = []\n try {\n jobQueue.forEach((job) => {\n flushedJobs?.add(job)\n try {\n const result = job()\n if (result && typeof result.then === 'function') {\n pendingJobs.push(result)\n }\n }\n catch (error) {\n if (!hasError) {\n hasError = true\n firstError = error\n }\n }\n })\n }\n finally {\n jobQueue.clear()\n flushedJobs = undefined\n isFlushing = false\n if (deferredJobQueue.size) {\n deferredJobQueue.forEach(job => jobQueue.add(job))\n deferredJobQueue.clear()\n isFlushPending = true\n shouldFlushDeferred = true\n }\n }\n if (pendingJobs.length || shouldFlushDeferred) {\n return Promise.all(pendingJobs)\n .then(() => shouldFlushDeferred ? flushJobs() : undefined)\n .then(\n () => {\n if (hasError) {\n throw firstError\n }\n },\n (error: unknown) => {\n throw hasError ? firstError : error\n },\n )\n }\n if (hasError) {\n throw firstError\n }\n}\n\nfunction queueFlush() {\n const flushPromise = resolvedPromise.then(flushJobs)\n currentFlushPromise = flushPromise\n const clearCurrentFlushPromise = () => {\n if (currentFlushPromise === flushPromise) {\n currentFlushPromise = undefined\n }\n }\n void flushPromise.then(clearCurrentFlushPromise, clearCurrentFlushPromise)\n}\n\nexport function queueJob(job: Job) {\n if (isFlushing && flushedJobs?.has(job)) {\n deferredJobQueue.add(job)\n return\n }\n jobQueue.add(job)\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true\n queueFlush()\n }\n}\n\nexport function nextTick<T>(fn?: () => T): Promise<T> {\n const promise = currentFlushPromise ?? resolvedPromise\n return fn ? promise.then(fn) : (promise as unknown as Promise<T>)\n}\n"],"mappings":";AAAA,MAAM,kBAAiC,QAAQ,QAAQ;AAIvD,MAAM,2BAAW,IAAI,IAAS;AAC9B,MAAM,mCAAmB,IAAI,IAAS;AACtC,IAAI,aAAa;AACjB,IAAI,iBAAiB;AACrB,IAAI;AACJ,IAAI;AAEJ,SAAS,YAAkC;CACzC,iBAAiB;CACjB,aAAa;CACb,8BAAc,IAAI,IAAI;CACtB,IAAI,sBAAsB;CAC1B,IAAI,WAAW;CACf,IAAI;CACJ,MAAM,cAAmC,CAAC;CAC1C,IAAI;EACF,SAAS,SAAS,QAAQ;GACxB,aAAa,IAAI,GAAG;GACpB,IAAI;IACF,MAAM,SAAS,IAAI;IACnB,IAAI,UAAU,OAAO,OAAO,SAAS,YACnC,YAAY,KAAK,MAAM;GAE3B,SACO,OAAO;IACZ,IAAI,CAAC,UAAU;KACb,WAAW;KACX,aAAa;IACf;GACF;EACF,CAAC;CACH,UACQ;EACN,SAAS,MAAM;EACf,cAAc;EACd,aAAa;EACb,IAAI,iBAAiB,MAAM;GACzB,iBAAiB,SAAQ,QAAO,SAAS,IAAI,GAAG,CAAC;GACjD,iBAAiB,MAAM;GACvB,iBAAiB;GACjB,sBAAsB;EACxB;CACF;CACA,IAAI,YAAY,UAAU,qBACxB,OAAO,QAAQ,IAAI,WAAW,CAAC,CAC5B,WAAW,sBAAsB,UAAU,IAAI,MAAS,CAAC,CACzD,WACO;EACJ,IAAI,UACF,MAAM;CAEV,IACC,UAAmB;EAClB,MAAM,WAAW,aAAa;CAChC,CACF;CAEJ,IAAI,UACF,MAAM;AAEV;AAEA,SAAS,aAAa;CACpB,MAAM,eAAe,gBAAgB,KAAK,SAAS;CACnD,sBAAsB;CACtB,MAAM,iCAAiC;EACrC,IAAI,wBAAwB,cAC1B,sBAAsB;CAE1B;CACA,AAAK,aAAa,KAAK,0BAA0B,wBAAwB;AAC3E;AAEA,SAAgB,SAAS,KAAU;CACjC,IAAI,cAAc,aAAa,IAAI,GAAG,GAAG;EACvC,iBAAiB,IAAI,GAAG;EACxB;CACF;CACA,SAAS,IAAI,GAAG;CAChB,IAAI,CAAC,cAAc,CAAC,gBAAgB;EAClC,iBAAiB;EACjB,WAAW;CACb;AACF;AAEA,SAAgB,SAAY,IAA0B;CACpD,MAAM,UAAU,uBAAuB;CACvC,OAAO,KAAK,QAAQ,KAAK,EAAE,IAAK;AAClC"}
@@ -10,9 +10,8 @@ import { MutationType } from "./types.mjs";
10
10
  //#region src/store/base.ts
11
11
  /** 逐层追踪公开值与键增删,ref 解包不消耗额外的 state 深度。 */
12
12
  function trackState(value, depth, seen = /* @__PURE__ */ new Map()) {
13
- var _seen$get;
14
13
  if (!value || typeof value !== "object" || depth <= 0) return;
15
- if (((_seen$get = seen.get(value)) !== null && _seen$get !== void 0 ? _seen$get : 0) >= depth) return;
14
+ if ((seen.get(value) ?? 0) >= depth) return;
16
15
  seen.set(value, depth);
17
16
  if (isRef(value)) {
18
17
  trackState(value.value, depth, seen);
@@ -1 +1 @@
1
- {"version":3,"file":"base.mjs","names":[],"sources":["../../../src/store/base.ts"],"sourcesContent":["import type { EffectScope } from '../reactivity/core'\nimport type { WatchStopHandle } from '../reactivity/watch'\nimport type { ActionSubscriber, Pinia, StoreSubscribeOptions, SubscriptionCallback } from './types'\nimport { isRef, onScopeDispose, toRaw, watch } from '../reactivity'\nimport { queueBatchCallback, queueJob, track } from '../reactivity/core'\nimport { ReactiveFlags } from '../reactivity/reactive/shared'\nimport { nextTick } from '../scheduler'\nimport { addSubscription, noop } from './subscriptions'\nimport { MutationType } from './types'\nimport { mergeState } from './view'\n\n/** 逐层追踪公开值与键增删,ref 解包不消耗额外的 state 深度。 */\nfunction trackState(value: any, depth: number, seen = new Map<object, number>()) {\n if (!value || typeof value !== 'object' || depth <= 0) {\n return\n }\n if ((seen.get(value) ?? 0) >= depth) {\n return\n }\n seen.set(value, depth)\n if (isRef(value)) {\n trackState(value.value, depth, seen)\n return\n }\n if (value[ReactiveFlags.SKIP]) {\n return\n }\n const raw = toRaw(value)\n track(raw, Symbol.iterator)\n if (Array.isArray(value)) {\n track(raw, 'length')\n }\n for (const key of Object.keys(raw)) {\n trackState(value[key], depth - 1, seen)\n }\n}\n\n/** 管理单个 Store 的事务、订阅和显式释放,状态由 Pinia 持有。 */\nexport function createBaseApi(id: string, pinia: Pinia, scope: EffectScope, getStore: () => any) {\n const subscriptions = new Set<SubscriptionCallback>()\n const actionSubscriptions = new Set<ActionSubscriber>()\n const watchers = new Set<WatchStopHandle>()\n const syncWatchers = new Set<WatchStopHandle>()\n let initialized = false\n let paused = false\n let listening = false\n let syncListening = false\n let listenerVersion = 0\n let disposed = false\n scope.run(() => onScopeDispose(() => {\n subscriptions.clear()\n actionSubscriptions.clear()\n watchers.clear()\n syncWatchers.clear()\n }))\n\n function pauseSubscriptions() {\n if (!initialized) {\n return\n }\n paused = true\n watchers.forEach(watcher => watcher.pause())\n }\n\n function resumeWatchers(synchronous: boolean) {\n let failed = false\n let failure: unknown\n watchers.forEach((watcher) => {\n if (syncWatchers.has(watcher) !== synchronous) {\n return\n }\n try {\n watcher.resume()\n }\n catch (error) {\n if (!failed) {\n failure = error\n }\n failed = true\n }\n })\n if (failed) {\n throw failure\n }\n }\n\n const refreshAsyncDependencies = () => resumeWatchers(false)\n\n function restoreSubscriptions() {\n try {\n // 仅重收集 Store 订阅,不合并用户显式注册的同步 watcher。\n resumeWatchers(true)\n }\n finally {\n paused = false\n // 默认订阅跨同一轮的多个 patch 合并收集,避免把异步遍历退化成逐次同步遍历。\n queueJob(refreshAsyncDependencies)\n const version = ++listenerVersion\n syncListening = true\n const restoreListening = () => {\n if (listenerVersion === version) {\n listening = true\n }\n }\n // 调度失败仍须恢复监听;原始 nextTick promise 保留错误供调用方处理。\n void nextTick().then(restoreListening, restoreListening)\n }\n }\n const api: Record<string, any> = {\n $id: id,\n $patch(patch: Record<string, any> | ((state: any) => void)) {\n listening = syncListening = false\n pauseSubscriptions()\n try {\n if (typeof patch === 'function') {\n patch(pinia.state.value[id])\n }\n else {\n mergeState(pinia.state.value[id], patch)\n }\n }\n finally {\n // 取消嵌套 patch 恢复后产生的异步任务,外层 batch 排空后再收集最终依赖。\n pauseSubscriptions()\n queueBatchCallback(restoreSubscriptions)\n }\n const mutation = typeof patch === 'function'\n ? { type: MutationType.patchFunction, storeId: id }\n : { type: MutationType.patchObject, storeId: id, payload: patch }\n subscriptions.forEach(callback => callback(mutation, pinia.state.value[id]))\n },\n $subscribe(callback: SubscriptionCallback, options: StoreSubscribeOptions = {}) {\n if (subscriptions.has(callback)) {\n return noop\n }\n let stop = noop\n let watcher: WatchStopHandle | undefined\n const remove = addSubscription(subscriptions, callback, options.detached, () => {\n if (watcher) {\n watchers.delete(watcher)\n syncWatchers.delete(watcher)\n }\n stop()\n })\n watcher = scope.run(() => watch(\n () => {\n // Store 按公开状态遍历,避免版本树的整树订阅忽略数字 deep 的边界。\n const state = pinia.state.value[id]\n if (options.deep === false) {\n return state\n }\n trackState(state, typeof options.deep === 'number' ? options.deep : Infinity)\n return { state }\n },\n (value) => {\n if (options.flush === 'sync' ? syncListening : listening) {\n callback({ type: MutationType.direct, storeId: id }, options.deep === false ? value : value.state)\n }\n },\n { ...options, deep: false },\n ))\n if (watcher) {\n stop = watcher\n watchers.add(watcher)\n if (options.flush === 'sync' || options.scheduler) {\n syncWatchers.add(watcher)\n }\n if (paused) {\n watcher.pause()\n }\n }\n return remove\n },\n $onAction(callback: ActionSubscriber, detached?: boolean) {\n return addSubscription(actionSubscriptions, callback, detached)\n },\n $dispose() {\n if (disposed) {\n return\n }\n disposed = true\n try {\n scope.stop()\n }\n finally {\n subscriptions.clear()\n actionSubscriptions.clear()\n if (pinia._s.get(id) === getStore()) {\n pinia._s.delete(id)\n }\n }\n },\n }\n Object.defineProperty(api, '$state', {\n configurable: true,\n get: () => pinia.state.value[id],\n set: state => api.$patch((target: any) => Object.assign(target, state)),\n })\n return {\n api,\n actionSubscriptions,\n // 创建流程拥有初始化边界,插件注册的同步订阅不能观察半初始化状态。\n activateSubscriptions() {\n initialized = true\n listening = syncListening = true\n },\n }\n}\n"],"mappings":";;;;;;;;;;;AAYA,SAAS,WAAW,OAAY,OAAe,uBAAO,IAAI,IAAoB,GAAG;;CAC/E,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,SAAS,GAClD;CAEF,kBAAK,KAAK,IAAI,KAAK,kDAAK,MAAM,OAC5B;CAEF,KAAK,IAAI,OAAO,KAAK;CACrB,IAAI,MAAM,KAAK,GAAG;EAChB,WAAW,MAAM,OAAO,OAAO,IAAI;EACnC;CACF;CACA,IAAI,mBACF;CAEF,MAAM,MAAM,MAAM,KAAK;CACvB,MAAM,KAAK,OAAO,QAAQ;CAC1B,IAAI,MAAM,QAAQ,KAAK,GACrB,MAAM,KAAK,QAAQ;CAErB,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG,GAC/B,WAAW,MAAM,MAAM,QAAQ,GAAG,IAAI;AAE1C;;AAGA,SAAgB,cAAc,IAAY,OAAc,OAAoB,UAAqB;CAC/F,MAAM,gCAAgB,IAAI,IAA0B;CACpD,MAAM,sCAAsB,IAAI,IAAsB;CACtD,MAAM,2BAAW,IAAI,IAAqB;CAC1C,MAAM,+BAAe,IAAI,IAAqB;CAC9C,IAAI,cAAc;CAClB,IAAI,SAAS;CACb,IAAI,YAAY;CAChB,IAAI,gBAAgB;CACpB,IAAI,kBAAkB;CACtB,IAAI,WAAW;CACf,MAAM,UAAU,qBAAqB;EACnC,cAAc,MAAM;EACpB,oBAAoB,MAAM;EAC1B,SAAS,MAAM;EACf,aAAa,MAAM;CACrB,CAAC,CAAC;CAEF,SAAS,qBAAqB;EAC5B,IAAI,CAAC,aACH;EAEF,SAAS;EACT,SAAS,SAAQ,YAAW,QAAQ,MAAM,CAAC;CAC7C;CAEA,SAAS,eAAe,aAAsB;EAC5C,IAAI,SAAS;EACb,IAAI;EACJ,SAAS,SAAS,YAAY;GAC5B,IAAI,aAAa,IAAI,OAAO,MAAM,aAChC;GAEF,IAAI;IACF,QAAQ,OAAO;GACjB,SACO,OAAO;IACZ,IAAI,CAAC,QACH,UAAU;IAEZ,SAAS;GACX;EACF,CAAC;EACD,IAAI,QACF,MAAM;CAEV;CAEA,MAAM,iCAAiC,eAAe,KAAK;CAE3D,SAAS,uBAAuB;EAC9B,IAAI;GAEF,eAAe,IAAI;EACrB,UACQ;GACN,SAAS;GAET,SAAS,wBAAwB;GACjC,MAAM,UAAU,EAAE;GAClB,gBAAgB;GAChB,MAAM,yBAAyB;IAC7B,IAAI,oBAAoB,SACtB,YAAY;GAEhB;GAEA,AAAK,SAAS,CAAC,CAAC,KAAK,kBAAkB,gBAAgB;EACzD;CACF;CACA,MAAM,MAA2B;EAC/B,KAAK;EACL,OAAO,OAAqD;GAC1D,YAAY,gBAAgB;GAC5B,mBAAmB;GACnB,IAAI;IACF,IAAI,OAAO,UAAU,YACnB,MAAM,MAAM,MAAM,MAAM,GAAG;SAG3B,WAAW,MAAM,MAAM,MAAM,KAAK,KAAK;GAE3C,UACQ;IAEN,mBAAmB;IACnB,mBAAmB,oBAAoB;GACzC;GACA,MAAM,WAAW,OAAO,UAAU,aAC9B;IAAE,MAAM,aAAa;IAAe,SAAS;GAAG,IAChD;IAAE,MAAM,aAAa;IAAa,SAAS;IAAI,SAAS;GAAM;GAClE,cAAc,SAAQ,aAAY,SAAS,UAAU,MAAM,MAAM,MAAM,GAAG,CAAC;EAC7E;EACA,WAAW,UAAgC,UAAiC,CAAC,GAAG;GAC9E,IAAI,cAAc,IAAI,QAAQ,GAC5B,OAAO;GAET,IAAI,OAAO;GACX,IAAI;GACJ,MAAM,SAAS,gBAAgB,eAAe,UAAU,QAAQ,gBAAgB;IAC9E,IAAI,SAAS;KACX,SAAS,OAAO,OAAO;KACvB,aAAa,OAAO,OAAO;IAC7B;IACA,KAAK;GACP,CAAC;GACD,UAAU,MAAM,UAAU,YAClB;IAEJ,MAAM,QAAQ,MAAM,MAAM,MAAM;IAChC,IAAI,QAAQ,SAAS,OACnB,OAAO;IAET,WAAW,OAAO,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO,QAAQ;IAC5E,OAAO,EAAE,MAAM;GACjB,IACC,UAAU;IACT,IAAI,QAAQ,UAAU,SAAS,gBAAgB,WAC7C,SAAS;KAAE,MAAM,aAAa;KAAQ,SAAS;IAAG,GAAG,QAAQ,SAAS,QAAQ,QAAQ,MAAM,KAAK;GAErG,GACA;IAAE,GAAG;IAAS,MAAM;GAAM,CAC5B,CAAC;GACD,IAAI,SAAS;IACX,OAAO;IACP,SAAS,IAAI,OAAO;IACpB,IAAI,QAAQ,UAAU,UAAU,QAAQ,WACtC,aAAa,IAAI,OAAO;IAE1B,IAAI,QACF,QAAQ,MAAM;GAElB;GACA,OAAO;EACT;EACA,UAAU,UAA4B,UAAoB;GACxD,OAAO,gBAAgB,qBAAqB,UAAU,QAAQ;EAChE;EACA,WAAW;GACT,IAAI,UACF;GAEF,WAAW;GACX,IAAI;IACF,MAAM,KAAK;GACb,UACQ;IACN,cAAc,MAAM;IACpB,oBAAoB,MAAM;IAC1B,IAAI,MAAM,GAAG,IAAI,EAAE,MAAM,SAAS,GAChC,MAAM,GAAG,OAAO,EAAE;GAEtB;EACF;CACF;CACA,OAAO,eAAe,KAAK,UAAU;EACnC,cAAc;EACd,WAAW,MAAM,MAAM,MAAM;EAC7B,MAAK,UAAS,IAAI,QAAQ,WAAgB,OAAO,OAAO,QAAQ,KAAK,CAAC;CACxE,CAAC;CACD,OAAO;EACL;EACA;EAEA,wBAAwB;GACtB,cAAc;GACd,YAAY,gBAAgB;EAC9B;CACF;AACF"}
1
+ {"version":3,"file":"base.mjs","names":[],"sources":["../../../src/store/base.ts"],"sourcesContent":["import type { EffectScope } from '../reactivity/core'\nimport type { WatchStopHandle } from '../reactivity/watch'\nimport type { ActionSubscriber, Pinia, StoreSubscribeOptions, SubscriptionCallback } from './types'\nimport { isRef, onScopeDispose, toRaw, watch } from '../reactivity'\nimport { queueBatchCallback, queueJob, track } from '../reactivity/core'\nimport { ReactiveFlags } from '../reactivity/reactive/shared'\nimport { nextTick } from '../scheduler'\nimport { addSubscription, noop } from './subscriptions'\nimport { MutationType } from './types'\nimport { mergeState } from './view'\n\n/** 逐层追踪公开值与键增删,ref 解包不消耗额外的 state 深度。 */\nfunction trackState(value: any, depth: number, seen = new Map<object, number>()) {\n if (!value || typeof value !== 'object' || depth <= 0) {\n return\n }\n if ((seen.get(value) ?? 0) >= depth) {\n return\n }\n seen.set(value, depth)\n if (isRef(value)) {\n trackState(value.value, depth, seen)\n return\n }\n if (value[ReactiveFlags.SKIP]) {\n return\n }\n const raw = toRaw(value)\n track(raw, Symbol.iterator)\n if (Array.isArray(value)) {\n track(raw, 'length')\n }\n for (const key of Object.keys(raw)) {\n trackState(value[key], depth - 1, seen)\n }\n}\n\n/** 管理单个 Store 的事务、订阅和显式释放,状态由 Pinia 持有。 */\nexport function createBaseApi(id: string, pinia: Pinia, scope: EffectScope, getStore: () => any) {\n const subscriptions = new Set<SubscriptionCallback>()\n const actionSubscriptions = new Set<ActionSubscriber>()\n const watchers = new Set<WatchStopHandle>()\n const syncWatchers = new Set<WatchStopHandle>()\n let initialized = false\n let paused = false\n let listening = false\n let syncListening = false\n let listenerVersion = 0\n let disposed = false\n scope.run(() => onScopeDispose(() => {\n subscriptions.clear()\n actionSubscriptions.clear()\n watchers.clear()\n syncWatchers.clear()\n }))\n\n function pauseSubscriptions() {\n if (!initialized) {\n return\n }\n paused = true\n watchers.forEach(watcher => watcher.pause())\n }\n\n function resumeWatchers(synchronous: boolean) {\n let failed = false\n let failure: unknown\n watchers.forEach((watcher) => {\n if (syncWatchers.has(watcher) !== synchronous) {\n return\n }\n try {\n watcher.resume()\n }\n catch (error) {\n if (!failed) {\n failure = error\n }\n failed = true\n }\n })\n if (failed) {\n throw failure\n }\n }\n\n const refreshAsyncDependencies = () => resumeWatchers(false)\n\n function restoreSubscriptions() {\n try {\n // 仅重收集 Store 订阅,不合并用户显式注册的同步 watcher。\n resumeWatchers(true)\n }\n finally {\n paused = false\n // 默认订阅跨同一轮的多个 patch 合并收集,避免把异步遍历退化成逐次同步遍历。\n queueJob(refreshAsyncDependencies)\n const version = ++listenerVersion\n syncListening = true\n const restoreListening = () => {\n if (listenerVersion === version) {\n listening = true\n }\n }\n // 调度失败仍须恢复监听;原始 nextTick promise 保留错误供调用方处理。\n void nextTick().then(restoreListening, restoreListening)\n }\n }\n const api: Record<string, any> = {\n $id: id,\n $patch(patch: Record<string, any> | ((state: any) => void)) {\n listening = syncListening = false\n pauseSubscriptions()\n try {\n if (typeof patch === 'function') {\n patch(pinia.state.value[id])\n }\n else {\n mergeState(pinia.state.value[id], patch)\n }\n }\n finally {\n // 取消嵌套 patch 恢复后产生的异步任务,外层 batch 排空后再收集最终依赖。\n pauseSubscriptions()\n queueBatchCallback(restoreSubscriptions)\n }\n const mutation = typeof patch === 'function'\n ? { type: MutationType.patchFunction, storeId: id }\n : { type: MutationType.patchObject, storeId: id, payload: patch }\n subscriptions.forEach(callback => callback(mutation, pinia.state.value[id]))\n },\n $subscribe(callback: SubscriptionCallback, options: StoreSubscribeOptions = {}) {\n if (subscriptions.has(callback)) {\n return noop\n }\n let stop = noop\n let watcher: WatchStopHandle | undefined\n const remove = addSubscription(subscriptions, callback, options.detached, () => {\n if (watcher) {\n watchers.delete(watcher)\n syncWatchers.delete(watcher)\n }\n stop()\n })\n watcher = scope.run(() => watch(\n () => {\n // Store 按公开状态遍历,避免版本树的整树订阅忽略数字 deep 的边界。\n const state = pinia.state.value[id]\n if (options.deep === false) {\n return state\n }\n trackState(state, typeof options.deep === 'number' ? options.deep : Infinity)\n return { state }\n },\n (value) => {\n if (options.flush === 'sync' ? syncListening : listening) {\n callback({ type: MutationType.direct, storeId: id }, options.deep === false ? value : value.state)\n }\n },\n { ...options, deep: false },\n ))\n if (watcher) {\n stop = watcher\n watchers.add(watcher)\n if (options.flush === 'sync' || options.scheduler) {\n syncWatchers.add(watcher)\n }\n if (paused) {\n watcher.pause()\n }\n }\n return remove\n },\n $onAction(callback: ActionSubscriber, detached?: boolean) {\n return addSubscription(actionSubscriptions, callback, detached)\n },\n $dispose() {\n if (disposed) {\n return\n }\n disposed = true\n try {\n scope.stop()\n }\n finally {\n subscriptions.clear()\n actionSubscriptions.clear()\n if (pinia._s.get(id) === getStore()) {\n pinia._s.delete(id)\n }\n }\n },\n }\n Object.defineProperty(api, '$state', {\n configurable: true,\n get: () => pinia.state.value[id],\n set: state => api.$patch((target: any) => Object.assign(target, state)),\n })\n return {\n api,\n actionSubscriptions,\n // 创建流程拥有初始化边界,插件注册的同步订阅不能观察半初始化状态。\n activateSubscriptions() {\n initialized = true\n listening = syncListening = true\n },\n }\n}\n"],"mappings":"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"}
@@ -22,22 +22,17 @@ function createStoreInstance(id, definition, pinia, setupOptions) {
22
22
  pinia._s.set(id, store);
23
23
  try {
24
24
  scope.run(() => {
25
- var _definition$actions;
26
- if (!hadState) {
27
- var _definition$state, _definition$state2;
28
- pinia.state.value[id] = storeView(isSetup ? {} : (_definition$state = (_definition$state2 = definition.state) === null || _definition$state2 === void 0 ? void 0 : _definition$state2.call(definition)) !== null && _definition$state !== void 0 ? _definition$state : {});
29
- }
25
+ if (!hadState) pinia.state.value[id] = storeView(isSetup ? {} : definition.state?.() ?? {});
30
26
  const initial = pinia.state.value[id];
31
27
  const result = isSetup ? definition() : {};
32
28
  const options = isSetup ? {
33
29
  ...setupOptions,
34
30
  actions: {}
35
31
  } : { ...definition };
36
- const actionDefinitions = isSetup ? options.actions : (_definition$actions = definition.actions) !== null && _definition$actions !== void 0 ? _definition$actions : {};
32
+ const actionDefinitions = isSetup ? options.actions : definition.actions ?? {};
37
33
  if (!isSetup) {
38
- var _definition$getters;
39
34
  for (const key of Object.keys(initial)) result[key] = toRef(initial, key);
40
- for (const [key, getter] of Object.entries((_definition$getters = definition.getters) !== null && _definition$getters !== void 0 ? _definition$getters : {})) result[key] = computed(() => {
35
+ for (const [key, getter] of Object.entries(definition.getters ?? {})) result[key] = computed(() => {
41
36
  setActivePinia(pinia);
42
37
  return getter.call(store, store);
43
38
  });
@@ -45,10 +40,7 @@ function createStoreInstance(id, definition, pinia, setupOptions) {
45
40
  }
46
41
  raw.$reset = isSetup ? () => {
47
42
  throw new Error(`Store "${id}" 使用 setup 语法,必须自行实现 $reset()`);
48
- } : () => store.$patch((state) => {
49
- var _definition$state3, _definition$state4;
50
- return Object.assign(state, (_definition$state3 = (_definition$state4 = definition.state) === null || _definition$state4 === void 0 ? void 0 : _definition$state4.call(definition)) !== null && _definition$state3 !== void 0 ? _definition$state3 : {});
51
- });
43
+ } : () => store.$patch((state) => Object.assign(state, definition.state?.() ?? {}));
52
44
  for (const key of Object.keys(result)) {
53
45
  const value = result[key];
54
46
  if (typeof value === "function") {
@@ -65,22 +57,19 @@ function createStoreInstance(id, definition, pinia, setupOptions) {
65
57
  raw[key] = value;
66
58
  }
67
59
  }
68
- for (const plugin of pinia._p) {
69
- var _plugin;
70
- Object.assign(store, (_plugin = plugin({
71
- store,
72
- pinia,
73
- app: pinia._a,
74
- options
75
- })) !== null && _plugin !== void 0 ? _plugin : {});
76
- }
60
+ for (const plugin of pinia._p) Object.assign(store, plugin({
61
+ store,
62
+ pinia,
63
+ app: pinia._a,
64
+ options
65
+ }) ?? {});
77
66
  });
78
67
  base.activateSubscriptions();
79
68
  return store;
80
69
  } catch (error) {
81
70
  try {
82
71
  scope.stop();
83
- } catch (_unused) {}
72
+ } catch {}
84
73
  if (pinia._s.get(id) === store) pinia._s.delete(id);
85
74
  if (!hadState) delete pinia.state.value[id];
86
75
  throw error;
@@ -1 +1 @@
1
- {"version":3,"file":"create.mjs","names":[],"sources":["../../../../src/store/define/create.ts"],"sourcesContent":["import type { Pinia } from '../types'\nimport { computed, effectScope, isReactive, isRef, toRef } from '../../reactivity'\nimport { isComputedRef } from '../../reactivity/computed'\nimport { wrapAction } from '../actions'\nimport { createBaseApi } from '../base'\nimport { setActivePinia } from '../manager'\nimport { mergeState, storeView } from '../view'\n\n/** 创建 Store 实例;state 与实例缓存分离,释放实例后可继续复用状态。 */\nexport function createStoreInstance(id: string, definition: any, pinia: Pinia, setupOptions?: any) {\n const scope = pinia._e.run(() => effectScope())\n if (!scope) {\n throw new Error('不能在已释放的 Pinia 上创建 Store')\n }\n const hadState = Object.prototype.hasOwnProperty.call(pinia.state.value, id)\n const isSetup = typeof definition === 'function'\n const raw: Record<string, any> = {}\n const store = storeView(raw)\n const base = createBaseApi(id, pinia, scope, () => store)\n Object.defineProperties(raw, Object.getOwnPropertyDescriptors(base.api))\n pinia._s.set(id, store)\n\n try {\n scope.run(() => {\n if (!hadState) {\n pinia.state.value[id] = storeView(isSetup ? {} : definition.state?.() ?? {})\n }\n const initial = pinia.state.value[id]\n const result: Record<string, any> = isSetup ? definition() : {}\n const options = isSetup ? { ...setupOptions, actions: {} } : { ...definition }\n const actionDefinitions: Record<string, any> = isSetup ? options.actions : definition.actions ?? {}\n\n if (!isSetup) {\n for (const key of Object.keys(initial)) {\n result[key] = toRef(initial, key)\n }\n for (const [key, getter] of Object.entries(definition.getters ?? {})) {\n result[key] = computed(() => {\n setActivePinia(pinia)\n return (getter as any).call(store, store)\n })\n }\n Object.assign(result, actionDefinitions)\n }\n raw.$reset = isSetup\n ? () => {\n // eslint-disable-next-line mini-program/no-unsupported-runtime-api, node/prefer-global/process -- 构建期常量,两个发布入口分别替换为 production/development\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`Store \"${id}\" 使用 setup 语法,必须自行实现 $reset()`)\n }\n }\n : () => store.$patch((state: any) => Object.assign(state, definition.state?.() ?? {}))\n\n for (const key of Object.keys(result)) {\n const value = result[key]\n if (typeof value === 'function') {\n actionDefinitions[key] = value\n raw[key] = wrapAction(store, key, value, base.actionSubscriptions, pinia)\n }\n else {\n if (isSetup && ((isRef(value) && !isComputedRef(value)) || isReactive(value))) {\n if (hadState) {\n if (isRef(value)) {\n value.value = initial[key]\n }\n else {\n mergeState(storeView(value), initial[key])\n }\n }\n initial[key] = value\n }\n raw[key] = value\n }\n }\n for (const plugin of pinia._p) {\n Object.assign(store, plugin({ store, pinia, app: pinia._a, options }) ?? {})\n }\n })\n base.activateSubscriptions()\n return store\n }\n catch (error) {\n try {\n scope.stop()\n }\n catch {\n // 初始化异常优先;scope.stop 已逐项执行其余清理。\n }\n if (pinia._s.get(id) === store) {\n pinia._s.delete(id)\n }\n if (!hadState) {\n delete pinia.state.value[id]\n }\n throw error\n }\n}\n"],"mappings":";;;;;;;;;;;;AASA,SAAgB,oBAAoB,IAAY,YAAiB,OAAc,cAAoB;CACjG,MAAM,QAAQ,MAAM,GAAG,UAAU,YAAY,CAAC;CAC9C,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,yBAAyB;CAE3C,MAAM,WAAW,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,OAAO,EAAE;CAC3E,MAAM,UAAU,OAAO,eAAe;CACtC,MAAM,MAA2B,CAAC;CAClC,MAAM,QAAQ,UAAU,GAAG;CAC3B,MAAM,OAAO,cAAc,IAAI,OAAO,aAAa,KAAK;CACxD,OAAO,iBAAiB,KAAK,OAAO,0BAA0B,KAAK,GAAG,CAAC;CACvE,MAAM,GAAG,IAAI,IAAI,KAAK;CAEtB,IAAI;EACF,MAAM,UAAU;;GACd,IAAI,CAAC,UAAU;;IACb,MAAM,MAAM,MAAM,MAAM,UAAU,UAAU,CAAC,+CAAI,WAAW,8FAAQ,kEAAK,CAAC,CAAC;GAC7E;GACA,MAAM,UAAU,MAAM,MAAM,MAAM;GAClC,MAAM,SAA8B,UAAU,WAAW,IAAI,CAAC;GAC9D,MAAM,UAAU,UAAU;IAAE,GAAG;IAAc,SAAS,CAAC;GAAE,IAAI,EAAE,GAAG,WAAW;GAC7E,MAAM,oBAAyC,UAAU,QAAQ,iCAAU,WAAW,4EAAW,CAAC;GAElG,IAAI,CAAC,SAAS;;IACZ,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,GACnC,OAAO,OAAO,MAAM,SAAS,GAAG;IAElC,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,+BAAQ,WAAW,4EAAW,CAAC,CAAC,GACjE,OAAO,OAAO,eAAe;KAC3B,eAAe,KAAK;KACpB,OAAQ,OAAe,KAAK,OAAO,KAAK;IAC1C,CAAC;IAEH,OAAO,OAAO,QAAQ,iBAAiB;GACzC;GACA,IAAI,SAAS,gBACH;IAGF,MAAM,IAAI,MAAM,UAAU,GAAG,8BAA8B;GAE/D,UACM,MAAM,QAAQ,UAAe;;kBAAO,OAAO,mDAAO,WAAW,8FAAQ,oEAAK,CAAC,CAAC;IAAC;GAEvF,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAAG;IACrC,MAAM,QAAQ,OAAO;IACrB,IAAI,OAAO,UAAU,YAAY;KAC/B,kBAAkB,OAAO;KACzB,IAAI,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK,qBAAqB,KAAK;IAC1E,OACK;KACH,IAAI,YAAa,MAAM,KAAK,KAAK,CAAC,cAAc,KAAK,KAAM,WAAW,KAAK,IAAI;MAC7E,IAAI,UAAU;OACZ,IAAI,MAAM,KAAK,GACb,MAAM,QAAQ,QAAQ;YAGtB,WAAW,UAAU,KAAK,GAAG,QAAQ,IAAI;MAE7C;MACA,QAAQ,OAAO;KACjB;KACA,IAAI,OAAO;IACb;GACF;GACA,KAAK,MAAM,UAAU,MAAM,IAAI;;IAC7B,OAAO,OAAO,kBAAO,OAAO;KAAE;KAAO;KAAO,KAAK,MAAM;KAAI;IAAQ,CAAC,8CAAK,CAAC,CAAC;GAC7E;EACF,CAAC;EACD,KAAK,sBAAsB;EAC3B,OAAO;CACT,SACO,OAAO;EACZ,IAAI;GACF,MAAM,KAAK;EACb,kBACM,CAEN;EACA,IAAI,MAAM,GAAG,IAAI,EAAE,MAAM,OACvB,MAAM,GAAG,OAAO,EAAE;EAEpB,IAAI,CAAC,UACH,OAAO,MAAM,MAAM,MAAM;EAE3B,MAAM;CACR;AACF"}
1
+ {"version":3,"file":"create.mjs","names":[],"sources":["../../../../src/store/define/create.ts"],"sourcesContent":["import type { Pinia } from '../types'\nimport { computed, effectScope, isReactive, isRef, toRef } from '../../reactivity'\nimport { isComputedRef } from '../../reactivity/computed'\nimport { wrapAction } from '../actions'\nimport { createBaseApi } from '../base'\nimport { setActivePinia } from '../manager'\nimport { mergeState, storeView } from '../view'\n\n/** 创建 Store 实例;state 与实例缓存分离,释放实例后可继续复用状态。 */\nexport function createStoreInstance(id: string, definition: any, pinia: Pinia, setupOptions?: any) {\n const scope = pinia._e.run(() => effectScope())\n if (!scope) {\n throw new Error('不能在已释放的 Pinia 上创建 Store')\n }\n const hadState = Object.prototype.hasOwnProperty.call(pinia.state.value, id)\n const isSetup = typeof definition === 'function'\n const raw: Record<string, any> = {}\n const store = storeView(raw)\n const base = createBaseApi(id, pinia, scope, () => store)\n Object.defineProperties(raw, Object.getOwnPropertyDescriptors(base.api))\n pinia._s.set(id, store)\n\n try {\n scope.run(() => {\n if (!hadState) {\n pinia.state.value[id] = storeView(isSetup ? {} : definition.state?.() ?? {})\n }\n const initial = pinia.state.value[id]\n const result: Record<string, any> = isSetup ? definition() : {}\n const options = isSetup ? { ...setupOptions, actions: {} } : { ...definition }\n const actionDefinitions: Record<string, any> = isSetup ? options.actions : definition.actions ?? {}\n\n if (!isSetup) {\n for (const key of Object.keys(initial)) {\n result[key] = toRef(initial, key)\n }\n for (const [key, getter] of Object.entries(definition.getters ?? {})) {\n result[key] = computed(() => {\n setActivePinia(pinia)\n return (getter as any).call(store, store)\n })\n }\n Object.assign(result, actionDefinitions)\n }\n raw.$reset = isSetup\n ? () => {\n // eslint-disable-next-line mini-program/no-unsupported-runtime-api, node/prefer-global/process -- 构建期常量,两个发布入口分别替换为 production/development\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(`Store \"${id}\" 使用 setup 语法,必须自行实现 $reset()`)\n }\n }\n : () => store.$patch((state: any) => Object.assign(state, definition.state?.() ?? {}))\n\n for (const key of Object.keys(result)) {\n const value = result[key]\n if (typeof value === 'function') {\n actionDefinitions[key] = value\n raw[key] = wrapAction(store, key, value, base.actionSubscriptions, pinia)\n }\n else {\n if (isSetup && ((isRef(value) && !isComputedRef(value)) || isReactive(value))) {\n if (hadState) {\n if (isRef(value)) {\n value.value = initial[key]\n }\n else {\n mergeState(storeView(value), initial[key])\n }\n }\n initial[key] = value\n }\n raw[key] = value\n }\n }\n for (const plugin of pinia._p) {\n Object.assign(store, plugin({ store, pinia, app: pinia._a, options }) ?? {})\n }\n })\n base.activateSubscriptions()\n return store\n }\n catch (error) {\n try {\n scope.stop()\n }\n catch {\n // 初始化异常优先;scope.stop 已逐项执行其余清理。\n }\n if (pinia._s.get(id) === store) {\n pinia._s.delete(id)\n }\n if (!hadState) {\n delete pinia.state.value[id]\n }\n throw error\n }\n}\n"],"mappings":";;;;;;;;;;;;AASA,SAAgB,oBAAoB,IAAY,YAAiB,OAAc,cAAoB;CACjG,MAAM,QAAQ,MAAM,GAAG,UAAU,YAAY,CAAC;CAC9C,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,yBAAyB;CAE3C,MAAM,WAAW,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,OAAO,EAAE;CAC3E,MAAM,UAAU,OAAO,eAAe;CACtC,MAAM,MAA2B,CAAC;CAClC,MAAM,QAAQ,UAAU,GAAG;CAC3B,MAAM,OAAO,cAAc,IAAI,OAAO,aAAa,KAAK;CACxD,OAAO,iBAAiB,KAAK,OAAO,0BAA0B,KAAK,GAAG,CAAC;CACvE,MAAM,GAAG,IAAI,IAAI,KAAK;CAEtB,IAAI;EACF,MAAM,UAAU;GACd,IAAI,CAAC,UACH,MAAM,MAAM,MAAM,MAAM,UAAU,UAAU,CAAC,IAAI,WAAW,QAAQ,KAAK,CAAC,CAAC;GAE7E,MAAM,UAAU,MAAM,MAAM,MAAM;GAClC,MAAM,SAA8B,UAAU,WAAW,IAAI,CAAC;GAC9D,MAAM,UAAU,UAAU;IAAE,GAAG;IAAc,SAAS,CAAC;GAAE,IAAI,EAAE,GAAG,WAAW;GAC7E,MAAM,oBAAyC,UAAU,QAAQ,UAAU,WAAW,WAAW,CAAC;GAElG,IAAI,CAAC,SAAS;IACZ,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,GACnC,OAAO,OAAO,MAAM,SAAS,GAAG;IAElC,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QAAQ,WAAW,WAAW,CAAC,CAAC,GACjE,OAAO,OAAO,eAAe;KAC3B,eAAe,KAAK;KACpB,OAAQ,OAAe,KAAK,OAAO,KAAK;IAC1C,CAAC;IAEH,OAAO,OAAO,QAAQ,iBAAiB;GACzC;GACA,IAAI,SAAS,gBACH;IAGF,MAAM,IAAI,MAAM,UAAU,GAAG,8BAA8B;GAE/D,UACM,MAAM,QAAQ,UAAe,OAAO,OAAO,OAAO,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC;GAEvF,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAAG;IACrC,MAAM,QAAQ,OAAO;IACrB,IAAI,OAAO,UAAU,YAAY;KAC/B,kBAAkB,OAAO;KACzB,IAAI,OAAO,WAAW,OAAO,KAAK,OAAO,KAAK,qBAAqB,KAAK;IAC1E,OACK;KACH,IAAI,YAAa,MAAM,KAAK,KAAK,CAAC,cAAc,KAAK,KAAM,WAAW,KAAK,IAAI;MAC7E,IAAI,UAAU;OACZ,IAAI,MAAM,KAAK,GACb,MAAM,QAAQ,QAAQ;YAGtB,WAAW,UAAU,KAAK,GAAG,QAAQ,IAAI;MAE7C;MACA,QAAQ,OAAO;KACjB;KACA,IAAI,OAAO;IACb;GACF;GACA,KAAK,MAAM,UAAU,MAAM,IACzB,OAAO,OAAO,OAAO,OAAO;IAAE;IAAO;IAAO,KAAK,MAAM;IAAI;GAAQ,CAAC,KAAK,CAAC,CAAC;EAE/E,CAAC;EACD,KAAK,sBAAsB;EAC3B,OAAO;CACT,SACO,OAAO;EACZ,IAAI;GACF,MAAM,KAAK;EACb,QACM,CAEN;EACA,IAAI,MAAM,GAAG,IAAI,EAAE,MAAM,OACvB,MAAM,GAAG,OAAO,EAAE;EAEpB,IAAI,CAAC,UACH,OAAO,MAAM,MAAM,MAAM;EAE3B,MAAM;CACR;AACF"}
@@ -4,7 +4,7 @@ import { createStoreInstance } from "./define/create.mjs";
4
4
  //#region src/store/define.ts
5
5
  function defineStore(id, setupOrOptions, options) {
6
6
  const useStore = (pinia) => {
7
- const owner = pinia !== null && pinia !== void 0 ? pinia : getActivePinia();
7
+ const owner = pinia ?? getActivePinia();
8
8
  if (!owner) throw new Error("没有活动的 Pinia,请先调用 app.use(createPinia()) 或显式传入 Pinia");
9
9
  setActivePinia(owner);
10
10
  if (!owner._s.has(id)) createStoreInstance(id, setupOrOptions, owner, options);
@@ -1 +1 @@
1
- {"version":3,"file":"define.mjs","names":[],"sources":["../../../src/store/define.ts"],"sourcesContent":["import type { DefineStoreOptions, OptionsStore, Pinia, SetupStore, StoreDefinition, StoreSetupOptions } from './types'\nimport { createStoreInstance } from './define/create'\nimport { getActivePinia, setActivePinia } from './manager'\n\n/** 定义 Setup Store,返回值在实例上自动解包 ref。 */\nexport function defineStore<Id extends string, T extends Record<string, any>>(\n id: Id,\n setup: () => T,\n options?: StoreSetupOptions,\n): StoreDefinition<Id, SetupStore<Id, T>>\n/** 定义 Options Store,共享 state/getters/actions 的 this 类型。 */\nexport function defineStore<Id extends string, S extends Record<string, any> = Record<never, never>, G extends Record<string, any> = Record<never, never>, A extends Record<string, any> = Record<never, never>>(\n id: Id,\n options: DefineStoreOptions<S, G, A>,\n): StoreDefinition<Id, OptionsStore<S, G, A, Id>>\nexport function defineStore(id: string, setupOrOptions: any, options?: StoreSetupOptions) {\n const useStore = (pinia?: Pinia | null) => {\n const owner = pinia ?? getActivePinia()\n if (!owner) {\n throw new Error('没有活动的 Pinia,请先调用 app.use(createPinia()) 或显式传入 Pinia')\n }\n setActivePinia(owner)\n if (!owner._s.has(id)) {\n createStoreInstance(id, setupOrOptions, owner, options)\n }\n return owner._s.get(id)\n }\n useStore.$id = id\n return useStore\n}\n"],"mappings":";;;;AAeA,SAAgB,YAAY,IAAY,gBAAqB,SAA6B;CACxF,MAAM,YAAY,UAAyB;EACzC,MAAM,QAAQ,6CAAS,eAAe;EACtC,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,qDAAqD;EAEvE,eAAe,KAAK;EACpB,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,GAClB,oBAAoB,IAAI,gBAAgB,OAAO,OAAO;EAExD,OAAO,MAAM,GAAG,IAAI,EAAE;CACxB;CACA,SAAS,MAAM;CACf,OAAO;AACT"}
1
+ {"version":3,"file":"define.mjs","names":[],"sources":["../../../src/store/define.ts"],"sourcesContent":["import type { DefineStoreOptions, OptionsStore, Pinia, SetupStore, StoreDefinition, StoreSetupOptions } from './types'\nimport { createStoreInstance } from './define/create'\nimport { getActivePinia, setActivePinia } from './manager'\n\n/** 定义 Setup Store,返回值在实例上自动解包 ref。 */\nexport function defineStore<Id extends string, T extends Record<string, any>>(\n id: Id,\n setup: () => T,\n options?: StoreSetupOptions,\n): StoreDefinition<Id, SetupStore<Id, T>>\n/** 定义 Options Store,共享 state/getters/actions 的 this 类型。 */\nexport function defineStore<Id extends string, S extends Record<string, any> = Record<never, never>, G extends Record<string, any> = Record<never, never>, A extends Record<string, any> = Record<never, never>>(\n id: Id,\n options: DefineStoreOptions<S, G, A>,\n): StoreDefinition<Id, OptionsStore<S, G, A, Id>>\nexport function defineStore(id: string, setupOrOptions: any, options?: StoreSetupOptions) {\n const useStore = (pinia?: Pinia | null) => {\n const owner = pinia ?? getActivePinia()\n if (!owner) {\n throw new Error('没有活动的 Pinia,请先调用 app.use(createPinia()) 或显式传入 Pinia')\n }\n setActivePinia(owner)\n if (!owner._s.has(id)) {\n createStoreInstance(id, setupOrOptions, owner, options)\n }\n return owner._s.get(id)\n }\n useStore.$id = id\n return useStore\n}\n"],"mappings":";;;;AAeA,SAAgB,YAAY,IAAY,gBAAqB,SAA6B;CACxF,MAAM,YAAY,UAAyB;EACzC,MAAM,QAAQ,SAAS,eAAe;EACtC,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,qDAAqD;EAEvE,eAAe,KAAK;EACpB,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,GAClB,oBAAoB,IAAI,gBAAgB,OAAO,OAAO;EAExD,OAAO,MAAM,GAAG,IAAI,EAAE;CACxB;CACA,SAAS,MAAM;CACf,OAAO;AACT"}
@@ -39,7 +39,7 @@ function storeView(source) {
39
39
  function mergeState(target, patch) {
40
40
  if (target instanceof Map && patch instanceof Map) patch.forEach((value, key) => target.set(key, value));
41
41
  else if (target instanceof Set && patch instanceof Set) patch.forEach((value) => target.add(value));
42
- for (const key of Object.keys(patch !== null && patch !== void 0 ? patch : {})) {
42
+ for (const key of Object.keys(patch ?? {})) {
43
43
  if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
44
44
  const value = patch[key];
45
45
  if (isPlainObject(target[key]) && isPlainObject(value) && !isRef(value) && !isReactive(value)) mergeState(target[key], value);
@@ -1 +1 @@
1
- {"version":3,"file":"view.mjs","names":[],"sources":["../../../src/store/view.ts"],"sourcesContent":["import { isReactive, isRef, isShallowReactive, reactive, toRaw } from '../reactivity'\nimport { ReactiveFlags } from '../reactivity/reactive/shared'\nimport { isPlainObject } from './utils'\n\nconst views = new WeakMap<object, any>()\n\n/** 仅在 Store 边界解包 ref,所有读写仍转发到原始响应式来源。 */\nexport function storeView<T extends object>(source: T): T {\n if ((source as any)[ReactiveFlags.SKIP]) {\n return source\n }\n if (!isPlainObject(source) && !Array.isArray(source)) {\n return source\n }\n if (isReactive(source) && isShallowReactive(source)) {\n return source\n }\n const target = isReactive(source) ? source : reactive(source)\n const cached = views.get(target)\n if (cached) {\n return cached\n }\n // 属性视图只解包既有响应式来源,不把 shallowRef 的普通值转成深层代理。\n const storeViewValue = (value: any): any => isReactive(value) ? storeView(value) : value\n const view = new Proxy(target, {\n get(object, key, receiver) {\n const value = Reflect.get(object, key, receiver)\n if (key === ReactiveFlags.RAW || key === ReactiveFlags.SKIP) {\n return value\n }\n if (isRef(value)) {\n return Array.isArray(object) && typeof key === 'string' && /^\\d+$/.test(key)\n ? value\n : storeViewValue(value.value)\n }\n return storeViewValue(value)\n },\n set(object, key, value, receiver) {\n const previous = Reflect.get(object, key, receiver)\n if (isRef(previous) && !isRef(value) && !Array.isArray(object)) {\n previous.value = value\n return true\n }\n return Reflect.set(object, key, value, receiver)\n },\n })\n views.set(target, view)\n views.set(view, view)\n return view\n}\n\n/** 合并普通对象,数组替换;保留 ref 和已有响应式对象的写入语义。 */\nexport function mergeState(target: Record<string, any>, patch: Record<string, any>) {\n if (target instanceof Map && patch instanceof Map) {\n patch.forEach((value, key) => target.set(key, value))\n }\n else if (target instanceof Set && patch instanceof Set) {\n patch.forEach(value => target.add(value))\n }\n for (const key of Object.keys(patch ?? {})) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue\n }\n const value = patch[key]\n if (isPlainObject(target[key]) && isPlainObject(value) && !isRef(value) && !isReactive(value)) {\n mergeState(target[key], value)\n }\n else {\n target[key] = value\n }\n }\n}\n\n/** 返回尚未解包的属性,供 storeToRefs 保留 state/getter 的来源。 */\nexport function rawStore(store: object): Record<string, any> {\n return toRaw(store)\n}\n"],"mappings":";;;;;;;AAIA,MAAM,wBAAQ,IAAI,QAAqB;;AAGvC,SAAgB,UAA4B,QAAc;CACxD,IAAK,oBACH,OAAO;CAET,IAAI,CAAC,cAAc,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,GACjD,OAAO;CAET,IAAI,WAAW,MAAM,KAAK,kBAAkB,MAAM,GAChD,OAAO;CAET,MAAM,SAAS,WAAW,MAAM,IAAI,SAAS,SAAS,MAAM;CAC5D,MAAM,SAAS,MAAM,IAAI,MAAM;CAC/B,IAAI,QACF,OAAO;CAGT,MAAM,kBAAkB,UAAoB,WAAW,KAAK,IAAI,UAAU,KAAK,IAAI;CACnF,MAAM,OAAO,IAAI,MAAM,QAAQ;EAC7B,IAAI,QAAQ,KAAK,UAAU;GACzB,MAAM,QAAQ,QAAQ,IAAI,QAAQ,KAAK,QAAQ;GAC/C,IAAI,qBAA6B,oBAC/B,OAAO;GAET,IAAI,MAAM,KAAK,GACb,OAAO,MAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,YAAY,QAAQ,KAAK,GAAG,IACvE,QACA,eAAe,MAAM,KAAK;GAEhC,OAAO,eAAe,KAAK;EAC7B;EACA,IAAI,QAAQ,KAAK,OAAO,UAAU;GAChC,MAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK,QAAQ;GAClD,IAAI,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,MAAM,GAAG;IAC9D,SAAS,QAAQ;IACjB,OAAO;GACT;GACA,OAAO,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ;EACjD;CACF,CAAC;CACD,MAAM,IAAI,QAAQ,IAAI;CACtB,MAAM,IAAI,MAAM,IAAI;CACpB,OAAO;AACT;;AAGA,SAAgB,WAAW,QAA6B,OAA4B;CAClF,IAAI,kBAAkB,OAAO,iBAAiB,KAC5C,MAAM,SAAS,OAAO,QAAQ,OAAO,IAAI,KAAK,KAAK,CAAC;MAEjD,IAAI,kBAAkB,OAAO,iBAAiB,KACjD,MAAM,SAAQ,UAAS,OAAO,IAAI,KAAK,CAAC;CAE1C,KAAK,MAAM,OAAO,OAAO,KAAK,6CAAS,CAAC,CAAC,GAAG;EAC1C,IAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAC1D;EAEF,MAAM,QAAQ,MAAM;EACpB,IAAI,cAAc,OAAO,IAAI,KAAK,cAAc,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,KAAK,GAC1F,WAAW,OAAO,MAAM,KAAK;OAG7B,OAAO,OAAO;CAElB;AACF;;AAGA,SAAgB,SAAS,OAAoC;CAC3D,OAAO,MAAM,KAAK;AACpB"}
1
+ {"version":3,"file":"view.mjs","names":[],"sources":["../../../src/store/view.ts"],"sourcesContent":["import { isReactive, isRef, isShallowReactive, reactive, toRaw } from '../reactivity'\nimport { ReactiveFlags } from '../reactivity/reactive/shared'\nimport { isPlainObject } from './utils'\n\nconst views = new WeakMap<object, any>()\n\n/** 仅在 Store 边界解包 ref,所有读写仍转发到原始响应式来源。 */\nexport function storeView<T extends object>(source: T): T {\n if ((source as any)[ReactiveFlags.SKIP]) {\n return source\n }\n if (!isPlainObject(source) && !Array.isArray(source)) {\n return source\n }\n if (isReactive(source) && isShallowReactive(source)) {\n return source\n }\n const target = isReactive(source) ? source : reactive(source)\n const cached = views.get(target)\n if (cached) {\n return cached\n }\n // 属性视图只解包既有响应式来源,不把 shallowRef 的普通值转成深层代理。\n const storeViewValue = (value: any): any => isReactive(value) ? storeView(value) : value\n const view = new Proxy(target, {\n get(object, key, receiver) {\n const value = Reflect.get(object, key, receiver)\n if (key === ReactiveFlags.RAW || key === ReactiveFlags.SKIP) {\n return value\n }\n if (isRef(value)) {\n return Array.isArray(object) && typeof key === 'string' && /^\\d+$/.test(key)\n ? value\n : storeViewValue(value.value)\n }\n return storeViewValue(value)\n },\n set(object, key, value, receiver) {\n const previous = Reflect.get(object, key, receiver)\n if (isRef(previous) && !isRef(value) && !Array.isArray(object)) {\n previous.value = value\n return true\n }\n return Reflect.set(object, key, value, receiver)\n },\n })\n views.set(target, view)\n views.set(view, view)\n return view\n}\n\n/** 合并普通对象,数组替换;保留 ref 和已有响应式对象的写入语义。 */\nexport function mergeState(target: Record<string, any>, patch: Record<string, any>) {\n if (target instanceof Map && patch instanceof Map) {\n patch.forEach((value, key) => target.set(key, value))\n }\n else if (target instanceof Set && patch instanceof Set) {\n patch.forEach(value => target.add(value))\n }\n for (const key of Object.keys(patch ?? {})) {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n continue\n }\n const value = patch[key]\n if (isPlainObject(target[key]) && isPlainObject(value) && !isRef(value) && !isReactive(value)) {\n mergeState(target[key], value)\n }\n else {\n target[key] = value\n }\n }\n}\n\n/** 返回尚未解包的属性,供 storeToRefs 保留 state/getter 的来源。 */\nexport function rawStore(store: object): Record<string, any> {\n return toRaw(store)\n}\n"],"mappings":";;;;;;;AAIA,MAAM,wBAAQ,IAAI,QAAqB;;AAGvC,SAAgB,UAA4B,QAAc;CACxD,IAAK,oBACH,OAAO;CAET,IAAI,CAAC,cAAc,MAAM,KAAK,CAAC,MAAM,QAAQ,MAAM,GACjD,OAAO;CAET,IAAI,WAAW,MAAM,KAAK,kBAAkB,MAAM,GAChD,OAAO;CAET,MAAM,SAAS,WAAW,MAAM,IAAI,SAAS,SAAS,MAAM;CAC5D,MAAM,SAAS,MAAM,IAAI,MAAM;CAC/B,IAAI,QACF,OAAO;CAGT,MAAM,kBAAkB,UAAoB,WAAW,KAAK,IAAI,UAAU,KAAK,IAAI;CACnF,MAAM,OAAO,IAAI,MAAM,QAAQ;EAC7B,IAAI,QAAQ,KAAK,UAAU;GACzB,MAAM,QAAQ,QAAQ,IAAI,QAAQ,KAAK,QAAQ;GAC/C,IAAI,qBAA6B,oBAC/B,OAAO;GAET,IAAI,MAAM,KAAK,GACb,OAAO,MAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,YAAY,QAAQ,KAAK,GAAG,IACvE,QACA,eAAe,MAAM,KAAK;GAEhC,OAAO,eAAe,KAAK;EAC7B;EACA,IAAI,QAAQ,KAAK,OAAO,UAAU;GAChC,MAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK,QAAQ;GAClD,IAAI,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,QAAQ,MAAM,GAAG;IAC9D,SAAS,QAAQ;IACjB,OAAO;GACT;GACA,OAAO,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ;EACjD;CACF,CAAC;CACD,MAAM,IAAI,QAAQ,IAAI;CACtB,MAAM,IAAI,MAAM,IAAI;CACpB,OAAO;AACT;;AAGA,SAAgB,WAAW,QAA6B,OAA4B;CAClF,IAAI,kBAAkB,OAAO,iBAAiB,KAC5C,MAAM,SAAS,OAAO,QAAQ,OAAO,IAAI,KAAK,KAAK,CAAC;MAEjD,IAAI,kBAAkB,OAAO,iBAAiB,KACjD,MAAM,SAAQ,UAAS,OAAO,IAAI,KAAK,CAAC;CAE1C,KAAK,MAAM,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,GAAG;EAC1C,IAAI,QAAQ,eAAe,QAAQ,iBAAiB,QAAQ,aAC1D;EAEF,MAAM,QAAQ,MAAM;EACpB,IAAI,cAAc,OAAO,IAAI,KAAK,cAAc,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,KAAK,GAC1F,WAAW,OAAO,MAAM,KAAK;OAG7B,OAAO,OAAO;CAElB;AACF;;AAGA,SAAgB,SAAS,OAAoC;CAC3D,OAAO,MAAM,KAAK;AACpB"}
@@ -35,10 +35,11 @@ import "./runtime/vueCompat.mjs";
35
35
  import { version } from "./version.mjs";
36
36
  import { takePendingRuntimeAppRegistration } from "./runtime/app/pending.mjs";
37
37
  import { installInlineEvents } from "./runtime/features/inlineEvents.mjs";
38
+ import { installJsxIslands } from "./runtime/features/jsxIslands.mjs";
38
39
  import { installLayout } from "./runtime/features/layout.mjs";
39
40
  import { installPatchStrategy } from "./runtime/features/patchStrategy.mjs";
40
41
  import { installSetDataHighFrequencyWarning } from "./runtime/features/setDataHighFrequencyWarning.mjs";
41
42
  import { installTemplateRefs } from "./runtime/features/templateRefs.mjs";
42
43
  import { Fragment, createTextVNode, createVNode, isVNode, mergeProps, normalizeJsxIsland, resolveComponent, resolveDirective, transformOn, vModelCheckbox, vModelRadio, vModelSelect, vModelText, vShow, withDirectives } from "./runtime/jsxIsland.mjs";
43
44
  import { createUniAppHost } from "./runtime/uniAppHost.mjs";
44
- export { Fragment, type HighFrequencyWarningMonitorOptions, INTERNAL_DEFAULTS_SCOPE_KEY, type LayoutHostBinding, type RuntimeCapabilityName, type RuntimeCapabilityRegistry, type ScopedSlotMountState, type SetDataScheduler, type SetDataSchedulerOptions, type TemplateRefBinding, callHookList, callHookReturn, createApp, createIsolatedWevuComponentDefinition, createTextVNode, createUniAppHost, createVNode, createWevuComponent, createWevuComponentDefinition, createWevuScopedSlotComponent, defineAppSetup, defineComponent, getCurrentInstance, getCurrentPageStackSnapshot, getCurrentSetupContext, getNavigationBarMetrics, getWevuComponentLifecycleDefinition, hasInjectionContext, inject, injectGlobal, installInlineEvents, installLayout, installPatchStrategy, installScopedSlots, installSetDataHighFrequencyWarning, installTemplateRefs, isNoSetData, isVNode, markNoSetData, mergeModels, mergeProps, mountRuntimeInstance, normalizeJsxIsland, onActivated, onAddToFavorites, onAttached, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onDetached, onError, onErrorCaptured, onHide, onLaunch, onLoad, onMemoryWarning, onMounted, onMoved, onPageNotFound, onPageScroll, onPullDownRefresh, onReachBottom, onReady, onResize, onRouteDone, onSaveExitState, onServerPrefetch, onShareAppMessage, onShareTimeline, onShow, onTabItemTap, onThemeChange, onUnhandledRejection, onUnload, onUnmounted, onUpdated, provide, provideGlobal, registerApp, registerComponent, resetWevuDefaults, resolveComponent, resolveDirective, resolveLayoutBridge, resolveLayoutHost, resolveRuntimePageLayoutName, runSetupFunction, setCurrentInstance, setCurrentSetupContext, setGlobalProvidedValue, setPageLayout, setRuntimeSetDataVisibility, setWevuDefaults, syncRuntimePageLayoutState, syncRuntimePageLayoutStateFromRuntime, takePendingRuntimeAppRegistration, teardownRuntimeInstance, transformOn, use, useAsyncPullDownRefresh, useAttrs, useBindModel, useBoundingClientRect, useChangeModel, useCssModule, useCssVars, useDisposables, useElementIntersectionObserver, useIntersectionObserver, useLayoutBridge, useLayoutHosts, useModel, useNativeInstance, useNativePageRouter, useNativeRouter, useNavigationBarMetrics, usePageLayout, usePageScrollThrottle, usePageStack, useScrollOffset, useSelectorFields, useSelectorQuery, useSlots, useTemplateRef, useUpdatePerformanceListener, vModelCheckbox, vModelRadio, vModelSelect, vModelText, vShow, version, waitForLayoutHost, withDirectives };
45
+ export { Fragment, type HighFrequencyWarningMonitorOptions, INTERNAL_DEFAULTS_SCOPE_KEY, type LayoutHostBinding, type RuntimeCapabilityName, type RuntimeCapabilityRegistry, type ScopedSlotMountState, type SetDataScheduler, type SetDataSchedulerOptions, type TemplateRefBinding, callHookList, callHookReturn, createApp, createIsolatedWevuComponentDefinition, createTextVNode, createUniAppHost, createVNode, createWevuComponent, createWevuComponentDefinition, createWevuScopedSlotComponent, defineAppSetup, defineComponent, getCurrentInstance, getCurrentPageStackSnapshot, getCurrentSetupContext, getNavigationBarMetrics, getWevuComponentLifecycleDefinition, hasInjectionContext, inject, injectGlobal, installInlineEvents, installJsxIslands, installLayout, installPatchStrategy, installScopedSlots, installSetDataHighFrequencyWarning, installTemplateRefs, isNoSetData, isVNode, markNoSetData, mergeModels, mergeProps, mountRuntimeInstance, normalizeJsxIsland, onActivated, onAddToFavorites, onAttached, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onDetached, onError, onErrorCaptured, onHide, onLaunch, onLoad, onMemoryWarning, onMounted, onMoved, onPageNotFound, onPageScroll, onPullDownRefresh, onReachBottom, onReady, onResize, onRouteDone, onSaveExitState, onServerPrefetch, onShareAppMessage, onShareTimeline, onShow, onTabItemTap, onThemeChange, onUnhandledRejection, onUnload, onUnmounted, onUpdated, provide, provideGlobal, registerApp, registerComponent, resetWevuDefaults, resolveComponent, resolveDirective, resolveLayoutBridge, resolveLayoutHost, resolveRuntimePageLayoutName, runSetupFunction, setCurrentInstance, setCurrentSetupContext, setGlobalProvidedValue, setPageLayout, setRuntimeSetDataVisibility, setWevuDefaults, syncRuntimePageLayoutState, syncRuntimePageLayoutStateFromRuntime, takePendingRuntimeAppRegistration, teardownRuntimeInstance, transformOn, use, useAsyncPullDownRefresh, useAttrs, useBindModel, useBoundingClientRect, useChangeModel, useCssModule, useCssVars, useDisposables, useElementIntersectionObserver, useIntersectionObserver, useLayoutBridge, useLayoutHosts, useModel, useNativeInstance, useNativePageRouter, useNativeRouter, useNavigationBarMetrics, usePageLayout, usePageScrollThrottle, usePageStack, useScrollOffset, useSelectorFields, useSelectorQuery, useSlots, useTemplateRef, useUpdatePerformanceListener, vModelCheckbox, vModelRadio, vModelSelect, vModelText, vShow, version, waitForLayoutHost, withDirectives };