wevu 7.2.1 → 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 (466) 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/api/vitest/setup.d.mts +1 -0
  7. package/dist/dev/api/vitest.d.mts +1 -0
  8. package/dist/dev/api.d.mts +1 -0
  9. package/dist/dev/compiler.d.mts +1 -0
  10. package/dist/dev/fetch.d.mts +9 -0
  11. package/dist/dev/index.d.mts +72 -0
  12. package/dist/dev/internal-reactivity.d.mts +18 -0
  13. package/dist/dev/internal-runtime.d.mts +45 -0
  14. package/dist/dev/internal-runtime.mjs +3 -2
  15. package/dist/dev/internal-template.d.mts +2 -0
  16. package/dist/dev/jsxTypes.d.mts +9 -0
  17. package/dist/dev/macros/shared.d.mts +83 -0
  18. package/dist/dev/macros.d.mts +71 -0
  19. package/dist/dev/package.mjs +1 -1
  20. package/dist/dev/reactivity/asyncDerivation.d.mts +41 -0
  21. package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
  22. package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
  23. package/dist/dev/reactivity/computed.d.mts +25 -0
  24. package/dist/dev/reactivity/core.d.mts +35 -0
  25. package/dist/dev/reactivity/core.mjs +5 -8
  26. package/dist/dev/reactivity/core.mjs.map +1 -1
  27. package/dist/dev/reactivity/index.d.mts +16 -0
  28. package/dist/dev/reactivity/reactive/mutation.d.mts +21 -0
  29. package/dist/dev/reactivity/reactive/patch.d.mts +18 -0
  30. package/dist/dev/reactivity/reactive/patch.mjs +3 -3
  31. package/dist/dev/reactivity/reactive/patch.mjs.map +1 -1
  32. package/dist/dev/reactivity/reactive/patchState.mjs +4 -8
  33. package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -1
  34. package/dist/dev/reactivity/reactive/shallow.d.mts +22 -0
  35. package/dist/dev/reactivity/reactive/shared.d.mts +4 -0
  36. package/dist/dev/reactivity/reactive/shared.mjs +1 -2
  37. package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
  38. package/dist/dev/reactivity/reactive.d.mts +42 -0
  39. package/dist/dev/reactivity/reactive.mjs +5 -10
  40. package/dist/dev/reactivity/reactive.mjs.map +1 -1
  41. package/dist/dev/reactivity/readonly.d.mts +27 -0
  42. package/dist/dev/reactivity/ref.d.mts +27 -0
  43. package/dist/dev/reactivity/ref.mjs +2 -2
  44. package/dist/dev/reactivity/ref.mjs.map +1 -1
  45. package/dist/dev/reactivity/shallowRef.d.mts +19 -0
  46. package/dist/dev/reactivity/shallowRef.mjs +1 -1
  47. package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
  48. package/dist/dev/reactivity/toRefs.d.mts +43 -0
  49. package/dist/dev/reactivity/traverse.d.mts +8 -0
  50. package/dist/dev/reactivity/watch/helpers.mjs +1 -1
  51. package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
  52. package/dist/dev/reactivity/watch/types.d.mts +43 -0
  53. package/dist/dev/reactivity/watch.d.mts +22 -0
  54. package/dist/dev/reactivity/watch.mjs +6 -8
  55. package/dist/dev/reactivity/watch.mjs.map +1 -1
  56. package/dist/dev/router/auto-routes.d.mts +8 -0
  57. package/dist/dev/router/createRouter.d.mts +9 -0
  58. package/dist/dev/router/createRouter.mjs +17 -24
  59. package/dist/dev/router/createRouter.mjs.map +1 -1
  60. package/dist/dev/router/initialNavigation.mjs +18 -16
  61. package/dist/dev/router/initialNavigation.mjs.map +1 -1
  62. package/dist/dev/router/instance.mjs +1 -2
  63. package/dist/dev/router/instance.mjs.map +1 -1
  64. package/dist/dev/router/navigationCore.d.mts +7 -0
  65. package/dist/dev/router/navigationCore.mjs +2 -2
  66. package/dist/dev/router/navigationCore.mjs.map +1 -1
  67. package/dist/dev/router/navigationResult.mjs +7 -10
  68. package/dist/dev/router/navigationResult.mjs.map +1 -1
  69. package/dist/dev/router/navigationTarget.mjs +1 -3
  70. package/dist/dev/router/navigationTarget.mjs.map +1 -1
  71. package/dist/dev/router/resolve.d.mts +7 -0
  72. package/dist/dev/router/resolve.mjs +3 -4
  73. package/dist/dev/router/resolve.mjs.map +1 -1
  74. package/dist/dev/router/routeRegistry.mjs +1 -1
  75. package/dist/dev/router/routeRegistry.mjs.map +1 -1
  76. package/dist/dev/router/routeSync.d.mts +2 -0
  77. package/dist/dev/router/routeSync.mjs +1 -1
  78. package/dist/dev/router/routeSync.mjs.map +1 -1
  79. package/dist/dev/router/types.d.mts +267 -0
  80. package/dist/dev/router/useRoute.d.mts +20 -0
  81. package/dist/dev/router/useRoute.mjs +12 -19
  82. package/dist/dev/router/useRoute.mjs.map +1 -1
  83. package/dist/dev/router/useRouter.d.mts +9 -0
  84. package/dist/dev/router.d.mts +26 -0
  85. package/dist/dev/routerInternal/location.d.mts +2 -0
  86. package/dist/dev/routerInternal/location.mjs +2 -3
  87. package/dist/dev/routerInternal/location.mjs.map +1 -1
  88. package/dist/dev/routerInternal/matching.d.mts +2 -0
  89. package/dist/dev/routerInternal/params.d.mts +2 -0
  90. package/dist/dev/routerInternal/params.mjs +2 -3
  91. package/dist/dev/routerInternal/params.mjs.map +1 -1
  92. package/dist/dev/routerInternal/query.d.mts +7 -0
  93. package/dist/dev/routerInternal/records.d.mts +2 -0
  94. package/dist/dev/routerInternal/records.mjs +1 -1
  95. package/dist/dev/routerInternal/records.mjs.map +1 -1
  96. package/dist/dev/routerInternal/recordsWarnings.d.mts +2 -0
  97. package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
  98. package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
  99. package/dist/dev/routerInternal/shared.d.mts +9 -0
  100. package/dist/dev/routerInternal/snapshots.d.mts +2 -0
  101. package/dist/dev/routerInternal/types.d.mts +9 -0
  102. package/dist/dev/runtime/app/context.mjs +13 -26
  103. package/dist/dev/runtime/app/context.mjs.map +1 -1
  104. package/dist/dev/runtime/app/diagnostics.mjs +2 -4
  105. package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
  106. package/dist/dev/runtime/app/mount.mjs +27 -33
  107. package/dist/dev/runtime/app/mount.mjs.map +1 -1
  108. package/dist/dev/runtime/app/pending.d.mts +10 -0
  109. package/dist/dev/runtime/app/setData/commitTracker.d.mts +13 -0
  110. package/dist/dev/runtime/app/setData/commitTracker.mjs +5 -9
  111. package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
  112. package/dist/dev/runtime/app/setData/patchScheduler.mjs +2 -4
  113. package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -1
  114. package/dist/dev/runtime/app/setData/payload.mjs +2 -3
  115. package/dist/dev/runtime/app/setData/payload.mjs.map +1 -1
  116. package/dist/dev/runtime/app/setData/scheduler.d.mts +51 -0
  117. package/dist/dev/runtime/app/setData/scheduler.mjs +7 -9
  118. package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
  119. package/dist/dev/runtime/app/setData/snapshot.mjs +5 -6
  120. package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -1
  121. package/dist/dev/runtime/app/setDataOptions.mjs +26 -27
  122. package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
  123. package/dist/dev/runtime/app.d.mts +8 -0
  124. package/dist/dev/runtime/app.mjs +9 -9
  125. package/dist/dev/runtime/app.mjs.map +1 -1
  126. package/dist/dev/runtime/bindingManifest.mjs +6 -14
  127. package/dist/dev/runtime/bindingManifest.mjs.map +1 -1
  128. package/dist/dev/runtime/capabilities.d.mts +78 -0
  129. package/dist/dev/runtime/capabilities.mjs.map +1 -1
  130. package/dist/dev/runtime/css.d.mts +14 -0
  131. package/dist/dev/runtime/css.mjs +4 -8
  132. package/dist/dev/runtime/css.mjs.map +1 -1
  133. package/dist/dev/runtime/defaults.d.mts +12 -0
  134. package/dist/dev/runtime/defaults.mjs +4 -4
  135. package/dist/dev/runtime/defaults.mjs.map +1 -1
  136. package/dist/dev/runtime/define/initialComputed.mjs +5 -5
  137. package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
  138. package/dist/dev/runtime/define/options.mjs +10 -12
  139. package/dist/dev/runtime/define/options.mjs.map +1 -1
  140. package/dist/dev/runtime/define/props.mjs +4 -5
  141. package/dist/dev/runtime/define/props.mjs.map +1 -1
  142. package/dist/dev/runtime/define/scopedSlotOptions.mjs +43 -61
  143. package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
  144. package/dist/dev/runtime/define/setupResult.mjs +17 -28
  145. package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
  146. package/dist/dev/runtime/define.d.mts +118 -0
  147. package/dist/dev/runtime/define.mjs +9 -12
  148. package/dist/dev/runtime/define.mjs.map +1 -1
  149. package/dist/dev/runtime/diff.mjs +9 -11
  150. package/dist/dev/runtime/diff.mjs.map +1 -1
  151. package/dist/dev/runtime/disposables.d.mts +31 -0
  152. package/dist/dev/runtime/disposables.mjs +2 -2
  153. package/dist/dev/runtime/disposables.mjs.map +1 -1
  154. package/dist/dev/runtime/elementIntersectionObserver.d.mts +26 -0
  155. package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
  156. package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
  157. package/dist/dev/runtime/features/inlineEvents.d.mts +7 -0
  158. package/dist/dev/runtime/features/inlineEvents.mjs +2 -3
  159. package/dist/dev/runtime/features/inlineEvents.mjs.map +1 -1
  160. package/dist/dev/runtime/features/jsxIslands.d.mts +7 -0
  161. package/dist/dev/runtime/features/jsxIslands.mjs +20 -0
  162. package/dist/dev/runtime/features/jsxIslands.mjs.map +1 -0
  163. package/dist/dev/runtime/features/layout.d.mts +7 -0
  164. package/dist/dev/runtime/features/layout.mjs +2 -3
  165. package/dist/dev/runtime/features/layout.mjs.map +1 -1
  166. package/dist/dev/runtime/features/patchStrategy.d.mts +7 -0
  167. package/dist/dev/runtime/features/publicLayout.d.mts +24 -0
  168. package/dist/dev/runtime/features/publicLayout.mjs +2 -6
  169. package/dist/dev/runtime/features/publicLayout.mjs.map +1 -1
  170. package/dist/dev/runtime/features/scopedSlots.d.mts +23 -0
  171. package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
  172. package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
  173. package/dist/dev/runtime/features/setDataHighFrequencyWarning.d.mts +7 -0
  174. package/dist/dev/runtime/features/templateRefs.d.mts +7 -0
  175. package/dist/dev/runtime/features/templateRefs.mjs +1 -1
  176. package/dist/dev/runtime/features/templateRefs.mjs.map +1 -1
  177. package/dist/dev/runtime/hooks/base.d.mts +27 -0
  178. package/dist/dev/runtime/hooks/base.mjs +21 -32
  179. package/dist/dev/runtime/hooks/base.mjs.map +1 -1
  180. package/dist/dev/runtime/hooks/register.d.mts +30 -0
  181. package/dist/dev/runtime/hooks/vue.d.mts +52 -0
  182. package/dist/dev/runtime/hooks.d.mts +4 -0
  183. package/dist/dev/runtime/index.d.mts +46 -0
  184. package/dist/dev/runtime/inlineDataset.mjs +1 -2
  185. package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
  186. package/dist/dev/runtime/intersectionObserver.d.mts +14 -0
  187. package/dist/dev/runtime/intersectionObserver.mjs +6 -6
  188. package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
  189. package/dist/dev/runtime/jsxIsland.d.mts +37 -0
  190. package/dist/dev/runtime/jsxIsland.mjs +16 -33
  191. package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
  192. package/dist/dev/runtime/layoutBridge.d.mts +55 -0
  193. package/dist/dev/runtime/layoutBridge.mjs +32 -62
  194. package/dist/dev/runtime/layoutBridge.mjs.map +1 -1
  195. package/dist/dev/runtime/nativeBridge.mjs +1 -1
  196. package/dist/dev/runtime/nativeBridge.mjs.map +1 -1
  197. package/dist/dev/runtime/navigationLifecycle.mjs +24 -0
  198. package/dist/dev/runtime/navigationLifecycle.mjs.map +1 -0
  199. package/dist/dev/runtime/noSetData.d.mts +5 -0
  200. package/dist/dev/runtime/pageEnvironment.d.mts +50 -0
  201. package/dist/dev/runtime/pageEnvironment.mjs +15 -18
  202. package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
  203. package/dist/dev/runtime/pageLayout.d.mts +25 -0
  204. package/dist/dev/runtime/pageLayout.mjs +7 -11
  205. package/dist/dev/runtime/pageLayout.mjs.map +1 -1
  206. package/dist/dev/runtime/pageScroll.d.mts +29 -0
  207. package/dist/dev/runtime/pageScroll.mjs +2 -3
  208. package/dist/dev/runtime/pageScroll.mjs.map +1 -1
  209. package/dist/dev/runtime/platform/current.mjs +12 -0
  210. package/dist/dev/runtime/platform/current.mjs.map +1 -0
  211. package/dist/dev/runtime/platform/generic.mjs +36 -0
  212. package/dist/dev/runtime/platform/generic.mjs.map +1 -0
  213. package/dist/dev/runtime/platform/globals.mjs +29 -0
  214. package/dist/dev/runtime/platform/globals.mjs.map +1 -0
  215. package/dist/dev/runtime/platform.mjs +15 -60
  216. package/dist/dev/runtime/platform.mjs.map +1 -1
  217. package/dist/dev/runtime/provide.d.mts +60 -0
  218. package/dist/dev/runtime/provideContext.mjs +7 -9
  219. package/dist/dev/runtime/provideContext.mjs.map +1 -1
  220. package/dist/dev/runtime/provideStore.d.mts +7 -0
  221. package/dist/dev/runtime/publicRuntime.d.mts +22 -0
  222. package/dist/dev/runtime/publicRuntime.mjs +4 -0
  223. package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
  224. package/dist/dev/runtime/pullDownRefresh.d.mts +12 -0
  225. package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
  226. package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
  227. package/dist/dev/runtime/register/app.d.mts +14 -0
  228. package/dist/dev/runtime/register/app.mjs +18 -19
  229. package/dist/dev/runtime/register/app.mjs.map +1 -1
  230. package/dist/dev/runtime/register/component/alipay.mjs +9 -18
  231. package/dist/dev/runtime/register/component/alipay.mjs.map +1 -1
  232. package/dist/dev/runtime/register/component/alipayRegistration.mjs +60 -0
  233. package/dist/dev/runtime/register/component/alipayRegistration.mjs.map +1 -0
  234. package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -9
  235. package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
  236. package/dist/dev/runtime/register/component/lifecycle.mjs +7 -12
  237. package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -1
  238. package/dist/dev/runtime/register/component/methods.mjs +13 -18
  239. package/dist/dev/runtime/register/component/methods.mjs.map +1 -1
  240. package/dist/dev/runtime/register/component/options.mjs +3 -4
  241. package/dist/dev/runtime/register/component/options.mjs.map +1 -1
  242. package/dist/dev/runtime/register/component/props.mjs +25 -31
  243. package/dist/dev/runtime/register/component/props.mjs.map +1 -1
  244. package/dist/dev/runtime/register/component/registerDefinition.mjs +18 -40
  245. package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
  246. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +18 -60
  247. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
  248. package/dist/dev/runtime/register/component.d.mts +17 -0
  249. package/dist/dev/runtime/register/component.mjs +3 -5
  250. package/dist/dev/runtime/register/component.mjs.map +1 -1
  251. package/dist/dev/runtime/register/inline.d.mts +15 -0
  252. package/dist/dev/runtime/register/inline.mjs +8 -10
  253. package/dist/dev/runtime/register/inline.mjs.map +1 -1
  254. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +7 -8
  255. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
  256. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  257. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
  258. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +25 -34
  259. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -1
  260. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +6 -13
  261. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
  262. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs +2 -2
  263. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs.map +1 -1
  264. package/dist/dev/runtime/register/runtimeInstance/utils.mjs +9 -9
  265. package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
  266. package/dist/dev/runtime/register/runtimeInstance.d.mts +26 -0
  267. package/dist/dev/runtime/register/runtimeInstance.mjs +74 -100
  268. package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
  269. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +12 -15
  270. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -1
  271. package/dist/dev/runtime/register/setup.d.mts +11 -0
  272. package/dist/dev/runtime/register/setup.mjs +2 -3
  273. package/dist/dev/runtime/register/setup.mjs.map +1 -1
  274. package/dist/dev/runtime/register/snapshot.mjs +1 -4
  275. package/dist/dev/runtime/register/snapshot.mjs.map +1 -1
  276. package/dist/dev/runtime/register/watch.d.mts +12 -0
  277. package/dist/dev/runtime/register/watch.mjs +3 -5
  278. package/dist/dev/runtime/register/watch.mjs.map +1 -1
  279. package/dist/dev/runtime/register.d.mts +5 -0
  280. package/dist/dev/runtime/scopedSlots.mjs +14 -21
  281. package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
  282. package/dist/dev/runtime/selectorQuery.d.mts +54 -0
  283. package/dist/dev/runtime/selectorQuery.mjs +5 -9
  284. package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
  285. package/dist/dev/runtime/template.d.mts +6 -0
  286. package/dist/dev/runtime/template.mjs +1 -1
  287. package/dist/dev/runtime/template.mjs.map +1 -1
  288. package/dist/dev/runtime/templateRefTypes.d.mts +12 -0
  289. package/dist/dev/runtime/templateRefs/helpers.mjs +14 -24
  290. package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -1
  291. package/dist/dev/runtime/templateRefs.mjs +8 -15
  292. package/dist/dev/runtime/templateRefs.mjs.map +1 -1
  293. package/dist/dev/runtime/types/core.d.mts +35 -0
  294. package/dist/dev/runtime/types/miniprogram.d.mts +84 -0
  295. package/dist/dev/runtime/types/miniprogramHost.d.mts +45 -0
  296. package/dist/dev/runtime/types/miniprogramHostSources.d.mts +112 -0
  297. package/dist/dev/runtime/types/options.d.mts +138 -0
  298. package/dist/dev/runtime/types/props/propTypes.d.mts +79 -0
  299. package/dist/dev/runtime/types/props/router.d.mts +51 -0
  300. package/dist/dev/runtime/types/props/setup.d.mts +96 -0
  301. package/dist/dev/runtime/types/props.d.mts +4 -0
  302. package/dist/dev/runtime/types/runtime.d.mts +59 -0
  303. package/dist/dev/runtime/types/setData.d.mts +237 -0
  304. package/dist/dev/runtime/types.d.mts +29 -0
  305. package/dist/dev/runtime/uniAppHost.d.mts +8 -0
  306. package/dist/dev/runtime/uniAppHost.mjs +6 -14
  307. package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
  308. package/dist/dev/runtime/updatePerformance.d.mts +13 -0
  309. package/dist/dev/runtime/updatePerformance.mjs +1 -1
  310. package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
  311. package/dist/dev/runtime/use.d.mts +13 -0
  312. package/dist/dev/runtime/use.mjs +1 -1
  313. package/dist/dev/runtime/use.mjs.map +1 -1
  314. package/dist/dev/runtime/vueCompat/context.d.mts +8 -0
  315. package/dist/dev/runtime/vueCompat/context.mjs +3 -5
  316. package/dist/dev/runtime/vueCompat/context.mjs.map +1 -1
  317. package/dist/dev/runtime/vueCompat/model.d.mts +30 -0
  318. package/dist/dev/runtime/vueCompat/model.mjs +9 -13
  319. package/dist/dev/runtime/vueCompat/model.mjs.map +1 -1
  320. package/dist/dev/runtime/vueCompat/router.d.mts +29 -0
  321. package/dist/dev/runtime/vueCompat/router.mjs +4 -4
  322. package/dist/dev/runtime/vueCompat/router.mjs.map +1 -1
  323. package/dist/dev/runtime/vueCompat/templateRef.d.mts +9 -0
  324. package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
  325. package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
  326. package/dist/dev/runtime/vueCompat.d.mts +5 -0
  327. package/dist/dev/scheduler.d.mts +4 -0
  328. package/dist/dev/scheduler.mjs +3 -4
  329. package/dist/dev/scheduler.mjs.map +1 -1
  330. package/dist/dev/store/base.mjs +1 -2
  331. package/dist/dev/store/base.mjs.map +1 -1
  332. package/dist/dev/store/define/create.mjs +11 -22
  333. package/dist/dev/store/define/create.mjs.map +1 -1
  334. package/dist/dev/store/define.d.mts +8 -0
  335. package/dist/dev/store/define.mjs +1 -1
  336. package/dist/dev/store/define.mjs.map +1 -1
  337. package/dist/dev/store/manager.d.mts +16 -0
  338. package/dist/dev/store/storeToRefs.d.mts +11 -0
  339. package/dist/dev/store/types.d.mts +106 -0
  340. package/dist/dev/store/view.mjs +1 -1
  341. package/dist/dev/store/view.mjs.map +1 -1
  342. package/dist/dev/store.d.mts +5 -0
  343. package/dist/dev/version.d.mts +4 -0
  344. package/dist/dev/vue-augment.d.mts +8 -0
  345. package/dist/dev/vue-demi.d.mts +87 -0
  346. package/dist/dev/vue-types.d.mts +19 -0
  347. package/dist/dev/web-apis.d.mts +3 -0
  348. package/dist/internal-runtime.d.mts +2 -1
  349. package/dist/internal-runtime.mjs +1 -1
  350. package/dist/package.mjs +1 -1
  351. package/dist/reactivity/asyncDerivation.mjs +1 -1
  352. package/dist/reactivity/core.mjs +1 -1
  353. package/dist/reactivity/reactive/patch.mjs +1 -1
  354. package/dist/reactivity/reactive/patchState.mjs +1 -1
  355. package/dist/reactivity/reactive/shared.mjs +1 -1
  356. package/dist/reactivity/reactive.mjs +1 -1
  357. package/dist/reactivity/ref.mjs +1 -1
  358. package/dist/reactivity/shallowRef.mjs +1 -1
  359. package/dist/reactivity/watch/helpers.mjs +1 -1
  360. package/dist/reactivity/watch.mjs +1 -1
  361. package/dist/router/createRouter.mjs +1 -1
  362. package/dist/router/initialNavigation.mjs +1 -1
  363. package/dist/router/instance.mjs +1 -1
  364. package/dist/router/navigationCore.mjs +1 -1
  365. package/dist/router/navigationResult.mjs +1 -1
  366. package/dist/router/navigationTarget.mjs +1 -1
  367. package/dist/router/resolve.mjs +1 -1
  368. package/dist/router/routeRegistry.mjs +1 -1
  369. package/dist/router/routeSync.mjs +1 -1
  370. package/dist/router/useRoute.mjs +1 -1
  371. package/dist/routerInternal/location.mjs +1 -1
  372. package/dist/routerInternal/params.mjs +1 -1
  373. package/dist/routerInternal/records.mjs +1 -1
  374. package/dist/routerInternal/recordsWarnings.mjs +1 -1
  375. package/dist/runtime/app/context.mjs +1 -1
  376. package/dist/runtime/app/diagnostics.mjs +1 -1
  377. package/dist/runtime/app/mount.mjs +1 -1
  378. package/dist/runtime/app/setData/commitTracker.mjs +1 -1
  379. package/dist/runtime/app/setData/patchScheduler.mjs +1 -1
  380. package/dist/runtime/app/setData/payload.mjs +1 -1
  381. package/dist/runtime/app/setData/scheduler.mjs +1 -1
  382. package/dist/runtime/app/setData/snapshot.mjs +1 -1
  383. package/dist/runtime/app/setDataOptions.mjs +1 -1
  384. package/dist/runtime/app.mjs +1 -1
  385. package/dist/runtime/bindingManifest.mjs +1 -1
  386. package/dist/runtime/capabilities.d.mts +4 -1
  387. package/dist/runtime/css.mjs +1 -1
  388. package/dist/runtime/defaults.mjs +1 -1
  389. package/dist/runtime/define/initialComputed.mjs +1 -1
  390. package/dist/runtime/define/options.mjs +1 -1
  391. package/dist/runtime/define/props.mjs +1 -1
  392. package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
  393. package/dist/runtime/define/setupResult.mjs +1 -1
  394. package/dist/runtime/define.mjs +1 -1
  395. package/dist/runtime/diff.mjs +1 -1
  396. package/dist/runtime/disposables.mjs +1 -1
  397. package/dist/runtime/elementIntersectionObserver.mjs +1 -1
  398. package/dist/runtime/features/inlineEvents.mjs +1 -1
  399. package/dist/runtime/features/jsxIslands.d.mts +6 -0
  400. package/dist/runtime/features/jsxIslands.mjs +1 -0
  401. package/dist/runtime/features/layout.mjs +1 -1
  402. package/dist/runtime/features/publicLayout.mjs +1 -1
  403. package/dist/runtime/features/scopedSlots.mjs +1 -1
  404. package/dist/runtime/features/templateRefs.mjs +1 -1
  405. package/dist/runtime/hooks/base.mjs +1 -1
  406. package/dist/runtime/inlineDataset.mjs +1 -1
  407. package/dist/runtime/intersectionObserver.mjs +1 -1
  408. package/dist/runtime/jsxIsland.mjs +1 -1
  409. package/dist/runtime/layoutBridge.mjs +1 -1
  410. package/dist/runtime/nativeBridge.mjs +1 -1
  411. package/dist/runtime/navigationLifecycle.mjs +1 -0
  412. package/dist/runtime/pageEnvironment.mjs +1 -1
  413. package/dist/runtime/pageLayout.mjs +1 -1
  414. package/dist/runtime/pageScroll.mjs +1 -1
  415. package/dist/runtime/platform/current.mjs +1 -0
  416. package/dist/runtime/platform/generic.mjs +1 -0
  417. package/dist/runtime/platform/globals.mjs +1 -0
  418. package/dist/runtime/platform.mjs +1 -1
  419. package/dist/runtime/provideContext.mjs +1 -1
  420. package/dist/runtime/publicRuntime.mjs +1 -1
  421. package/dist/runtime/pullDownRefresh.mjs +1 -1
  422. package/dist/runtime/register/app.mjs +1 -1
  423. package/dist/runtime/register/component/alipay.mjs +1 -1
  424. package/dist/runtime/register/component/alipayRegistration.mjs +1 -0
  425. package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
  426. package/dist/runtime/register/component/lifecycle.mjs +1 -1
  427. package/dist/runtime/register/component/methods.mjs +1 -1
  428. package/dist/runtime/register/component/options.mjs +1 -1
  429. package/dist/runtime/register/component/props.mjs +1 -1
  430. package/dist/runtime/register/component/registerDefinition.mjs +1 -1
  431. package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
  432. package/dist/runtime/register/component.mjs +1 -1
  433. package/dist/runtime/register/inline.mjs +1 -1
  434. package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
  435. package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  436. package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -1
  437. package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
  438. package/dist/runtime/register/runtimeInstance/setupSnapshot.mjs +1 -1
  439. package/dist/runtime/register/runtimeInstance/utils.mjs +1 -1
  440. package/dist/runtime/register/runtimeInstance.mjs +1 -1
  441. package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -1
  442. package/dist/runtime/register/setup.mjs +1 -1
  443. package/dist/runtime/register/snapshot.mjs +1 -1
  444. package/dist/runtime/register/watch.mjs +1 -1
  445. package/dist/runtime/scopedSlots.mjs +1 -1
  446. package/dist/runtime/selectorQuery.mjs +1 -1
  447. package/dist/runtime/template.mjs +1 -1
  448. package/dist/runtime/templateRefs/helpers.mjs +1 -1
  449. package/dist/runtime/templateRefs.mjs +1 -1
  450. package/dist/runtime/uniAppHost.mjs +1 -1
  451. package/dist/runtime/updatePerformance.mjs +1 -1
  452. package/dist/runtime/use.mjs +1 -1
  453. package/dist/runtime/vueCompat/context.mjs +1 -1
  454. package/dist/runtime/vueCompat/model.mjs +1 -1
  455. package/dist/runtime/vueCompat/router.mjs +1 -1
  456. package/dist/runtime/vueCompat/templateRef.mjs +1 -1
  457. package/dist/scheduler.mjs +1 -1
  458. package/dist/store/base.mjs +1 -1
  459. package/dist/store/define/create.mjs +1 -1
  460. package/dist/store/define.mjs +1 -1
  461. package/dist/store/view.mjs +1 -1
  462. package/package.json +7 -7
  463. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +0 -0
  464. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +0 -0
  465. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +0 -0
  466. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"reactive.mjs","names":[],"sources":["../../../src/reactivity/reactive.ts"],"sourcesContent":["import type { MutationKind, MutationOp } from './reactive/mutation'\nimport { batch, track, trigger } from './core'\nimport { mutationRecorders } from './reactive/mutation'\nimport {\n adoptReactiveRoot,\n bumpAncestorVersions,\n bumpRawVersion,\n getRawVersion,\n rawMultiParentSet,\n rawParentsMap,\n rawPathMap,\n rawRootMap,\n rawVersionMap,\n recordParentLink,\n removeParentLink,\n resolvePathToTarget,\n} from './reactive/patchState'\nimport { getTargetType, hasOwn, isArrayIndexKey, isObject, ReactiveFlags, TargetType, toRaw, VERSION_KEY } from './reactive/shared'\nimport { rawMap, reactiveMap } from './reactive/state'\n\nexport { addMutationRecorder, removeMutationRecorder } from './reactive/mutation'\nexport type { MutationKind, MutationOp, MutationRecord } from './reactive/mutation'\nexport type { PrelinkReactiveTreeOptions } from './reactive/patch'\nexport { clearPatchIndices, prelinkReactiveTree, touchReactive } from './reactive/patch'\nexport { isShallowReactive, shallowReactive } from './reactive/shallow'\nexport { isObject, ReactiveFlags, toRaw } from './reactive/shared'\n\n/**\n * 读取响应式版本号(框架内部调试能力)。\n * @internal\n */\nexport function getReactiveVersion(target: object) {\n const raw = toRaw(target as any) as object\n return getRawVersion(raw)\n}\n\nfunction emitMutation(target: object, key: PropertyKey, op: MutationOp) {\n if (!mutationRecorders.size) {\n return\n }\n if (typeof key !== 'string') {\n return\n }\n if (key.startsWith('__r_')) {\n return\n }\n const root = rawRootMap.get(target) ?? target\n const isArray = Array.isArray(target)\n const kind: MutationKind = isArray && (key === 'length' || isArrayIndexKey(key)) ? 'array' : 'property'\n\n const baseSegments = resolvePathToTarget(root, target)\n if (!baseSegments) {\n // 路径不唯一/无法解析:尝试从父引用收集可能的顶层 key,供 patch 模式做“局部回退”。\n const fallback = new Set<string>()\n const parents = rawParentsMap.get(target)\n if (parents) {\n for (const [parent, keys] of parents) {\n const parentPath = rawPathMap.get(parent)\n const topFromParentPath = parentPath ? parentPath.split('.', 1)[0] : undefined\n const topFromResolve = !topFromParentPath\n ? (resolvePathToTarget(root, parent)?.[0] as string | undefined)\n : undefined\n for (const k of keys) {\n if (typeof k !== 'string') {\n continue\n }\n fallback.add(topFromParentPath ?? topFromResolve ?? k)\n }\n }\n }\n else {\n // 若目标就是 root 的直接子属性(未记录 parent link),仍可用 key 作为顶层回退\n fallback.add(key)\n }\n for (const recorder of mutationRecorders) {\n recorder({ root, kind, op, path: undefined, fallbackTopKeys: fallback.size ? [...fallback] : undefined })\n }\n return\n }\n\n // 若目标位于数组内部(例如 arr[0].x),直接回退到数组本身的路径,保持“数组整体替换”的策略。\n const arrayIndexPos = baseSegments.findIndex(seg => isArrayIndexKey(seg))\n if (arrayIndexPos !== -1) {\n const arrayPath = baseSegments.slice(0, arrayIndexPos).join('.')\n const path = arrayPath || undefined\n for (const recorder of mutationRecorders) {\n recorder({ root, kind: 'array', op, path })\n }\n return\n }\n\n const basePath = baseSegments.length ? baseSegments.join('.') : ''\n const path = kind === 'array' ? (basePath || undefined) : (basePath ? `${basePath}.${key}` : (key as string))\n\n for (const recorder of mutationRecorders) {\n recorder({\n root,\n kind,\n op,\n path,\n })\n }\n}\n\nconst mutableHandlers: ProxyHandler<any> = {\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_REACTIVE) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n track(target, key)\n if (isObject(res)) {\n // 检查返回值是否被 markRaw 标记为跳过响应式\n if ((res as any)[ReactiveFlags.SKIP]) {\n return res\n }\n // 确保子对象的根引用与当前目标一致,便于版本号级联\n const childRaw = ((res as any)?.[ReactiveFlags.RAW] ?? res) as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n // eslint-disable-next-line ts/no-use-before-define -- 避免递归调用的顺序警告\n return reactive(res)\n }\n return res\n },\n set(target, key, value, receiver) {\n const hadKey = hasOwn(target, key)\n const isArr = Array.isArray(target)\n const oldLength = isArr ? target.length : 0\n const oldValue = Reflect.get(target, key, receiver)\n const oldRawValue = isObject(oldValue) ? toRaw(oldValue) : oldValue\n const rawValue = isObject(value) ? toRaw(value) : value\n if (Object.is(oldRawValue, rawValue)) {\n return true\n }\n const result = Reflect.set(target, key, value, receiver)\n if (result) {\n const oldRaw = isObject(oldRawValue) ? oldRawValue as object : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n if (isObject(rawValue) && !(rawValue as any)[ReactiveFlags.SKIP]) {\n const childRaw = rawValue as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n }\n batch(() => {\n trigger(target, key)\n if (isArr && typeof key === 'string' && isArrayIndexKey(key) && Number(key) >= oldLength) {\n trigger(target, 'length')\n }\n // 任意写操作都提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n if (!hadKey) {\n trigger(target, Symbol.iterator)\n }\n })\n emitMutation(target, key, 'set')\n }\n return result\n },\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key)\n const oldValue = hadKey ? (target as any)[key] : undefined\n const result = Reflect.deleteProperty(target, key)\n if (hadKey && result) {\n const oldRaw = isObject(oldValue) ? (((oldValue as any)?.[ReactiveFlags.RAW] ?? oldValue) as object) : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n batch(() => {\n trigger(target, key)\n // 删除同样提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n trigger(target, Symbol.iterator)\n })\n emitMutation(target, key, 'delete')\n }\n return result\n },\n ownKeys(target) {\n track(target, Symbol.iterator)\n // 遍历时也订阅通用版本号,确保新增/删除键可触发\n track(target, VERSION_KEY)\n return Reflect.ownKeys(target)\n },\n}\n\nexport function reactive<T extends object>(target: T): T {\n if (!isObject(target)) {\n return target\n }\n if ((target as any)[ReactiveFlags.IS_REACTIVE]) {\n return target\n }\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n if (getTargetType(target) === TargetType.INVALID) {\n return target\n }\n const proxy = new Proxy(target, mutableHandlers)\n reactiveMap.set(target, proxy)\n rawMap.set(proxy, target)\n if (!rawVersionMap.has(target)) {\n rawVersionMap.set(target, 0)\n }\n // 新的原始对象在被观察时初始化根节点映射\n if (!rawRootMap.has(target)) {\n rawRootMap.set(target, target)\n }\n return proxy\n}\n\nexport function isReactive(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_REACTIVE])\n}\n\nexport function convertToReactive<T>(value: T): T {\n return isObject(value) ? reactive(value as any) : value\n}\n\n// ============================================================================\n// 标记对象跳过响应式转换(markRaw)\n// ============================================================================\n\n/**\n * 标记对象为“原始”状态,后续不会被转换为响应式,返回原对象本身。\n *\n * @param value 需要标记的对象\n * @returns 带有跳过标记的原对象\n *\n * @example\n * ```ts\n * const foo = markRaw({\n * nested: {}\n * })\n *\n * const state = reactive({\n * foo\n * })\n *\n * state.foo // 不是响应式对象\n * ```\n */\nexport function markRaw<T extends object>(value: T): T {\n if (!isObject(value)) {\n return value\n }\n Object.defineProperty(value, ReactiveFlags.SKIP, {\n value: true,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return value\n}\n\n/**\n * 判断某个值是否被标记为原始(即不应转换为响应式)。\n *\n * @param value 待检测的值\n * @returns 若含有跳过标记则返回 true\n */\nexport function isRaw(value: unknown): boolean {\n return isObject(value) && ReactiveFlags.SKIP in (value as object)\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"reactive.mjs","names":[],"sources":["../../../src/reactivity/reactive.ts"],"sourcesContent":["import type { MutationKind, MutationOp } from './reactive/mutation'\nimport { batch, track, trigger } from './core'\nimport { mutationRecorders } from './reactive/mutation'\nimport {\n adoptReactiveRoot,\n bumpAncestorVersions,\n bumpRawVersion,\n getRawVersion,\n rawMultiParentSet,\n rawParentsMap,\n rawPathMap,\n rawRootMap,\n rawVersionMap,\n recordParentLink,\n removeParentLink,\n resolvePathToTarget,\n} from './reactive/patchState'\nimport { getTargetType, hasOwn, isArrayIndexKey, isObject, ReactiveFlags, TargetType, toRaw, VERSION_KEY } from './reactive/shared'\nimport { rawMap, reactiveMap } from './reactive/state'\n\nexport { addMutationRecorder, removeMutationRecorder } from './reactive/mutation'\nexport type { MutationKind, MutationOp, MutationRecord } from './reactive/mutation'\nexport type { PrelinkReactiveTreeOptions } from './reactive/patch'\nexport { clearPatchIndices, prelinkReactiveTree, touchReactive } from './reactive/patch'\nexport { isShallowReactive, shallowReactive } from './reactive/shallow'\nexport { isObject, ReactiveFlags, toRaw } from './reactive/shared'\n\n/**\n * 读取响应式版本号(框架内部调试能力)。\n * @internal\n */\nexport function getReactiveVersion(target: object) {\n const raw = toRaw(target as any) as object\n return getRawVersion(raw)\n}\n\nfunction emitMutation(target: object, key: PropertyKey, op: MutationOp) {\n if (!mutationRecorders.size) {\n return\n }\n if (typeof key !== 'string') {\n return\n }\n if (key.startsWith('__r_')) {\n return\n }\n const root = rawRootMap.get(target) ?? target\n const isArray = Array.isArray(target)\n const kind: MutationKind = isArray && (key === 'length' || isArrayIndexKey(key)) ? 'array' : 'property'\n\n const baseSegments = resolvePathToTarget(root, target)\n if (!baseSegments) {\n // 路径不唯一/无法解析:尝试从父引用收集可能的顶层 key,供 patch 模式做“局部回退”。\n const fallback = new Set<string>()\n const parents = rawParentsMap.get(target)\n if (parents) {\n for (const [parent, keys] of parents) {\n const parentPath = rawPathMap.get(parent)\n const topFromParentPath = parentPath ? parentPath.split('.', 1)[0] : undefined\n const topFromResolve = !topFromParentPath\n ? (resolvePathToTarget(root, parent)?.[0] as string | undefined)\n : undefined\n for (const k of keys) {\n if (typeof k !== 'string') {\n continue\n }\n fallback.add(topFromParentPath ?? topFromResolve ?? k)\n }\n }\n }\n else {\n // 若目标就是 root 的直接子属性(未记录 parent link),仍可用 key 作为顶层回退\n fallback.add(key)\n }\n for (const recorder of mutationRecorders) {\n recorder({ root, kind, op, path: undefined, fallbackTopKeys: fallback.size ? [...fallback] : undefined })\n }\n return\n }\n\n // 若目标位于数组内部(例如 arr[0].x),直接回退到数组本身的路径,保持“数组整体替换”的策略。\n const arrayIndexPos = baseSegments.findIndex(seg => isArrayIndexKey(seg))\n if (arrayIndexPos !== -1) {\n const arrayPath = baseSegments.slice(0, arrayIndexPos).join('.')\n const path = arrayPath || undefined\n for (const recorder of mutationRecorders) {\n recorder({ root, kind: 'array', op, path })\n }\n return\n }\n\n const basePath = baseSegments.length ? baseSegments.join('.') : ''\n const path = kind === 'array' ? (basePath || undefined) : (basePath ? `${basePath}.${key}` : (key as string))\n\n for (const recorder of mutationRecorders) {\n recorder({\n root,\n kind,\n op,\n path,\n })\n }\n}\n\nconst mutableHandlers: ProxyHandler<any> = {\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_REACTIVE) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n track(target, key)\n if (isObject(res)) {\n // 检查返回值是否被 markRaw 标记为跳过响应式\n if ((res as any)[ReactiveFlags.SKIP]) {\n return res\n }\n // 确保子对象的根引用与当前目标一致,便于版本号级联\n const childRaw = ((res as any)?.[ReactiveFlags.RAW] ?? res) as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n // eslint-disable-next-line ts/no-use-before-define -- 避免递归调用的顺序警告\n return reactive(res)\n }\n return res\n },\n set(target, key, value, receiver) {\n const hadKey = hasOwn(target, key)\n const isArr = Array.isArray(target)\n const oldLength = isArr ? target.length : 0\n const oldValue = Reflect.get(target, key, receiver)\n const oldRawValue = isObject(oldValue) ? toRaw(oldValue) : oldValue\n const rawValue = isObject(value) ? toRaw(value) : value\n if (Object.is(oldRawValue, rawValue)) {\n return true\n }\n const result = Reflect.set(target, key, value, receiver)\n if (result) {\n const oldRaw = isObject(oldRawValue) ? oldRawValue as object : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n if (isObject(rawValue) && !(rawValue as any)[ReactiveFlags.SKIP]) {\n const childRaw = rawValue as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n }\n batch(() => {\n trigger(target, key)\n if (isArr && typeof key === 'string' && isArrayIndexKey(key) && Number(key) >= oldLength) {\n trigger(target, 'length')\n }\n // 任意写操作都提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n if (!hadKey) {\n trigger(target, Symbol.iterator)\n }\n })\n emitMutation(target, key, 'set')\n }\n return result\n },\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key)\n const oldValue = hadKey ? (target as any)[key] : undefined\n const result = Reflect.deleteProperty(target, key)\n if (hadKey && result) {\n const oldRaw = isObject(oldValue) ? (((oldValue as any)?.[ReactiveFlags.RAW] ?? oldValue) as object) : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n batch(() => {\n trigger(target, key)\n // 删除同样提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n trigger(target, Symbol.iterator)\n })\n emitMutation(target, key, 'delete')\n }\n return result\n },\n ownKeys(target) {\n track(target, Symbol.iterator)\n // 遍历时也订阅通用版本号,确保新增/删除键可触发\n track(target, VERSION_KEY)\n return Reflect.ownKeys(target)\n },\n}\n\nexport function reactive<T extends object>(target: T): T {\n if (!isObject(target)) {\n return target\n }\n if ((target as any)[ReactiveFlags.IS_REACTIVE]) {\n return target\n }\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n if (getTargetType(target) === TargetType.INVALID) {\n return target\n }\n const proxy = new Proxy(target, mutableHandlers)\n reactiveMap.set(target, proxy)\n rawMap.set(proxy, target)\n if (!rawVersionMap.has(target)) {\n rawVersionMap.set(target, 0)\n }\n // 新的原始对象在被观察时初始化根节点映射\n if (!rawRootMap.has(target)) {\n rawRootMap.set(target, target)\n }\n return proxy\n}\n\nexport function isReactive(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_REACTIVE])\n}\n\nexport function convertToReactive<T>(value: T): T {\n return isObject(value) ? reactive(value as any) : value\n}\n\n// ============================================================================\n// 标记对象跳过响应式转换(markRaw)\n// ============================================================================\n\n/**\n * 标记对象为“原始”状态,后续不会被转换为响应式,返回原对象本身。\n *\n * @param value 需要标记的对象\n * @returns 带有跳过标记的原对象\n *\n * @example\n * ```ts\n * const foo = markRaw({\n * nested: {}\n * })\n *\n * const state = reactive({\n * foo\n * })\n *\n * state.foo // 不是响应式对象\n * ```\n */\nexport function markRaw<T extends object>(value: T): T {\n if (!isObject(value)) {\n return value\n }\n Object.defineProperty(value, ReactiveFlags.SKIP, {\n value: true,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return value\n}\n\n/**\n * 判断某个值是否被标记为原始(即不应转换为响应式)。\n *\n * @param value 待检测的值\n * @returns 若含有跳过标记则返回 true\n */\nexport function isRaw(value: unknown): boolean {\n return isObject(value) && ReactiveFlags.SKIP in (value as object)\n}\n"],"mappings":";;;;;;;;;;;;;AA+BA,SAAgB,mBAAmB,QAAgB;CACjD,MAAM,MAAM,MAAM,MAAa;CAC/B,OAAO,cAAc,GAAG;AAC1B;AAEA,SAAS,aAAa,QAAgB,KAAkB,IAAgB;CACtE,IAAI,CAAC,kBAAkB,MACrB;CAEF,IAAI,OAAO,QAAQ,UACjB;CAEF,IAAI,IAAI,WAAW,MAAM,GACvB;CAEF,MAAM,OAAO,WAAW,IAAI,MAAM,KAAK;CAEvC,MAAM,OADU,MAAM,QAAQ,MACG,MAAM,QAAQ,YAAY,gBAAgB,GAAG,KAAK,UAAU;CAE7F,MAAM,eAAe,oBAAoB,MAAM,MAAM;CACrD,IAAI,CAAC,cAAc;EAEjB,MAAM,2BAAW,IAAI,IAAY;EACjC,MAAM,UAAU,cAAc,IAAI,MAAM;EACxC,IAAI,SACF,KAAK,MAAM,CAAC,QAAQ,SAAS,SAAS;GACpC,MAAM,aAAa,WAAW,IAAI,MAAM;GACxC,MAAM,oBAAoB,aAAa,WAAW,MAAM,KAAK,CAAC,CAAC,CAAC,KAAK;GACrE,MAAM,iBAAiB,CAAC,oBACnB,oBAAoB,MAAM,MAAM,CAAC,GAAG,KACrC;GACJ,KAAK,MAAM,KAAK,MAAM;IACpB,IAAI,OAAO,MAAM,UACf;IAEF,SAAS,IAAI,qBAAqB,kBAAkB,CAAC;GACvD;EACF;OAIA,SAAS,IAAI,GAAG;EAElB,KAAK,MAAM,YAAY,mBACrB,SAAS;GAAE;GAAM;GAAM;GAAI,MAAM;GAAW,iBAAiB,SAAS,OAAO,CAAC,GAAG,QAAQ,IAAI;EAAU,CAAC;EAE1G;CACF;CAGA,MAAM,gBAAgB,aAAa,WAAU,QAAO,gBAAgB,GAAG,CAAC;CACxE,IAAI,kBAAkB,IAAI;EAExB,MAAM,OADY,aAAa,MAAM,GAAG,aAAa,CAAC,CAAC,KAAK,GACvC,KAAK;EAC1B,KAAK,MAAM,YAAY,mBACrB,SAAS;GAAE;GAAM,MAAM;GAAS;GAAI;EAAK,CAAC;EAE5C;CACF;CAEA,MAAM,WAAW,aAAa,SAAS,aAAa,KAAK,GAAG,IAAI;CAChE,MAAM,OAAO,SAAS,UAAW,YAAY,SAAc,WAAW,GAAG,SAAS,GAAG,QAAS;CAE9F,KAAK,MAAM,YAAY,mBACrB,SAAS;EACP;EACA;EACA;EACA;CACF,CAAC;AAEL;AAEA,MAAM,kBAAqC;CACzC,IAAI,QAAQ,KAAK,UAAU;EACzB,IAAI,0BACF,OAAO;EAET,IAAI,mBACF,OAAO;EAET,MAAM,MAAM,QAAQ,IAAI,QAAQ,KAAK,QAAQ;EAC7C,MAAM,QAAQ,GAAG;EACjB,IAAI,SAAS,GAAG,GAAG;GAEjB,IAAK,iBACH,OAAO;GAGT,MAAM,WAAa,oBAAoC;GACvD,kBAAkB,UAAU,MAAM;GAClC,iBAAiB,UAAU,QAAQ,GAAG;GACtC,MAAM,aAAa,WAAW,IAAI,MAAM;GACxC,IAAI,kBAAkB,QAAQ,OAAO,QAAQ,YAAY,cAAc,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,GAAG;IAC/G,MAAM,WAAW,aAAa,GAAG,WAAW,GAAG,QAAQ;IACvD,WAAW,IAAI,UAAU,QAAQ;GACnC;GAEA,OAAO,SAAS,GAAG;EACrB;EACA,OAAO;CACT;CACA,IAAI,QAAQ,KAAK,OAAO,UAAU;EAChC,MAAM,SAAS,OAAO,QAAQ,GAAG;EACjC,MAAM,QAAQ,MAAM,QAAQ,MAAM;EAClC,MAAM,YAAY,QAAQ,OAAO,SAAS;EAC1C,MAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK,QAAQ;EAClD,MAAM,cAAc,SAAS,QAAQ,IAAI,MAAM,QAAQ,IAAI;EAC3D,MAAM,WAAW,SAAS,KAAK,IAAI,MAAM,KAAK,IAAI;EAClD,IAAI,OAAO,GAAG,aAAa,QAAQ,GACjC,OAAO;EAET,MAAM,SAAS,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ;EACvD,IAAI,QAAQ;GACV,MAAM,SAAS,SAAS,WAAW,IAAI,cAAwB;GAC/D,IAAI,QACF,iBAAiB,QAAQ,QAAQ,GAAG;GAEtC,IAAI,SAAS,QAAQ,KAAK,CAAE,sBAAsC;IAChE,MAAM,WAAW;IACjB,kBAAkB,UAAU,MAAM;IAClC,iBAAiB,UAAU,QAAQ,GAAG;IACtC,MAAM,aAAa,WAAW,IAAI,MAAM;IACxC,IAAI,kBAAkB,QAAQ,OAAO,QAAQ,YAAY,cAAc,QAAQ,CAAC,kBAAkB,IAAI,QAAQ,GAAG;KAC/G,MAAM,WAAW,aAAa,GAAG,WAAW,GAAG,QAAQ;KACvD,WAAW,IAAI,UAAU,QAAQ;IACnC;GACF;GACA,YAAY;IACV,QAAQ,QAAQ,GAAG;IACnB,IAAI,SAAS,OAAO,QAAQ,YAAY,gBAAgB,GAAG,KAAK,OAAO,GAAG,KAAK,WAC7E,QAAQ,QAAQ,QAAQ;IAG1B,QAAQ,QAAQ,WAAW;IAC3B,eAAe,MAAM;IACrB,qBAAqB,MAAM;IAC3B,MAAM,OAAO,WAAW,IAAI,MAAM;IAClC,IAAI,QAAQ,SAAS,QAAQ;KAC3B,QAAQ,MAAM,WAAW;KACzB,eAAe,IAAI;IACrB;IACA,IAAI,CAAC,QACH,QAAQ,QAAQ,OAAO,QAAQ;GAEnC,CAAC;GACD,aAAa,QAAQ,KAAK,KAAK;EACjC;EACA,OAAO;CACT;CACA,eAAe,QAAQ,KAAK;EAC1B,MAAM,SAAS,OAAO,QAAQ,GAAG;EACjC,MAAM,WAAW,SAAU,OAAe,OAAO;EACjD,MAAM,SAAS,QAAQ,eAAe,QAAQ,GAAG;EACjD,IAAI,UAAU,QAAQ;GACpB,MAAM,SAAS,SAAS,QAAQ,IAAO,yBAAyC,WAAuB;GACvG,IAAI,QACF,iBAAiB,QAAQ,QAAQ,GAAG;GAEtC,YAAY;IACV,QAAQ,QAAQ,GAAG;IAEnB,QAAQ,QAAQ,WAAW;IAC3B,eAAe,MAAM;IACrB,qBAAqB,MAAM;IAC3B,MAAM,OAAO,WAAW,IAAI,MAAM;IAClC,IAAI,QAAQ,SAAS,QAAQ;KAC3B,QAAQ,MAAM,WAAW;KACzB,eAAe,IAAI;IACrB;IACA,QAAQ,QAAQ,OAAO,QAAQ;GACjC,CAAC;GACD,aAAa,QAAQ,KAAK,QAAQ;EACpC;EACA,OAAO;CACT;CACA,QAAQ,QAAQ;EACd,MAAM,QAAQ,OAAO,QAAQ;EAE7B,MAAM,QAAQ,WAAW;EACzB,OAAO,QAAQ,QAAQ,MAAM;CAC/B;AACF;AAEA,SAAgB,SAA2B,QAAc;CACvD,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO;CAET,IAAK,0BACH,OAAO;CAET,MAAM,gBAAgB,YAAY,IAAI,MAAM;CAC5C,IAAI,eACF,OAAO;CAET,IAAI,cAAc,MAAM,SACtB,OAAO;CAET,MAAM,QAAQ,IAAI,MAAM,QAAQ,eAAe;CAC/C,YAAY,IAAI,QAAQ,KAAK;CAC7B,OAAO,IAAI,OAAO,MAAM;CACxB,IAAI,CAAC,cAAc,IAAI,MAAM,GAC3B,cAAc,IAAI,QAAQ,CAAC;CAG7B,IAAI,CAAC,WAAW,IAAI,MAAM,GACxB,WAAW,IAAI,QAAQ,MAAM;CAE/B,OAAO;AACT;AAEA,SAAgB,WAAW,OAAyB;CAClD,OAAO,QAAQ,SAAU,uBAAwC;AACnE;AAEA,SAAgB,kBAAqB,OAAa;CAChD,OAAO,SAAS,KAAK,IAAI,SAAS,KAAY,IAAI;AACpD;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,QAA0B,OAAa;CACrD,IAAI,CAAC,SAAS,KAAK,GACjB,OAAO;CAET,OAAO,eAAe,mBAA2B;EAC/C,OAAO;EACP,cAAc;EACd,YAAY;EACZ,UAAU;CACZ,CAAC;CACD,OAAO;AACT;;;;;;;AAQA,SAAgB,MAAM,OAAyB;CAC7C,OAAO,SAAS,KAAK,mBAA4B;AACnD"}
@@ -0,0 +1,27 @@
1
+ import { Ref } from "./ref.mjs";
2
+ //#region src/reactivity/readonly.d.ts
3
+ /**
4
+ * readonly 会为对象/数组创建一个“浅层”只读代理,并为 Ref 创建只读包装。
5
+ * 选择浅层而非深层递归,是为了在小程序环境中保持实现和运行时开销最小,
6
+ * 仅阻止直接属性写入/删除,嵌套对象仍按原样透传。
7
+ */
8
+ export declare function readonly<T extends object>(target: T): Readonly<T>;
9
+ export declare function readonly<T>(target: Ref<T>): Readonly<Ref<T>>;
10
+ /**
11
+ * 与 Vue 3 的 `shallowReadonly()` 对齐。
12
+ *
13
+ * 当前 wevu 的只读语义本身就是浅层只读,因此这里直接复用同一套实现,
14
+ * 让依赖 Vue 兼容 API 的代码可以无缝迁移。
15
+ */
16
+ export declare function shallowReadonly<T extends object>(target: T): Readonly<T>;
17
+ export declare function shallowReadonly<T>(target: Ref<T>): Readonly<Ref<T>>;
18
+ /**
19
+ * 判断值是否为只读代理或只读 ref 包装。
20
+ */
21
+ export declare function isReadonly(value: unknown): boolean;
22
+ /**
23
+ * 判断值是否为响应式代理或只读代理。
24
+ */
25
+ export declare function isProxy(value: unknown): boolean;
26
+ //#endregion
27
+ //# sourceMappingURL=readonly.d.mts.map
@@ -0,0 +1,27 @@
1
+ import { ComputedRef, WritableComputedRef } from "./computed.mjs";
2
+ import { Ref as Ref$1, ShallowRef as ShallowRef$1 } from "../vue-types.mjs";
3
+ //#region src/reactivity/ref.d.ts
4
+ export type Ref<T = any, S = T> = Ref$1<T, S>;
5
+ export type ShallowRef<T = any> = ShallowRef$1<T>;
6
+ export type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>;
7
+ export type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T);
8
+ export declare function isRef(value: unknown): value is Ref<any>;
9
+ export declare function ref<T = any>(): Ref<T | undefined>;
10
+ export declare function ref<T>(value: T): Ref<T>;
11
+ export declare function unref<T>(value: MaybeRef<T> | ComputedRef<T>): T;
12
+ export declare function toValue<T>(source: MaybeRefOrGetter<T>): T;
13
+ /**
14
+ * 自定义 ref 工厂:用于创建可显式控制 track/trigger 的自定义 ref
15
+ */
16
+ export type CustomRefFactory<T> = (track: () => void, trigger: () => void) => {
17
+ get: () => T;
18
+ set: (value: T) => void;
19
+ };
20
+ export interface CustomRefOptions<T> {
21
+ get: () => T;
22
+ set: (value: T) => void;
23
+ }
24
+ export type CustomRefSource<T> = CustomRefFactory<T> | CustomRefOptions<T>;
25
+ export declare function customRef<T>(factory: CustomRefSource<T>, defaultValue?: T): Ref<T>;
26
+ //#endregion
27
+ //# sourceMappingURL=ref.d.mts.map
@@ -1,4 +1,4 @@
1
- import _defineProperty from "../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/defineProperty.mjs";
1
+ import _defineProperty from "../_virtual/_@oxc-project_runtime@0.151.0/helpers/esm/defineProperty.mjs";
2
2
  import { trackEffects, triggerEffects } from "./core.mjs";
3
3
  import { convertToReactive, markRaw } from "./reactive.mjs";
4
4
 
@@ -10,7 +10,7 @@ function markAsRef(target) {
10
10
  value: true,
11
11
  configurable: true
12
12
  });
13
- } catch (_unused) {
13
+ } catch {
14
14
  target[RefFlag] = true;
15
15
  }
16
16
  return target;
@@ -1 +1 @@
1
- {"version":3,"file":"ref.mjs","names":[],"sources":["../../../src/reactivity/ref.ts"],"sourcesContent":["import type { Ref as VueRef, ShallowRef as VueShallowRef } from '../vue-types'\nimport type { ComputedRef, WritableComputedRef } from './computed'\nimport type { Dep } from './core'\nimport { trackEffects, triggerEffects } from './core'\nimport { convertToReactive, markRaw } from './reactive'\n\n// 类型对齐 @vue/reactivity.Ref:\n// - 用于 Volar 模板自动解包(UnwrapRef 依赖 RefSymbol 品牌标记)。\n// - 运行时仍使用 wevu 自己的 ref 实现,不依赖 Vue。\nexport type Ref<T = any, S = T> = VueRef<T, S>\nexport type ShallowRef<T = any> = VueShallowRef<T>\nexport type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>\nexport type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T)\n\nexport const RefFlag = '__v_isRef' as const\n\nexport function markAsRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, RefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[RefFlag] = true\n }\n return target\n}\n\nexport function isRef(value: unknown): value is Ref<any> {\n return Boolean(value && typeof value === 'object' && (value as any)[RefFlag] === true)\n}\n\nclass RefImpl<T> {\n private _value: T\n private _rawValue: T\n public dep: Dep | undefined\n constructor(value: T) {\n markAsRef(this)\n this._rawValue = value\n this._value = convertToReactive(value)\n }\n\n get value(): T {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n return this._value\n }\n\n set value(newValue: T) {\n if (!Object.is(newValue, this._rawValue)) {\n this._rawValue = newValue\n this._value = convertToReactive(newValue)\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n }\n}\n\nexport function ref<T = any>(): Ref<T | undefined>\nexport function ref<T>(value: T): Ref<T>\nexport function ref<T>(value?: T): Ref<T | undefined> {\n if (isRef(value)) {\n return value\n }\n return markRaw(new RefImpl(value as T | undefined)) as any\n}\n\nexport function unref<T>(value: MaybeRef<T> | ComputedRef<T>): T {\n return isRef(value) ? value.value : value\n}\n\nexport function toValue<T>(source: MaybeRefOrGetter<T>): T {\n return typeof source === 'function' ? (source as () => T)() : unref(source)\n}\n\n/**\n * 自定义 ref 工厂:用于创建可显式控制 track/trigger 的自定义 ref\n */\nexport type CustomRefFactory<T> = (\n track: () => void,\n trigger: () => void,\n) => {\n get: () => T\n set: (value: T) => void\n}\n\nexport interface CustomRefOptions<T> {\n get: () => T\n set: (value: T) => void\n}\n\nexport type CustomRefSource<T> = CustomRefFactory<T> | CustomRefOptions<T>\n\nclass CustomRefImpl<T> {\n private _getValue: () => T\n private _setValue: (value: T) => void\n public dep: Dep | undefined\n\n constructor(factory: CustomRefSource<T>, defaultValue?: T) {\n markAsRef(this)\n const fallbackValue = defaultValue\n const track = () => {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n }\n const trigger = () => {\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n\n const withFallback = (value: T) => (value === undefined && fallbackValue !== undefined ? fallbackValue as T : value)\n\n if (typeof factory === 'function') {\n const handlers = factory(track, trigger)\n this._getValue = () => withFallback(handlers.get())\n this._setValue = value => handlers.set(value)\n return\n }\n\n const handlers = factory\n this._getValue = () => {\n track()\n return withFallback(handlers.get())\n }\n this._setValue = (value: T) => {\n handlers.set(value)\n trigger()\n }\n }\n\n get value(): T {\n return this._getValue()\n }\n\n set value(newValue: T) {\n this._setValue(newValue)\n }\n}\n\nexport function customRef<T>(factory: CustomRefSource<T>, defaultValue?: T): Ref<T> {\n return markRaw(new CustomRefImpl(factory, defaultValue)) as any\n}\n"],"mappings":";;;;;AAcA,MAAa,UAAU;AAEvB,SAAgB,UAA4B,QAAc;CACxD,IAAI;EACF,OAAO,eAAe,QAAQ,SAAS;GACrC,OAAO;GACP,cAAc;EAChB,CAAC;CACH,kBACM;EACH,AAAC,OAAe,WAAW;CAC9B;CACA,OAAO;AACT;AAEA,SAAgB,MAAM,OAAmC;CACvD,OAAO,QAAQ,SAAS,OAAO,UAAU,YAAa,uBAA2B,IAAI;AACvF;AAEA,IAAM,UAAN,MAAiB;CAIf,YAAY,OAAU;wBAHd;wBACA;wBACD;EAEL,UAAU,IAAI;EACd,KAAK,YAAY;EACjB,KAAK,SAAS,kBAAkB,KAAK;CACvC;CAEA,IAAI,QAAW;EACb,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;EAErB,aAAa,KAAK,GAAG;EACrB,OAAO,KAAK;CACd;CAEA,IAAI,MAAM,UAAa;EACrB,IAAI,CAAC,OAAO,GAAG,UAAU,KAAK,SAAS,GAAG;GACxC,KAAK,YAAY;GACjB,KAAK,SAAS,kBAAkB,QAAQ;GACxC,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;CACF;AACF;AAIA,SAAgB,IAAO,OAA+B;CACpD,IAAI,MAAM,KAAK,GACb,OAAO;CAET,OAAO,QAAQ,IAAI,QAAQ,KAAsB,CAAC;AACpD;AAEA,SAAgB,MAAS,OAAwC;CAC/D,OAAO,MAAM,KAAK,IAAI,MAAM,QAAQ;AACtC;AAEA,SAAgB,QAAW,QAAgC;CACzD,OAAO,OAAO,WAAW,aAAc,OAAmB,IAAI,MAAM,MAAM;AAC5E;AAoBA,IAAM,gBAAN,MAAuB;CAKrB,YAAY,SAA6B,cAAkB;wBAJnD;wBACA;wBACD;EAGL,UAAU,IAAI;EACd,MAAM,gBAAgB;EACtB,MAAM,cAAc;GAClB,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;GAErB,aAAa,KAAK,GAAG;EACvB;EACA,MAAM,gBAAgB;GACpB,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;EAEA,MAAM,gBAAgB,UAAc,UAAU,UAAa,kBAAkB,SAAY,gBAAqB;EAE9G,IAAI,OAAO,YAAY,YAAY;GACjC,MAAM,WAAW,QAAQ,OAAO,OAAO;GACvC,KAAK,kBAAkB,aAAa,SAAS,IAAI,CAAC;GAClD,KAAK,aAAY,UAAS,SAAS,IAAI,KAAK;GAC5C;EACF;EAEA,MAAM,WAAW;EACjB,KAAK,kBAAkB;GACrB,MAAM;GACN,OAAO,aAAa,SAAS,IAAI,CAAC;EACpC;EACA,KAAK,aAAa,UAAa;GAC7B,SAAS,IAAI,KAAK;GAClB,QAAQ;EACV;CACF;CAEA,IAAI,QAAW;EACb,OAAO,KAAK,UAAU;CACxB;CAEA,IAAI,MAAM,UAAa;EACrB,KAAK,UAAU,QAAQ;CACzB;AACF;AAEA,SAAgB,UAAa,SAA6B,cAA0B;CAClF,OAAO,QAAQ,IAAI,cAAc,SAAS,YAAY,CAAC;AACzD"}
1
+ {"version":3,"file":"ref.mjs","names":[],"sources":["../../../src/reactivity/ref.ts"],"sourcesContent":["import type { Ref as VueRef, ShallowRef as VueShallowRef } from '../vue-types'\nimport type { ComputedRef, WritableComputedRef } from './computed'\nimport type { Dep } from './core'\nimport { trackEffects, triggerEffects } from './core'\nimport { convertToReactive, markRaw } from './reactive'\n\n// 类型对齐 @vue/reactivity.Ref:\n// - 用于 Volar 模板自动解包(UnwrapRef 依赖 RefSymbol 品牌标记)。\n// - 运行时仍使用 wevu 自己的 ref 实现,不依赖 Vue。\nexport type Ref<T = any, S = T> = VueRef<T, S>\nexport type ShallowRef<T = any> = VueShallowRef<T>\nexport type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>\nexport type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T)\n\nexport const RefFlag = '__v_isRef' as const\n\nexport function markAsRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, RefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[RefFlag] = true\n }\n return target\n}\n\nexport function isRef(value: unknown): value is Ref<any> {\n return Boolean(value && typeof value === 'object' && (value as any)[RefFlag] === true)\n}\n\nclass RefImpl<T> {\n private _value: T\n private _rawValue: T\n public dep: Dep | undefined\n constructor(value: T) {\n markAsRef(this)\n this._rawValue = value\n this._value = convertToReactive(value)\n }\n\n get value(): T {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n return this._value\n }\n\n set value(newValue: T) {\n if (!Object.is(newValue, this._rawValue)) {\n this._rawValue = newValue\n this._value = convertToReactive(newValue)\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n }\n}\n\nexport function ref<T = any>(): Ref<T | undefined>\nexport function ref<T>(value: T): Ref<T>\nexport function ref<T>(value?: T): Ref<T | undefined> {\n if (isRef(value)) {\n return value\n }\n return markRaw(new RefImpl(value as T | undefined)) as any\n}\n\nexport function unref<T>(value: MaybeRef<T> | ComputedRef<T>): T {\n return isRef(value) ? value.value : value\n}\n\nexport function toValue<T>(source: MaybeRefOrGetter<T>): T {\n return typeof source === 'function' ? (source as () => T)() : unref(source)\n}\n\n/**\n * 自定义 ref 工厂:用于创建可显式控制 track/trigger 的自定义 ref\n */\nexport type CustomRefFactory<T> = (\n track: () => void,\n trigger: () => void,\n) => {\n get: () => T\n set: (value: T) => void\n}\n\nexport interface CustomRefOptions<T> {\n get: () => T\n set: (value: T) => void\n}\n\nexport type CustomRefSource<T> = CustomRefFactory<T> | CustomRefOptions<T>\n\nclass CustomRefImpl<T> {\n private _getValue: () => T\n private _setValue: (value: T) => void\n public dep: Dep | undefined\n\n constructor(factory: CustomRefSource<T>, defaultValue?: T) {\n markAsRef(this)\n const fallbackValue = defaultValue\n const track = () => {\n if (!this.dep) {\n this.dep = new Set()\n }\n trackEffects(this.dep)\n }\n const trigger = () => {\n if (this.dep) {\n triggerEffects(this.dep)\n }\n }\n\n const withFallback = (value: T) => (value === undefined && fallbackValue !== undefined ? fallbackValue as T : value)\n\n if (typeof factory === 'function') {\n const handlers = factory(track, trigger)\n this._getValue = () => withFallback(handlers.get())\n this._setValue = value => handlers.set(value)\n return\n }\n\n const handlers = factory\n this._getValue = () => {\n track()\n return withFallback(handlers.get())\n }\n this._setValue = (value: T) => {\n handlers.set(value)\n trigger()\n }\n }\n\n get value(): T {\n return this._getValue()\n }\n\n set value(newValue: T) {\n this._setValue(newValue)\n }\n}\n\nexport function customRef<T>(factory: CustomRefSource<T>, defaultValue?: T): Ref<T> {\n return markRaw(new CustomRefImpl(factory, defaultValue)) as any\n}\n"],"mappings":";;;;;AAcA,MAAa,UAAU;AAEvB,SAAgB,UAA4B,QAAc;CACxD,IAAI;EACF,OAAO,eAAe,QAAQ,SAAS;GACrC,OAAO;GACP,cAAc;EAChB,CAAC;CACH,QACM;EACH,AAAC,OAAe,WAAW;CAC9B;CACA,OAAO;AACT;AAEA,SAAgB,MAAM,OAAmC;CACvD,OAAO,QAAQ,SAAS,OAAO,UAAU,YAAa,uBAA2B,IAAI;AACvF;AAEA,IAAM,UAAN,MAAiB;CAIf,YAAY,OAAU;wBAHd;wBACA;wBACD;EAEL,UAAU,IAAI;EACd,KAAK,YAAY;EACjB,KAAK,SAAS,kBAAkB,KAAK;CACvC;CAEA,IAAI,QAAW;EACb,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;EAErB,aAAa,KAAK,GAAG;EACrB,OAAO,KAAK;CACd;CAEA,IAAI,MAAM,UAAa;EACrB,IAAI,CAAC,OAAO,GAAG,UAAU,KAAK,SAAS,GAAG;GACxC,KAAK,YAAY;GACjB,KAAK,SAAS,kBAAkB,QAAQ;GACxC,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;CACF;AACF;AAIA,SAAgB,IAAO,OAA+B;CACpD,IAAI,MAAM,KAAK,GACb,OAAO;CAET,OAAO,QAAQ,IAAI,QAAQ,KAAsB,CAAC;AACpD;AAEA,SAAgB,MAAS,OAAwC;CAC/D,OAAO,MAAM,KAAK,IAAI,MAAM,QAAQ;AACtC;AAEA,SAAgB,QAAW,QAAgC;CACzD,OAAO,OAAO,WAAW,aAAc,OAAmB,IAAI,MAAM,MAAM;AAC5E;AAoBA,IAAM,gBAAN,MAAuB;CAKrB,YAAY,SAA6B,cAAkB;wBAJnD;wBACA;wBACD;EAGL,UAAU,IAAI;EACd,MAAM,gBAAgB;EACtB,MAAM,cAAc;GAClB,IAAI,CAAC,KAAK,KACR,KAAK,sBAAM,IAAI,IAAI;GAErB,aAAa,KAAK,GAAG;EACvB;EACA,MAAM,gBAAgB;GACpB,IAAI,KAAK,KACP,eAAe,KAAK,GAAG;EAE3B;EAEA,MAAM,gBAAgB,UAAc,UAAU,UAAa,kBAAkB,SAAY,gBAAqB;EAE9G,IAAI,OAAO,YAAY,YAAY;GACjC,MAAM,WAAW,QAAQ,OAAO,OAAO;GACvC,KAAK,kBAAkB,aAAa,SAAS,IAAI,CAAC;GAClD,KAAK,aAAY,UAAS,SAAS,IAAI,KAAK;GAC5C;EACF;EAEA,MAAM,WAAW;EACjB,KAAK,kBAAkB;GACrB,MAAM;GACN,OAAO,aAAa,SAAS,IAAI,CAAC;EACpC;EACA,KAAK,aAAa,UAAa;GAC7B,SAAS,IAAI,KAAK;GAClB,QAAQ;EACV;CACF;CAEA,IAAI,QAAW;EACb,OAAO,KAAK,UAAU;CACxB;CAEA,IAAI,MAAM,UAAa;EACrB,KAAK,UAAU,QAAQ;CACzB;AACF;AAEA,SAAgB,UAAa,SAA6B,cAA0B;CAClF,OAAO,QAAQ,IAAI,cAAc,SAAS,YAAY,CAAC;AACzD"}
@@ -0,0 +1,19 @@
1
+ import { Ref } from "./ref.mjs";
2
+ //#region src/reactivity/shallowRef.d.ts
3
+ export declare function shallowRef<T>(value: T): Ref<T>;
4
+ export declare function shallowRef<T>(value: T, defaultValue: T): Ref<T>;
5
+ /**
6
+ * 判断传入值是否为浅层 ref。
7
+ *
8
+ * @param r 待判断的值
9
+ * @returns 若为浅层 ref 则返回 true
10
+ */
11
+ export declare function isShallowRef(r: any): r is Ref<any>;
12
+ /**
13
+ * 主动触发一次浅层 ref 的更新(无需深度比较)。
14
+ *
15
+ * @param ref 需要触发的 ref
16
+ */
17
+ export declare function triggerRef<T>(ref: Ref<T>): void;
18
+ //#endregion
19
+ //# sourceMappingURL=shallowRef.d.mts.map
@@ -9,7 +9,7 @@ function markAsShallowRef(target) {
9
9
  value: true,
10
10
  configurable: true
11
11
  });
12
- } catch (_unused) {
12
+ } catch {
13
13
  target[ShallowRefFlag] = true;
14
14
  }
15
15
  return target;
@@ -1 +1 @@
1
- {"version":3,"file":"shallowRef.mjs","names":[],"sources":["../../../src/reactivity/shallowRef.ts"],"sourcesContent":["import type { Ref } from './ref'\nimport { triggerEffects } from './core'\nimport { customRef, isRef } from './ref'\n\nconst ShallowRefFlag = '__v_isShallow' as const\n\nfunction markAsShallowRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, ShallowRefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[ShallowRefFlag] = true\n }\n return target\n}\n\nexport function shallowRef<T>(value: T): Ref<T>\nexport function shallowRef<T>(value: T, defaultValue: T): Ref<T>\n/**\n * 创建一个“浅层” ref:它只在 .value 被整体替换时触发依赖,不会对内部对象做深层响应式处理。\n *\n * @param value 初始值\n * @param defaultValue 传递给 customRef 的默认值,可用于兜底\n * @returns 仅跟踪自身 .value 变更的浅层 ref\n *\n * @example\n * ```ts\n * const state = shallowRef({ count: 0 })\n * state.value = { count: 1 } // 会触发依赖\n * state.value.count++ // 不会触发依赖(内部属性未被深度代理)\n * ```\n */\nexport function shallowRef<T>(value: T, defaultValue?: T): Ref<T> {\n return markAsShallowRef(customRef<T>(\n (track, trigger) => ({\n get() {\n track()\n return value\n },\n set(newValue: T) {\n if (Object.is(value, newValue)) {\n return\n }\n value = newValue\n trigger()\n },\n }),\n defaultValue,\n )) as Ref<T>\n}\n\n/**\n * 判断传入值是否为浅层 ref。\n *\n * @param r 待判断的值\n * @returns 若为浅层 ref 则返回 true\n */\nexport function isShallowRef(r: any): r is Ref<any> {\n return isRef(r) && (r as unknown as Record<string, unknown>)[ShallowRefFlag] === true\n}\n\n/**\n * 主动触发一次浅层 ref 的更新(无需深度比较)。\n *\n * @param ref 需要触发的 ref\n */\nexport function triggerRef<T>(ref: Ref<T>) {\n // 若未来有专用 trigger 机制可替换,此处作为兼容 API 的占位实现\n if (isRef(ref)) {\n const dep = (ref as any).dep\n if (dep) {\n triggerEffects(dep)\n return\n }\n // 通过重新赋值自身触发依赖\n const value = ref.value\n ref.value = value\n }\n}\n"],"mappings":";;;;AAIA,MAAM,iBAAiB;AAEvB,SAAS,iBAAmC,QAAc;CACxD,IAAI;EACF,OAAO,eAAe,QAAQ,gBAAgB;GAC5C,OAAO;GACP,cAAc;EAChB,CAAC;CACH,kBACM;EACH,AAAC,OAAe,kBAAkB;CACrC;CACA,OAAO;AACT;;;;;;;;;;;;;;;AAkBA,SAAgB,WAAc,OAAU,cAA0B;CAChE,OAAO,iBAAiB,WACrB,OAAO,aAAa;EACnB,MAAM;GACJ,MAAM;GACN,OAAO;EACT;EACA,IAAI,UAAa;GACf,IAAI,OAAO,GAAG,OAAO,QAAQ,GAC3B;GAEF,QAAQ;GACR,QAAQ;EACV;CACF,IACA,YACF,CAAC;AACH;;;;;;;AAQA,SAAgB,aAAa,GAAuB;CAClD,OAAO,MAAM,CAAC,KAAM,EAAyC,oBAAoB;AACnF;;;;;;AAOA,SAAgB,WAAc,KAAa;CAEzC,IAAI,MAAM,GAAG,GAAG;EACd,MAAM,MAAO,IAAY;EACzB,IAAI,KAAK;GACP,eAAe,GAAG;GAClB;EACF;EAGA,IAAI,QADU,IAAI;CAEpB;AACF"}
1
+ {"version":3,"file":"shallowRef.mjs","names":[],"sources":["../../../src/reactivity/shallowRef.ts"],"sourcesContent":["import type { Ref } from './ref'\nimport { triggerEffects } from './core'\nimport { customRef, isRef } from './ref'\n\nconst ShallowRefFlag = '__v_isShallow' as const\n\nfunction markAsShallowRef<T extends object>(target: T): T {\n try {\n Object.defineProperty(target, ShallowRefFlag, {\n value: true,\n configurable: true,\n })\n }\n catch {\n ;(target as any)[ShallowRefFlag] = true\n }\n return target\n}\n\nexport function shallowRef<T>(value: T): Ref<T>\nexport function shallowRef<T>(value: T, defaultValue: T): Ref<T>\n/**\n * 创建一个“浅层” ref:它只在 .value 被整体替换时触发依赖,不会对内部对象做深层响应式处理。\n *\n * @param value 初始值\n * @param defaultValue 传递给 customRef 的默认值,可用于兜底\n * @returns 仅跟踪自身 .value 变更的浅层 ref\n *\n * @example\n * ```ts\n * const state = shallowRef({ count: 0 })\n * state.value = { count: 1 } // 会触发依赖\n * state.value.count++ // 不会触发依赖(内部属性未被深度代理)\n * ```\n */\nexport function shallowRef<T>(value: T, defaultValue?: T): Ref<T> {\n return markAsShallowRef(customRef<T>(\n (track, trigger) => ({\n get() {\n track()\n return value\n },\n set(newValue: T) {\n if (Object.is(value, newValue)) {\n return\n }\n value = newValue\n trigger()\n },\n }),\n defaultValue,\n )) as Ref<T>\n}\n\n/**\n * 判断传入值是否为浅层 ref。\n *\n * @param r 待判断的值\n * @returns 若为浅层 ref 则返回 true\n */\nexport function isShallowRef(r: any): r is Ref<any> {\n return isRef(r) && (r as unknown as Record<string, unknown>)[ShallowRefFlag] === true\n}\n\n/**\n * 主动触发一次浅层 ref 的更新(无需深度比较)。\n *\n * @param ref 需要触发的 ref\n */\nexport function triggerRef<T>(ref: Ref<T>) {\n // 若未来有专用 trigger 机制可替换,此处作为兼容 API 的占位实现\n if (isRef(ref)) {\n const dep = (ref as any).dep\n if (dep) {\n triggerEffects(dep)\n return\n }\n // 通过重新赋值自身触发依赖\n const value = ref.value\n ref.value = value\n }\n}\n"],"mappings":";;;;AAIA,MAAM,iBAAiB;AAEvB,SAAS,iBAAmC,QAAc;CACxD,IAAI;EACF,OAAO,eAAe,QAAQ,gBAAgB;GAC5C,OAAO;GACP,cAAc;EAChB,CAAC;CACH,QACM;EACH,AAAC,OAAe,kBAAkB;CACrC;CACA,OAAO;AACT;;;;;;;;;;;;;;;AAkBA,SAAgB,WAAc,OAAU,cAA0B;CAChE,OAAO,iBAAiB,WACrB,OAAO,aAAa;EACnB,MAAM;GACJ,MAAM;GACN,OAAO;EACT;EACA,IAAI,UAAa;GACf,IAAI,OAAO,GAAG,OAAO,QAAQ,GAC3B;GAEF,QAAQ;GACR,QAAQ;EACV;CACF,IACA,YACF,CAAC;AACH;;;;;;;AAQA,SAAgB,aAAa,GAAuB;CAClD,OAAO,MAAM,CAAC,KAAM,EAAyC,oBAAoB;AACnF;;;;;;AAOA,SAAgB,WAAc,KAAa;CAEzC,IAAI,MAAM,GAAG,GAAG;EACd,MAAM,MAAO,IAAY;EACzB,IAAI,KAAK;GACP,eAAe,GAAG;GAClB;EACF;EAGA,IAAI,QADU,IAAI;CAEpB;AACF"}
@@ -0,0 +1,43 @@
1
+ import { Ref } from "./ref.mjs";
2
+ //#region src/reactivity/toRefs.d.ts
3
+ /**
4
+ * 为源响应式对象的单个属性创建 ref,可读可写并与原属性保持同步。
5
+ *
6
+ * @param object 源响应式对象
7
+ * @param key 属性名
8
+ * @returns 指向该属性的 ref
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const state = reactive({ foo: 1 })
13
+ * const fooRef = toRef(state, 'foo')
14
+ *
15
+ * fooRef.value++
16
+ * console.log(state.foo) // 2
17
+ * ```
18
+ */
19
+ export declare function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>;
20
+ export declare function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<T[K]>;
21
+ /**
22
+ * 将一个响应式对象转换成“同结构的普通对象”,其中每个字段都是指向原对象对应属性的 ref。
23
+ *
24
+ * @param object 待转换的响应式对象
25
+ * @returns 包含若干 ref 的普通对象
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const state = reactive({ foo: 1, bar: 2 })
30
+ * const stateAsRefs = toRefs(state)
31
+ *
32
+ * stateAsRefs.foo.value++ // 2
33
+ * state.foo // 2
34
+ * ```
35
+ */
36
+ export declare function toRefs<T extends object>(object: T): ToRefs<T>;
37
+ /**
38
+ * toRefs 返回值的类型辅助
39
+ */
40
+ type ToRef<T> = T extends Ref<any> ? T : Ref<T>;
41
+ export type ToRefs<T extends object> = { [K in keyof T]: ToRef<T[K]>; };
42
+ //#endregion
43
+ //# sourceMappingURL=toRefs.d.mts.map
@@ -0,0 +1,8 @@
1
+ //#region src/reactivity/traverse.d.ts
2
+ /**
3
+ * 深度遍历工具(框架内部依赖收集使用)。
4
+ * @internal
5
+ */
6
+ export declare function traverse(value: any, depth?: number, seen?: Map<object, number>): any;
7
+ //#endregion
8
+ //# sourceMappingURL=traverse.d.mts.map
@@ -36,7 +36,7 @@ function createWatchGetter(source) {
36
36
  }
37
37
  function applyDeepWatchGetter(getter, source, isMultiSource, isReactiveSource, deepOption) {
38
38
  const deepDefault = isMultiSource ? source.some((item) => isReactive(item)) : isReactiveSource;
39
- const deep = deepOption !== null && deepOption !== void 0 ? deepOption : deepDefault;
39
+ const deep = deepOption ?? deepDefault;
40
40
  if (!(deep === true || typeof deep === "number")) return getter;
41
41
  const depth = typeof deep === "number" ? deep : deep ? Infinity : 0;
42
42
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/reactivity/watch/helpers.ts"],"sourcesContent":["import type { Ref } from '../ref'\nimport type { WatchScheduler, WatchSource, WatchSources } from './types'\nimport { nextTick } from '../../scheduler'\nimport { queueJob } from '../core'\nimport { isReactive, touchReactive } from '../reactive'\nimport { isRef } from '../ref'\nimport { isShallowRef } from '../shallowRef'\nimport { traverse } from '../traverse'\nimport { getDeepWatchStrategy } from './types'\n\ninterface WatchGetterContext {\n getter: () => any\n hasReactiveSource: boolean\n hasShallowSource: boolean\n isMultiSource: boolean\n isReactiveSource: boolean\n}\n\nfunction resolveWatchSource(item: WatchSource<any> | object) {\n if (typeof item === 'function') {\n return (item as () => any)()\n }\n if (isRef(item)) {\n return (item as Ref<any>).value\n }\n if (isReactive(item)) {\n return item\n }\n throw new Error('无效的 watch 源')\n}\n\nexport function createWatchGetter(source: WatchSources<any>): WatchGetterContext {\n const isMultiSource = Array.isArray(source)\n const isReactiveSource = !isMultiSource && isReactive(source)\n const hasReactiveSource = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isReactive(item))\n : isReactiveSource\n const hasShallowSource = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isShallowRef(item))\n : isShallowRef(source)\n let getter: () => any\n\n if (isMultiSource) {\n const sources = source as ReadonlyArray<WatchSource<any> | object>\n getter = () => sources.map(item => resolveWatchSource(item))\n }\n else if (typeof source === 'function') {\n getter = source as () => any\n }\n else if (isRef(source)) {\n getter = () => (source as Ref<any>).value\n }\n else if (isReactiveSource) {\n getter = () => source as any\n }\n else {\n throw new Error('无效的 watch 源')\n }\n\n return {\n getter,\n hasReactiveSource,\n hasShallowSource,\n isMultiSource,\n isReactiveSource,\n }\n}\n\nexport function applyDeepWatchGetter(\n getter: () => any,\n source: WatchSources<any>,\n isMultiSource: boolean,\n isReactiveSource: boolean,\n deepOption: boolean | number | undefined,\n) {\n const deepDefault = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isReactive(item))\n : isReactiveSource\n const deep = deepOption ?? deepDefault\n const shouldDeep = deep === true || typeof deep === 'number'\n if (!shouldDeep) {\n return getter\n }\n const depth = typeof deep === 'number' ? deep : (deep ? Infinity : 0)\n return () => {\n const value = getter()\n const strategy = getDeepWatchStrategy()\n if (isMultiSource && Array.isArray(value)) {\n return value.map((item) => {\n if (strategy === 'version' && isReactive(item)) {\n touchReactive(item as any)\n return item\n }\n return traverse(item, depth)\n })\n }\n if (strategy === 'version' && isReactive(value)) {\n touchReactive(value as any)\n return value\n }\n return traverse(value, depth)\n }\n}\n\nexport function dispatchScheduledJob(\n job: () => void,\n flush: 'pre' | 'post' | 'sync',\n isFirstRun: boolean,\n scheduler?: WatchScheduler,\n) {\n if (scheduler) {\n scheduler(job, isFirstRun)\n return\n }\n if (flush === 'sync') {\n job()\n return\n }\n if (flush === 'post') {\n nextTick(() => queueJob(job))\n return\n }\n if (isFirstRun) {\n job()\n }\n else {\n queueJob(job)\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAS,mBAAmB,MAAiC;CAC3D,IAAI,OAAO,SAAS,YAClB,OAAQ,KAAmB;CAE7B,IAAI,MAAM,IAAI,GACZ,OAAQ,KAAkB;CAE5B,IAAI,WAAW,IAAI,GACjB,OAAO;CAET,MAAM,IAAI,MAAM,aAAa;AAC/B;AAEA,SAAgB,kBAAkB,QAA+C;CAC/E,MAAM,gBAAgB,MAAM,QAAQ,MAAM;CAC1C,MAAM,mBAAmB,CAAC,iBAAiB,WAAW,MAAM;CAC5D,MAAM,oBAAoB,gBACrB,OAAoD,MAAK,SAAQ,WAAW,IAAI,CAAC,IAClF;CACJ,MAAM,mBAAmB,gBACpB,OAAoD,MAAK,SAAQ,aAAa,IAAI,CAAC,IACpF,aAAa,MAAM;CACvB,IAAI;CAEJ,IAAI,eAAe;EACjB,MAAM,UAAU;EAChB,eAAe,QAAQ,KAAI,SAAQ,mBAAmB,IAAI,CAAC;CAC7D,OACK,IAAI,OAAO,WAAW,YACzB,SAAS;MAEN,IAAI,MAAM,MAAM,GACnB,eAAgB,OAAoB;MAEjC,IAAI,kBACP,eAAe;MAGf,MAAM,IAAI,MAAM,aAAa;CAG/B,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,qBACd,QACA,QACA,eACA,kBACA,YACA;CACA,MAAM,cAAc,gBACf,OAAoD,MAAK,SAAQ,WAAW,IAAI,CAAC,IAClF;CACJ,MAAM,OAAO,4DAAc;CAE3B,IAAI,EADe,SAAS,QAAQ,OAAO,SAAS,WAElD,OAAO;CAET,MAAM,QAAQ,OAAO,SAAS,WAAW,OAAQ,OAAO,WAAW;CACnE,aAAa;EACX,MAAM,QAAQ,OAAO;EACrB,MAAM,WAAW,qBAAqB;EACtC,IAAI,iBAAiB,MAAM,QAAQ,KAAK,GACtC,OAAO,MAAM,KAAK,SAAS;GACzB,IAAI,aAAa,aAAa,WAAW,IAAI,GAAG;IAC9C,cAAc,IAAW;IACzB,OAAO;GACT;GACA,OAAO,SAAS,MAAM,KAAK;EAC7B,CAAC;EAEH,IAAI,aAAa,aAAa,WAAW,KAAK,GAAG;GAC/C,cAAc,KAAY;GAC1B,OAAO;EACT;EACA,OAAO,SAAS,OAAO,KAAK;CAC9B;AACF;AAEA,SAAgB,qBACd,KACA,OACA,YACA,WACA;CACA,IAAI,WAAW;EACb,UAAU,KAAK,UAAU;EACzB;CACF;CACA,IAAI,UAAU,QAAQ;EACpB,IAAI;EACJ;CACF;CACA,IAAI,UAAU,QAAQ;EACpB,eAAe,SAAS,GAAG,CAAC;EAC5B;CACF;CACA,IAAI,YACF,IAAI;MAGJ,SAAS,GAAG;AAEhB"}
1
+ {"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/reactivity/watch/helpers.ts"],"sourcesContent":["import type { Ref } from '../ref'\nimport type { WatchScheduler, WatchSource, WatchSources } from './types'\nimport { nextTick } from '../../scheduler'\nimport { queueJob } from '../core'\nimport { isReactive, touchReactive } from '../reactive'\nimport { isRef } from '../ref'\nimport { isShallowRef } from '../shallowRef'\nimport { traverse } from '../traverse'\nimport { getDeepWatchStrategy } from './types'\n\ninterface WatchGetterContext {\n getter: () => any\n hasReactiveSource: boolean\n hasShallowSource: boolean\n isMultiSource: boolean\n isReactiveSource: boolean\n}\n\nfunction resolveWatchSource(item: WatchSource<any> | object) {\n if (typeof item === 'function') {\n return (item as () => any)()\n }\n if (isRef(item)) {\n return (item as Ref<any>).value\n }\n if (isReactive(item)) {\n return item\n }\n throw new Error('无效的 watch 源')\n}\n\nexport function createWatchGetter(source: WatchSources<any>): WatchGetterContext {\n const isMultiSource = Array.isArray(source)\n const isReactiveSource = !isMultiSource && isReactive(source)\n const hasReactiveSource = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isReactive(item))\n : isReactiveSource\n const hasShallowSource = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isShallowRef(item))\n : isShallowRef(source)\n let getter: () => any\n\n if (isMultiSource) {\n const sources = source as ReadonlyArray<WatchSource<any> | object>\n getter = () => sources.map(item => resolveWatchSource(item))\n }\n else if (typeof source === 'function') {\n getter = source as () => any\n }\n else if (isRef(source)) {\n getter = () => (source as Ref<any>).value\n }\n else if (isReactiveSource) {\n getter = () => source as any\n }\n else {\n throw new Error('无效的 watch 源')\n }\n\n return {\n getter,\n hasReactiveSource,\n hasShallowSource,\n isMultiSource,\n isReactiveSource,\n }\n}\n\nexport function applyDeepWatchGetter(\n getter: () => any,\n source: WatchSources<any>,\n isMultiSource: boolean,\n isReactiveSource: boolean,\n deepOption: boolean | number | undefined,\n) {\n const deepDefault = isMultiSource\n ? (source as ReadonlyArray<WatchSource<any> | object>).some(item => isReactive(item))\n : isReactiveSource\n const deep = deepOption ?? deepDefault\n const shouldDeep = deep === true || typeof deep === 'number'\n if (!shouldDeep) {\n return getter\n }\n const depth = typeof deep === 'number' ? deep : (deep ? Infinity : 0)\n return () => {\n const value = getter()\n const strategy = getDeepWatchStrategy()\n if (isMultiSource && Array.isArray(value)) {\n return value.map((item) => {\n if (strategy === 'version' && isReactive(item)) {\n touchReactive(item as any)\n return item\n }\n return traverse(item, depth)\n })\n }\n if (strategy === 'version' && isReactive(value)) {\n touchReactive(value as any)\n return value\n }\n return traverse(value, depth)\n }\n}\n\nexport function dispatchScheduledJob(\n job: () => void,\n flush: 'pre' | 'post' | 'sync',\n isFirstRun: boolean,\n scheduler?: WatchScheduler,\n) {\n if (scheduler) {\n scheduler(job, isFirstRun)\n return\n }\n if (flush === 'sync') {\n job()\n return\n }\n if (flush === 'post') {\n nextTick(() => queueJob(job))\n return\n }\n if (isFirstRun) {\n job()\n }\n else {\n queueJob(job)\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAS,mBAAmB,MAAiC;CAC3D,IAAI,OAAO,SAAS,YAClB,OAAQ,KAAmB;CAE7B,IAAI,MAAM,IAAI,GACZ,OAAQ,KAAkB;CAE5B,IAAI,WAAW,IAAI,GACjB,OAAO;CAET,MAAM,IAAI,MAAM,aAAa;AAC/B;AAEA,SAAgB,kBAAkB,QAA+C;CAC/E,MAAM,gBAAgB,MAAM,QAAQ,MAAM;CAC1C,MAAM,mBAAmB,CAAC,iBAAiB,WAAW,MAAM;CAC5D,MAAM,oBAAoB,gBACrB,OAAoD,MAAK,SAAQ,WAAW,IAAI,CAAC,IAClF;CACJ,MAAM,mBAAmB,gBACpB,OAAoD,MAAK,SAAQ,aAAa,IAAI,CAAC,IACpF,aAAa,MAAM;CACvB,IAAI;CAEJ,IAAI,eAAe;EACjB,MAAM,UAAU;EAChB,eAAe,QAAQ,KAAI,SAAQ,mBAAmB,IAAI,CAAC;CAC7D,OACK,IAAI,OAAO,WAAW,YACzB,SAAS;MAEN,IAAI,MAAM,MAAM,GACnB,eAAgB,OAAoB;MAEjC,IAAI,kBACP,eAAe;MAGf,MAAM,IAAI,MAAM,aAAa;CAG/B,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF;AAEA,SAAgB,qBACd,QACA,QACA,eACA,kBACA,YACA;CACA,MAAM,cAAc,gBACf,OAAoD,MAAK,SAAQ,WAAW,IAAI,CAAC,IAClF;CACJ,MAAM,OAAO,cAAc;CAE3B,IAAI,EADe,SAAS,QAAQ,OAAO,SAAS,WAElD,OAAO;CAET,MAAM,QAAQ,OAAO,SAAS,WAAW,OAAQ,OAAO,WAAW;CACnE,aAAa;EACX,MAAM,QAAQ,OAAO;EACrB,MAAM,WAAW,qBAAqB;EACtC,IAAI,iBAAiB,MAAM,QAAQ,KAAK,GACtC,OAAO,MAAM,KAAK,SAAS;GACzB,IAAI,aAAa,aAAa,WAAW,IAAI,GAAG;IAC9C,cAAc,IAAW;IACzB,OAAO;GACT;GACA,OAAO,SAAS,MAAM,KAAK;EAC7B,CAAC;EAEH,IAAI,aAAa,aAAa,WAAW,KAAK,GAAG;GAC/C,cAAc,KAAY;GAC1B,OAAO;EACT;EACA,OAAO,SAAS,OAAO,KAAK;CAC9B;AACF;AAEA,SAAgB,qBACd,KACA,OACA,YACA,WACA;CACA,IAAI,WAAW;EACb,UAAU,KAAK,UAAU;EACzB;CACF;CACA,IAAI,UAAU,QAAQ;EACpB,IAAI;EACJ;CACF;CACA,IAAI,UAAU,QAAQ;EACpB,eAAe,SAAS,GAAG,CAAC;EAC5B;CACF;CACA,IAAI,YACF,IAAI;MAGJ,SAAS,GAAG;AAEhB"}
@@ -0,0 +1,43 @@
1
+ import { Ref } from "../ref.mjs";
2
+ import { ComputedRef } from "../computed.mjs";
3
+ //#region src/reactivity/watch/types.d.ts
4
+ export type OnCleanup = (cleanupFn: () => void) => void;
5
+ export type WatchEffect = (onCleanup: OnCleanup) => void;
6
+ export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);
7
+ export type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV, onCleanup: OnCleanup) => void;
8
+ export type WatchScheduler = (job: () => void, isFirstRun: boolean) => void;
9
+ export type MaybeUndefined<T, Immediate> = Immediate extends true ? T | undefined : T;
10
+ export type MultiWatchSources = (WatchSource<unknown> | object)[];
11
+ export type MapSources<T, Immediate> = { [K in keyof T]: T[K] extends WatchSource<infer V> ? MaybeUndefined<V, Immediate> : T[K] extends object ? MaybeUndefined<T[K], Immediate> : never; };
12
+ export type WatchSourceValue<S> = S extends WatchSource<infer V> ? V : S extends object ? S : never;
13
+ export type WatchSources<T = any> = WatchSource<T> | ReadonlyArray<WatchSource<unknown> | object> | (T extends object ? T : never);
14
+ type IsTuple<T extends ReadonlyArray<any>> = number extends T['length'] ? false : true;
15
+ export type WatchMultiSources<T extends ReadonlyArray<WatchSource<unknown> | object>> = IsTuple<T> extends true ? { [K in keyof T]: WatchSourceValue<T[K]>; } : Array<WatchSourceValue<T[number]>>;
16
+ export interface WatchEffectOptions {
17
+ flush?: 'pre' | 'post' | 'sync';
18
+ }
19
+ export interface WatchOptions<Immediate extends boolean = false> extends WatchEffectOptions {
20
+ immediate?: Immediate;
21
+ deep?: boolean | number;
22
+ once?: boolean;
23
+ scheduler?: WatchScheduler;
24
+ }
25
+ export interface WatchStopHandle {
26
+ (): void;
27
+ stop: () => void;
28
+ pause: () => void;
29
+ resume: () => void;
30
+ }
31
+ export type DeepWatchStrategy = 'version' | 'traverse';
32
+ /**
33
+ * 设置深度 watch 内部策略(测试/框架内部使用)。
34
+ * @internal
35
+ */
36
+ export declare function setDeepWatchStrategy(strategy: DeepWatchStrategy): void;
37
+ /**
38
+ * 获取深度 watch 内部策略(测试/框架内部使用)。
39
+ * @internal
40
+ */
41
+ export declare function getDeepWatchStrategy(): DeepWatchStrategy;
42
+ //#endregion
43
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1,22 @@
1
+ import { DeepWatchStrategy, MapSources, MaybeUndefined, MultiWatchSources, OnCleanup, WatchCallback, WatchEffect, WatchEffectOptions, WatchMultiSources, WatchOptions, WatchScheduler, WatchSource, WatchSourceValue, WatchSources, WatchStopHandle, getDeepWatchStrategy, setDeepWatchStrategy } from "./watch/types.mjs";
2
+ //#region src/reactivity/watch.d.ts
3
+ export declare function watch<T, Immediate extends Readonly<boolean> = false>(source: WatchSource<T>, cb: WatchCallback<T, MaybeUndefined<T, Immediate>>, options?: WatchOptions<Immediate>): WatchStopHandle;
4
+ export declare function watch<T extends object, Immediate extends Readonly<boolean> = false>(source: T extends ReadonlyArray<any> ? never : T, cb: WatchCallback<T, MaybeUndefined<T, Immediate>>, options?: WatchOptions<Immediate>): WatchStopHandle;
5
+ export declare function watch<T extends Readonly<MultiWatchSources>, Immediate extends Readonly<boolean> = false>(source: readonly [...T] | T, cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>, options?: WatchOptions<Immediate>): WatchStopHandle;
6
+ export declare function watch<T extends MultiWatchSources, Immediate extends Readonly<boolean> = false>(source: [...T], cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>, options?: WatchOptions<Immediate>): WatchStopHandle;
7
+ /**
8
+ * watchEffect 注册一个响应式副作用,可选清理函数。
9
+ * 副作用会立即执行,并在依赖变化时重新运行。
10
+ */
11
+ export declare function watchEffect(effectFn: WatchEffect, options?: WatchEffectOptions): WatchStopHandle;
12
+ /**
13
+ * 以后置刷新的方式运行副作用,与 Vue 的 `watchPostEffect()` 兼容。
14
+ */
15
+ export declare function watchPostEffect(effectFn: WatchEffect, options?: Omit<WatchEffectOptions, 'flush'>): WatchStopHandle;
16
+ /**
17
+ * 以同步刷新的方式运行副作用,与 Vue 的 `watchSyncEffect()` 兼容。
18
+ */
19
+ export declare function watchSyncEffect(effectFn: WatchEffect, options?: Omit<WatchEffectOptions, 'flush'>): WatchStopHandle;
20
+ //#endregion
21
+ export { type MapSources, type MaybeUndefined, type MultiWatchSources, type OnCleanup, type WatchCallback, type WatchEffect, type WatchEffectOptions, type WatchMultiSources, type WatchOptions, type WatchScheduler, type WatchSource, type WatchSourceValue, type WatchSources, type WatchStopHandle, getDeepWatchStrategy, setDeepWatchStrategy };
22
+ //# sourceMappingURL=watch.d.mts.map
@@ -5,7 +5,6 @@ import { applyDeepWatchGetter, createWatchGetter, dispatchScheduledJob } from ".
5
5
 
6
6
  //#region src/reactivity/watch.ts
7
7
  function watch(source, cb, options = {}) {
8
- var _options$flush;
9
8
  const ownerInstance = getCurrentInstance();
10
9
  const watchGetterContext = createWatchGetter(source);
11
10
  const getter = applyDeepWatchGetter(watchGetterContext.getter, source, watchGetterContext.isMultiSource, watchGetterContext.isReactiveSource, options.deep);
@@ -24,7 +23,7 @@ function watch(source, cb, options = {}) {
24
23
  cb(value, oldVal, cleanupRegister);
25
24
  stopHandle();
26
25
  } : cb;
27
- const flush = (_options$flush = options.flush) !== null && _options$flush !== void 0 ? _options$flush : "pre";
26
+ const flush = options.flush ?? "pre";
28
27
  const hasChanged = (newValue, previousValue) => {
29
28
  if (!watchGetterContext.isMultiSource) return !Object.is(newValue, previousValue);
30
29
  if (!Array.isArray(newValue) || !Array.isArray(previousValue)) return !Object.is(newValue, previousValue);
@@ -34,7 +33,7 @@ function watch(source, cb, options = {}) {
34
33
  if (!runner.active || paused || token !== pauseToken) return;
35
34
  const newValue = runner();
36
35
  if (!force && !forceTrigger && !hasChanged(newValue, oldValue)) return;
37
- cleanup === null || cleanup === void 0 || cleanup();
36
+ cleanup?.();
38
37
  const previousInstance = getCurrentInstance();
39
38
  setCurrentInstance(ownerInstance);
40
39
  try {
@@ -57,7 +56,7 @@ function watch(source, cb, options = {}) {
57
56
  lazy: true
58
57
  });
59
58
  const doStop = () => {
60
- cleanup === null || cleanup === void 0 || cleanup();
59
+ cleanup?.();
61
60
  cleanup = void 0;
62
61
  stop(runner);
63
62
  };
@@ -84,7 +83,6 @@ function watch(source, cb, options = {}) {
84
83
  * 副作用会立即执行,并在依赖变化时重新运行。
85
84
  */
86
85
  function watchEffect(effectFn, options = {}) {
87
- var _options$flush2;
88
86
  const ownerInstance = getCurrentInstance();
89
87
  let cleanup;
90
88
  const onCleanup = (fn) => {
@@ -94,7 +92,7 @@ function watchEffect(effectFn, options = {}) {
94
92
  let paused = false;
95
93
  let pauseToken = 0;
96
94
  let scheduledToken = pauseToken;
97
- const flush = (_options$flush2 = options.flush) !== null && _options$flush2 !== void 0 ? _options$flush2 : "pre";
95
+ const flush = options.flush ?? "pre";
98
96
  const runJob = (token) => {
99
97
  if (!runner.active || paused || token !== pauseToken) return;
100
98
  runner();
@@ -105,7 +103,7 @@ function watchEffect(effectFn, options = {}) {
105
103
  dispatchScheduledJob(scheduledJob, flush, isFirstRun);
106
104
  };
107
105
  runner = effect(() => {
108
- cleanup === null || cleanup === void 0 || cleanup();
106
+ cleanup?.();
109
107
  cleanup = void 0;
110
108
  const previousInstance = getCurrentInstance();
111
109
  setCurrentInstance(ownerInstance);
@@ -123,7 +121,7 @@ function watchEffect(effectFn, options = {}) {
123
121
  });
124
122
  scheduleJob(true);
125
123
  const doStop = () => {
126
- cleanup === null || cleanup === void 0 || cleanup();
124
+ cleanup?.();
127
125
  cleanup = void 0;
128
126
  stop(runner);
129
127
  };
@@ -1 +1 @@
1
- {"version":3,"file":"watch.mjs","names":[],"sources":["../../../src/reactivity/watch.ts"],"sourcesContent":["import type { ReactiveEffect } from './core'\nimport type {\n MapSources,\n MaybeUndefined,\n MultiWatchSources,\n OnCleanup,\n WatchCallback,\n WatchEffect,\n WatchEffectOptions,\n WatchOptions,\n WatchSource,\n WatchSources,\n WatchStopHandle,\n} from './watch/types'\nimport { getCurrentInstance, setCurrentInstance } from '../runtime/hooks'\nimport { effect, onScopeDispose, stop } from './core'\nimport { applyDeepWatchGetter, createWatchGetter, dispatchScheduledJob } from './watch/helpers'\n\nexport type {\n DeepWatchStrategy,\n MapSources,\n MaybeUndefined,\n MultiWatchSources,\n OnCleanup,\n WatchCallback,\n WatchEffect,\n WatchEffectOptions,\n WatchMultiSources,\n WatchOptions,\n WatchScheduler,\n WatchSource,\n WatchSources,\n WatchSourceValue,\n WatchStopHandle,\n} from './watch/types'\nexport { getDeepWatchStrategy, setDeepWatchStrategy } from './watch/types'\n\nexport function watch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, MaybeUndefined<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T extends ReadonlyArray<any> ? never : T,\n cb: WatchCallback<T, MaybeUndefined<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends Readonly<MultiWatchSources>, Immediate extends Readonly<boolean> = false>(\n source: readonly [...T] | T,\n cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends MultiWatchSources, Immediate extends Readonly<boolean> = false>(\n source: [...T],\n cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch(\n source: WatchSources<any>,\n cb: WatchCallback,\n options: WatchOptions = {},\n): WatchStopHandle {\n const ownerInstance = getCurrentInstance()\n const watchGetterContext = createWatchGetter(source)\n const getter = applyDeepWatchGetter(\n watchGetterContext.getter,\n source,\n watchGetterContext.isMultiSource,\n watchGetterContext.isReactiveSource,\n options.deep,\n )\n const forceTrigger = options.deep === true\n || typeof options.deep === 'number'\n || (options.deep === undefined && watchGetterContext.hasReactiveSource)\n || watchGetterContext.hasShallowSource\n\n let cleanup: (() => void) | undefined\n const onCleanup: OnCleanup = (fn) => {\n cleanup = fn\n }\n\n let oldValue: any = watchGetterContext.isMultiSource ? [] : undefined\n let runner: ReactiveEffect<any>\n let paused = false\n let pauseToken = 0\n let scheduledToken = pauseToken\n let stopHandle: WatchStopHandle\n const cbWithOnce: WatchCallback = options.once\n ? (value, oldVal, cleanupRegister) => {\n cb(value, oldVal, cleanupRegister)\n stopHandle()\n }\n : cb\n const flush = options.flush ?? 'pre'\n\n const hasChanged = (newValue: any, previousValue: any) => {\n if (!watchGetterContext.isMultiSource) {\n return !Object.is(newValue, previousValue)\n }\n if (!Array.isArray(newValue) || !Array.isArray(previousValue)) {\n return !Object.is(newValue, previousValue)\n }\n return newValue.length !== previousValue.length\n || newValue.some((value, index) => !Object.is(value, previousValue[index]))\n }\n\n const runJob = (token: number, force = false) => {\n if (!runner.active || paused || token !== pauseToken) {\n return\n }\n const newValue = runner()\n if (!force && !forceTrigger && !hasChanged(newValue, oldValue)) {\n return\n }\n cleanup?.()\n const previousInstance = getCurrentInstance()\n setCurrentInstance(ownerInstance)\n try {\n cbWithOnce(newValue, oldValue, onCleanup)\n }\n finally {\n setCurrentInstance(previousInstance)\n }\n oldValue = newValue\n }\n const scheduledJob = () => runJob(scheduledToken)\n\n const scheduleJob = (isFirstRun: boolean) => {\n scheduledToken = pauseToken\n dispatchScheduledJob(scheduledJob, flush, isFirstRun, options.scheduler)\n }\n\n runner = effect(() => getter(), {\n scheduler: () => {\n if (paused) {\n return\n }\n scheduleJob(false)\n },\n lazy: true,\n })\n\n const doStop = () => {\n cleanup?.()\n cleanup = undefined\n stop(runner)\n }\n stopHandle = doStop as WatchStopHandle\n stopHandle.stop = doStop\n stopHandle.pause = () => {\n if (!paused) {\n paused = true\n pauseToken += 1\n }\n }\n stopHandle.resume = () => {\n if (!paused || !runner.active) {\n return\n }\n paused = false\n oldValue = runner()\n }\n\n if (options.immediate) {\n runJob(pauseToken, true)\n }\n else {\n oldValue = runner()\n }\n onScopeDispose(stopHandle)\n return stopHandle\n}\n\n/**\n * watchEffect 注册一个响应式副作用,可选清理函数。\n * 副作用会立即执行,并在依赖变化时重新运行。\n */\nexport function watchEffect(\n effectFn: WatchEffect,\n options: WatchEffectOptions = {},\n): WatchStopHandle {\n const ownerInstance = getCurrentInstance()\n let cleanup: (() => void) | undefined\n const onCleanup: OnCleanup = (fn) => {\n cleanup = fn\n }\n let runner: ReactiveEffect\n let paused = false\n let pauseToken = 0\n let scheduledToken = pauseToken\n const flush = options.flush ?? 'pre'\n\n const runJob = (token: number) => {\n if (!runner.active || paused || token !== pauseToken) {\n return\n }\n runner()\n }\n const scheduledJob = () => runJob(scheduledToken)\n\n const scheduleJob = (isFirstRun: boolean) => {\n scheduledToken = pauseToken\n dispatchScheduledJob(scheduledJob, flush, isFirstRun)\n }\n\n runner = effect(\n () => {\n cleanup?.()\n cleanup = undefined\n const previousInstance = getCurrentInstance()\n setCurrentInstance(ownerInstance)\n try {\n effectFn(onCleanup)\n }\n finally {\n setCurrentInstance(previousInstance)\n }\n },\n {\n lazy: true,\n scheduler: () => {\n if (paused) {\n return\n }\n scheduleJob(false)\n },\n },\n )\n scheduleJob(true)\n\n const doStop = () => {\n cleanup?.()\n cleanup = undefined\n stop(runner)\n }\n const stopHandle = doStop as WatchStopHandle\n stopHandle.stop = doStop\n stopHandle.pause = () => {\n if (!paused) {\n paused = true\n pauseToken += 1\n }\n }\n stopHandle.resume = () => {\n if (!paused || !runner.active) {\n return\n }\n paused = false\n scheduleJob(true)\n }\n onScopeDispose(stopHandle)\n return stopHandle\n}\n\n/**\n * 以后置刷新的方式运行副作用,与 Vue 的 `watchPostEffect()` 兼容。\n */\nexport function watchPostEffect(\n effectFn: WatchEffect,\n options: Omit<WatchEffectOptions, 'flush'> = {},\n): WatchStopHandle {\n return watchEffect(effectFn, {\n ...options,\n flush: 'post',\n })\n}\n\n/**\n * 以同步刷新的方式运行副作用,与 Vue 的 `watchSyncEffect()` 兼容。\n */\nexport function watchSyncEffect(\n effectFn: WatchEffect,\n options: Omit<WatchEffectOptions, 'flush'> = {},\n): WatchStopHandle {\n return watchEffect(effectFn, {\n ...options,\n flush: 'sync',\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"watch.mjs","names":[],"sources":["../../../src/reactivity/watch.ts"],"sourcesContent":["import type { ReactiveEffect } from './core'\nimport type {\n MapSources,\n MaybeUndefined,\n MultiWatchSources,\n OnCleanup,\n WatchCallback,\n WatchEffect,\n WatchEffectOptions,\n WatchOptions,\n WatchSource,\n WatchSources,\n WatchStopHandle,\n} from './watch/types'\nimport { getCurrentInstance, setCurrentInstance } from '../runtime/hooks'\nimport { effect, onScopeDispose, stop } from './core'\nimport { applyDeepWatchGetter, createWatchGetter, dispatchScheduledJob } from './watch/helpers'\n\nexport type {\n DeepWatchStrategy,\n MapSources,\n MaybeUndefined,\n MultiWatchSources,\n OnCleanup,\n WatchCallback,\n WatchEffect,\n WatchEffectOptions,\n WatchMultiSources,\n WatchOptions,\n WatchScheduler,\n WatchSource,\n WatchSources,\n WatchSourceValue,\n WatchStopHandle,\n} from './watch/types'\nexport { getDeepWatchStrategy, setDeepWatchStrategy } from './watch/types'\n\nexport function watch<T, Immediate extends Readonly<boolean> = false>(\n source: WatchSource<T>,\n cb: WatchCallback<T, MaybeUndefined<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends object, Immediate extends Readonly<boolean> = false>(\n source: T extends ReadonlyArray<any> ? never : T,\n cb: WatchCallback<T, MaybeUndefined<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends Readonly<MultiWatchSources>, Immediate extends Readonly<boolean> = false>(\n source: readonly [...T] | T,\n cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch<T extends MultiWatchSources, Immediate extends Readonly<boolean> = false>(\n source: [...T],\n cb: WatchCallback<MapSources<T, false>, MapSources<T, Immediate>>,\n options?: WatchOptions<Immediate>,\n): WatchStopHandle\nexport function watch(\n source: WatchSources<any>,\n cb: WatchCallback,\n options: WatchOptions = {},\n): WatchStopHandle {\n const ownerInstance = getCurrentInstance()\n const watchGetterContext = createWatchGetter(source)\n const getter = applyDeepWatchGetter(\n watchGetterContext.getter,\n source,\n watchGetterContext.isMultiSource,\n watchGetterContext.isReactiveSource,\n options.deep,\n )\n const forceTrigger = options.deep === true\n || typeof options.deep === 'number'\n || (options.deep === undefined && watchGetterContext.hasReactiveSource)\n || watchGetterContext.hasShallowSource\n\n let cleanup: (() => void) | undefined\n const onCleanup: OnCleanup = (fn) => {\n cleanup = fn\n }\n\n let oldValue: any = watchGetterContext.isMultiSource ? [] : undefined\n let runner: ReactiveEffect<any>\n let paused = false\n let pauseToken = 0\n let scheduledToken = pauseToken\n let stopHandle: WatchStopHandle\n const cbWithOnce: WatchCallback = options.once\n ? (value, oldVal, cleanupRegister) => {\n cb(value, oldVal, cleanupRegister)\n stopHandle()\n }\n : cb\n const flush = options.flush ?? 'pre'\n\n const hasChanged = (newValue: any, previousValue: any) => {\n if (!watchGetterContext.isMultiSource) {\n return !Object.is(newValue, previousValue)\n }\n if (!Array.isArray(newValue) || !Array.isArray(previousValue)) {\n return !Object.is(newValue, previousValue)\n }\n return newValue.length !== previousValue.length\n || newValue.some((value, index) => !Object.is(value, previousValue[index]))\n }\n\n const runJob = (token: number, force = false) => {\n if (!runner.active || paused || token !== pauseToken) {\n return\n }\n const newValue = runner()\n if (!force && !forceTrigger && !hasChanged(newValue, oldValue)) {\n return\n }\n cleanup?.()\n const previousInstance = getCurrentInstance()\n setCurrentInstance(ownerInstance)\n try {\n cbWithOnce(newValue, oldValue, onCleanup)\n }\n finally {\n setCurrentInstance(previousInstance)\n }\n oldValue = newValue\n }\n const scheduledJob = () => runJob(scheduledToken)\n\n const scheduleJob = (isFirstRun: boolean) => {\n scheduledToken = pauseToken\n dispatchScheduledJob(scheduledJob, flush, isFirstRun, options.scheduler)\n }\n\n runner = effect(() => getter(), {\n scheduler: () => {\n if (paused) {\n return\n }\n scheduleJob(false)\n },\n lazy: true,\n })\n\n const doStop = () => {\n cleanup?.()\n cleanup = undefined\n stop(runner)\n }\n stopHandle = doStop as WatchStopHandle\n stopHandle.stop = doStop\n stopHandle.pause = () => {\n if (!paused) {\n paused = true\n pauseToken += 1\n }\n }\n stopHandle.resume = () => {\n if (!paused || !runner.active) {\n return\n }\n paused = false\n oldValue = runner()\n }\n\n if (options.immediate) {\n runJob(pauseToken, true)\n }\n else {\n oldValue = runner()\n }\n onScopeDispose(stopHandle)\n return stopHandle\n}\n\n/**\n * watchEffect 注册一个响应式副作用,可选清理函数。\n * 副作用会立即执行,并在依赖变化时重新运行。\n */\nexport function watchEffect(\n effectFn: WatchEffect,\n options: WatchEffectOptions = {},\n): WatchStopHandle {\n const ownerInstance = getCurrentInstance()\n let cleanup: (() => void) | undefined\n const onCleanup: OnCleanup = (fn) => {\n cleanup = fn\n }\n let runner: ReactiveEffect\n let paused = false\n let pauseToken = 0\n let scheduledToken = pauseToken\n const flush = options.flush ?? 'pre'\n\n const runJob = (token: number) => {\n if (!runner.active || paused || token !== pauseToken) {\n return\n }\n runner()\n }\n const scheduledJob = () => runJob(scheduledToken)\n\n const scheduleJob = (isFirstRun: boolean) => {\n scheduledToken = pauseToken\n dispatchScheduledJob(scheduledJob, flush, isFirstRun)\n }\n\n runner = effect(\n () => {\n cleanup?.()\n cleanup = undefined\n const previousInstance = getCurrentInstance()\n setCurrentInstance(ownerInstance)\n try {\n effectFn(onCleanup)\n }\n finally {\n setCurrentInstance(previousInstance)\n }\n },\n {\n lazy: true,\n scheduler: () => {\n if (paused) {\n return\n }\n scheduleJob(false)\n },\n },\n )\n scheduleJob(true)\n\n const doStop = () => {\n cleanup?.()\n cleanup = undefined\n stop(runner)\n }\n const stopHandle = doStop as WatchStopHandle\n stopHandle.stop = doStop\n stopHandle.pause = () => {\n if (!paused) {\n paused = true\n pauseToken += 1\n }\n }\n stopHandle.resume = () => {\n if (!paused || !runner.active) {\n return\n }\n paused = false\n scheduleJob(true)\n }\n onScopeDispose(stopHandle)\n return stopHandle\n}\n\n/**\n * 以后置刷新的方式运行副作用,与 Vue 的 `watchPostEffect()` 兼容。\n */\nexport function watchPostEffect(\n effectFn: WatchEffect,\n options: Omit<WatchEffectOptions, 'flush'> = {},\n): WatchStopHandle {\n return watchEffect(effectFn, {\n ...options,\n flush: 'post',\n })\n}\n\n/**\n * 以同步刷新的方式运行副作用,与 Vue 的 `watchSyncEffect()` 兼容。\n */\nexport function watchSyncEffect(\n effectFn: WatchEffect,\n options: Omit<WatchEffectOptions, 'flush'> = {},\n): WatchStopHandle {\n return watchEffect(effectFn, {\n ...options,\n flush: 'sync',\n })\n}\n"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { WevuAutoRoute } from "./types.mjs";
2
+ import { WevuNamedRouteMap } from "../router.mjs";
3
+ //#region src/router/auto-routes.d.ts
4
+ export type WevuAutoRoutes<TRouteMap extends object = WevuNamedRouteMap> = readonly WevuAutoRoute<TRouteMap>[];
5
+ export declare const routes: WevuAutoRoutes;
6
+ //#endregion
7
+ export type { WevuAutoRoute };
8
+ //# sourceMappingURL=auto-routes.d.mts.map
@@ -0,0 +1,9 @@
1
+ import { RouterNavigation, UseRouterOptions } from "./types.mjs";
2
+ import { WevuNamedRouteMap } from "../router.mjs";
3
+ //#region src/router/createRouter.d.ts
4
+ /**
5
+ * @description 创建高阶路由导航器(对齐 Vue Router 的 createRouter 心智)
6
+ */
7
+ export declare function createRouter<TRouteMap extends object = WevuNamedRouteMap>(optionsInput?: UseRouterOptions<NoInfer<TRouteMap>>): RouterNavigation<TRouteMap>;
8
+ //#endregion
9
+ //# sourceMappingURL=createRouter.d.mts.map