wevu 7.2.2 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/README.md +6 -0
  2. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +1 -1
  3. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +1 -1
  4. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +1 -1
  5. package/dist/dev/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +1 -1
  6. package/dist/dev/internal-runtime.d.mts +2 -1
  7. package/dist/dev/internal-runtime.mjs +3 -2
  8. package/dist/dev/package.mjs +1 -1
  9. package/dist/dev/reactivity/asyncDerivation.mjs +8 -10
  10. package/dist/dev/reactivity/asyncDerivation.mjs.map +1 -1
  11. package/dist/dev/reactivity/core.mjs +5 -8
  12. package/dist/dev/reactivity/core.mjs.map +1 -1
  13. package/dist/dev/reactivity/reactive/patch.mjs +3 -3
  14. package/dist/dev/reactivity/reactive/patch.mjs.map +1 -1
  15. package/dist/dev/reactivity/reactive/patchState.mjs +4 -8
  16. package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -1
  17. package/dist/dev/reactivity/reactive/shared.mjs +1 -2
  18. package/dist/dev/reactivity/reactive/shared.mjs.map +1 -1
  19. package/dist/dev/reactivity/reactive.mjs +5 -10
  20. package/dist/dev/reactivity/reactive.mjs.map +1 -1
  21. package/dist/dev/reactivity/ref.mjs +2 -2
  22. package/dist/dev/reactivity/ref.mjs.map +1 -1
  23. package/dist/dev/reactivity/shallowRef.mjs +1 -1
  24. package/dist/dev/reactivity/shallowRef.mjs.map +1 -1
  25. package/dist/dev/reactivity/watch/helpers.mjs +1 -1
  26. package/dist/dev/reactivity/watch/helpers.mjs.map +1 -1
  27. package/dist/dev/reactivity/watch.mjs +6 -8
  28. package/dist/dev/reactivity/watch.mjs.map +1 -1
  29. package/dist/dev/router/createRouter.mjs +17 -24
  30. package/dist/dev/router/createRouter.mjs.map +1 -1
  31. package/dist/dev/router/initialNavigation.mjs +18 -16
  32. package/dist/dev/router/initialNavigation.mjs.map +1 -1
  33. package/dist/dev/router/instance.mjs +1 -2
  34. package/dist/dev/router/instance.mjs.map +1 -1
  35. package/dist/dev/router/navigationCore.mjs +2 -2
  36. package/dist/dev/router/navigationCore.mjs.map +1 -1
  37. package/dist/dev/router/navigationResult.mjs +7 -10
  38. package/dist/dev/router/navigationResult.mjs.map +1 -1
  39. package/dist/dev/router/navigationTarget.mjs +1 -3
  40. package/dist/dev/router/navigationTarget.mjs.map +1 -1
  41. package/dist/dev/router/resolve.mjs +3 -4
  42. package/dist/dev/router/resolve.mjs.map +1 -1
  43. package/dist/dev/router/routeRegistry.mjs +1 -1
  44. package/dist/dev/router/routeRegistry.mjs.map +1 -1
  45. package/dist/dev/router/routeSync.mjs +1 -1
  46. package/dist/dev/router/routeSync.mjs.map +1 -1
  47. package/dist/dev/router/useRoute.mjs +12 -19
  48. package/dist/dev/router/useRoute.mjs.map +1 -1
  49. package/dist/dev/routerInternal/location.mjs +2 -3
  50. package/dist/dev/routerInternal/location.mjs.map +1 -1
  51. package/dist/dev/routerInternal/params.mjs +2 -3
  52. package/dist/dev/routerInternal/params.mjs.map +1 -1
  53. package/dist/dev/routerInternal/records.mjs +1 -1
  54. package/dist/dev/routerInternal/records.mjs.map +1 -1
  55. package/dist/dev/routerInternal/recordsWarnings.mjs +1 -2
  56. package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -1
  57. package/dist/dev/runtime/app/context.mjs +13 -26
  58. package/dist/dev/runtime/app/context.mjs.map +1 -1
  59. package/dist/dev/runtime/app/diagnostics.mjs +2 -4
  60. package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
  61. package/dist/dev/runtime/app/mount.mjs +27 -33
  62. package/dist/dev/runtime/app/mount.mjs.map +1 -1
  63. package/dist/dev/runtime/app/setData/commitTracker.mjs +5 -9
  64. package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
  65. package/dist/dev/runtime/app/setData/patchScheduler.mjs +2 -4
  66. package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -1
  67. package/dist/dev/runtime/app/setData/payload.mjs +2 -3
  68. package/dist/dev/runtime/app/setData/payload.mjs.map +1 -1
  69. package/dist/dev/runtime/app/setData/scheduler.mjs +7 -9
  70. package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
  71. package/dist/dev/runtime/app/setData/snapshot.mjs +5 -6
  72. package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -1
  73. package/dist/dev/runtime/app/setDataOptions.mjs +26 -27
  74. package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
  75. package/dist/dev/runtime/app.mjs +9 -9
  76. package/dist/dev/runtime/app.mjs.map +1 -1
  77. package/dist/dev/runtime/bindingManifest.mjs +6 -14
  78. package/dist/dev/runtime/bindingManifest.mjs.map +1 -1
  79. package/dist/dev/runtime/capabilities.d.mts +4 -1
  80. package/dist/dev/runtime/capabilities.mjs.map +1 -1
  81. package/dist/dev/runtime/css.mjs +4 -8
  82. package/dist/dev/runtime/css.mjs.map +1 -1
  83. package/dist/dev/runtime/defaults.mjs +4 -4
  84. package/dist/dev/runtime/defaults.mjs.map +1 -1
  85. package/dist/dev/runtime/define/initialComputed.mjs +5 -5
  86. package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
  87. package/dist/dev/runtime/define/options.mjs +10 -12
  88. package/dist/dev/runtime/define/options.mjs.map +1 -1
  89. package/dist/dev/runtime/define/props.mjs +4 -5
  90. package/dist/dev/runtime/define/props.mjs.map +1 -1
  91. package/dist/dev/runtime/define/scopedSlotOptions.mjs +43 -61
  92. package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
  93. package/dist/dev/runtime/define/setupResult.mjs +17 -28
  94. package/dist/dev/runtime/define/setupResult.mjs.map +1 -1
  95. package/dist/dev/runtime/define.mjs +9 -12
  96. package/dist/dev/runtime/define.mjs.map +1 -1
  97. package/dist/dev/runtime/diff.mjs +9 -11
  98. package/dist/dev/runtime/diff.mjs.map +1 -1
  99. package/dist/dev/runtime/disposables.mjs +2 -2
  100. package/dist/dev/runtime/disposables.mjs.map +1 -1
  101. package/dist/dev/runtime/elementIntersectionObserver.mjs +16 -24
  102. package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -1
  103. package/dist/dev/runtime/features/inlineEvents.mjs +2 -3
  104. package/dist/dev/runtime/features/inlineEvents.mjs.map +1 -1
  105. package/dist/dev/runtime/features/jsxIslands.d.mts +7 -0
  106. package/dist/dev/runtime/features/jsxIslands.mjs +20 -0
  107. package/dist/dev/runtime/features/jsxIslands.mjs.map +1 -0
  108. package/dist/dev/runtime/features/layout.mjs +2 -3
  109. package/dist/dev/runtime/features/layout.mjs.map +1 -1
  110. package/dist/dev/runtime/features/publicLayout.mjs +2 -6
  111. package/dist/dev/runtime/features/publicLayout.mjs.map +1 -1
  112. package/dist/dev/runtime/features/scopedSlots.mjs +5 -9
  113. package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
  114. package/dist/dev/runtime/features/templateRefs.mjs +1 -1
  115. package/dist/dev/runtime/features/templateRefs.mjs.map +1 -1
  116. package/dist/dev/runtime/hooks/base.mjs +21 -32
  117. package/dist/dev/runtime/hooks/base.mjs.map +1 -1
  118. package/dist/dev/runtime/inlineDataset.mjs +1 -2
  119. package/dist/dev/runtime/inlineDataset.mjs.map +1 -1
  120. package/dist/dev/runtime/intersectionObserver.mjs +6 -6
  121. package/dist/dev/runtime/intersectionObserver.mjs.map +1 -1
  122. package/dist/dev/runtime/jsxIsland.mjs +16 -33
  123. package/dist/dev/runtime/jsxIsland.mjs.map +1 -1
  124. package/dist/dev/runtime/layoutBridge.mjs +32 -62
  125. package/dist/dev/runtime/layoutBridge.mjs.map +1 -1
  126. package/dist/dev/runtime/nativeBridge.mjs +1 -1
  127. package/dist/dev/runtime/nativeBridge.mjs.map +1 -1
  128. package/dist/dev/runtime/navigationLifecycle.mjs +24 -0
  129. package/dist/dev/runtime/navigationLifecycle.mjs.map +1 -0
  130. package/dist/dev/runtime/pageEnvironment.mjs +15 -18
  131. package/dist/dev/runtime/pageEnvironment.mjs.map +1 -1
  132. package/dist/dev/runtime/pageLayout.mjs +7 -11
  133. package/dist/dev/runtime/pageLayout.mjs.map +1 -1
  134. package/dist/dev/runtime/pageScroll.mjs +2 -3
  135. package/dist/dev/runtime/pageScroll.mjs.map +1 -1
  136. package/dist/dev/runtime/platform/current.mjs +12 -0
  137. package/dist/dev/runtime/platform/current.mjs.map +1 -0
  138. package/dist/dev/runtime/platform/generic.mjs +36 -0
  139. package/dist/dev/runtime/platform/generic.mjs.map +1 -0
  140. package/dist/dev/runtime/platform/globals.mjs +29 -0
  141. package/dist/dev/runtime/platform/globals.mjs.map +1 -0
  142. package/dist/dev/runtime/platform.mjs +15 -60
  143. package/dist/dev/runtime/platform.mjs.map +1 -1
  144. package/dist/dev/runtime/provideContext.mjs +7 -9
  145. package/dist/dev/runtime/provideContext.mjs.map +1 -1
  146. package/dist/dev/runtime/publicRuntime.mjs +4 -0
  147. package/dist/dev/runtime/publicRuntime.mjs.map +1 -1
  148. package/dist/dev/runtime/pullDownRefresh.mjs +2 -4
  149. package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -1
  150. package/dist/dev/runtime/register/app.mjs +18 -19
  151. package/dist/dev/runtime/register/app.mjs.map +1 -1
  152. package/dist/dev/runtime/register/component/alipay.mjs +9 -18
  153. package/dist/dev/runtime/register/component/alipay.mjs.map +1 -1
  154. package/dist/dev/runtime/register/component/alipayRegistration.mjs +60 -0
  155. package/dist/dev/runtime/register/component/alipayRegistration.mjs.map +1 -0
  156. package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -9
  157. package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
  158. package/dist/dev/runtime/register/component/lifecycle.mjs +7 -12
  159. package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -1
  160. package/dist/dev/runtime/register/component/methods.mjs +13 -18
  161. package/dist/dev/runtime/register/component/methods.mjs.map +1 -1
  162. package/dist/dev/runtime/register/component/options.mjs +3 -4
  163. package/dist/dev/runtime/register/component/options.mjs.map +1 -1
  164. package/dist/dev/runtime/register/component/props.mjs +25 -31
  165. package/dist/dev/runtime/register/component/props.mjs.map +1 -1
  166. package/dist/dev/runtime/register/component/registerDefinition.mjs +18 -40
  167. package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
  168. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs +18 -60
  169. package/dist/dev/runtime/register/component/registerNativeDefinition.mjs.map +1 -1
  170. package/dist/dev/runtime/register/component.mjs +3 -5
  171. package/dist/dev/runtime/register/component.mjs.map +1 -1
  172. package/dist/dev/runtime/register/inline.mjs +8 -10
  173. package/dist/dev/runtime/register/inline.mjs.map +1 -1
  174. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +7 -8
  175. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
  176. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  177. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
  178. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +25 -34
  179. package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -1
  180. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +6 -13
  181. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
  182. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs +2 -2
  183. package/dist/dev/runtime/register/runtimeInstance/setupSnapshot.mjs.map +1 -1
  184. package/dist/dev/runtime/register/runtimeInstance/utils.mjs +9 -9
  185. package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
  186. package/dist/dev/runtime/register/runtimeInstance.mjs +74 -100
  187. package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
  188. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +12 -15
  189. package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -1
  190. package/dist/dev/runtime/register/setup.mjs +2 -3
  191. package/dist/dev/runtime/register/setup.mjs.map +1 -1
  192. package/dist/dev/runtime/register/snapshot.mjs +1 -4
  193. package/dist/dev/runtime/register/snapshot.mjs.map +1 -1
  194. package/dist/dev/runtime/register/watch.mjs +3 -5
  195. package/dist/dev/runtime/register/watch.mjs.map +1 -1
  196. package/dist/dev/runtime/scopedSlots.mjs +14 -21
  197. package/dist/dev/runtime/scopedSlots.mjs.map +1 -1
  198. package/dist/dev/runtime/selectorQuery.mjs +5 -9
  199. package/dist/dev/runtime/selectorQuery.mjs.map +1 -1
  200. package/dist/dev/runtime/template.mjs +1 -1
  201. package/dist/dev/runtime/template.mjs.map +1 -1
  202. package/dist/dev/runtime/templateRefs/helpers.mjs +14 -24
  203. package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -1
  204. package/dist/dev/runtime/templateRefs.mjs +8 -15
  205. package/dist/dev/runtime/templateRefs.mjs.map +1 -1
  206. package/dist/dev/runtime/uniAppHost.mjs +6 -14
  207. package/dist/dev/runtime/uniAppHost.mjs.map +1 -1
  208. package/dist/dev/runtime/updatePerformance.mjs +1 -1
  209. package/dist/dev/runtime/updatePerformance.mjs.map +1 -1
  210. package/dist/dev/runtime/use.mjs +1 -1
  211. package/dist/dev/runtime/use.mjs.map +1 -1
  212. package/dist/dev/runtime/vueCompat/context.mjs +3 -5
  213. package/dist/dev/runtime/vueCompat/context.mjs.map +1 -1
  214. package/dist/dev/runtime/vueCompat/model.mjs +9 -13
  215. package/dist/dev/runtime/vueCompat/model.mjs.map +1 -1
  216. package/dist/dev/runtime/vueCompat/router.mjs +4 -4
  217. package/dist/dev/runtime/vueCompat/router.mjs.map +1 -1
  218. package/dist/dev/runtime/vueCompat/templateRef.mjs +1 -1
  219. package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -1
  220. package/dist/dev/scheduler.mjs +3 -4
  221. package/dist/dev/scheduler.mjs.map +1 -1
  222. package/dist/dev/store/base.mjs +1 -2
  223. package/dist/dev/store/base.mjs.map +1 -1
  224. package/dist/dev/store/define/create.mjs +11 -22
  225. package/dist/dev/store/define/create.mjs.map +1 -1
  226. package/dist/dev/store/define.mjs +1 -1
  227. package/dist/dev/store/define.mjs.map +1 -1
  228. package/dist/dev/store/view.mjs +1 -1
  229. package/dist/dev/store/view.mjs.map +1 -1
  230. package/dist/internal-runtime.d.mts +2 -1
  231. package/dist/internal-runtime.mjs +1 -1
  232. package/dist/package.mjs +1 -1
  233. package/dist/reactivity/asyncDerivation.mjs +1 -1
  234. package/dist/reactivity/core.mjs +1 -1
  235. package/dist/reactivity/reactive/patch.mjs +1 -1
  236. package/dist/reactivity/reactive/patchState.mjs +1 -1
  237. package/dist/reactivity/reactive/shared.mjs +1 -1
  238. package/dist/reactivity/reactive.mjs +1 -1
  239. package/dist/reactivity/ref.mjs +1 -1
  240. package/dist/reactivity/shallowRef.mjs +1 -1
  241. package/dist/reactivity/watch/helpers.mjs +1 -1
  242. package/dist/reactivity/watch.mjs +1 -1
  243. package/dist/router/createRouter.mjs +1 -1
  244. package/dist/router/initialNavigation.mjs +1 -1
  245. package/dist/router/instance.mjs +1 -1
  246. package/dist/router/navigationCore.mjs +1 -1
  247. package/dist/router/navigationResult.mjs +1 -1
  248. package/dist/router/navigationTarget.mjs +1 -1
  249. package/dist/router/resolve.mjs +1 -1
  250. package/dist/router/routeRegistry.mjs +1 -1
  251. package/dist/router/routeSync.mjs +1 -1
  252. package/dist/router/useRoute.mjs +1 -1
  253. package/dist/routerInternal/location.mjs +1 -1
  254. package/dist/routerInternal/params.mjs +1 -1
  255. package/dist/routerInternal/records.mjs +1 -1
  256. package/dist/routerInternal/recordsWarnings.mjs +1 -1
  257. package/dist/runtime/app/context.mjs +1 -1
  258. package/dist/runtime/app/diagnostics.mjs +1 -1
  259. package/dist/runtime/app/mount.mjs +1 -1
  260. package/dist/runtime/app/setData/commitTracker.mjs +1 -1
  261. package/dist/runtime/app/setData/patchScheduler.mjs +1 -1
  262. package/dist/runtime/app/setData/payload.mjs +1 -1
  263. package/dist/runtime/app/setData/scheduler.mjs +1 -1
  264. package/dist/runtime/app/setData/snapshot.mjs +1 -1
  265. package/dist/runtime/app/setDataOptions.mjs +1 -1
  266. package/dist/runtime/app.mjs +1 -1
  267. package/dist/runtime/bindingManifest.mjs +1 -1
  268. package/dist/runtime/capabilities.d.mts +4 -1
  269. package/dist/runtime/css.mjs +1 -1
  270. package/dist/runtime/defaults.mjs +1 -1
  271. package/dist/runtime/define/initialComputed.mjs +1 -1
  272. package/dist/runtime/define/options.mjs +1 -1
  273. package/dist/runtime/define/props.mjs +1 -1
  274. package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
  275. package/dist/runtime/define/setupResult.mjs +1 -1
  276. package/dist/runtime/define.mjs +1 -1
  277. package/dist/runtime/diff.mjs +1 -1
  278. package/dist/runtime/disposables.mjs +1 -1
  279. package/dist/runtime/elementIntersectionObserver.mjs +1 -1
  280. package/dist/runtime/features/inlineEvents.mjs +1 -1
  281. package/dist/runtime/features/jsxIslands.d.mts +6 -0
  282. package/dist/runtime/features/jsxIslands.mjs +1 -0
  283. package/dist/runtime/features/layout.mjs +1 -1
  284. package/dist/runtime/features/publicLayout.mjs +1 -1
  285. package/dist/runtime/features/scopedSlots.mjs +1 -1
  286. package/dist/runtime/features/templateRefs.mjs +1 -1
  287. package/dist/runtime/hooks/base.mjs +1 -1
  288. package/dist/runtime/inlineDataset.mjs +1 -1
  289. package/dist/runtime/intersectionObserver.mjs +1 -1
  290. package/dist/runtime/jsxIsland.mjs +1 -1
  291. package/dist/runtime/layoutBridge.mjs +1 -1
  292. package/dist/runtime/nativeBridge.mjs +1 -1
  293. package/dist/runtime/navigationLifecycle.mjs +1 -0
  294. package/dist/runtime/pageEnvironment.mjs +1 -1
  295. package/dist/runtime/pageLayout.mjs +1 -1
  296. package/dist/runtime/pageScroll.mjs +1 -1
  297. package/dist/runtime/platform/current.mjs +1 -0
  298. package/dist/runtime/platform/generic.mjs +1 -0
  299. package/dist/runtime/platform/globals.mjs +1 -0
  300. package/dist/runtime/platform.mjs +1 -1
  301. package/dist/runtime/provideContext.mjs +1 -1
  302. package/dist/runtime/publicRuntime.mjs +1 -1
  303. package/dist/runtime/pullDownRefresh.mjs +1 -1
  304. package/dist/runtime/register/app.mjs +1 -1
  305. package/dist/runtime/register/component/alipay.mjs +1 -1
  306. package/dist/runtime/register/component/alipayRegistration.mjs +1 -0
  307. package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
  308. package/dist/runtime/register/component/lifecycle.mjs +1 -1
  309. package/dist/runtime/register/component/methods.mjs +1 -1
  310. package/dist/runtime/register/component/options.mjs +1 -1
  311. package/dist/runtime/register/component/props.mjs +1 -1
  312. package/dist/runtime/register/component/registerDefinition.mjs +1 -1
  313. package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
  314. package/dist/runtime/register/component.mjs +1 -1
  315. package/dist/runtime/register/inline.mjs +1 -1
  316. package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
  317. package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  318. package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -1
  319. package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
  320. package/dist/runtime/register/runtimeInstance/setupSnapshot.mjs +1 -1
  321. package/dist/runtime/register/runtimeInstance/utils.mjs +1 -1
  322. package/dist/runtime/register/runtimeInstance.mjs +1 -1
  323. package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -1
  324. package/dist/runtime/register/setup.mjs +1 -1
  325. package/dist/runtime/register/snapshot.mjs +1 -1
  326. package/dist/runtime/register/watch.mjs +1 -1
  327. package/dist/runtime/scopedSlots.mjs +1 -1
  328. package/dist/runtime/selectorQuery.mjs +1 -1
  329. package/dist/runtime/template.mjs +1 -1
  330. package/dist/runtime/templateRefs/helpers.mjs +1 -1
  331. package/dist/runtime/templateRefs.mjs +1 -1
  332. package/dist/runtime/uniAppHost.mjs +1 -1
  333. package/dist/runtime/updatePerformance.mjs +1 -1
  334. package/dist/runtime/use.mjs +1 -1
  335. package/dist/runtime/vueCompat/context.mjs +1 -1
  336. package/dist/runtime/vueCompat/model.mjs +1 -1
  337. package/dist/runtime/vueCompat/router.mjs +1 -1
  338. package/dist/runtime/vueCompat/templateRef.mjs +1 -1
  339. package/dist/scheduler.mjs +1 -1
  340. package/dist/store/base.mjs +1 -1
  341. package/dist/store/define/create.mjs +1 -1
  342. package/dist/store/define.mjs +1 -1
  343. package/dist/store/view.mjs +1 -1
  344. package/package.json +7 -7
  345. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/defineProperty.mjs +0 -0
  346. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPrimitive.mjs +0 -0
  347. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/toPropertyKey.mjs +0 -0
  348. /package/dist/_virtual/{_@oxc-project_runtime@0.150.0 → _@oxc-project_runtime@0.151.0}/helpers/esm/typeof.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.mjs","names":[],"sources":["../../../../../src/runtime/app/setData/scheduler.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { SetDataScheduler } from '../../capabilities'\nimport type { SetDataDebugInfo } from '../../types'\nimport type { CommitAwareSetDataAdapter, PreparedSetDataUpdate, SetDataCommitFailure, SetDataSnapshot } from './commitTracker'\nimport { getReactiveVersion, isReactive, isRef, toRaw } from '../../../reactivity'\nimport { hasOwn } from '../../../utils'\nimport { resolveBindingDiagnostics } from '../../bindingManifest'\nimport { diffSnapshots, toPlain } from '../../diff'\nimport { hasTrackableSetupBinding } from '../../setupTracking'\nimport { createSetDataCommitTracker } from './commitTracker'\nimport { collectSnapshot } from './snapshot'\n\nexport interface SetDataSchedulerOptions {\n state: Record<string, any>\n setupState?: Record<string, any>\n snapshotOmitKeys?: Set<string>\n computedRefs: Record<string, { value: any }>\n dirtyComputedKeys: Set<string>\n includeComputed: boolean\n setDataStrategy: 'diff' | 'patch'\n computedCompare: 'reference' | 'shallow' | 'deep'\n computedCompareMaxDepth: number\n computedCompareMaxKeys: number\n currentAdapter: CommitAwareSetDataAdapter\n shouldIncludeKey: (key: string) => boolean\n maxPatchKeys: number\n maxPayloadBytes: number\n mergeSiblingThreshold: number\n mergeSiblingMaxInflationRatio: number\n mergeSiblingMaxParentBytes: number\n mergeSiblingSkipArray: boolean\n elevateTopKeyThreshold: number\n prelinkMaxDepth?: number\n prelinkMaxKeys?: number\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions?: boolean\n functionPaths: string[]\n debug: ((info: SetDataDebugInfo) => void) | undefined\n debugWhen: 'fallback' | 'always'\n debugSampleRate: number\n bindingManifest?: WevuRuntimeBindingManifestV1\n loopWarning: false | {\n sampleWindowMs: number\n maxFlushes: number\n coolDownMs: number\n }\n targetLabel?: string\n runTracker: () => void\n isMounted: () => boolean\n initialSnapshot?: Record<string, any>\n initialState?: Record<string, any>\n}\n\nexport interface SetDataSchedulerInternals extends SetDataScheduler {\n collect: () => Record<string, unknown>\n dispatchUpdate: (update: PreparedSetDataUpdate) => number\n dispose: () => void\n emitDebug: (info: SetDataDebugInfo, pathSource?: Iterable<string> | (() => Iterable<string>)) => void\n getLatestSnapshot: () => Record<string, unknown>\n needsFullSnapshot: () => boolean\n plainCache: WeakMap<object, { version: number, value: unknown }>\n plainCacheEligibility: WeakMap<object, boolean>\n prepareJob: (pendingPatchKeys?: number, pathSource?: Iterable<string> | (() => Iterable<string>)) => boolean\n resolveTopKeysByRoot: (root: object) => string[]\n runDiffUpdate: (\n reason?: SetDataDebugInfo['reason'],\n pendingPatchKeys?: number,\n onSnapshotPrepared?: (snapshot: SetDataSnapshot) => void,\n ) => void\n shouldIncludeSnapshotKey: (key: string) => boolean\n}\n\nexport function createSetDataScheduler(options: SetDataSchedulerOptions): SetDataSchedulerInternals {\n const {\n state,\n setupState,\n snapshotOmitKeys,\n computedRefs,\n dirtyComputedKeys,\n includeComputed,\n setDataStrategy,\n currentAdapter,\n shouldIncludeKey,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions = false,\n functionPaths,\n debug,\n debugWhen,\n debugSampleRate,\n bindingManifest,\n loopWarning,\n targetLabel,\n runTracker,\n isMounted,\n initialSnapshot,\n initialState,\n } = options\n\n const plainCache = new WeakMap<object, { version: number, value: any }>()\n const plainCacheEligibility = new WeakMap<object, boolean>()\n const initialSnapshotBaseline: SetDataSnapshot = {}\n const dispatchedStateTokens = Object.create(null) as Record<string, unknown>\n const dispatchedComputedTokens = Object.create(null) as Record<string, unknown>\n const flushTimes: number[] = []\n let lastLoopWarningAt = Number.NEGATIVE_INFINITY\n const initialStateKeys = new Set(\n initialState && typeof initialState === 'object'\n ? Object.keys(initialState)\n : [],\n )\n\n const isPlainObject = (value: unknown): value is Record<string, any> => {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === null || proto === Object.prototype\n }\n\n const isDeepEqual = (left: any, right: any): boolean => {\n if (Object.is(left, right)) {\n return true\n }\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) {\n return false\n }\n return left.every((item, index) => isDeepEqual(item, right[index]))\n }\n if (isPlainObject(left) && isPlainObject(right)) {\n const leftKeys = Object.keys(left)\n const rightKeys = Object.keys(right)\n if (leftKeys.length !== rightKeys.length) {\n return false\n }\n return leftKeys.every(key => hasOwn(right, key) && isDeepEqual(left[key], right[key]))\n }\n return false\n }\n\n const createValueToken = (value: unknown) => {\n const candidate = isRef(value) ? value.value : value\n if (candidate == null || typeof candidate !== 'object') {\n return candidate\n }\n if (!isReactive(candidate) && hasTrackableSetupBinding(candidate)) {\n return {\n snapshot: toPlain(candidate, new WeakMap(), {\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n }),\n }\n }\n const raw = isReactive(candidate) ? toRaw(candidate as any) : candidate\n return {\n raw,\n version: getReactiveVersion(raw as any),\n }\n }\n\n const isSameToken = (left: unknown, right: unknown) => {\n if (Object.is(left, right)) {\n return true\n }\n if (\n !left\n || !right\n || typeof left !== 'object'\n || typeof right !== 'object'\n || !hasOwn(left as object, 'raw')\n || !hasOwn(right as object, 'raw')\n ) {\n if (\n left\n && right\n && typeof left === 'object'\n && typeof right === 'object'\n && hasOwn(left as object, 'snapshot')\n && hasOwn(right as object, 'snapshot')\n ) {\n return isDeepEqual((left as any).snapshot, (right as any).snapshot)\n }\n return false\n }\n return (left as any).raw === (right as any).raw && (left as any).version === (right as any).version\n }\n\n const shouldIncludeSnapshotKey = (key: string) => shouldIncludeKey(key) && !snapshotOmitKeys?.has(key)\n\n if (initialSnapshot) {\n for (const [key, value] of Object.entries(initialSnapshot)) {\n if (shouldIncludeSnapshotKey(key)) {\n initialSnapshotBaseline[key] = value\n }\n }\n }\n\n const syncInitialSnapshotTokens = () => {\n if (!initialSnapshot) {\n return\n }\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n\n for (const key of Object.keys(initialSnapshot)) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n if (rawSetupState && hasOwn(rawSetupState, key)) {\n dispatchedStateTokens[key] = createValueToken(rawSetupState[key])\n continue\n }\n if (hasOwn(rawState, key)) {\n if (initialStateKeys.has(key)) {\n continue\n }\n rawState[key] = initialSnapshot[key]\n dispatchedStateTokens[key] = createValueToken(rawState[key])\n }\n }\n }\n\n const resolveTopKeysByRoot = (root: object) => {\n const matches: string[] = []\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n for (const key of new Set([...Object.keys(state), ...(rawSetupState ? Object.keys(rawSetupState) : [])])) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n const value = rawSetupState && hasOwn(rawSetupState, key) ? rawSetupState[key] : state[key]\n const candidate = isRef(value) ? value.value : value\n if (!candidate || typeof candidate !== 'object') {\n continue\n }\n if (toRaw(candidate as any) === root) {\n matches.push(key)\n }\n }\n return matches\n }\n\n const emitDebug = (\n info: SetDataDebugInfo,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!debug) {\n return\n }\n const isFallback = info.reason !== 'patch' && info.reason !== 'diff'\n if (debugWhen === 'fallback' && !isFallback) {\n return\n }\n if (info.reason !== 'commitFailure' && debugSampleRate < 1 && Math.random() > debugSampleRate) {\n return\n }\n let debugInfo = info\n if (bindingManifest) {\n const paths = typeof pathSource === 'function'\n ? pathSource()\n : pathSource ?? []\n const wholeSnapshotFallback = info.reason === 'needsFullSnapshot'\n || info.reason === 'maxPatchKeys'\n || info.reason === 'maxPayloadBytes'\n debugInfo = {\n ...info,\n bindings: resolveBindingDiagnostics(bindingManifest, paths, wholeSnapshotFallback),\n }\n }\n try {\n debug(debugInfo)\n }\n catch {\n // 忽略异常\n }\n }\n\n const commitTracker = createSetDataCommitTracker({\n initialSnapshot: initialSnapshotBaseline,\n adapter: currentAdapter,\n onFailure: (failure: SetDataCommitFailure) => {\n emitDebug({\n mode: failure.mode,\n reason: 'commitFailure',\n pendingPatchKeys: failure.pendingPatchKeys,\n payloadKeys: failure.payloadKeys,\n revision: failure.revision,\n committedRevision: failure.committedRevision,\n targetLabel,\n message: failure.error.message,\n })\n try {\n currentAdapter.__wevu_reportSetDataError?.(failure.error)\n }\n catch {\n // 宿主错误钩子不得反向破坏提交状态机。\n }\n },\n })\n\n const recordFlushForLoopWarning = (\n pendingPatchKeys = 0,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!loopWarning) {\n return\n }\n const current = Date.now()\n flushTimes.push(current)\n const windowStart = current - loopWarning.sampleWindowMs\n while (flushTimes.length && flushTimes[0] < windowStart) {\n flushTimes.shift()\n }\n if (flushTimes.length <= loopWarning.maxFlushes) {\n return\n }\n if (loopWarning.coolDownMs > 0 && current - lastLoopWarningAt < loopWarning.coolDownMs) {\n return\n }\n lastLoopWarningAt = current\n emitDebug({\n mode: setDataStrategy,\n reason: 'loopWarning',\n pendingPatchKeys,\n payloadKeys: 0,\n computedDirtyKeys: includeComputed ? dirtyComputedKeys.size : 0,\n flushCount: flushTimes.length,\n windowMs: loopWarning.sampleWindowMs,\n targetLabel,\n message: `${targetLabel ? `${targetLabel} ` : ''}疑似运行时更新循环:${flushTimes.length} 次 setData flush/${loopWarning.sampleWindowMs}ms`,\n }, pathSource)\n }\n\n const collect = () => collectSnapshot({\n state,\n setupState,\n computedRefs,\n includeComputed,\n shouldIncludeKey: shouldIncludeSnapshotKey,\n plainCache,\n plainCacheEligibility,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n })\n\n syncInitialSnapshotTokens()\n\n const collectDiffSnapshot = () => {\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n const dispatchedSnapshot = commitTracker.state.dispatchedSnapshot\n const nextSnapshot: Record<string, any> = { ...dispatchedSnapshot }\n const seen = new WeakMap<object, any>()\n const includedStateKeys = new Set<string>()\n const includedComputedKeys = new Set<string>()\n const replacedTopLevelKeys = new Set<string>()\n\n for (const key of new Set([...Object.keys(rawState), ...(rawSetupState ? Object.keys(rawSetupState) : [])])) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n includedStateKeys.add(key)\n const source = rawSetupState && hasOwn(rawSetupState, key) ? rawSetupState : rawState\n const token = createValueToken(source[key])\n const previousToken = dispatchedStateTokens[key]\n if (\n previousToken\n && token\n && typeof previousToken === 'object'\n && typeof token === 'object'\n && hasOwn(previousToken as object, 'raw')\n && hasOwn(token as object, 'raw')\n && Array.isArray((previousToken as any).raw)\n && Array.isArray((token as any).raw)\n && (previousToken as any).raw !== (token as any).raw\n ) {\n replacedTopLevelKeys.add(key)\n }\n if (!isSameToken(previousToken, token) || !hasOwn(dispatchedSnapshot, key)) {\n nextSnapshot[key] = toPlain(source[key], seen, {\n cache: plainCache,\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n }\n dispatchedStateTokens[key] = token\n }\n\n for (const key of Object.keys(dispatchedStateTokens)) {\n if (!includedStateKeys.has(key)) {\n delete dispatchedStateTokens[key]\n if (!includeComputed || !hasOwn(computedRefs, key)) {\n delete nextSnapshot[key]\n }\n }\n }\n\n if (!includeComputed) {\n for (const key of Object.keys(dispatchedComputedTokens)) {\n delete dispatchedComputedTokens[key]\n }\n return {\n snapshot: nextSnapshot,\n replacedTopLevelKeys,\n }\n }\n\n for (const key of Object.keys(computedRefs)) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n includedComputedKeys.add(key)\n const value = computedRefs[key].value\n const token = createValueToken(value)\n if (!isSameToken(dispatchedComputedTokens[key], token) || !hasOwn(dispatchedSnapshot, key)) {\n nextSnapshot[key] = toPlain(value, seen, {\n cache: plainCache,\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n }\n dispatchedComputedTokens[key] = token\n }\n\n for (const key of Object.keys(dispatchedComputedTokens)) {\n if (!includedComputedKeys.has(key)) {\n delete dispatchedComputedTokens[key]\n if (!hasOwn(rawState, key) || !shouldIncludeSnapshotKey(key)) {\n delete nextSnapshot[key]\n }\n }\n }\n\n return {\n snapshot: nextSnapshot,\n replacedTopLevelKeys,\n }\n }\n\n const runDiffUpdate = (\n reason: SetDataDebugInfo['reason'] = 'diff',\n pendingPatchKeys = 0,\n onSnapshotPrepared?: (snapshot: SetDataSnapshot) => void,\n ): void => {\n const diffCollection = setDataStrategy === 'diff' ? collectDiffSnapshot() : undefined\n const snapshot = diffCollection?.snapshot ?? collect()\n const dispatchedSnapshot = commitTracker.state.dispatchedSnapshot\n const needsRecovery = commitTracker.state.needsFullSnapshot\n const payload = needsRecovery\n ? commitTracker.createFullPayload(snapshot)\n : diffCollection\n ? (() => {\n const fastDiff: Record<string, any> = {}\n for (const key of diffCollection.replacedTopLevelKeys) {\n fastDiff[key] = snapshot[key]\n }\n const baseDiff = diffSnapshots(dispatchedSnapshot, snapshot, {\n skipKeys: diffCollection.replacedTopLevelKeys,\n })\n return {\n ...baseDiff,\n ...fastDiff,\n }\n })()\n : diffSnapshots(dispatchedSnapshot, snapshot)\n onSnapshotPrepared?.(snapshot)\n const payloadKeys = Object.keys(payload).length\n if (!payloadKeys && !needsRecovery) {\n return\n }\n const effectiveReason = needsRecovery ? 'needsFullSnapshot' : reason\n emitDebug({\n mode: 'diff',\n reason: effectiveReason,\n pendingPatchKeys,\n payloadKeys,\n }, Object.keys(payload))\n commitTracker.dispatch({\n mode: 'diff',\n kind: needsRecovery ? 'full' : 'delta',\n reason: effectiveReason,\n snapshot,\n payload,\n pendingPatchKeys,\n })\n }\n\n const prepareJob = (\n pendingPatchKeys = 0,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!isMounted()) {\n return false\n }\n recordFlushForLoopWarning(pendingPatchKeys, pathSource)\n // 生成快照前刷新依赖(setup 中的 ref / 新增 key)\n runTracker()\n return true\n }\n\n const job = (_stateRootRaw?: object) => {\n if (!prepareJob()) {\n return\n }\n return runDiffUpdate('diff')\n }\n\n const snapshot = () => (\n setDataStrategy === 'patch'\n ? collect()\n : { ...commitTracker.state.dispatchedSnapshot }\n )\n const cloneLatestSnapshot = () => ({ ...commitTracker.state.dispatchedSnapshot })\n\n return {\n collect,\n emitDebug,\n getLatestSnapshot: () => commitTracker.state.dispatchedSnapshot,\n dispatchUpdate: commitTracker.dispatch,\n needsFullSnapshot: () => commitTracker.state.needsFullSnapshot,\n job,\n plainCache,\n plainCacheEligibility,\n prepareJob,\n resolveTopKeysByRoot,\n runDiffUpdate,\n shouldIncludeSnapshotKey,\n snapshot,\n cloneLatestSnapshot,\n dispose: commitTracker.dispose,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.mjs","names":[],"sources":["../../../../../src/runtime/app/setData/scheduler.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { SetDataScheduler } from '../../capabilities'\nimport type { SetDataDebugInfo } from '../../types'\nimport type { CommitAwareSetDataAdapter, PreparedSetDataUpdate, SetDataCommitFailure, SetDataSnapshot } from './commitTracker'\nimport { getReactiveVersion, isReactive, isRef, toRaw } from '../../../reactivity'\nimport { hasOwn } from '../../../utils'\nimport { resolveBindingDiagnostics } from '../../bindingManifest'\nimport { diffSnapshots, toPlain } from '../../diff'\nimport { hasTrackableSetupBinding } from '../../setupTracking'\nimport { createSetDataCommitTracker } from './commitTracker'\nimport { collectSnapshot } from './snapshot'\n\nexport interface SetDataSchedulerOptions {\n state: Record<string, any>\n setupState?: Record<string, any>\n snapshotOmitKeys?: Set<string>\n computedRefs: Record<string, { value: any }>\n dirtyComputedKeys: Set<string>\n includeComputed: boolean\n setDataStrategy: 'diff' | 'patch'\n computedCompare: 'reference' | 'shallow' | 'deep'\n computedCompareMaxDepth: number\n computedCompareMaxKeys: number\n currentAdapter: CommitAwareSetDataAdapter\n shouldIncludeKey: (key: string) => boolean\n maxPatchKeys: number\n maxPayloadBytes: number\n mergeSiblingThreshold: number\n mergeSiblingMaxInflationRatio: number\n mergeSiblingMaxParentBytes: number\n mergeSiblingSkipArray: boolean\n elevateTopKeyThreshold: number\n prelinkMaxDepth?: number\n prelinkMaxKeys?: number\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions?: boolean\n functionPaths: string[]\n debug: ((info: SetDataDebugInfo) => void) | undefined\n debugWhen: 'fallback' | 'always'\n debugSampleRate: number\n bindingManifest?: WevuRuntimeBindingManifestV1\n loopWarning: false | {\n sampleWindowMs: number\n maxFlushes: number\n coolDownMs: number\n }\n targetLabel?: string\n runTracker: () => void\n isMounted: () => boolean\n initialSnapshot?: Record<string, any>\n initialState?: Record<string, any>\n}\n\nexport interface SetDataSchedulerInternals extends SetDataScheduler {\n collect: () => Record<string, unknown>\n dispatchUpdate: (update: PreparedSetDataUpdate) => number\n dispose: () => void\n emitDebug: (info: SetDataDebugInfo, pathSource?: Iterable<string> | (() => Iterable<string>)) => void\n getLatestSnapshot: () => Record<string, unknown>\n needsFullSnapshot: () => boolean\n plainCache: WeakMap<object, { version: number, value: unknown }>\n plainCacheEligibility: WeakMap<object, boolean>\n prepareJob: (pendingPatchKeys?: number, pathSource?: Iterable<string> | (() => Iterable<string>)) => boolean\n resolveTopKeysByRoot: (root: object) => string[]\n runDiffUpdate: (\n reason?: SetDataDebugInfo['reason'],\n pendingPatchKeys?: number,\n onSnapshotPrepared?: (snapshot: SetDataSnapshot) => void,\n ) => void\n shouldIncludeSnapshotKey: (key: string) => boolean\n}\n\nexport function createSetDataScheduler(options: SetDataSchedulerOptions): SetDataSchedulerInternals {\n const {\n state,\n setupState,\n snapshotOmitKeys,\n computedRefs,\n dirtyComputedKeys,\n includeComputed,\n setDataStrategy,\n currentAdapter,\n shouldIncludeKey,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions = false,\n functionPaths,\n debug,\n debugWhen,\n debugSampleRate,\n bindingManifest,\n loopWarning,\n targetLabel,\n runTracker,\n isMounted,\n initialSnapshot,\n initialState,\n } = options\n\n const plainCache = new WeakMap<object, { version: number, value: any }>()\n const plainCacheEligibility = new WeakMap<object, boolean>()\n const initialSnapshotBaseline: SetDataSnapshot = {}\n const dispatchedStateTokens = Object.create(null) as Record<string, unknown>\n const dispatchedComputedTokens = Object.create(null) as Record<string, unknown>\n const flushTimes: number[] = []\n let lastLoopWarningAt = Number.NEGATIVE_INFINITY\n const initialStateKeys = new Set(\n initialState && typeof initialState === 'object'\n ? Object.keys(initialState)\n : [],\n )\n\n const isPlainObject = (value: unknown): value is Record<string, any> => {\n if (Object.prototype.toString.call(value) !== '[object Object]') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === null || proto === Object.prototype\n }\n\n const isDeepEqual = (left: any, right: any): boolean => {\n if (Object.is(left, right)) {\n return true\n }\n if (Array.isArray(left) && Array.isArray(right)) {\n if (left.length !== right.length) {\n return false\n }\n return left.every((item, index) => isDeepEqual(item, right[index]))\n }\n if (isPlainObject(left) && isPlainObject(right)) {\n const leftKeys = Object.keys(left)\n const rightKeys = Object.keys(right)\n if (leftKeys.length !== rightKeys.length) {\n return false\n }\n return leftKeys.every(key => hasOwn(right, key) && isDeepEqual(left[key], right[key]))\n }\n return false\n }\n\n const createValueToken = (value: unknown) => {\n const candidate = isRef(value) ? value.value : value\n if (candidate == null || typeof candidate !== 'object') {\n return candidate\n }\n if (!isReactive(candidate) && hasTrackableSetupBinding(candidate)) {\n return {\n snapshot: toPlain(candidate, new WeakMap(), {\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n }),\n }\n }\n const raw = isReactive(candidate) ? toRaw(candidate as any) : candidate\n return {\n raw,\n version: getReactiveVersion(raw as any),\n }\n }\n\n const isSameToken = (left: unknown, right: unknown) => {\n if (Object.is(left, right)) {\n return true\n }\n if (\n !left\n || !right\n || typeof left !== 'object'\n || typeof right !== 'object'\n || !hasOwn(left as object, 'raw')\n || !hasOwn(right as object, 'raw')\n ) {\n if (\n left\n && right\n && typeof left === 'object'\n && typeof right === 'object'\n && hasOwn(left as object, 'snapshot')\n && hasOwn(right as object, 'snapshot')\n ) {\n return isDeepEqual((left as any).snapshot, (right as any).snapshot)\n }\n return false\n }\n return (left as any).raw === (right as any).raw && (left as any).version === (right as any).version\n }\n\n const shouldIncludeSnapshotKey = (key: string) => shouldIncludeKey(key) && !snapshotOmitKeys?.has(key)\n\n if (initialSnapshot) {\n for (const [key, value] of Object.entries(initialSnapshot)) {\n if (shouldIncludeSnapshotKey(key)) {\n initialSnapshotBaseline[key] = value\n }\n }\n }\n\n const syncInitialSnapshotTokens = () => {\n if (!initialSnapshot) {\n return\n }\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n\n for (const key of Object.keys(initialSnapshot)) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n if (rawSetupState && hasOwn(rawSetupState, key)) {\n dispatchedStateTokens[key] = createValueToken(rawSetupState[key])\n continue\n }\n if (hasOwn(rawState, key)) {\n if (initialStateKeys.has(key)) {\n continue\n }\n rawState[key] = initialSnapshot[key]\n dispatchedStateTokens[key] = createValueToken(rawState[key])\n }\n }\n }\n\n const resolveTopKeysByRoot = (root: object) => {\n const matches: string[] = []\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n for (const key of new Set([...Object.keys(state), ...(rawSetupState ? Object.keys(rawSetupState) : [])])) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n const value = rawSetupState && hasOwn(rawSetupState, key) ? rawSetupState[key] : state[key]\n const candidate = isRef(value) ? value.value : value\n if (!candidate || typeof candidate !== 'object') {\n continue\n }\n if (toRaw(candidate as any) === root) {\n matches.push(key)\n }\n }\n return matches\n }\n\n const emitDebug = (\n info: SetDataDebugInfo,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!debug) {\n return\n }\n const isFallback = info.reason !== 'patch' && info.reason !== 'diff'\n if (debugWhen === 'fallback' && !isFallback) {\n return\n }\n if (info.reason !== 'commitFailure' && debugSampleRate < 1 && Math.random() > debugSampleRate) {\n return\n }\n let debugInfo = info\n if (bindingManifest) {\n const paths = typeof pathSource === 'function'\n ? pathSource()\n : pathSource ?? []\n const wholeSnapshotFallback = info.reason === 'needsFullSnapshot'\n || info.reason === 'maxPatchKeys'\n || info.reason === 'maxPayloadBytes'\n debugInfo = {\n ...info,\n bindings: resolveBindingDiagnostics(bindingManifest, paths, wholeSnapshotFallback),\n }\n }\n try {\n debug(debugInfo)\n }\n catch {\n // 忽略异常\n }\n }\n\n const commitTracker = createSetDataCommitTracker({\n initialSnapshot: initialSnapshotBaseline,\n adapter: currentAdapter,\n onFailure: (failure: SetDataCommitFailure) => {\n emitDebug({\n mode: failure.mode,\n reason: 'commitFailure',\n pendingPatchKeys: failure.pendingPatchKeys,\n payloadKeys: failure.payloadKeys,\n revision: failure.revision,\n committedRevision: failure.committedRevision,\n targetLabel,\n message: failure.error.message,\n })\n try {\n currentAdapter.__wevu_reportSetDataError?.(failure.error)\n }\n catch {\n // 宿主错误钩子不得反向破坏提交状态机。\n }\n },\n })\n\n const recordFlushForLoopWarning = (\n pendingPatchKeys = 0,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!loopWarning) {\n return\n }\n const current = Date.now()\n flushTimes.push(current)\n const windowStart = current - loopWarning.sampleWindowMs\n while (flushTimes.length && flushTimes[0] < windowStart) {\n flushTimes.shift()\n }\n if (flushTimes.length <= loopWarning.maxFlushes) {\n return\n }\n if (loopWarning.coolDownMs > 0 && current - lastLoopWarningAt < loopWarning.coolDownMs) {\n return\n }\n lastLoopWarningAt = current\n emitDebug({\n mode: setDataStrategy,\n reason: 'loopWarning',\n pendingPatchKeys,\n payloadKeys: 0,\n computedDirtyKeys: includeComputed ? dirtyComputedKeys.size : 0,\n flushCount: flushTimes.length,\n windowMs: loopWarning.sampleWindowMs,\n targetLabel,\n message: `${targetLabel ? `${targetLabel} ` : ''}疑似运行时更新循环:${flushTimes.length} 次 setData flush/${loopWarning.sampleWindowMs}ms`,\n }, pathSource)\n }\n\n const collect = () => collectSnapshot({\n state,\n setupState,\n computedRefs,\n includeComputed,\n shouldIncludeKey: shouldIncludeSnapshotKey,\n plainCache,\n plainCacheEligibility,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n })\n\n syncInitialSnapshotTokens()\n\n const collectDiffSnapshot = () => {\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n const dispatchedSnapshot = commitTracker.state.dispatchedSnapshot\n const nextSnapshot: Record<string, any> = { ...dispatchedSnapshot }\n const seen = new WeakMap<object, any>()\n const includedStateKeys = new Set<string>()\n const includedComputedKeys = new Set<string>()\n const replacedTopLevelKeys = new Set<string>()\n\n for (const key of new Set([...Object.keys(rawState), ...(rawSetupState ? Object.keys(rawSetupState) : [])])) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n includedStateKeys.add(key)\n const source = rawSetupState && hasOwn(rawSetupState, key) ? rawSetupState : rawState\n const token = createValueToken(source[key])\n const previousToken = dispatchedStateTokens[key]\n if (\n previousToken\n && token\n && typeof previousToken === 'object'\n && typeof token === 'object'\n && hasOwn(previousToken as object, 'raw')\n && hasOwn(token as object, 'raw')\n && Array.isArray((previousToken as any).raw)\n && Array.isArray((token as any).raw)\n && (previousToken as any).raw !== (token as any).raw\n ) {\n replacedTopLevelKeys.add(key)\n }\n if (!isSameToken(previousToken, token) || !hasOwn(dispatchedSnapshot, key)) {\n nextSnapshot[key] = toPlain(source[key], seen, {\n cache: plainCache,\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n }\n dispatchedStateTokens[key] = token\n }\n\n for (const key of Object.keys(dispatchedStateTokens)) {\n if (!includedStateKeys.has(key)) {\n delete dispatchedStateTokens[key]\n if (!includeComputed || !hasOwn(computedRefs, key)) {\n delete nextSnapshot[key]\n }\n }\n }\n\n if (!includeComputed) {\n for (const key of Object.keys(dispatchedComputedTokens)) {\n delete dispatchedComputedTokens[key]\n }\n return {\n snapshot: nextSnapshot,\n replacedTopLevelKeys,\n }\n }\n\n for (const key of Object.keys(computedRefs)) {\n if (!shouldIncludeSnapshotKey(key)) {\n continue\n }\n includedComputedKeys.add(key)\n const value = computedRefs[key].value\n const token = createValueToken(value)\n if (!isSameToken(dispatchedComputedTokens[key], token) || !hasOwn(dispatchedSnapshot, key)) {\n nextSnapshot[key] = toPlain(value, seen, {\n cache: plainCache,\n cacheEligibility: plainCacheEligibility,\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n }\n dispatchedComputedTokens[key] = token\n }\n\n for (const key of Object.keys(dispatchedComputedTokens)) {\n if (!includedComputedKeys.has(key)) {\n delete dispatchedComputedTokens[key]\n if (!hasOwn(rawState, key) || !shouldIncludeSnapshotKey(key)) {\n delete nextSnapshot[key]\n }\n }\n }\n\n return {\n snapshot: nextSnapshot,\n replacedTopLevelKeys,\n }\n }\n\n const runDiffUpdate = (\n reason: SetDataDebugInfo['reason'] = 'diff',\n pendingPatchKeys = 0,\n onSnapshotPrepared?: (snapshot: SetDataSnapshot) => void,\n ): void => {\n const diffCollection = setDataStrategy === 'diff' ? collectDiffSnapshot() : undefined\n const snapshot = diffCollection?.snapshot ?? collect()\n const dispatchedSnapshot = commitTracker.state.dispatchedSnapshot\n const needsRecovery = commitTracker.state.needsFullSnapshot\n const payload = needsRecovery\n ? commitTracker.createFullPayload(snapshot)\n : diffCollection\n ? (() => {\n const fastDiff: Record<string, any> = {}\n for (const key of diffCollection.replacedTopLevelKeys) {\n fastDiff[key] = snapshot[key]\n }\n const baseDiff = diffSnapshots(dispatchedSnapshot, snapshot, {\n skipKeys: diffCollection.replacedTopLevelKeys,\n })\n return {\n ...baseDiff,\n ...fastDiff,\n }\n })()\n : diffSnapshots(dispatchedSnapshot, snapshot)\n onSnapshotPrepared?.(snapshot)\n const payloadKeys = Object.keys(payload).length\n if (!payloadKeys && !needsRecovery) {\n return\n }\n const effectiveReason = needsRecovery ? 'needsFullSnapshot' : reason\n emitDebug({\n mode: 'diff',\n reason: effectiveReason,\n pendingPatchKeys,\n payloadKeys,\n }, Object.keys(payload))\n commitTracker.dispatch({\n mode: 'diff',\n kind: needsRecovery ? 'full' : 'delta',\n reason: effectiveReason,\n snapshot,\n payload,\n pendingPatchKeys,\n })\n }\n\n const prepareJob = (\n pendingPatchKeys = 0,\n pathSource?: Iterable<string> | (() => Iterable<string>),\n ) => {\n if (!isMounted()) {\n return false\n }\n recordFlushForLoopWarning(pendingPatchKeys, pathSource)\n // 生成快照前刷新依赖(setup 中的 ref / 新增 key)\n runTracker()\n return true\n }\n\n const job = (_stateRootRaw?: object) => {\n if (!prepareJob()) {\n return\n }\n return runDiffUpdate('diff')\n }\n\n const snapshot = () => (\n setDataStrategy === 'patch'\n ? collect()\n : { ...commitTracker.state.dispatchedSnapshot }\n )\n const cloneLatestSnapshot = () => ({ ...commitTracker.state.dispatchedSnapshot })\n\n return {\n collect,\n emitDebug,\n getLatestSnapshot: () => commitTracker.state.dispatchedSnapshot,\n dispatchUpdate: commitTracker.dispatch,\n needsFullSnapshot: () => commitTracker.state.needsFullSnapshot,\n job,\n plainCache,\n plainCacheEligibility,\n prepareJob,\n resolveTopKeysByRoot,\n runDiffUpdate,\n shouldIncludeSnapshotKey,\n snapshot,\n cloneLatestSnapshot,\n dispose: commitTracker.dispose,\n }\n}\n"],"mappings":"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"}
@@ -57,19 +57,18 @@ function isDeepEqualValue(a, b, depth, budget) {
57
57
  return true;
58
58
  }
59
59
  function applySnapshotUpdate(snapshot, path, value, op, options) {
60
- var _options$cloneValue;
61
- const cloneValue = (_options$cloneValue = options === null || options === void 0 ? void 0 : options.cloneValue) !== null && _options$cloneValue !== void 0 ? _options$cloneValue : true;
62
- const clonedParents = options === null || options === void 0 ? void 0 : options.clonedParents;
60
+ const cloneValue = options?.cloneValue ?? true;
61
+ const clonedParents = options?.clonedParents;
63
62
  const segments = path.split(".").filter(Boolean);
64
63
  if (!segments.length) return;
65
- clonedParents === null || clonedParents === void 0 || clonedParents.add(snapshot);
64
+ clonedParents?.add(snapshot);
66
65
  let current = snapshot;
67
66
  for (let i = 0; i < segments.length - 1; i++) {
68
67
  const key = segments[i];
69
68
  const child = current[key];
70
69
  if (child == null || typeof child !== "object") {
71
70
  current[key] = {};
72
- clonedParents === null || clonedParents === void 0 || clonedParents.add(current[key]);
71
+ clonedParents?.add(current[key]);
73
72
  } else if (clonedParents && !clonedParents.has(child)) {
74
73
  const clonedChild = Array.isArray(child) ? child.slice() : { ...child };
75
74
  current[key] = clonedChild;
@@ -80,7 +79,7 @@ function applySnapshotUpdate(snapshot, path, value, op, options) {
80
79
  const leaf = segments[segments.length - 1];
81
80
  if (op === "delete") try {
82
81
  delete current[leaf];
83
- } catch (_unused) {
82
+ } catch {
84
83
  current[leaf] = null;
85
84
  }
86
85
  else current[leaf] = cloneValue ? cloneSnapshotValue(value) : value;
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.mjs","names":[],"sources":["../../../../../src/runtime/app/setData/snapshot.ts"],"sourcesContent":["import { isReactive, toRaw } from '../../../reactivity'\nimport { hasOwn } from '../../../utils'\nimport { toPlain } from '../../diff'\n\nexport function isPlainObjectLike(value: any) {\n if (value == null || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nexport function normalizeSetDataValue<T>(value: T): T | null {\n return value === undefined ? null : value\n}\n\nexport function cloneSnapshotValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => cloneSnapshotValue(item)) as T\n }\n if (!isPlainObjectLike(value)) {\n return value\n }\n // 这里的快照对象会继续进入 setData / WXML / DevTools 热重载链路。\n // 不能使用 Object.create(null),否则微信运行时内部直接调用 hasOwnProperty 时会报错。\n const out: Record<string, any> = {}\n for (const key of Object.keys(value as Record<string, any>)) {\n out[key] = cloneSnapshotValue((value as Record<string, any>)[key])\n }\n return out as T\n}\n\nexport function isShallowEqualValue(a: any, b: any): boolean {\n if (Object.is(a, b)) {\n return true\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) {\n return false\n }\n }\n return true\n }\n if (!isPlainObjectLike(a) || !isPlainObjectLike(b)) {\n return false\n }\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) {\n return false\n }\n for (const k of aKeys) {\n if (!hasOwn(b, k)) {\n return false\n }\n if (!Object.is(a[k], b[k])) {\n return false\n }\n }\n return true\n}\n\nexport function isDeepEqualValue(\n a: any,\n b: any,\n depth: number,\n budget: { keys: number },\n): boolean {\n if (Object.is(a, b)) {\n return true\n }\n if (depth <= 0) {\n return false\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!isDeepEqualValue(a[i], b[i], depth - 1, budget)) {\n return false\n }\n }\n return true\n }\n if (!isPlainObjectLike(a) || !isPlainObjectLike(b)) {\n return false\n }\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) {\n return false\n }\n for (const k of aKeys) {\n budget.keys -= 1\n if (budget.keys <= 0) {\n return false\n }\n if (!hasOwn(b, k)) {\n return false\n }\n if (!isDeepEqualValue(a[k], b[k], depth - 1, budget)) {\n return false\n }\n }\n return true\n}\n\nexport function applySnapshotUpdate(\n snapshot: Record<string, any>,\n path: string,\n value: any,\n op: 'set' | 'delete',\n options?: { cloneValue?: boolean, clonedParents?: WeakSet<object> },\n) {\n const cloneValue = options?.cloneValue ?? true\n const clonedParents = options?.clonedParents\n const segments = path.split('.').filter(Boolean)\n if (!segments.length) {\n return\n }\n clonedParents?.add(snapshot)\n let current: any = snapshot\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]\n const child = current[key]\n if (child == null || typeof child !== 'object') {\n // 中间节点同样会被同步到已派发快照并可能参与视图层更新,必须保持普通对象原型。\n current[key] = {}\n clonedParents?.add(current[key])\n }\n else if (clonedParents && !clonedParents.has(child)) {\n const clonedChild = Array.isArray(child) ? child.slice() : { ...child }\n current[key] = clonedChild\n clonedParents.add(clonedChild)\n }\n current = current[key]\n }\n const leaf = segments[segments.length - 1]!\n if (op === 'delete') {\n try {\n delete current[leaf]\n }\n catch {\n current[leaf] = null\n }\n }\n else {\n current[leaf] = cloneValue ? cloneSnapshotValue(value) : value\n }\n}\n\nexport function collectSnapshot(options: {\n state: Record<string, any>\n setupState?: Record<string, any>\n computedRefs: Record<string, { value: any }>\n includeComputed: boolean\n shouldIncludeKey: (key: string) => boolean\n plainCache: WeakMap<object, { version: number, value: any }>\n plainCacheEligibility?: WeakMap<object, boolean>\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions?: boolean\n functionPaths?: string[]\n}) {\n const {\n state,\n setupState,\n computedRefs,\n includeComputed,\n shouldIncludeKey,\n plainCache,\n plainCacheEligibility,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions = false,\n functionPaths = [],\n } = options\n const seen = new WeakMap<object, any>()\n // collectSnapshot 的返回值会被 owner snapshot / patch scheduler 复用。\n // 后续维护不要改回 null-prototype 对象,否则热重载下会再次触发 hasOwnProperty 兼容问题。\n const out: Record<string, any> = {}\n const budget = Number.isFinite(toPlainMaxKeys) ? { keys: toPlainMaxKeys } : undefined\n\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n const stateKeys = Object.keys(rawState)\n const setupStateKeys = rawSetupState ? Object.keys(rawSetupState) : []\n const computedKeys = includeComputed ? Object.keys(computedRefs) : []\n\n for (const key of stateKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(rawState[key], seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n for (const key of setupStateKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(rawSetupState![key], seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n for (const key of computedKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(computedRefs[key].value, seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n return out\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"snapshot.mjs","names":[],"sources":["../../../../../src/runtime/app/setData/snapshot.ts"],"sourcesContent":["import { isReactive, toRaw } from '../../../reactivity'\nimport { hasOwn } from '../../../utils'\nimport { toPlain } from '../../diff'\n\nexport function isPlainObjectLike(value: any) {\n if (value == null || typeof value !== 'object') {\n return false\n }\n const proto = Object.getPrototypeOf(value)\n return proto === Object.prototype || proto === null\n}\n\nexport function normalizeSetDataValue<T>(value: T): T | null {\n return value === undefined ? null : value\n}\n\nexport function cloneSnapshotValue<T>(value: T): T {\n if (Array.isArray(value)) {\n return value.map(item => cloneSnapshotValue(item)) as T\n }\n if (!isPlainObjectLike(value)) {\n return value\n }\n // 这里的快照对象会继续进入 setData / WXML / DevTools 热重载链路。\n // 不能使用 Object.create(null),否则微信运行时内部直接调用 hasOwnProperty 时会报错。\n const out: Record<string, any> = {}\n for (const key of Object.keys(value as Record<string, any>)) {\n out[key] = cloneSnapshotValue((value as Record<string, any>)[key])\n }\n return out as T\n}\n\nexport function isShallowEqualValue(a: any, b: any): boolean {\n if (Object.is(a, b)) {\n return true\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!Object.is(a[i], b[i])) {\n return false\n }\n }\n return true\n }\n if (!isPlainObjectLike(a) || !isPlainObjectLike(b)) {\n return false\n }\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) {\n return false\n }\n for (const k of aKeys) {\n if (!hasOwn(b, k)) {\n return false\n }\n if (!Object.is(a[k], b[k])) {\n return false\n }\n }\n return true\n}\n\nexport function isDeepEqualValue(\n a: any,\n b: any,\n depth: number,\n budget: { keys: number },\n): boolean {\n if (Object.is(a, b)) {\n return true\n }\n if (depth <= 0) {\n return false\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!isDeepEqualValue(a[i], b[i], depth - 1, budget)) {\n return false\n }\n }\n return true\n }\n if (!isPlainObjectLike(a) || !isPlainObjectLike(b)) {\n return false\n }\n const aKeys = Object.keys(a)\n const bKeys = Object.keys(b)\n if (aKeys.length !== bKeys.length) {\n return false\n }\n for (const k of aKeys) {\n budget.keys -= 1\n if (budget.keys <= 0) {\n return false\n }\n if (!hasOwn(b, k)) {\n return false\n }\n if (!isDeepEqualValue(a[k], b[k], depth - 1, budget)) {\n return false\n }\n }\n return true\n}\n\nexport function applySnapshotUpdate(\n snapshot: Record<string, any>,\n path: string,\n value: any,\n op: 'set' | 'delete',\n options?: { cloneValue?: boolean, clonedParents?: WeakSet<object> },\n) {\n const cloneValue = options?.cloneValue ?? true\n const clonedParents = options?.clonedParents\n const segments = path.split('.').filter(Boolean)\n if (!segments.length) {\n return\n }\n clonedParents?.add(snapshot)\n let current: any = snapshot\n for (let i = 0; i < segments.length - 1; i++) {\n const key = segments[i]\n const child = current[key]\n if (child == null || typeof child !== 'object') {\n // 中间节点同样会被同步到已派发快照并可能参与视图层更新,必须保持普通对象原型。\n current[key] = {}\n clonedParents?.add(current[key])\n }\n else if (clonedParents && !clonedParents.has(child)) {\n const clonedChild = Array.isArray(child) ? child.slice() : { ...child }\n current[key] = clonedChild\n clonedParents.add(clonedChild)\n }\n current = current[key]\n }\n const leaf = segments[segments.length - 1]!\n if (op === 'delete') {\n try {\n delete current[leaf]\n }\n catch {\n current[leaf] = null\n }\n }\n else {\n current[leaf] = cloneValue ? cloneSnapshotValue(value) : value\n }\n}\n\nexport function collectSnapshot(options: {\n state: Record<string, any>\n setupState?: Record<string, any>\n computedRefs: Record<string, { value: any }>\n includeComputed: boolean\n shouldIncludeKey: (key: string) => boolean\n plainCache: WeakMap<object, { version: number, value: any }>\n plainCacheEligibility?: WeakMap<object, boolean>\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions?: boolean\n functionPaths?: string[]\n}) {\n const {\n state,\n setupState,\n computedRefs,\n includeComputed,\n shouldIncludeKey,\n plainCache,\n plainCacheEligibility,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions = false,\n functionPaths = [],\n } = options\n const seen = new WeakMap<object, any>()\n // collectSnapshot 的返回值会被 owner snapshot / patch scheduler 复用。\n // 后续维护不要改回 null-prototype 对象,否则热重载下会再次触发 hasOwnProperty 兼容问题。\n const out: Record<string, any> = {}\n const budget = Number.isFinite(toPlainMaxKeys) ? { keys: toPlainMaxKeys } : undefined\n\n const rawState = (isReactive(state) ? toRaw(state as any) : state) as Record<string, any>\n const rawSetupState = setupState && typeof setupState === 'object'\n ? (isReactive(setupState) ? toRaw(setupState as any) : setupState)\n : undefined\n const stateKeys = Object.keys(rawState)\n const setupStateKeys = rawSetupState ? Object.keys(rawSetupState) : []\n const computedKeys = includeComputed ? Object.keys(computedRefs) : []\n\n for (const key of stateKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(rawState[key], seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n for (const key of setupStateKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(rawSetupState![key], seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n for (const key of computedKeys) {\n if (!shouldIncludeKey(key)) {\n continue\n }\n out[key] = toPlain(computedRefs[key].value, seen, { cache: plainCache, cacheEligibility: plainCacheEligibility, maxDepth: toPlainMaxDepth, includeFunctions, functionPaths, _budget: budget, _path: key })\n }\n\n return out\n}\n"],"mappings":"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"}
@@ -1,37 +1,36 @@
1
1
  //#region src/runtime/app/setDataOptions.ts
2
2
  function resolveSetDataOptions(setDataOptions) {
3
- var _setDataOptions$inclu, _setDataOptions$suspe, _setDataOptions$strat, _setDataOptions$merge, _setDataOptions$compu, _setDataOptions$diagn, _setDataOptions$debug;
4
- const includeComputed = (_setDataOptions$inclu = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.includeComputed) !== null && _setDataOptions$inclu !== void 0 ? _setDataOptions$inclu : true;
5
- const suspendWhenHidden = (_setDataOptions$suspe = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.suspendWhenHidden) !== null && _setDataOptions$suspe !== void 0 ? _setDataOptions$suspe : false;
6
- const setDataStrategy = (_setDataOptions$strat = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.strategy) !== null && _setDataOptions$strat !== void 0 ? _setDataOptions$strat : "diff";
7
- const maxPatchKeys = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.maxPatchKeys) === "number" ? Math.max(0, setDataOptions.maxPatchKeys) : Number.POSITIVE_INFINITY;
8
- const maxPayloadBytes = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.maxPayloadBytes) === "number" ? Math.max(0, setDataOptions.maxPayloadBytes) : Number.POSITIVE_INFINITY;
9
- const mergeSiblingThreshold = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.mergeSiblingThreshold) === "number" ? Math.max(2, Math.floor(setDataOptions.mergeSiblingThreshold)) : 0;
10
- const mergeSiblingMaxInflationRatio = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.mergeSiblingMaxInflationRatio) === "number" ? Math.max(0, setDataOptions.mergeSiblingMaxInflationRatio) : 1.25;
11
- const mergeSiblingMaxParentBytes = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.mergeSiblingMaxParentBytes) === "number" ? Math.max(0, setDataOptions.mergeSiblingMaxParentBytes) : Number.POSITIVE_INFINITY;
12
- const mergeSiblingSkipArray = (_setDataOptions$merge = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.mergeSiblingSkipArray) !== null && _setDataOptions$merge !== void 0 ? _setDataOptions$merge : true;
13
- const computedCompare = (_setDataOptions$compu = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.computedCompare) !== null && _setDataOptions$compu !== void 0 ? _setDataOptions$compu : setDataStrategy === "patch" ? "deep" : "reference";
14
- const computedCompareMaxDepth = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.computedCompareMaxDepth) === "number" ? Math.max(0, Math.floor(setDataOptions.computedCompareMaxDepth)) : 4;
15
- const computedCompareMaxKeys = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.computedCompareMaxKeys) === "number" ? Math.max(0, Math.floor(setDataOptions.computedCompareMaxKeys)) : 200;
16
- const prelinkMaxDepth = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.prelinkMaxDepth;
17
- const prelinkMaxKeys = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.prelinkMaxKeys;
18
- const debug = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.debug;
19
- const diagnostics = (_setDataOptions$diagn = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.diagnostics) !== null && _setDataOptions$diagn !== void 0 ? _setDataOptions$diagn : "off";
20
- const loopWarningOption = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.loopWarning;
3
+ const includeComputed = setDataOptions?.includeComputed ?? true;
4
+ const suspendWhenHidden = setDataOptions?.suspendWhenHidden ?? false;
5
+ const setDataStrategy = setDataOptions?.strategy ?? "diff";
6
+ const maxPatchKeys = typeof setDataOptions?.maxPatchKeys === "number" ? Math.max(0, setDataOptions.maxPatchKeys) : Number.POSITIVE_INFINITY;
7
+ const maxPayloadBytes = typeof setDataOptions?.maxPayloadBytes === "number" ? Math.max(0, setDataOptions.maxPayloadBytes) : Number.POSITIVE_INFINITY;
8
+ const mergeSiblingThreshold = typeof setDataOptions?.mergeSiblingThreshold === "number" ? Math.max(2, Math.floor(setDataOptions.mergeSiblingThreshold)) : 0;
9
+ const mergeSiblingMaxInflationRatio = typeof setDataOptions?.mergeSiblingMaxInflationRatio === "number" ? Math.max(0, setDataOptions.mergeSiblingMaxInflationRatio) : 1.25;
10
+ const mergeSiblingMaxParentBytes = typeof setDataOptions?.mergeSiblingMaxParentBytes === "number" ? Math.max(0, setDataOptions.mergeSiblingMaxParentBytes) : Number.POSITIVE_INFINITY;
11
+ const mergeSiblingSkipArray = setDataOptions?.mergeSiblingSkipArray ?? true;
12
+ const computedCompare = setDataOptions?.computedCompare ?? (setDataStrategy === "patch" ? "deep" : "reference");
13
+ const computedCompareMaxDepth = typeof setDataOptions?.computedCompareMaxDepth === "number" ? Math.max(0, Math.floor(setDataOptions.computedCompareMaxDepth)) : 4;
14
+ const computedCompareMaxKeys = typeof setDataOptions?.computedCompareMaxKeys === "number" ? Math.max(0, Math.floor(setDataOptions.computedCompareMaxKeys)) : 200;
15
+ const prelinkMaxDepth = setDataOptions?.prelinkMaxDepth;
16
+ const prelinkMaxKeys = setDataOptions?.prelinkMaxKeys;
17
+ const debug = setDataOptions?.debug;
18
+ const diagnostics = setDataOptions?.diagnostics ?? "off";
19
+ const loopWarningOption = setDataOptions?.loopWarning;
21
20
  const loopWarning = loopWarningOption === false || loopWarningOption && typeof loopWarningOption === "object" && loopWarningOption.enabled === false ? false : {
22
21
  sampleWindowMs: typeof loopWarningOption === "object" && typeof loopWarningOption.sampleWindowMs === "number" ? Math.max(100, Math.floor(loopWarningOption.sampleWindowMs)) : 1e3,
23
22
  maxFlushes: typeof loopWarningOption === "object" && typeof loopWarningOption.maxFlushes === "number" ? Math.max(1, Math.floor(loopWarningOption.maxFlushes)) : 50,
24
23
  coolDownMs: typeof loopWarningOption === "object" && typeof loopWarningOption.coolDownMs === "number" ? Math.max(0, Math.floor(loopWarningOption.coolDownMs)) : 5e3
25
24
  };
26
- const debugWhen = (_setDataOptions$debug = setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.debugWhen) !== null && _setDataOptions$debug !== void 0 ? _setDataOptions$debug : "fallback";
27
- const debugSampleRate = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.debugSampleRate) === "number" ? Math.min(1, Math.max(0, setDataOptions.debugSampleRate)) : 1;
28
- const elevateTopKeyThreshold = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.elevateTopKeyThreshold) === "number" ? Math.max(0, Math.floor(setDataOptions.elevateTopKeyThreshold)) : Number.POSITIVE_INFINITY;
29
- const toPlainMaxDepth = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.toPlainMaxDepth) === "number" ? Math.max(0, Math.floor(setDataOptions.toPlainMaxDepth)) : Number.POSITIVE_INFINITY;
30
- const toPlainMaxKeys = typeof (setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.toPlainMaxKeys) === "number" ? Math.max(0, Math.floor(setDataOptions.toPlainMaxKeys)) : Number.POSITIVE_INFINITY;
31
- const includeFunctions = Boolean(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.includeFunctions);
32
- const functionPaths = Array.isArray(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.functionPaths) ? [...new Set(setDataOptions.functionPaths.filter((path) => typeof path === "string" && path.length > 0))] : [];
33
- const pickSet = Array.isArray(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.pick) && setDataOptions.pick.length > 0 ? new Set(setDataOptions.pick) : void 0;
34
- const omitSet = Array.isArray(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.omit) && setDataOptions.omit.length > 0 ? new Set(setDataOptions.omit) : void 0;
25
+ const debugWhen = setDataOptions?.debugWhen ?? "fallback";
26
+ const debugSampleRate = typeof setDataOptions?.debugSampleRate === "number" ? Math.min(1, Math.max(0, setDataOptions.debugSampleRate)) : 1;
27
+ const elevateTopKeyThreshold = typeof setDataOptions?.elevateTopKeyThreshold === "number" ? Math.max(0, Math.floor(setDataOptions.elevateTopKeyThreshold)) : Number.POSITIVE_INFINITY;
28
+ const toPlainMaxDepth = typeof setDataOptions?.toPlainMaxDepth === "number" ? Math.max(0, Math.floor(setDataOptions.toPlainMaxDepth)) : Number.POSITIVE_INFINITY;
29
+ const toPlainMaxKeys = typeof setDataOptions?.toPlainMaxKeys === "number" ? Math.max(0, Math.floor(setDataOptions.toPlainMaxKeys)) : Number.POSITIVE_INFINITY;
30
+ const includeFunctions = Boolean(setDataOptions?.includeFunctions);
31
+ const functionPaths = Array.isArray(setDataOptions?.functionPaths) ? [...new Set(setDataOptions.functionPaths.filter((path) => typeof path === "string" && path.length > 0))] : [];
32
+ const pickSet = Array.isArray(setDataOptions?.pick) && setDataOptions.pick.length > 0 ? new Set(setDataOptions.pick) : void 0;
33
+ const omitSet = Array.isArray(setDataOptions?.omit) && setDataOptions.omit.length > 0 ? new Set(setDataOptions.omit) : void 0;
35
34
  const shouldIncludeKey = (key) => {
36
35
  if (pickSet && !pickSet.has(key)) return false;
37
36
  if (omitSet && omitSet.has(key)) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"setDataOptions.mjs","names":[],"sources":["../../../../src/runtime/app/setDataOptions.ts"],"sourcesContent":["import type { SetDataSnapshotOptions } from '../types'\n\nexport interface ResolvedSetDataOptions {\n includeComputed: boolean\n suspendWhenHidden: boolean\n setDataStrategy: 'diff' | 'patch'\n maxPatchKeys: number\n maxPayloadBytes: number\n mergeSiblingThreshold: number\n mergeSiblingMaxInflationRatio: number\n mergeSiblingMaxParentBytes: number\n mergeSiblingSkipArray: boolean\n computedCompare: 'reference' | 'shallow' | 'deep'\n computedCompareMaxDepth: number\n computedCompareMaxKeys: number\n prelinkMaxDepth: number | undefined\n prelinkMaxKeys: number | undefined\n debug: SetDataSnapshotOptions['debug']\n diagnostics: 'off' | 'fallback' | 'always'\n loopWarning: false | {\n sampleWindowMs: number\n maxFlushes: number\n coolDownMs: number\n }\n debugWhen: 'fallback' | 'always'\n debugSampleRate: number\n elevateTopKeyThreshold: number\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions: boolean\n functionPaths: string[]\n pickSet: Set<string> | undefined\n omitSet: Set<string> | undefined\n shouldIncludeKey: (key: string) => boolean\n}\n\nexport function resolveSetDataOptions(\n setDataOptions?: SetDataSnapshotOptions,\n): ResolvedSetDataOptions {\n const includeComputed = setDataOptions?.includeComputed ?? true\n const suspendWhenHidden = setDataOptions?.suspendWhenHidden ?? false\n const setDataStrategy = setDataOptions?.strategy ?? 'diff'\n const maxPatchKeys = typeof setDataOptions?.maxPatchKeys === 'number'\n ? Math.max(0, setDataOptions!.maxPatchKeys!)\n : Number.POSITIVE_INFINITY\n const maxPayloadBytes = typeof setDataOptions?.maxPayloadBytes === 'number'\n ? Math.max(0, setDataOptions!.maxPayloadBytes!)\n : Number.POSITIVE_INFINITY\n const mergeSiblingThreshold = typeof setDataOptions?.mergeSiblingThreshold === 'number'\n ? Math.max(2, Math.floor(setDataOptions!.mergeSiblingThreshold!))\n : 0\n const mergeSiblingMaxInflationRatio = typeof setDataOptions?.mergeSiblingMaxInflationRatio === 'number'\n ? Math.max(0, setDataOptions!.mergeSiblingMaxInflationRatio!)\n : 1.25\n const mergeSiblingMaxParentBytes = typeof setDataOptions?.mergeSiblingMaxParentBytes === 'number'\n ? Math.max(0, setDataOptions!.mergeSiblingMaxParentBytes!)\n : Number.POSITIVE_INFINITY\n const mergeSiblingSkipArray = setDataOptions?.mergeSiblingSkipArray ?? true\n const computedCompare = setDataOptions?.computedCompare ?? (setDataStrategy === 'patch' ? 'deep' : 'reference')\n const computedCompareMaxDepth = typeof setDataOptions?.computedCompareMaxDepth === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.computedCompareMaxDepth!))\n : 4\n const computedCompareMaxKeys = typeof setDataOptions?.computedCompareMaxKeys === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.computedCompareMaxKeys!))\n : 200\n const prelinkMaxDepth = setDataOptions?.prelinkMaxDepth\n const prelinkMaxKeys = setDataOptions?.prelinkMaxKeys\n const debug = setDataOptions?.debug\n const diagnostics = setDataOptions?.diagnostics ?? 'off'\n const loopWarningOption = setDataOptions?.loopWarning\n const loopWarning = loopWarningOption === false || (\n loopWarningOption\n && typeof loopWarningOption === 'object'\n && loopWarningOption.enabled === false\n )\n ? false\n : {\n sampleWindowMs: typeof loopWarningOption === 'object' && typeof loopWarningOption.sampleWindowMs === 'number'\n ? Math.max(100, Math.floor(loopWarningOption.sampleWindowMs))\n : 1000,\n maxFlushes: typeof loopWarningOption === 'object' && typeof loopWarningOption.maxFlushes === 'number'\n ? Math.max(1, Math.floor(loopWarningOption.maxFlushes))\n : 50,\n coolDownMs: typeof loopWarningOption === 'object' && typeof loopWarningOption.coolDownMs === 'number'\n ? Math.max(0, Math.floor(loopWarningOption.coolDownMs))\n : 5000,\n }\n const debugWhen = setDataOptions?.debugWhen ?? 'fallback'\n const debugSampleRate = typeof setDataOptions?.debugSampleRate === 'number'\n ? Math.min(1, Math.max(0, setDataOptions!.debugSampleRate!))\n : 1\n const elevateTopKeyThreshold = typeof setDataOptions?.elevateTopKeyThreshold === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.elevateTopKeyThreshold!))\n : Number.POSITIVE_INFINITY\n const toPlainMaxDepth = typeof setDataOptions?.toPlainMaxDepth === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.toPlainMaxDepth!))\n : Number.POSITIVE_INFINITY\n const toPlainMaxKeys = typeof setDataOptions?.toPlainMaxKeys === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.toPlainMaxKeys!))\n : Number.POSITIVE_INFINITY\n const includeFunctions = Boolean(setDataOptions?.includeFunctions)\n const functionPaths = Array.isArray(setDataOptions?.functionPaths)\n ? [...new Set(setDataOptions.functionPaths.filter(path => typeof path === 'string' && path.length > 0))]\n : []\n const pickSet = Array.isArray(setDataOptions?.pick) && setDataOptions!.pick!.length > 0\n ? new Set(setDataOptions!.pick)\n : undefined\n const omitSet = Array.isArray(setDataOptions?.omit) && setDataOptions!.omit!.length > 0\n ? new Set(setDataOptions!.omit)\n : undefined\n const shouldIncludeKey = (key: string) => {\n if (pickSet && !pickSet.has(key)) {\n return false\n }\n if (omitSet && omitSet.has(key)) {\n return false\n }\n return true\n }\n\n return {\n includeComputed,\n suspendWhenHidden,\n setDataStrategy,\n maxPatchKeys,\n maxPayloadBytes,\n mergeSiblingThreshold,\n mergeSiblingMaxInflationRatio,\n mergeSiblingMaxParentBytes,\n mergeSiblingSkipArray,\n computedCompare,\n computedCompareMaxDepth,\n computedCompareMaxKeys,\n prelinkMaxDepth,\n prelinkMaxKeys,\n debug,\n diagnostics,\n loopWarning,\n debugWhen,\n debugSampleRate,\n elevateTopKeyThreshold,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n pickSet,\n omitSet,\n shouldIncludeKey,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"setDataOptions.mjs","names":[],"sources":["../../../../src/runtime/app/setDataOptions.ts"],"sourcesContent":["import type { SetDataSnapshotOptions } from '../types'\n\nexport interface ResolvedSetDataOptions {\n includeComputed: boolean\n suspendWhenHidden: boolean\n setDataStrategy: 'diff' | 'patch'\n maxPatchKeys: number\n maxPayloadBytes: number\n mergeSiblingThreshold: number\n mergeSiblingMaxInflationRatio: number\n mergeSiblingMaxParentBytes: number\n mergeSiblingSkipArray: boolean\n computedCompare: 'reference' | 'shallow' | 'deep'\n computedCompareMaxDepth: number\n computedCompareMaxKeys: number\n prelinkMaxDepth: number | undefined\n prelinkMaxKeys: number | undefined\n debug: SetDataSnapshotOptions['debug']\n diagnostics: 'off' | 'fallback' | 'always'\n loopWarning: false | {\n sampleWindowMs: number\n maxFlushes: number\n coolDownMs: number\n }\n debugWhen: 'fallback' | 'always'\n debugSampleRate: number\n elevateTopKeyThreshold: number\n toPlainMaxDepth: number\n toPlainMaxKeys: number\n includeFunctions: boolean\n functionPaths: string[]\n pickSet: Set<string> | undefined\n omitSet: Set<string> | undefined\n shouldIncludeKey: (key: string) => boolean\n}\n\nexport function resolveSetDataOptions(\n setDataOptions?: SetDataSnapshotOptions,\n): ResolvedSetDataOptions {\n const includeComputed = setDataOptions?.includeComputed ?? true\n const suspendWhenHidden = setDataOptions?.suspendWhenHidden ?? false\n const setDataStrategy = setDataOptions?.strategy ?? 'diff'\n const maxPatchKeys = typeof setDataOptions?.maxPatchKeys === 'number'\n ? Math.max(0, setDataOptions!.maxPatchKeys!)\n : Number.POSITIVE_INFINITY\n const maxPayloadBytes = typeof setDataOptions?.maxPayloadBytes === 'number'\n ? Math.max(0, setDataOptions!.maxPayloadBytes!)\n : Number.POSITIVE_INFINITY\n const mergeSiblingThreshold = typeof setDataOptions?.mergeSiblingThreshold === 'number'\n ? Math.max(2, Math.floor(setDataOptions!.mergeSiblingThreshold!))\n : 0\n const mergeSiblingMaxInflationRatio = typeof setDataOptions?.mergeSiblingMaxInflationRatio === 'number'\n ? Math.max(0, setDataOptions!.mergeSiblingMaxInflationRatio!)\n : 1.25\n const mergeSiblingMaxParentBytes = typeof setDataOptions?.mergeSiblingMaxParentBytes === 'number'\n ? Math.max(0, setDataOptions!.mergeSiblingMaxParentBytes!)\n : Number.POSITIVE_INFINITY\n const mergeSiblingSkipArray = setDataOptions?.mergeSiblingSkipArray ?? true\n const computedCompare = setDataOptions?.computedCompare ?? (setDataStrategy === 'patch' ? 'deep' : 'reference')\n const computedCompareMaxDepth = typeof setDataOptions?.computedCompareMaxDepth === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.computedCompareMaxDepth!))\n : 4\n const computedCompareMaxKeys = typeof setDataOptions?.computedCompareMaxKeys === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.computedCompareMaxKeys!))\n : 200\n const prelinkMaxDepth = setDataOptions?.prelinkMaxDepth\n const prelinkMaxKeys = setDataOptions?.prelinkMaxKeys\n const debug = setDataOptions?.debug\n const diagnostics = setDataOptions?.diagnostics ?? 'off'\n const loopWarningOption = setDataOptions?.loopWarning\n const loopWarning = loopWarningOption === false || (\n loopWarningOption\n && typeof loopWarningOption === 'object'\n && loopWarningOption.enabled === false\n )\n ? false\n : {\n sampleWindowMs: typeof loopWarningOption === 'object' && typeof loopWarningOption.sampleWindowMs === 'number'\n ? Math.max(100, Math.floor(loopWarningOption.sampleWindowMs))\n : 1000,\n maxFlushes: typeof loopWarningOption === 'object' && typeof loopWarningOption.maxFlushes === 'number'\n ? Math.max(1, Math.floor(loopWarningOption.maxFlushes))\n : 50,\n coolDownMs: typeof loopWarningOption === 'object' && typeof loopWarningOption.coolDownMs === 'number'\n ? Math.max(0, Math.floor(loopWarningOption.coolDownMs))\n : 5000,\n }\n const debugWhen = setDataOptions?.debugWhen ?? 'fallback'\n const debugSampleRate = typeof setDataOptions?.debugSampleRate === 'number'\n ? Math.min(1, Math.max(0, setDataOptions!.debugSampleRate!))\n : 1\n const elevateTopKeyThreshold = typeof setDataOptions?.elevateTopKeyThreshold === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.elevateTopKeyThreshold!))\n : Number.POSITIVE_INFINITY\n const toPlainMaxDepth = typeof setDataOptions?.toPlainMaxDepth === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.toPlainMaxDepth!))\n : Number.POSITIVE_INFINITY\n const toPlainMaxKeys = typeof setDataOptions?.toPlainMaxKeys === 'number'\n ? Math.max(0, Math.floor(setDataOptions!.toPlainMaxKeys!))\n : Number.POSITIVE_INFINITY\n const includeFunctions = Boolean(setDataOptions?.includeFunctions)\n const functionPaths = Array.isArray(setDataOptions?.functionPaths)\n ? [...new Set(setDataOptions.functionPaths.filter(path => typeof path === 'string' && path.length > 0))]\n : []\n const pickSet = Array.isArray(setDataOptions?.pick) && setDataOptions!.pick!.length > 0\n ? new Set(setDataOptions!.pick)\n : undefined\n const omitSet = Array.isArray(setDataOptions?.omit) && setDataOptions!.omit!.length > 0\n ? new Set(setDataOptions!.omit)\n : undefined\n const shouldIncludeKey = (key: string) => {\n if (pickSet && !pickSet.has(key)) {\n return false\n }\n if (omitSet && omitSet.has(key)) {\n return false\n }\n return true\n }\n\n return {\n includeComputed,\n suspendWhenHidden,\n setDataStrategy,\n maxPatchKeys,\n maxPayloadBytes,\n mergeSiblingThreshold,\n mergeSiblingMaxInflationRatio,\n mergeSiblingMaxParentBytes,\n mergeSiblingSkipArray,\n computedCompare,\n computedCompareMaxDepth,\n computedCompareMaxKeys,\n prelinkMaxDepth,\n prelinkMaxKeys,\n debug,\n diagnostics,\n loopWarning,\n debugWhen,\n debugSampleRate,\n elevateTopKeyThreshold,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n pickSet,\n omitSet,\n shouldIncludeKey,\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { getMiniProgramGlobalObject } from "./platform.mjs";
1
+ import { getCurrentMiniProgramGlobalObject } from "./platform/current.mjs";
2
2
  import { INTERNAL_DEFAULTS_SCOPE_KEY, applyWevuAppDefaults } from "./defaults.mjs";
3
3
  import { isSetDataHighFrequencyWarningRequested, requireRuntimeCapability } from "./capabilities.mjs";
4
4
  import { ensureRuntimeAppProvides, setRuntimeAppProvidedValue } from "./provideContext.mjs";
@@ -14,14 +14,14 @@ function createApp(options) {
14
14
  const defaultsScope = options[INTERNAL_DEFAULTS_SCOPE_KEY];
15
15
  const { [INTERNAL_DEFAULTS_SCOPE_KEY]: _ignoredDefaultsScope, [WEVU_BINDING_MANIFEST_KEY]: rawBindingManifest, [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: scopedSlotOwnerRequired, data, computed: computedOptions, methods, setData: setDataOptions, watch: appWatch, setup: appSetup, ...mpOptions } = defaultsScope === "component" ? options : applyWevuAppDefaults(options);
16
16
  const bindingManifest = resolveBindingManifest(rawBindingManifest);
17
- const resolvedMethods = methods !== null && methods !== void 0 ? methods : {};
18
- const resolvedComputed = computedOptions !== null && computedOptions !== void 0 ? computedOptions : {};
19
- const hasScopedSlotBindings = scopedSlotOwnerRequired === true || Array.isArray(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.pick) && setDataOptions.pick.includes(WEVU_SLOT_OWNER_ID_KEY);
17
+ const resolvedMethods = methods ?? {};
18
+ const resolvedComputed = computedOptions ?? {};
19
+ const hasScopedSlotBindings = scopedSlotOwnerRequired === true || Array.isArray(setDataOptions?.pick) && setDataOptions.pick.includes(WEVU_SLOT_OWNER_ID_KEY);
20
20
  const methodRecord = resolvedMethods;
21
21
  const inlineMap = methodRecord[WEVU_INLINE_MAP_KEY];
22
22
  if (Object.prototype.hasOwnProperty.call(methodRecord, WEVU_INLINE_MAP_KEY) && inlineMap && typeof inlineMap === "object" && Object.keys(inlineMap).length > 0 && typeof methodRecord[WEVU_INLINE_HANDLER] !== "function" && typeof mpOptions[WEVU_INLINE_HANDLER] !== "function") requireRuntimeCapability("inlineEvents", "createApp(inline event metadata)");
23
- if ((setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.strategy) === "patch") requireRuntimeCapability("patchStrategy", "createApp(setData.strategy=\"patch\")");
24
- if (isSetDataHighFrequencyWarningRequested(setDataOptions === null || setDataOptions === void 0 ? void 0 : setDataOptions.highFrequencyWarning)) requireRuntimeCapability("setDataHighFrequencyWarning", "createApp(setData.highFrequencyWarning)");
23
+ if (setDataOptions?.strategy === "patch") requireRuntimeCapability("patchStrategy", "createApp(setData.strategy=\"patch\")");
24
+ if (isSetDataHighFrequencyWarningRequested(setDataOptions?.highFrequencyWarning)) requireRuntimeCapability("setDataHighFrequencyWarning", "createApp(setData.highFrequencyWarning)");
25
25
  if (hasScopedSlotBindings) requireRuntimeCapability("scopedSlots", "createApp(scoped-slot bindings)");
26
26
  const installedPlugins = /* @__PURE__ */ new Set();
27
27
  const appUnmountCleanups = /* @__PURE__ */ new Set();
@@ -80,16 +80,16 @@ function createApp(options) {
80
80
  enumerable: false,
81
81
  writable: false
82
82
  });
83
- } catch (_unused) {
83
+ } catch {
84
84
  runtimeApp.__wevuSetDataOptions = setDataOptions;
85
85
  runtimeApp.__wevuHasTemplateRuntimeBindings = hasScopedSlotBindings;
86
86
  }
87
87
  const registerRuntimeApp = () => {
88
- const globalObject = getMiniProgramGlobalObject();
88
+ const globalObject = getCurrentMiniProgramGlobalObject();
89
89
  const appRegisterKey = "__wevuAppRegistered";
90
90
  if (!(globalObject ? Boolean(globalObject[appRegisterKey]) : false)) {
91
91
  if (globalObject) globalObject[appRegisterKey] = true;
92
- registerApp(runtimeApp, methods !== null && methods !== void 0 ? methods : {}, appWatch, appSetup, mpOptions);
92
+ registerApp(runtimeApp, methods ?? {}, appWatch, appSetup, mpOptions);
93
93
  }
94
94
  };
95
95
  if (defaultsScope !== "component" && typeof App === "function") registerRuntimeApp();
@@ -1 +1 @@
1
- {"version":3,"file":"app.mjs","names":[],"sources":["../../../src/runtime/app.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type {\n AppConfig,\n ComputedDefinitions,\n CreateAppOptions,\n MethodDefinitions,\n RuntimeApp,\n WevuPlugin,\n} from './types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_INLINE_HANDLER,\n WEVU_INLINE_MAP_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n} from '@weapp-core/constants'\nimport { version } from '../version'\nimport { createRuntimeMount } from './app/mount'\nimport { setPendingRuntimeAppRegistration } from './app/pending'\nimport { resolveBindingManifest } from './bindingManifest'\nimport { isSetDataHighFrequencyWarningRequested, requireRuntimeCapability } from './capabilities'\nimport { applyWevuAppDefaults, INTERNAL_DEFAULTS_SCOPE_KEY } from './defaults'\nimport { getMiniProgramGlobalObject } from './platform'\nimport { ensureRuntimeAppProvides, setRuntimeAppProvidedValue } from './provideContext'\nimport { registerApp } from './register'\n\nexport function createApp<D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(\n options: CreateAppOptions<D, C, M>,\n): RuntimeApp<D, C, M> {\n const defaultsScope = (options as any)[INTERNAL_DEFAULTS_SCOPE_KEY] as string | undefined\n const resolvedOptions = defaultsScope === 'component'\n ? options\n : applyWevuAppDefaults(options)\n const {\n [INTERNAL_DEFAULTS_SCOPE_KEY]: _ignoredDefaultsScope,\n [WEVU_BINDING_MANIFEST_KEY]: rawBindingManifest,\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: scopedSlotOwnerRequired,\n data,\n computed: computedOptions,\n methods,\n setData: setDataOptions,\n watch: appWatch,\n setup: appSetup,\n ...mpOptions\n } = resolvedOptions as typeof resolvedOptions & { [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]?: boolean }\n const bindingManifest: WevuRuntimeBindingManifestV1 | undefined = resolveBindingManifest(rawBindingManifest)\n const resolvedMethods = methods ?? ({} as M)\n const resolvedComputed = computedOptions ?? ({} as C)\n const hasScopedSlotBindings = scopedSlotOwnerRequired === true\n || (Array.isArray(setDataOptions?.pick) && setDataOptions.pick.includes(WEVU_SLOT_OWNER_ID_KEY))\n const methodRecord = resolvedMethods as unknown as Record<string, unknown>\n const inlineMap = methodRecord[WEVU_INLINE_MAP_KEY]\n const hasInlineMetadata = Object.prototype.hasOwnProperty.call(methodRecord, WEVU_INLINE_MAP_KEY)\n && inlineMap\n && typeof inlineMap === 'object'\n && Object.keys(inlineMap).length > 0\n if (\n hasInlineMetadata\n && typeof methodRecord[WEVU_INLINE_HANDLER] !== 'function'\n && typeof (mpOptions as Record<string, unknown>)[WEVU_INLINE_HANDLER] !== 'function'\n ) {\n requireRuntimeCapability('inlineEvents', 'createApp(inline event metadata)')\n }\n if (setDataOptions?.strategy === 'patch') {\n requireRuntimeCapability('patchStrategy', 'createApp(setData.strategy=\"patch\")')\n }\n if (isSetDataHighFrequencyWarningRequested(setDataOptions?.highFrequencyWarning)) {\n requireRuntimeCapability('setDataHighFrequencyWarning', 'createApp(setData.highFrequencyWarning)')\n }\n if (hasScopedSlotBindings) {\n requireRuntimeCapability('scopedSlots', 'createApp(scoped-slot bindings)')\n }\n\n const installedPlugins = new Set<WevuPlugin>()\n const appUnmountCleanups = new Set<() => void>()\n let appUnmounted = false\n const appConfig: AppConfig = { globalProperties: {} }\n const mount = createRuntimeMount<D, C, M>({\n data,\n resolvedComputed,\n resolvedMethods,\n appConfig,\n setDataOptions,\n bindingManifest,\n })\n\n const runtimeApp: RuntimeApp<D, C, M> = {\n mount,\n use(plugin: WevuPlugin, ...options: any[]) {\n if (!plugin || installedPlugins.has(plugin)) {\n return runtimeApp\n }\n installedPlugins.add(plugin)\n if (typeof plugin === 'function') {\n plugin(runtimeApp, ...options)\n }\n else if (typeof plugin.install === 'function') {\n plugin.install(runtimeApp, ...options)\n }\n else {\n throw new TypeError('插件必须是函数,或包含 install 方法的对象')\n }\n return runtimeApp\n },\n provide(key: any, value: any) {\n setRuntimeAppProvidedValue(runtimeApp, key, value, {\n syncGlobal: defaultsScope !== 'component',\n })\n return runtimeApp\n },\n onUnmount(cleanup: () => void) {\n if (typeof cleanup !== 'function') {\n throw new TypeError('onUnmount 只接受函数')\n }\n if (appUnmounted) {\n cleanup()\n return runtimeApp\n }\n appUnmountCleanups.add(cleanup)\n return runtimeApp\n },\n unmount() {\n if (appUnmounted) {\n return\n }\n appUnmounted = true\n for (const cleanup of appUnmountCleanups) {\n cleanup()\n }\n appUnmountCleanups.clear()\n },\n config: appConfig,\n version,\n }\n\n try {\n ensureRuntimeAppProvides(runtimeApp)\n Object.defineProperty(runtimeApp as Record<string, any>, '__wevuSetDataOptions', {\n value: setDataOptions,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n Object.defineProperty(runtimeApp as Record<string, any>, '__wevuHasTemplateRuntimeBindings', {\n value: hasScopedSlotBindings,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(runtimeApp as any).__wevuSetDataOptions = setDataOptions\n ;(runtimeApp as any).__wevuHasTemplateRuntimeBindings = hasScopedSlotBindings\n }\n\n const registerRuntimeApp = () => {\n const globalObject = getMiniProgramGlobalObject()\n const appRegisterKey = '__wevuAppRegistered'\n const hasRegistered = globalObject ? Boolean(globalObject[appRegisterKey]) : false\n // 开发者工具/HMR 可能重复执行入口,避免多次 App() 导致 AppService 事件监听累积。\n if (!hasRegistered) {\n if (globalObject) {\n globalObject[appRegisterKey] = true\n }\n // 若检测到全局 App 构造器则自动注册小程序 App\n registerApp<D, C, M>(runtimeApp, (methods ?? {}) as any, appWatch as any, appSetup as any, mpOptions as any)\n }\n }\n\n if (defaultsScope !== 'component' && typeof App === 'function') {\n registerRuntimeApp()\n }\n else if (defaultsScope !== 'component') {\n setPendingRuntimeAppRegistration({\n app: runtimeApp,\n register: registerRuntimeApp,\n })\n }\n\n return runtimeApp\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"app.mjs","names":[],"sources":["../../../src/runtime/app.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type {\n AppConfig,\n ComputedDefinitions,\n CreateAppOptions,\n MethodDefinitions,\n RuntimeApp,\n WevuPlugin,\n} from './types'\nimport {\n WEVU_BINDING_MANIFEST_KEY,\n WEVU_INLINE_HANDLER,\n WEVU_INLINE_MAP_KEY,\n WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY,\n WEVU_SLOT_OWNER_ID_KEY,\n} from '@weapp-core/constants'\nimport { version } from '../version'\nimport { createRuntimeMount } from './app/mount'\nimport { setPendingRuntimeAppRegistration } from './app/pending'\nimport { resolveBindingManifest } from './bindingManifest'\nimport { isSetDataHighFrequencyWarningRequested, requireRuntimeCapability } from './capabilities'\nimport { applyWevuAppDefaults, INTERNAL_DEFAULTS_SCOPE_KEY } from './defaults'\nimport { getCurrentMiniProgramGlobalObject } from './platform'\nimport { ensureRuntimeAppProvides, setRuntimeAppProvidedValue } from './provideContext'\nimport { registerApp } from './register'\n\nexport function createApp<D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(\n options: CreateAppOptions<D, C, M>,\n): RuntimeApp<D, C, M> {\n const defaultsScope = (options as any)[INTERNAL_DEFAULTS_SCOPE_KEY] as string | undefined\n const resolvedOptions = defaultsScope === 'component'\n ? options\n : applyWevuAppDefaults(options)\n const {\n [INTERNAL_DEFAULTS_SCOPE_KEY]: _ignoredDefaultsScope,\n [WEVU_BINDING_MANIFEST_KEY]: rawBindingManifest,\n [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: scopedSlotOwnerRequired,\n data,\n computed: computedOptions,\n methods,\n setData: setDataOptions,\n watch: appWatch,\n setup: appSetup,\n ...mpOptions\n } = resolvedOptions as typeof resolvedOptions & { [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]?: boolean }\n const bindingManifest: WevuRuntimeBindingManifestV1 | undefined = resolveBindingManifest(rawBindingManifest)\n const resolvedMethods = methods ?? ({} as M)\n const resolvedComputed = computedOptions ?? ({} as C)\n const hasScopedSlotBindings = scopedSlotOwnerRequired === true\n || (Array.isArray(setDataOptions?.pick) && setDataOptions.pick.includes(WEVU_SLOT_OWNER_ID_KEY))\n const methodRecord = resolvedMethods as unknown as Record<string, unknown>\n const inlineMap = methodRecord[WEVU_INLINE_MAP_KEY]\n const hasInlineMetadata = Object.prototype.hasOwnProperty.call(methodRecord, WEVU_INLINE_MAP_KEY)\n && inlineMap\n && typeof inlineMap === 'object'\n && Object.keys(inlineMap).length > 0\n if (\n hasInlineMetadata\n && typeof methodRecord[WEVU_INLINE_HANDLER] !== 'function'\n && typeof (mpOptions as Record<string, unknown>)[WEVU_INLINE_HANDLER] !== 'function'\n ) {\n requireRuntimeCapability('inlineEvents', 'createApp(inline event metadata)')\n }\n if (setDataOptions?.strategy === 'patch') {\n requireRuntimeCapability('patchStrategy', 'createApp(setData.strategy=\"patch\")')\n }\n if (isSetDataHighFrequencyWarningRequested(setDataOptions?.highFrequencyWarning)) {\n requireRuntimeCapability('setDataHighFrequencyWarning', 'createApp(setData.highFrequencyWarning)')\n }\n if (hasScopedSlotBindings) {\n requireRuntimeCapability('scopedSlots', 'createApp(scoped-slot bindings)')\n }\n\n const installedPlugins = new Set<WevuPlugin>()\n const appUnmountCleanups = new Set<() => void>()\n let appUnmounted = false\n const appConfig: AppConfig = { globalProperties: {} }\n const mount = createRuntimeMount<D, C, M>({\n data,\n resolvedComputed,\n resolvedMethods,\n appConfig,\n setDataOptions,\n bindingManifest,\n })\n\n const runtimeApp: RuntimeApp<D, C, M> = {\n mount,\n use(plugin: WevuPlugin, ...options: any[]) {\n if (!plugin || installedPlugins.has(plugin)) {\n return runtimeApp\n }\n installedPlugins.add(plugin)\n if (typeof plugin === 'function') {\n plugin(runtimeApp, ...options)\n }\n else if (typeof plugin.install === 'function') {\n plugin.install(runtimeApp, ...options)\n }\n else {\n throw new TypeError('插件必须是函数,或包含 install 方法的对象')\n }\n return runtimeApp\n },\n provide(key: any, value: any) {\n setRuntimeAppProvidedValue(runtimeApp, key, value, {\n syncGlobal: defaultsScope !== 'component',\n })\n return runtimeApp\n },\n onUnmount(cleanup: () => void) {\n if (typeof cleanup !== 'function') {\n throw new TypeError('onUnmount 只接受函数')\n }\n if (appUnmounted) {\n cleanup()\n return runtimeApp\n }\n appUnmountCleanups.add(cleanup)\n return runtimeApp\n },\n unmount() {\n if (appUnmounted) {\n return\n }\n appUnmounted = true\n for (const cleanup of appUnmountCleanups) {\n cleanup()\n }\n appUnmountCleanups.clear()\n },\n config: appConfig,\n version,\n }\n\n try {\n ensureRuntimeAppProvides(runtimeApp)\n Object.defineProperty(runtimeApp as Record<string, any>, '__wevuSetDataOptions', {\n value: setDataOptions,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n Object.defineProperty(runtimeApp as Record<string, any>, '__wevuHasTemplateRuntimeBindings', {\n value: hasScopedSlotBindings,\n configurable: true,\n enumerable: false,\n writable: false,\n })\n }\n catch {\n ;(runtimeApp as any).__wevuSetDataOptions = setDataOptions\n ;(runtimeApp as any).__wevuHasTemplateRuntimeBindings = hasScopedSlotBindings\n }\n\n const registerRuntimeApp = () => {\n const globalObject = getCurrentMiniProgramGlobalObject()\n const appRegisterKey = '__wevuAppRegistered'\n const hasRegistered = globalObject ? Boolean(globalObject[appRegisterKey]) : false\n // 开发者工具/HMR 可能重复执行入口,避免多次 App() 导致 AppService 事件监听累积。\n if (!hasRegistered) {\n if (globalObject) {\n globalObject[appRegisterKey] = true\n }\n // 若检测到全局 App 构造器则自动注册小程序 App\n registerApp<D, C, M>(runtimeApp, (methods ?? {}) as any, appWatch as any, appSetup as any, mpOptions as any)\n }\n }\n\n if (defaultsScope !== 'component' && typeof App === 'function') {\n registerRuntimeApp()\n }\n else if (defaultsScope !== 'component') {\n setPendingRuntimeAppRegistration({\n app: runtimeApp,\n register: registerRuntimeApp,\n })\n }\n\n return runtimeApp\n}\n"],"mappings":"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"}
@@ -43,18 +43,13 @@ function resolveBindingManifest(value) {
43
43
  * 判断清单是否声明了指定输出路径。
44
44
  */
45
45
  function hasBindingOutputPath(manifest, outputPath) {
46
- var _manifest$bindings$so;
47
- return (_manifest$bindings$so = manifest === null || manifest === void 0 ? void 0 : manifest.bindings.some((binding) => binding.outputPath === outputPath)) !== null && _manifest$bindings$so !== void 0 ? _manifest$bindings$so : false;
46
+ return manifest?.bindings.some((binding) => binding.outputPath === outputPath) ?? false;
48
47
  }
49
48
  function normalizeBindingPath(path) {
50
- return path.replace(/\[(?:'([^']+)'|"([^"]+)"|([^\]]+))\]/g, (_match, single, double, bare) => {
51
- var _ref;
52
- return `.${(_ref = single !== null && single !== void 0 ? single : double) !== null && _ref !== void 0 ? _ref : bare}`;
53
- }).replace(/^\./, "");
49
+ return path.replace(/\[(?:'([^']+)'|"([^"]+)"|([^\]]+))\]/g, (_match, single, double, bare) => `.${single ?? double ?? bare}`).replace(/^\./, "");
54
50
  }
55
51
  function topLevelPath(path) {
56
- var _normalizeBindingPath;
57
- return (_normalizeBindingPath = normalizeBindingPath(path).split(".", 1)[0]) !== null && _normalizeBindingPath !== void 0 ? _normalizeBindingPath : "";
52
+ return normalizeBindingPath(path).split(".", 1)[0] ?? "";
58
53
  }
59
54
  function pathsOverlap(left, right) {
60
55
  const normalizedLeft = normalizeBindingPath(left);
@@ -62,18 +57,16 @@ function pathsOverlap(left, right) {
62
57
  return normalizedLeft === normalizedRight || normalizedLeft.startsWith(`${normalizedRight}.`) || normalizedRight.startsWith(`${normalizedLeft}.`);
63
58
  }
64
59
  function getBindingUpdateMode(binding) {
65
- var _binding$updateMode;
66
- return (_binding$updateMode = binding.updateMode) !== null && _binding$updateMode !== void 0 ? _binding$updateMode : "exact-path";
60
+ return binding.updateMode ?? "exact-path";
67
61
  }
68
62
  function matchesBindingPath(binding, path) {
69
- var _binding$sourceRoots;
70
63
  if (!path) return false;
71
64
  const updateMode = getBindingUpdateMode(binding);
72
65
  if (updateMode === "snapshot-fallback" && binding.outputPath === "*") return true;
73
66
  if (updateMode === "exact-path") return pathsOverlap(binding.outputPath, path);
74
67
  const pathRoot = topLevelPath(path);
75
68
  if (topLevelPath(binding.outputPath) === pathRoot) return true;
76
- return updateMode === "snapshot-fallback" && ((_binding$sourceRoots = binding.sourceRoots) !== null && _binding$sourceRoots !== void 0 ? _binding$sourceRoots : []).some((sourceRoot) => topLevelPath(sourceRoot) === pathRoot);
69
+ return updateMode === "snapshot-fallback" && (binding.sourceRoots ?? []).some((sourceRoot) => topLevelPath(sourceRoot) === pathRoot);
77
70
  }
78
71
  /**
79
72
  * 按实际 setData 路径惰性解析相关模板绑定,保持清单顺序并按 id 去重。
@@ -83,7 +76,6 @@ function resolveBindingDiagnostics(manifest, paths, wholeSnapshotFallback = fals
83
76
  const seenIds = /* @__PURE__ */ new Set();
84
77
  const diagnostics = [];
85
78
  for (const binding of manifest.bindings) {
86
- var _binding$sourceFile;
87
79
  if (seenIds.has(binding.id)) continue;
88
80
  const updateMode = getBindingUpdateMode(binding);
89
81
  if (!(payloadPaths.length > 0 ? payloadPaths.some((path) => matchesBindingPath(binding, path)) : wholeSnapshotFallback && updateMode === "snapshot-fallback")) continue;
@@ -92,7 +84,7 @@ function resolveBindingDiagnostics(manifest, paths, wholeSnapshotFallback = fals
92
84
  id: binding.id,
93
85
  outputPath: binding.outputPath,
94
86
  updateMode,
95
- sourceFile: (_binding$sourceFile = binding.sourceFile) !== null && _binding$sourceFile !== void 0 ? _binding$sourceFile : manifest.sourceFile
87
+ sourceFile: binding.sourceFile ?? manifest.sourceFile
96
88
  };
97
89
  if (binding.sourceLocation) diagnostic.sourceLocation = binding.sourceLocation;
98
90
  diagnostics.push(diagnostic);
@@ -1 +1 @@
1
- {"version":3,"file":"bindingManifest.mjs","names":[],"sources":["../../../src/runtime/bindingManifest.ts"],"sourcesContent":["import type {\n WevuBindingSourcePositionV1,\n WevuBindingUpdateMode,\n WevuRuntimeBindingManifestV1,\n WevuRuntimeBindingRecordV1,\n} from '@weapp-core/constants'\nimport type { SetDataBindingDiagnostic } from './types'\n\nconst BINDING_UPDATE_MODES: Record<string, true> = {\n 'exact-path': true,\n 'snapshot-fallback': true,\n 'top-level': true,\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(item => typeof item === 'string')\n}\nfunction isFiniteInteger(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value) && Number.isInteger(value)\n}\n\nfunction isSourcePosition(value: unknown): value is WevuBindingSourcePositionV1 {\n if (!value || typeof value !== 'object') {\n return false\n }\n const position = value as Record<string, unknown>\n return isFiniteInteger(position.offset)\n && position.offset >= 0\n && isFiniteInteger(position.line)\n && position.line >= 1\n && isFiniteInteger(position.column)\n && position.column >= 1\n}\n\nfunction isSourceLocation(value: unknown) {\n if (!value || typeof value !== 'object') {\n return false\n }\n const location = value as Record<string, unknown>\n const start = location.start\n const end = location.end\n return isSourcePosition(start)\n && isSourcePosition(end)\n && end.offset >= start.offset\n}\n\nfunction hasValidFeatures(value: object) {\n return Object.values(value).every(feature => feature === true)\n}\n\nfunction isBindingRecord(value: unknown): value is WevuRuntimeBindingRecordV1 {\n if (!value || typeof value !== 'object') {\n return false\n }\n const binding = value as Partial<WevuRuntimeBindingRecordV1>\n return typeof binding.id === 'string'\n && binding.id.length > 0\n && typeof binding.outputPath === 'string'\n && binding.outputPath.length > 0\n && (binding.sourceFile === undefined\n || (typeof binding.sourceFile === 'string' && binding.sourceFile.length > 0))\n && (binding.updateMode === undefined\n || (typeof binding.updateMode === 'string' && BINDING_UPDATE_MODES[binding.updateMode] === true))\n && (binding.sourceRoots === undefined || isStringArray(binding.sourceRoots))\n && (binding.sourceLocation === undefined || isSourceLocation(binding.sourceLocation))\n}\n\n/**\n * 仅接受当前运行时理解的 Binding Manifest 版本。\n */\nexport function resolveBindingManifest(value: unknown): WevuRuntimeBindingManifestV1 | undefined {\n if (!value || typeof value !== 'object') {\n return undefined\n }\n const manifest = value as Partial<WevuRuntimeBindingManifestV1>\n if (\n manifest.version !== 1\n || typeof manifest.sourceFile !== 'string'\n || !Array.isArray(manifest.bindings)\n || !manifest.bindings.every(isBindingRecord)\n || (manifest.features !== undefined\n && (!manifest.features\n || typeof manifest.features !== 'object'\n || Array.isArray(manifest.features)\n || !hasValidFeatures(manifest.features)))\n ) {\n return undefined\n }\n return manifest as WevuRuntimeBindingManifestV1\n}\n\n/**\n * 判断清单是否声明了指定输出路径。\n */\nexport function hasBindingOutputPath(\n manifest: WevuRuntimeBindingManifestV1 | undefined,\n outputPath: string,\n) {\n return manifest?.bindings.some(binding => binding.outputPath === outputPath) ?? false\n}\n\nfunction normalizeBindingPath(path: string) {\n return path\n .replace(/\\[(?:'([^']+)'|\"([^\"]+)\"|([^\\]]+))\\]/g, (_match, single, double, bare) => `.${single ?? double ?? bare}`)\n .replace(/^\\./, '')\n}\n\nfunction topLevelPath(path: string) {\n return normalizeBindingPath(path).split('.', 1)[0] ?? ''\n}\n\nfunction pathsOverlap(left: string, right: string) {\n const normalizedLeft = normalizeBindingPath(left)\n const normalizedRight = normalizeBindingPath(right)\n return normalizedLeft === normalizedRight\n || normalizedLeft.startsWith(`${normalizedRight}.`)\n || normalizedRight.startsWith(`${normalizedLeft}.`)\n}\n\nfunction getBindingUpdateMode(binding: WevuRuntimeBindingRecordV1): WevuBindingUpdateMode {\n return binding.updateMode ?? 'exact-path'\n}\n\nfunction matchesBindingPath(binding: WevuRuntimeBindingRecordV1, path: string) {\n if (!path) {\n return false\n }\n const updateMode = getBindingUpdateMode(binding)\n if (updateMode === 'snapshot-fallback' && binding.outputPath === '*') {\n return true\n }\n if (updateMode === 'exact-path') {\n return pathsOverlap(binding.outputPath, path)\n }\n\n const pathRoot = topLevelPath(path)\n if (topLevelPath(binding.outputPath) === pathRoot) {\n return true\n }\n return updateMode === 'snapshot-fallback'\n && (binding.sourceRoots ?? []).some(sourceRoot => topLevelPath(sourceRoot) === pathRoot)\n}\n\n/**\n * 按实际 setData 路径惰性解析相关模板绑定,保持清单顺序并按 id 去重。\n */\nexport function resolveBindingDiagnostics(\n manifest: WevuRuntimeBindingManifestV1,\n paths: Iterable<string>,\n wholeSnapshotFallback = false,\n): SetDataBindingDiagnostic[] {\n const payloadPaths = [...paths]\n const seenIds = new Set<string>()\n const diagnostics: SetDataBindingDiagnostic[] = []\n\n for (const binding of manifest.bindings) {\n if (seenIds.has(binding.id)) {\n continue\n }\n const updateMode = getBindingUpdateMode(binding)\n const matches = payloadPaths.length > 0\n ? payloadPaths.some(path => matchesBindingPath(binding, path))\n : wholeSnapshotFallback && updateMode === 'snapshot-fallback'\n if (!matches) {\n continue\n }\n seenIds.add(binding.id)\n const diagnostic: SetDataBindingDiagnostic = {\n id: binding.id,\n outputPath: binding.outputPath,\n updateMode,\n sourceFile: binding.sourceFile ?? manifest.sourceFile,\n }\n if (binding.sourceLocation) {\n diagnostic.sourceLocation = binding.sourceLocation\n }\n diagnostics.push(diagnostic)\n }\n\n return diagnostics\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"bindingManifest.mjs","names":[],"sources":["../../../src/runtime/bindingManifest.ts"],"sourcesContent":["import type {\n WevuBindingSourcePositionV1,\n WevuBindingUpdateMode,\n WevuRuntimeBindingManifestV1,\n WevuRuntimeBindingRecordV1,\n} from '@weapp-core/constants'\nimport type { SetDataBindingDiagnostic } from './types'\n\nconst BINDING_UPDATE_MODES: Record<string, true> = {\n 'exact-path': true,\n 'snapshot-fallback': true,\n 'top-level': true,\n}\n\nfunction isStringArray(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(item => typeof item === 'string')\n}\nfunction isFiniteInteger(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value) && Number.isInteger(value)\n}\n\nfunction isSourcePosition(value: unknown): value is WevuBindingSourcePositionV1 {\n if (!value || typeof value !== 'object') {\n return false\n }\n const position = value as Record<string, unknown>\n return isFiniteInteger(position.offset)\n && position.offset >= 0\n && isFiniteInteger(position.line)\n && position.line >= 1\n && isFiniteInteger(position.column)\n && position.column >= 1\n}\n\nfunction isSourceLocation(value: unknown) {\n if (!value || typeof value !== 'object') {\n return false\n }\n const location = value as Record<string, unknown>\n const start = location.start\n const end = location.end\n return isSourcePosition(start)\n && isSourcePosition(end)\n && end.offset >= start.offset\n}\n\nfunction hasValidFeatures(value: object) {\n return Object.values(value).every(feature => feature === true)\n}\n\nfunction isBindingRecord(value: unknown): value is WevuRuntimeBindingRecordV1 {\n if (!value || typeof value !== 'object') {\n return false\n }\n const binding = value as Partial<WevuRuntimeBindingRecordV1>\n return typeof binding.id === 'string'\n && binding.id.length > 0\n && typeof binding.outputPath === 'string'\n && binding.outputPath.length > 0\n && (binding.sourceFile === undefined\n || (typeof binding.sourceFile === 'string' && binding.sourceFile.length > 0))\n && (binding.updateMode === undefined\n || (typeof binding.updateMode === 'string' && BINDING_UPDATE_MODES[binding.updateMode] === true))\n && (binding.sourceRoots === undefined || isStringArray(binding.sourceRoots))\n && (binding.sourceLocation === undefined || isSourceLocation(binding.sourceLocation))\n}\n\n/**\n * 仅接受当前运行时理解的 Binding Manifest 版本。\n */\nexport function resolveBindingManifest(value: unknown): WevuRuntimeBindingManifestV1 | undefined {\n if (!value || typeof value !== 'object') {\n return undefined\n }\n const manifest = value as Partial<WevuRuntimeBindingManifestV1>\n if (\n manifest.version !== 1\n || typeof manifest.sourceFile !== 'string'\n || !Array.isArray(manifest.bindings)\n || !manifest.bindings.every(isBindingRecord)\n || (manifest.features !== undefined\n && (!manifest.features\n || typeof manifest.features !== 'object'\n || Array.isArray(manifest.features)\n || !hasValidFeatures(manifest.features)))\n ) {\n return undefined\n }\n return manifest as WevuRuntimeBindingManifestV1\n}\n\n/**\n * 判断清单是否声明了指定输出路径。\n */\nexport function hasBindingOutputPath(\n manifest: WevuRuntimeBindingManifestV1 | undefined,\n outputPath: string,\n) {\n return manifest?.bindings.some(binding => binding.outputPath === outputPath) ?? false\n}\n\nfunction normalizeBindingPath(path: string) {\n return path\n .replace(/\\[(?:'([^']+)'|\"([^\"]+)\"|([^\\]]+))\\]/g, (_match, single, double, bare) => `.${single ?? double ?? bare}`)\n .replace(/^\\./, '')\n}\n\nfunction topLevelPath(path: string) {\n return normalizeBindingPath(path).split('.', 1)[0] ?? ''\n}\n\nfunction pathsOverlap(left: string, right: string) {\n const normalizedLeft = normalizeBindingPath(left)\n const normalizedRight = normalizeBindingPath(right)\n return normalizedLeft === normalizedRight\n || normalizedLeft.startsWith(`${normalizedRight}.`)\n || normalizedRight.startsWith(`${normalizedLeft}.`)\n}\n\nfunction getBindingUpdateMode(binding: WevuRuntimeBindingRecordV1): WevuBindingUpdateMode {\n return binding.updateMode ?? 'exact-path'\n}\n\nfunction matchesBindingPath(binding: WevuRuntimeBindingRecordV1, path: string) {\n if (!path) {\n return false\n }\n const updateMode = getBindingUpdateMode(binding)\n if (updateMode === 'snapshot-fallback' && binding.outputPath === '*') {\n return true\n }\n if (updateMode === 'exact-path') {\n return pathsOverlap(binding.outputPath, path)\n }\n\n const pathRoot = topLevelPath(path)\n if (topLevelPath(binding.outputPath) === pathRoot) {\n return true\n }\n return updateMode === 'snapshot-fallback'\n && (binding.sourceRoots ?? []).some(sourceRoot => topLevelPath(sourceRoot) === pathRoot)\n}\n\n/**\n * 按实际 setData 路径惰性解析相关模板绑定,保持清单顺序并按 id 去重。\n */\nexport function resolveBindingDiagnostics(\n manifest: WevuRuntimeBindingManifestV1,\n paths: Iterable<string>,\n wholeSnapshotFallback = false,\n): SetDataBindingDiagnostic[] {\n const payloadPaths = [...paths]\n const seenIds = new Set<string>()\n const diagnostics: SetDataBindingDiagnostic[] = []\n\n for (const binding of manifest.bindings) {\n if (seenIds.has(binding.id)) {\n continue\n }\n const updateMode = getBindingUpdateMode(binding)\n const matches = payloadPaths.length > 0\n ? payloadPaths.some(path => matchesBindingPath(binding, path))\n : wholeSnapshotFallback && updateMode === 'snapshot-fallback'\n if (!matches) {\n continue\n }\n seenIds.add(binding.id)\n const diagnostic: SetDataBindingDiagnostic = {\n id: binding.id,\n outputPath: binding.outputPath,\n updateMode,\n sourceFile: binding.sourceFile ?? manifest.sourceFile,\n }\n if (binding.sourceLocation) {\n diagnostic.sourceLocation = binding.sourceLocation\n }\n diagnostics.push(diagnostic)\n }\n\n return diagnostics\n}\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ import "./types.mjs";
5
5
  import { SetDataSchedulerOptions } from "./app/setData/scheduler.mjs";
6
6
  import { InlineExpressionMap } from "./register/inline.mjs";
7
7
  //#region src/runtime/capabilities.d.ts
8
- export type RuntimeCapabilityName = 'patchStrategy' | 'templateRefs' | 'inlineEvents' | 'setDataHighFrequencyWarning' | 'scopedSlots' | 'layout';
8
+ export type RuntimeCapabilityName = 'patchStrategy' | 'templateRefs' | 'inlineEvents' | 'setDataHighFrequencyWarning' | 'scopedSlots' | 'layout' | 'jsxIslands';
9
9
  export interface TemplateRefBinding {
10
10
  selector: string;
11
11
  inFor: boolean;
@@ -69,6 +69,9 @@ export interface RuntimeCapabilityRegistry {
69
69
  attachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void;
70
70
  detachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void;
71
71
  };
72
+ jsxIslands?: {
73
+ attachMethods: (methods: Record<string, (...args: any[]) => any>) => void;
74
+ };
72
75
  }
73
76
  //#endregion
74
77
  export type { SetDataSchedulerOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../../src/runtime/capabilities.ts"],"sourcesContent":["import type { SetDataSchedulerOptions } from './app/setData/scheduler'\nimport type { InlineExpressionMap } from './register/inline'\nimport type { ComputedDefinitions, InternalRuntimeState, MethodDefinitions, RuntimeInstance, SetDataSnapshotOptions } from './types'\n\nexport type { SetDataSchedulerOptions } from './app/setData/scheduler'\n\nexport type RuntimeCapabilityName\n = | 'patchStrategy'\n | 'templateRefs'\n | 'inlineEvents'\n | 'setDataHighFrequencyWarning'\n | 'scopedSlots'\n | 'layout'\n\nexport interface TemplateRefBinding {\n selector: string\n inFor: boolean\n name?: string\n get?: () => unknown\n kind?: 'component' | 'element'\n}\n\nexport interface LayoutHostBinding {\n key: string\n refName?: string\n selector: string\n kind?: 'component'\n}\n\nexport interface HighFrequencyWarningMonitorOptions {\n option: SetDataSnapshotOptions['highFrequencyWarning']\n targetLabel: string\n isInPageScrollHook?: () => boolean\n now?: () => number\n logger?: (message: string) => void\n}\n\nexport const RUNTIME_SCOPED_SLOT_STATE_KEY = '__wevuScopedSlotMountState'\n\nexport interface SetDataScheduler {\n job: () => void | Promise<void>\n snapshot: () => Record<string, unknown>\n cloneLatestSnapshot: () => Record<string, unknown>\n start?: () => void\n dispose?: () => void\n}\n\nexport interface ScopedSlotMountState {\n ownerId: string\n shouldFlushNativeOwnerId: boolean\n}\n\ntype RuntimeStateWithScopedSlotMount = InternalRuntimeState & {\n [RUNTIME_SCOPED_SLOT_STATE_KEY]?: ScopedSlotMountState\n}\n\n/**\n * 读取能力实现挂在宿主实例上的作用域插槽挂载状态。\n */\nexport function getScopedSlotMountState(target: InternalRuntimeState): ScopedSlotMountState | undefined {\n return (target as RuntimeStateWithScopedSlotMount)[RUNTIME_SCOPED_SLOT_STATE_KEY]\n}\n\nexport interface RuntimeCapabilityRegistry {\n patchStrategy?: {\n createScheduler: (options: SetDataSchedulerOptions) => SetDataScheduler\n }\n templateRefs?: {\n attachBindings: (target: InternalRuntimeState, bindings: readonly TemplateRefBinding[]) => void\n hasBindings: (target: InternalRuntimeState) => boolean\n schedule: (target: InternalRuntimeState, onResolved?: () => void, assignmentTarget?: InternalRuntimeState, onRejected?: (cause: unknown) => void) => void\n scheduleOwner: (target: InternalRuntimeState) => void\n clear: (target: InternalRuntimeState, assignmentTarget?: InternalRuntimeState) => void\n }\n inlineEvents?: {\n handler: (this: InternalRuntimeState, event: unknown) => unknown\n run: (context: unknown, expression: unknown, event: unknown, map?: InlineExpressionMap) => unknown\n }\n setDataHighFrequencyWarning?: {\n createMonitor: (options: HighFrequencyWarningMonitorOptions) => (() => void) | undefined\n }\n scopedSlots?: {\n prepareMount: (target: InternalRuntimeState) => ScopedSlotMountState\n attachMount: <D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(\n target: InternalRuntimeState,\n runtime: RuntimeInstance<D, C, M>,\n state: ScopedSlotMountState,\n deferSnapshot: boolean,\n ) => void\n refresh: (target: InternalRuntimeState, state: ScopedSlotMountState) => void\n syncNativeOwnerId: (target: InternalRuntimeState, state: ScopedSlotMountState) => void\n teardown: (target: InternalRuntimeState) => void\n resolveLifecycleProxy: (target: InternalRuntimeState) => unknown\n allocateOwnerId: () => string\n }\n layout?: {\n attachPageSetter: (target: InternalRuntimeState) => void\n attachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void\n detachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void\n }\n}\n\nconst mutableRuntimeCapabilityRegistry: RuntimeCapabilityRegistry = {}\n\n/**\n * 运行时能力的只读实时视图。安装器直接替换对应槽位,核心路径不会复制能力清单。\n */\nexport const runtimeCapabilityRegistry: Readonly<RuntimeCapabilityRegistry> = mutableRuntimeCapabilityRegistry\n\n/**\n * 注册或热替换一个运行时能力实现。\n */\nexport function registerRuntimeCapability<Name extends RuntimeCapabilityName>(\n name: Name,\n implementation: NonNullable<RuntimeCapabilityRegistry[Name]>,\n): void {\n if (mutableRuntimeCapabilityRegistry[name] === implementation) {\n return\n }\n mutableRuntimeCapabilityRegistry[name] = implementation\n}\n\n/**\n * 读取调用方明确请求的能力;缺失时同步失败,禁止静默降级。\n */\nexport function requireRuntimeCapability<Name extends RuntimeCapabilityName>(\n name: Name,\n requester: string,\n): NonNullable<RuntimeCapabilityRegistry[Name]> {\n const implementation = mutableRuntimeCapabilityRegistry[name]\n if (!implementation) {\n throw new Error(`[wevu] runtime capability \"${name}\" is required by ${requester}; install it before registration`)\n }\n return implementation\n}\n\n/**\n * 判断 setData 高频告警是否被显式启用。\n */\nexport function isSetDataHighFrequencyWarningRequested(\n option: SetDataSnapshotOptions['highFrequencyWarning'],\n): boolean {\n if (option === true) {\n return true\n }\n if (!option || typeof option !== 'object' || Array.isArray(option)) {\n return false\n }\n return option.enabled !== false\n}\n"],"mappings":";AAqCA,MAAa,gCAAgC;;;;AAsB7C,SAAgB,wBAAwB,QAAgE;CACtG,OAAQ,OAA2C;AACrD;AAyCA,MAAM,mCAA8D,CAAC;;;;AAKrE,MAAa,4BAAiE;;;;AAK9E,SAAgB,0BACd,MACA,gBACM;CACN,IAAI,iCAAiC,UAAU,gBAC7C;CAEF,iCAAiC,QAAQ;AAC3C;;;;AAKA,SAAgB,yBACd,MACA,WAC8C;CAC9C,MAAM,iBAAiB,iCAAiC;CACxD,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,8BAA8B,KAAK,mBAAmB,UAAU,iCAAiC;CAEnH,OAAO;AACT;;;;AAKA,SAAgB,uCACd,QACS;CACT,IAAI,WAAW,MACb,OAAO;CAET,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAC/D,OAAO;CAET,OAAO,OAAO,YAAY;AAC5B"}
1
+ {"version":3,"file":"capabilities.mjs","names":[],"sources":["../../../src/runtime/capabilities.ts"],"sourcesContent":["import type { SetDataSchedulerOptions } from './app/setData/scheduler'\nimport type { InlineExpressionMap } from './register/inline'\nimport type { ComputedDefinitions, InternalRuntimeState, MethodDefinitions, RuntimeInstance, SetDataSnapshotOptions } from './types'\n\nexport type { SetDataSchedulerOptions } from './app/setData/scheduler'\n\nexport type RuntimeCapabilityName\n = | 'patchStrategy'\n | 'templateRefs'\n | 'inlineEvents'\n | 'setDataHighFrequencyWarning'\n | 'scopedSlots'\n | 'layout'\n | 'jsxIslands'\n\nexport interface TemplateRefBinding {\n selector: string\n inFor: boolean\n name?: string\n get?: () => unknown\n kind?: 'component' | 'element'\n}\n\nexport interface LayoutHostBinding {\n key: string\n refName?: string\n selector: string\n kind?: 'component'\n}\n\nexport interface HighFrequencyWarningMonitorOptions {\n option: SetDataSnapshotOptions['highFrequencyWarning']\n targetLabel: string\n isInPageScrollHook?: () => boolean\n now?: () => number\n logger?: (message: string) => void\n}\n\nexport const RUNTIME_SCOPED_SLOT_STATE_KEY = '__wevuScopedSlotMountState'\n\nexport interface SetDataScheduler {\n job: () => void | Promise<void>\n snapshot: () => Record<string, unknown>\n cloneLatestSnapshot: () => Record<string, unknown>\n start?: () => void\n dispose?: () => void\n}\n\nexport interface ScopedSlotMountState {\n ownerId: string\n shouldFlushNativeOwnerId: boolean\n}\n\ntype RuntimeStateWithScopedSlotMount = InternalRuntimeState & {\n [RUNTIME_SCOPED_SLOT_STATE_KEY]?: ScopedSlotMountState\n}\n\n/**\n * 读取能力实现挂在宿主实例上的作用域插槽挂载状态。\n */\nexport function getScopedSlotMountState(target: InternalRuntimeState): ScopedSlotMountState | undefined {\n return (target as RuntimeStateWithScopedSlotMount)[RUNTIME_SCOPED_SLOT_STATE_KEY]\n}\n\nexport interface RuntimeCapabilityRegistry {\n patchStrategy?: {\n createScheduler: (options: SetDataSchedulerOptions) => SetDataScheduler\n }\n templateRefs?: {\n attachBindings: (target: InternalRuntimeState, bindings: readonly TemplateRefBinding[]) => void\n hasBindings: (target: InternalRuntimeState) => boolean\n schedule: (target: InternalRuntimeState, onResolved?: () => void, assignmentTarget?: InternalRuntimeState, onRejected?: (cause: unknown) => void) => void\n scheduleOwner: (target: InternalRuntimeState) => void\n clear: (target: InternalRuntimeState, assignmentTarget?: InternalRuntimeState) => void\n }\n inlineEvents?: {\n handler: (this: InternalRuntimeState, event: unknown) => unknown\n run: (context: unknown, expression: unknown, event: unknown, map?: InlineExpressionMap) => unknown\n }\n setDataHighFrequencyWarning?: {\n createMonitor: (options: HighFrequencyWarningMonitorOptions) => (() => void) | undefined\n }\n scopedSlots?: {\n prepareMount: (target: InternalRuntimeState) => ScopedSlotMountState\n attachMount: <D extends object, C extends ComputedDefinitions, M extends MethodDefinitions>(\n target: InternalRuntimeState,\n runtime: RuntimeInstance<D, C, M>,\n state: ScopedSlotMountState,\n deferSnapshot: boolean,\n ) => void\n refresh: (target: InternalRuntimeState, state: ScopedSlotMountState) => void\n syncNativeOwnerId: (target: InternalRuntimeState, state: ScopedSlotMountState) => void\n teardown: (target: InternalRuntimeState) => void\n resolveLifecycleProxy: (target: InternalRuntimeState) => unknown\n allocateOwnerId: () => string\n }\n layout?: {\n attachPageSetter: (target: InternalRuntimeState) => void\n attachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void\n detachHosts: (bindings: readonly LayoutHostBinding[], target: InternalRuntimeState) => void\n }\n jsxIslands?: {\n attachMethods: (methods: Record<string, (...args: any[]) => any>) => void\n }\n}\n\nconst mutableRuntimeCapabilityRegistry: RuntimeCapabilityRegistry = {}\n\n/**\n * 运行时能力的只读实时视图。安装器直接替换对应槽位,核心路径不会复制能力清单。\n */\nexport const runtimeCapabilityRegistry: Readonly<RuntimeCapabilityRegistry> = mutableRuntimeCapabilityRegistry\n\n/**\n * 注册或热替换一个运行时能力实现。\n */\nexport function registerRuntimeCapability<Name extends RuntimeCapabilityName>(\n name: Name,\n implementation: NonNullable<RuntimeCapabilityRegistry[Name]>,\n): void {\n if (mutableRuntimeCapabilityRegistry[name] === implementation) {\n return\n }\n mutableRuntimeCapabilityRegistry[name] = implementation\n}\n\n/**\n * 读取调用方明确请求的能力;缺失时同步失败,禁止静默降级。\n */\nexport function requireRuntimeCapability<Name extends RuntimeCapabilityName>(\n name: Name,\n requester: string,\n): NonNullable<RuntimeCapabilityRegistry[Name]> {\n const implementation = mutableRuntimeCapabilityRegistry[name]\n if (!implementation) {\n throw new Error(`[wevu] runtime capability \"${name}\" is required by ${requester}; install it before registration`)\n }\n return implementation\n}\n\n/**\n * 判断 setData 高频告警是否被显式启用。\n */\nexport function isSetDataHighFrequencyWarningRequested(\n option: SetDataSnapshotOptions['highFrequencyWarning'],\n): boolean {\n if (option === true) {\n return true\n }\n if (!option || typeof option !== 'object' || Array.isArray(option)) {\n return false\n }\n return option.enabled !== false\n}\n"],"mappings":";AAsCA,MAAa,gCAAgC;;;;AAsB7C,SAAgB,wBAAwB,QAAgE;CACtG,OAAQ,OAA2C;AACrD;AA4CA,MAAM,mCAA8D,CAAC;;;;AAKrE,MAAa,4BAAiE;;;;AAK9E,SAAgB,0BACd,MACA,gBACM;CACN,IAAI,iCAAiC,UAAU,gBAC7C;CAEF,iCAAiC,QAAQ;AAC3C;;;;AAKA,SAAgB,yBACd,MACA,WAC8C;CAC9C,MAAM,iBAAiB,iCAAiC;CACxD,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,8BAA8B,KAAK,mBAAmB,UAAU,iCAAiC;CAEnH,OAAO;AACT;;;;AAKA,SAAgB,uCACd,QACS;CACT,IAAI,WAAW,MACb,OAAO;CAET,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAC/D,OAAO;CAET,OAAO,OAAO,YAAY;AAC5B"}