wevu 7.3.0 → 7.5.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 (262) hide show
  1. package/README.md +2 -0
  2. package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/defineProperty.mjs +1 -1
  3. package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/toPrimitive.mjs +1 -1
  4. package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/toPropertyKey.mjs +1 -1
  5. package/dist/dev/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/typeof.mjs +1 -1
  6. package/dist/dev/package.mjs +1 -1
  7. package/dist/dev/reactivity/core.mjs +1 -1
  8. package/dist/dev/reactivity/ref.mjs +1 -1
  9. package/dist/dev/router/initialNavigation.mjs +4 -1
  10. package/dist/dev/router/initialNavigation.mjs.map +1 -1
  11. package/dist/dev/router/scrollRestoration/adapters.mjs +86 -0
  12. package/dist/dev/router/scrollRestoration/adapters.mjs.map +1 -0
  13. package/dist/dev/router/scrollRestoration/controller.mjs +148 -0
  14. package/dist/dev/router/scrollRestoration/controller.mjs.map +1 -0
  15. package/dist/dev/router/scrollRestoration/host.mjs +76 -0
  16. package/dist/dev/router/scrollRestoration/host.mjs.map +1 -0
  17. package/dist/dev/router/scrollRestoration/index.mjs +156 -0
  18. package/dist/dev/router/scrollRestoration/index.mjs.map +1 -0
  19. package/dist/dev/router.mjs +4 -1
  20. package/dist/dev/runtime/app/diagnostics.mjs +5 -1
  21. package/dist/dev/runtime/app/diagnostics.mjs.map +1 -1
  22. package/dist/dev/runtime/app/mount.mjs +8 -3
  23. package/dist/dev/runtime/app/mount.mjs.map +1 -1
  24. package/dist/dev/runtime/app/setData/commitTracker.mjs +39 -4
  25. package/dist/dev/runtime/app/setData/commitTracker.mjs.map +1 -1
  26. package/dist/dev/runtime/app/setData/observation.mjs +109 -0
  27. package/dist/dev/runtime/app/setData/observation.mjs.map +1 -0
  28. package/dist/dev/runtime/app/setData/scheduler.mjs +12 -1
  29. package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -1
  30. package/dist/dev/runtime/app/setDataOptions.mjs +1 -0
  31. package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -1
  32. package/dist/dev/runtime/define/initialComputed.mjs +13 -12
  33. package/dist/dev/runtime/define/initialComputed.mjs.map +1 -1
  34. package/dist/dev/runtime/define/props.mjs +5 -1
  35. package/dist/dev/runtime/define/props.mjs.map +1 -1
  36. package/dist/dev/runtime/define/scopedSlotOptions.mjs +2 -1
  37. package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -1
  38. package/dist/dev/runtime/define.mjs +1 -1
  39. package/dist/dev/runtime/define.mjs.map +1 -1
  40. package/dist/dev/runtime/features/scopedSlots.mjs.map +1 -1
  41. package/dist/dev/runtime/hooks/base.mjs +1 -13
  42. package/dist/dev/runtime/hooks/base.mjs.map +1 -1
  43. package/dist/dev/runtime/hooks/pageScroll.mjs +41 -0
  44. package/dist/dev/runtime/hooks/pageScroll.mjs.map +1 -0
  45. package/dist/dev/runtime/hooks/register.mjs +2 -1
  46. package/dist/dev/runtime/hooks/register.mjs.map +1 -1
  47. package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs +2 -5
  48. package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs.map +1 -1
  49. package/dist/dev/runtime/register/component/lifecycle/platform.mjs +8 -20
  50. package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -1
  51. package/dist/dev/runtime/register/component/props.mjs +14 -4
  52. package/dist/dev/runtime/register/component/props.mjs.map +1 -1
  53. package/dist/dev/runtime/register/component/registerDefinition.mjs +30 -17
  54. package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -1
  55. package/dist/dev/runtime/register/component.mjs +2 -1
  56. package/dist/dev/runtime/register/component.mjs.map +1 -1
  57. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +14 -7
  58. package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -1
  59. package/dist/dev/runtime/register/runtimeInstance/nativeDeclaration.mjs +78 -0
  60. package/dist/dev/runtime/register/runtimeInstance/nativeDeclaration.mjs.map +1 -0
  61. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +52 -8
  62. package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -1
  63. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +7 -2
  64. package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -1
  65. package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -1
  66. package/dist/dev/runtime/register/runtimeInstance.mjs +60 -19
  67. package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -1
  68. package/dist/fetch.mjs +1 -1
  69. package/dist/internal-template.mjs +1 -1
  70. package/dist/package.mjs +1 -1
  71. package/dist/reactivity/core.mjs +1 -1
  72. package/dist/reactivity/reactive/patch.mjs +1 -1
  73. package/dist/reactivity/reactive/patchState.mjs +1 -1
  74. package/dist/reactivity/ref.mjs +1 -1
  75. package/dist/reactivity/watch/helpers.mjs +1 -1
  76. package/dist/router/initialNavigation.mjs +1 -1
  77. package/dist/router/scrollRestoration/adapters.d.mts +7 -0
  78. package/dist/router/scrollRestoration/adapters.mjs +1 -0
  79. package/dist/router/scrollRestoration/controller.d.mts +7 -0
  80. package/dist/router/scrollRestoration/controller.mjs +1 -0
  81. package/dist/router/scrollRestoration/host.d.mts +3 -0
  82. package/dist/router/scrollRestoration/host.mjs +1 -0
  83. package/dist/router/scrollRestoration/index.d.mts +8 -0
  84. package/dist/router/scrollRestoration/index.mjs +1 -0
  85. package/dist/router/scrollRestoration/types.d.mts +60 -0
  86. package/dist/router/useRoute.mjs +1 -1
  87. package/dist/router.d.mts +5 -1
  88. package/dist/router.mjs +1 -1
  89. package/dist/routerInternal/matching.mjs +1 -1
  90. package/dist/routerInternal/params.mjs +1 -1
  91. package/dist/routerInternal/path.mjs +1 -1
  92. package/dist/routerInternal/query.mjs +1 -1
  93. package/dist/routerInternal/records.mjs +1 -1
  94. package/dist/runtime/app/context.mjs +1 -1
  95. package/dist/runtime/app/diagnostics.mjs +1 -1
  96. package/dist/runtime/app/mount.mjs +1 -1
  97. package/dist/runtime/app/setData/commitTracker.d.mts +2 -1
  98. package/dist/runtime/app/setData/commitTracker.mjs +1 -1
  99. package/dist/runtime/app/setData/observation.d.mts +12 -0
  100. package/dist/runtime/app/setData/observation.mjs +1 -0
  101. package/dist/runtime/app/setData/scheduler.d.mts +1 -0
  102. package/dist/runtime/app/setData/scheduler.mjs +1 -1
  103. package/dist/runtime/app/setDataOptions.mjs +1 -1
  104. package/dist/runtime/define/initialComputed.mjs +1 -1
  105. package/dist/runtime/define/props.mjs +1 -1
  106. package/dist/runtime/define/scopedSlotOptions.mjs +1 -1
  107. package/dist/runtime/define.mjs +1 -1
  108. package/dist/runtime/diff.mjs +1 -1
  109. package/dist/runtime/features/publicLayout.mjs +1 -1
  110. package/dist/runtime/features/scopedSlots.d.mts +2 -1
  111. package/dist/runtime/hooks/base.mjs +1 -1
  112. package/dist/runtime/hooks/pageScroll.mjs +1 -0
  113. package/dist/runtime/hooks/register.mjs +1 -1
  114. package/dist/runtime/jsxIsland.mjs +1 -1
  115. package/dist/runtime/pageLayout.mjs +1 -1
  116. package/dist/runtime/pageScroll.mjs +1 -1
  117. package/dist/runtime/register/component/alipayRegistration.mjs +1 -1
  118. package/dist/runtime/register/component/lifecycle/optionalHooks.mjs +1 -1
  119. package/dist/runtime/register/component/lifecycle/platform.mjs +1 -1
  120. package/dist/runtime/register/component/lifecycle.mjs +1 -1
  121. package/dist/runtime/register/component/props.mjs +1 -1
  122. package/dist/runtime/register/component/registerDefinition.mjs +1 -1
  123. package/dist/runtime/register/component/registerNativeDefinition.mjs +1 -1
  124. package/dist/runtime/register/component.mjs +1 -1
  125. package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -1
  126. package/dist/runtime/register/runtimeInstance/nativeDeclaration.mjs +1 -0
  127. package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -1
  128. package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -1
  129. package/dist/runtime/register/runtimeInstance.d.mts +8 -4
  130. package/dist/runtime/register/runtimeInstance.mjs +1 -1
  131. package/dist/runtime/setupTracking.mjs +1 -1
  132. package/dist/runtime/templateRefs.mjs +1 -1
  133. package/dist/runtime/types/runtime.d.mts +1 -0
  134. package/dist/runtime/types/setData.d.mts +30 -0
  135. package/dist/scheduler.mjs +1 -1
  136. package/dist/web-apis.mjs +1 -1
  137. package/package.json +10 -9
  138. package/dist/dev/api/vitest/setup.d.mts +0 -1
  139. package/dist/dev/api/vitest.d.mts +0 -1
  140. package/dist/dev/api.d.mts +0 -1
  141. package/dist/dev/compiler.d.mts +0 -1
  142. package/dist/dev/fetch.d.mts +0 -9
  143. package/dist/dev/index.d.mts +0 -72
  144. package/dist/dev/internal-reactivity.d.mts +0 -18
  145. package/dist/dev/internal-runtime.d.mts +0 -45
  146. package/dist/dev/internal-template.d.mts +0 -2
  147. package/dist/dev/jsxTypes.d.mts +0 -9
  148. package/dist/dev/macros/shared.d.mts +0 -83
  149. package/dist/dev/macros.d.mts +0 -71
  150. package/dist/dev/reactivity/asyncDerivation.d.mts +0 -41
  151. package/dist/dev/reactivity/computed.d.mts +0 -25
  152. package/dist/dev/reactivity/core.d.mts +0 -35
  153. package/dist/dev/reactivity/index.d.mts +0 -16
  154. package/dist/dev/reactivity/reactive/mutation.d.mts +0 -21
  155. package/dist/dev/reactivity/reactive/patch.d.mts +0 -18
  156. package/dist/dev/reactivity/reactive/shallow.d.mts +0 -22
  157. package/dist/dev/reactivity/reactive/shared.d.mts +0 -4
  158. package/dist/dev/reactivity/reactive.d.mts +0 -42
  159. package/dist/dev/reactivity/readonly.d.mts +0 -27
  160. package/dist/dev/reactivity/ref.d.mts +0 -27
  161. package/dist/dev/reactivity/shallowRef.d.mts +0 -19
  162. package/dist/dev/reactivity/toRefs.d.mts +0 -43
  163. package/dist/dev/reactivity/traverse.d.mts +0 -8
  164. package/dist/dev/reactivity/watch/types.d.mts +0 -43
  165. package/dist/dev/reactivity/watch.d.mts +0 -22
  166. package/dist/dev/router/auto-routes.d.mts +0 -8
  167. package/dist/dev/router/createRouter.d.mts +0 -9
  168. package/dist/dev/router/navigationCore.d.mts +0 -7
  169. package/dist/dev/router/resolve.d.mts +0 -7
  170. package/dist/dev/router/routeSync.d.mts +0 -2
  171. package/dist/dev/router/types.d.mts +0 -267
  172. package/dist/dev/router/useRoute.d.mts +0 -20
  173. package/dist/dev/router/useRouter.d.mts +0 -9
  174. package/dist/dev/router.d.mts +0 -26
  175. package/dist/dev/routerInternal/location.d.mts +0 -2
  176. package/dist/dev/routerInternal/matching.d.mts +0 -2
  177. package/dist/dev/routerInternal/params.d.mts +0 -2
  178. package/dist/dev/routerInternal/query.d.mts +0 -7
  179. package/dist/dev/routerInternal/records.d.mts +0 -2
  180. package/dist/dev/routerInternal/recordsWarnings.d.mts +0 -2
  181. package/dist/dev/routerInternal/shared.d.mts +0 -9
  182. package/dist/dev/routerInternal/snapshots.d.mts +0 -2
  183. package/dist/dev/routerInternal/types.d.mts +0 -9
  184. package/dist/dev/runtime/app/pending.d.mts +0 -10
  185. package/dist/dev/runtime/app/setData/commitTracker.d.mts +0 -13
  186. package/dist/dev/runtime/app/setData/scheduler.d.mts +0 -51
  187. package/dist/dev/runtime/app.d.mts +0 -8
  188. package/dist/dev/runtime/capabilities.d.mts +0 -78
  189. package/dist/dev/runtime/css.d.mts +0 -14
  190. package/dist/dev/runtime/defaults.d.mts +0 -12
  191. package/dist/dev/runtime/define.d.mts +0 -118
  192. package/dist/dev/runtime/disposables.d.mts +0 -31
  193. package/dist/dev/runtime/elementIntersectionObserver.d.mts +0 -26
  194. package/dist/dev/runtime/features/inlineEvents.d.mts +0 -7
  195. package/dist/dev/runtime/features/jsxIslands.d.mts +0 -7
  196. package/dist/dev/runtime/features/layout.d.mts +0 -7
  197. package/dist/dev/runtime/features/patchStrategy.d.mts +0 -7
  198. package/dist/dev/runtime/features/publicLayout.d.mts +0 -24
  199. package/dist/dev/runtime/features/scopedSlots.d.mts +0 -23
  200. package/dist/dev/runtime/features/setDataHighFrequencyWarning.d.mts +0 -7
  201. package/dist/dev/runtime/features/templateRefs.d.mts +0 -7
  202. package/dist/dev/runtime/hooks/base.d.mts +0 -27
  203. package/dist/dev/runtime/hooks/register.d.mts +0 -30
  204. package/dist/dev/runtime/hooks/vue.d.mts +0 -52
  205. package/dist/dev/runtime/hooks.d.mts +0 -4
  206. package/dist/dev/runtime/index.d.mts +0 -46
  207. package/dist/dev/runtime/intersectionObserver.d.mts +0 -14
  208. package/dist/dev/runtime/jsxIsland.d.mts +0 -37
  209. package/dist/dev/runtime/layoutBridge.d.mts +0 -55
  210. package/dist/dev/runtime/noSetData.d.mts +0 -5
  211. package/dist/dev/runtime/pageEnvironment.d.mts +0 -50
  212. package/dist/dev/runtime/pageLayout.d.mts +0 -25
  213. package/dist/dev/runtime/pageScroll.d.mts +0 -29
  214. package/dist/dev/runtime/provide.d.mts +0 -60
  215. package/dist/dev/runtime/provideStore.d.mts +0 -7
  216. package/dist/dev/runtime/publicRuntime.d.mts +0 -22
  217. package/dist/dev/runtime/pullDownRefresh.d.mts +0 -12
  218. package/dist/dev/runtime/register/app.d.mts +0 -14
  219. package/dist/dev/runtime/register/component.d.mts +0 -17
  220. package/dist/dev/runtime/register/inline.d.mts +0 -15
  221. package/dist/dev/runtime/register/runtimeInstance.d.mts +0 -26
  222. package/dist/dev/runtime/register/setup.d.mts +0 -11
  223. package/dist/dev/runtime/register/watch.d.mts +0 -12
  224. package/dist/dev/runtime/register.d.mts +0 -5
  225. package/dist/dev/runtime/selectorQuery.d.mts +0 -54
  226. package/dist/dev/runtime/template.d.mts +0 -6
  227. package/dist/dev/runtime/templateRefTypes.d.mts +0 -12
  228. package/dist/dev/runtime/types/core.d.mts +0 -35
  229. package/dist/dev/runtime/types/miniprogram.d.mts +0 -84
  230. package/dist/dev/runtime/types/miniprogramHost.d.mts +0 -45
  231. package/dist/dev/runtime/types/miniprogramHostSources.d.mts +0 -112
  232. package/dist/dev/runtime/types/options.d.mts +0 -138
  233. package/dist/dev/runtime/types/props/propTypes.d.mts +0 -79
  234. package/dist/dev/runtime/types/props/router.d.mts +0 -51
  235. package/dist/dev/runtime/types/props/setup.d.mts +0 -96
  236. package/dist/dev/runtime/types/props.d.mts +0 -4
  237. package/dist/dev/runtime/types/runtime.d.mts +0 -59
  238. package/dist/dev/runtime/types/setData.d.mts +0 -237
  239. package/dist/dev/runtime/types.d.mts +0 -29
  240. package/dist/dev/runtime/uniAppHost.d.mts +0 -8
  241. package/dist/dev/runtime/updatePerformance.d.mts +0 -13
  242. package/dist/dev/runtime/use.d.mts +0 -13
  243. package/dist/dev/runtime/vueCompat/context.d.mts +0 -8
  244. package/dist/dev/runtime/vueCompat/model.d.mts +0 -30
  245. package/dist/dev/runtime/vueCompat/router.d.mts +0 -29
  246. package/dist/dev/runtime/vueCompat/templateRef.d.mts +0 -9
  247. package/dist/dev/runtime/vueCompat.d.mts +0 -5
  248. package/dist/dev/scheduler.d.mts +0 -4
  249. package/dist/dev/store/define.d.mts +0 -8
  250. package/dist/dev/store/manager.d.mts +0 -16
  251. package/dist/dev/store/storeToRefs.d.mts +0 -11
  252. package/dist/dev/store/types.d.mts +0 -106
  253. package/dist/dev/store.d.mts +0 -5
  254. package/dist/dev/version.d.mts +0 -4
  255. package/dist/dev/vue-augment.d.mts +0 -8
  256. package/dist/dev/vue-demi.d.mts +0 -87
  257. package/dist/dev/vue-types.d.mts +0 -19
  258. package/dist/dev/web-apis.d.mts +0 -3
  259. /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/defineProperty.mjs +0 -0
  260. /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/toPrimitive.mjs +0 -0
  261. /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/toPropertyKey.mjs +0 -0
  262. /package/dist/_virtual/{_@oxc-project_runtime@0.151.0 → _@oxc-project_runtime@0.153.0}/helpers/esm/typeof.mjs +0 -0
@@ -0,0 +1,109 @@
1
+ //#region src/runtime/app/setData/observation.ts
2
+ let nextObserverId = 0;
3
+ let nextDispatchId = 0;
4
+ function duration(start, end) {
5
+ return start !== null && end >= start ? end - start : null;
6
+ }
7
+ function payloadBytes(payload) {
8
+ try {
9
+ const json = JSON.stringify(payload);
10
+ let bytes = 0;
11
+ for (let index = 0; index < json.length; index++) {
12
+ const code = json.charCodeAt(index);
13
+ if (code < 128) bytes += 1;
14
+ else if (code < 2048) bytes += 2;
15
+ else if (code >= 55296 && code <= 56319 && json.charCodeAt(index + 1) >= 56320 && json.charCodeAt(index + 1) <= 57343) {
16
+ bytes += 4;
17
+ index += 1;
18
+ } else bytes += 3;
19
+ }
20
+ return bytes;
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ function observePhysicalDispatch(observer, payload) {
26
+ const bytes = payloadBytes(payload);
27
+ observer.dispatch({
28
+ id: ++nextDispatchId,
29
+ startedAt: Date.now(),
30
+ payloadBytes: bytes,
31
+ returnedAt: null,
32
+ durationMs: null
33
+ });
34
+ }
35
+ function createSetDataObservation(options) {
36
+ const observerId = ++nextObserverId;
37
+ let prepareStartedAt = null;
38
+ return {
39
+ prepare() {
40
+ prepareStartedAt = Date.now();
41
+ },
42
+ revision(update, revision) {
43
+ const startedAt = prepareStartedAt;
44
+ prepareStartedAt = null;
45
+ if (options.debugWhen === "fallback" && (update.reason === "patch" || update.reason === "diff")) return;
46
+ if (options.debugSampleRate <= 0 || options.debugSampleRate < 1 && Math.random() >= options.debugSampleRate) return;
47
+ const preparedAt = Date.now();
48
+ let dispatch = null;
49
+ let completion = "unknown";
50
+ const base = {
51
+ mode: update.mode,
52
+ reason: update.reason,
53
+ pendingPatchKeys: update.pendingPatchKeys,
54
+ payloadKeys: Object.keys(update.payload).length,
55
+ revision,
56
+ targetLabel: options.targetLabel
57
+ };
58
+ const emit = (name, result, settledAt = null) => {
59
+ try {
60
+ options.debug({
61
+ ...base,
62
+ committedRevision: options.committedRevision(),
63
+ phase: {
64
+ version: 1,
65
+ observerId,
66
+ name,
67
+ result,
68
+ completion,
69
+ prepareStartedAt: startedAt,
70
+ preparedAt,
71
+ prepareDurationMs: duration(startedAt, preparedAt),
72
+ settledAt,
73
+ commitDurationMs: settledAt === null ? null : duration(dispatch?.startedAt ?? null, settledAt),
74
+ visibleAt: null,
75
+ dispatch: dispatch ? { ...dispatch } : null
76
+ }
77
+ });
78
+ } catch {}
79
+ };
80
+ emit("prepare", "prepared");
81
+ return {
82
+ physical: {
83
+ dispatch(info) {
84
+ dispatch = info;
85
+ },
86
+ returned(returnedAt) {
87
+ if (!dispatch) return;
88
+ dispatch = {
89
+ ...dispatch,
90
+ returnedAt,
91
+ durationMs: duration(dispatch.startedAt, returnedAt)
92
+ };
93
+ emit("dispatch", "pending");
94
+ },
95
+ complete(boundary) {
96
+ if (dispatch || boundary === "throw") completion = boundary;
97
+ }
98
+ },
99
+ finish(result) {
100
+ emit("commit", result, Date.now());
101
+ }
102
+ };
103
+ }
104
+ };
105
+ }
106
+
107
+ //#endregion
108
+ export { createSetDataObservation, observePhysicalDispatch };
109
+ //# sourceMappingURL=observation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observation.mjs","names":[],"sources":["../../../../../src/runtime/app/setData/observation.ts"],"sourcesContent":["import type { SetDataDebugInfo } from '../../types'\nimport type { PreparedSetDataUpdate } from './commitTracker'\n\ntype Phase = NonNullable<SetDataDebugInfo['phase']>\nexport type SetDataCompletionBoundary = Phase['completion']\n\nexport interface PhysicalSetDataObserver {\n dispatch: (dispatch: NonNullable<Phase['dispatch']>) => void\n returned: (returnedAt: number) => void\n complete: (boundary: SetDataCompletionBoundary) => void\n}\n\nexport interface SetDataRevisionObservation {\n physical: PhysicalSetDataObserver\n finish: (result: Phase['result']) => void\n}\n\nlet nextObserverId = 0\nlet nextDispatchId = 0\n\nfunction duration(start: number | null, end: number): number | null {\n return start !== null && end >= start ? end - start : null\n}\n\nfunction payloadBytes(payload: Record<string, unknown>): number | null {\n try {\n const json = JSON.stringify(payload)\n let bytes = 0\n for (let index = 0; index < json.length; index++) {\n const code = json.charCodeAt(index)\n if (code < 0x80) {\n bytes += 1\n }\n else if (code < 0x800) {\n bytes += 2\n }\n else if (code >= 0xD800 && code <= 0xDBFF && json.charCodeAt(index + 1) >= 0xDC00 && json.charCodeAt(index + 1) <= 0xDFFF) {\n bytes += 4\n index += 1\n }\n else {\n bytes += 3\n }\n }\n return bytes\n }\n catch {\n return null\n }\n}\n\nexport function observePhysicalDispatch(observer: PhysicalSetDataObserver, payload: Record<string, unknown>) {\n // 只在观测启用时序列化;耗时从字节测量之后开始,避免将测量成本计入宿主提交。\n const bytes = payloadBytes(payload)\n observer.dispatch({ id: ++nextDispatchId, startedAt: Date.now(), payloadBytes: bytes, returnedAt: null, durationMs: null })\n}\n\nexport function createSetDataObservation(options: {\n debug: (info: SetDataDebugInfo) => void\n debugWhen: 'fallback' | 'always'\n debugSampleRate: number\n targetLabel?: string\n committedRevision: () => number\n}) {\n const observerId = ++nextObserverId\n let prepareStartedAt: number | null = null\n return {\n prepare() {\n prepareStartedAt = Date.now()\n },\n revision(update: PreparedSetDataUpdate, revision: number): SetDataRevisionObservation | undefined {\n const startedAt = prepareStartedAt\n prepareStartedAt = null\n if (options.debugWhen === 'fallback' && (update.reason === 'patch' || update.reason === 'diff')) {\n return\n }\n if (options.debugSampleRate <= 0 || (options.debugSampleRate < 1 && Math.random() >= options.debugSampleRate)) {\n return\n }\n const preparedAt = Date.now()\n let dispatch: Phase['dispatch'] = null\n let completion: SetDataCompletionBoundary = 'unknown'\n const base = {\n mode: update.mode,\n reason: update.reason,\n pendingPatchKeys: update.pendingPatchKeys,\n payloadKeys: Object.keys(update.payload).length,\n revision,\n targetLabel: options.targetLabel,\n }\n const emit = (name: Phase['name'], result: Phase['result'], settledAt: number | null = null) => {\n try {\n options.debug({\n ...base,\n committedRevision: options.committedRevision(),\n phase: {\n version: 1,\n observerId,\n name,\n result,\n completion,\n prepareStartedAt: startedAt,\n preparedAt,\n prepareDurationMs: duration(startedAt, preparedAt),\n settledAt,\n commitDurationMs: settledAt === null ? null : duration(dispatch?.startedAt ?? null, settledAt),\n visibleAt: null,\n dispatch: dispatch ? { ...dispatch } : null,\n },\n })\n }\n catch {\n // 消费者诊断异常不能影响调度或宿主提交。\n }\n }\n emit('prepare', 'prepared')\n return {\n physical: {\n dispatch(info) {\n dispatch = info\n },\n returned(returnedAt) {\n if (!dispatch) {\n return\n }\n dispatch = { ...dispatch, returnedAt, durationMs: duration(dispatch.startedAt, returnedAt) }\n emit('dispatch', 'pending')\n },\n complete(boundary) {\n if (dispatch || boundary === 'throw') {\n completion = boundary\n }\n },\n },\n finish(result) { emit('commit', result, Date.now()) },\n }\n },\n }\n}\n"],"mappings":";AAiBA,IAAI,iBAAiB;AACrB,IAAI,iBAAiB;AAErB,SAAS,SAAS,OAAsB,KAA4B;CAClE,OAAO,UAAU,QAAQ,OAAO,QAAQ,MAAM,QAAQ;AACxD;AAEA,SAAS,aAAa,SAAiD;CACrE,IAAI;EACF,MAAM,OAAO,KAAK,UAAU,OAAO;EACnC,IAAI,QAAQ;EACZ,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;GAChD,MAAM,OAAO,KAAK,WAAW,KAAK;GAClC,IAAI,OAAO,KACT,SAAS;QAEN,IAAI,OAAO,MACd,SAAS;QAEN,IAAI,QAAQ,SAAU,QAAQ,SAAU,KAAK,WAAW,QAAQ,CAAC,KAAK,SAAU,KAAK,WAAW,QAAQ,CAAC,KAAK,OAAQ;IACzH,SAAS;IACT,SAAS;GACX,OAEE,SAAS;EAEb;EACA,OAAO;CACT,QACM;EACJ,OAAO;CACT;AACF;AAEA,SAAgB,wBAAwB,UAAmC,SAAkC;CAE3G,MAAM,QAAQ,aAAa,OAAO;CAClC,SAAS,SAAS;EAAE,IAAI,EAAE;EAAgB,WAAW,KAAK,IAAI;EAAG,cAAc;EAAO,YAAY;EAAM,YAAY;CAAK,CAAC;AAC5H;AAEA,SAAgB,yBAAyB,SAMtC;CACD,MAAM,aAAa,EAAE;CACrB,IAAI,mBAAkC;CACtC,OAAO;EACL,UAAU;GACR,mBAAmB,KAAK,IAAI;EAC9B;EACA,SAAS,QAA+B,UAA0D;GAChG,MAAM,YAAY;GAClB,mBAAmB;GACnB,IAAI,QAAQ,cAAc,eAAe,OAAO,WAAW,WAAW,OAAO,WAAW,SACtF;GAEF,IAAI,QAAQ,mBAAmB,KAAM,QAAQ,kBAAkB,KAAK,KAAK,OAAO,KAAK,QAAQ,iBAC3F;GAEF,MAAM,aAAa,KAAK,IAAI;GAC5B,IAAI,WAA8B;GAClC,IAAI,aAAwC;GAC5C,MAAM,OAAO;IACX,MAAM,OAAO;IACb,QAAQ,OAAO;IACf,kBAAkB,OAAO;IACzB,aAAa,OAAO,KAAK,OAAO,OAAO,CAAC,CAAC;IACzC;IACA,aAAa,QAAQ;GACvB;GACA,MAAM,QAAQ,MAAqB,QAAyB,YAA2B,SAAS;IAC9F,IAAI;KACF,QAAQ,MAAM;MACZ,GAAG;MACH,mBAAmB,QAAQ,kBAAkB;MAC7C,OAAO;OACL,SAAS;OACT;OACA;OACA;OACA;OACA,kBAAkB;OAClB;OACA,mBAAmB,SAAS,WAAW,UAAU;OACjD;OACA,kBAAkB,cAAc,OAAO,OAAO,SAAS,UAAU,aAAa,MAAM,SAAS;OAC7F,WAAW;OACX,UAAU,WAAW,EAAE,GAAG,SAAS,IAAI;MACzC;KACF,CAAC;IACH,QACM,CAEN;GACF;GACA,KAAK,WAAW,UAAU;GAC1B,OAAO;IACL,UAAU;KACR,SAAS,MAAM;MACb,WAAW;KACb;KACA,SAAS,YAAY;MACnB,IAAI,CAAC,UACH;MAEF,WAAW;OAAE,GAAG;OAAU;OAAY,YAAY,SAAS,SAAS,WAAW,UAAU;MAAE;MAC3F,KAAK,YAAY,SAAS;KAC5B;KACA,SAAS,UAAU;MACjB,IAAI,YAAY,aAAa,SAC3B,aAAa;KAEjB;IACF;IACA,OAAO,QAAQ;KAAE,KAAK,UAAU,QAAQ,KAAK,IAAI,CAAC;IAAE;GACtD;EACF;CACF;AACF"}
@@ -5,6 +5,7 @@ import { hasOwn } from "../../../utils.mjs";
5
5
  import { hasTrackableSetupBinding } from "../../setupTracking.mjs";
6
6
  import { resolveBindingDiagnostics } from "../../bindingManifest.mjs";
7
7
  import { diffSnapshots, toPlain } from "../../diff.mjs";
8
+ import { createSetDataObservation } from "./observation.mjs";
8
9
  import { collectSnapshot } from "./snapshot.mjs";
9
10
  import { createSetDataCommitTracker } from "./commitTracker.mjs";
10
11
 
@@ -113,7 +114,16 @@ function createSetDataScheduler(options) {
113
114
  debug(debugInfo);
114
115
  } catch {}
115
116
  };
116
- const commitTracker = createSetDataCommitTracker({
117
+ let commitTracker;
118
+ const observation = options.debugPhases && debug ? createSetDataObservation({
119
+ debug,
120
+ debugWhen,
121
+ debugSampleRate,
122
+ targetLabel,
123
+ committedRevision: () => commitTracker.state.committedRevision
124
+ }) : void 0;
125
+ commitTracker = createSetDataCommitTracker({
126
+ observe: observation?.revision,
117
127
  initialSnapshot: initialSnapshotBaseline,
118
128
  adapter: currentAdapter,
119
129
  onFailure: (failure) => {
@@ -264,6 +274,7 @@ function createSetDataScheduler(options) {
264
274
  };
265
275
  const prepareJob = (pendingPatchKeys = 0, pathSource) => {
266
276
  if (!isMounted()) return false;
277
+ observation?.prepare();
267
278
  recordFlushForLoopWarning(pendingPatchKeys, pathSource);
268
279
  runTracker();
269
280
  return true;
@@ -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, SetDataCommitTracker, 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 { createSetDataObservation } from './observation'\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 debugPhases?: boolean\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 let commitTracker: SetDataCommitTracker\n const observation = options.debugPhases && debug\n ? createSetDataObservation({ debug, debugWhen, debugSampleRate, targetLabel, committedRevision: () => commitTracker.state.committedRevision })\n : undefined\n\n commitTracker = createSetDataCommitTracker({\n observe: observation?.revision,\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 observation?.prepare()\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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"}
@@ -52,6 +52,7 @@ function resolveSetDataOptions(setDataOptions) {
52
52
  prelinkMaxDepth,
53
53
  prelinkMaxKeys,
54
54
  debug,
55
+ debugPhases: setDataOptions?.debugPhases === true,
55
56
  diagnostics,
56
57
  loopWarning,
57
58
  debugWhen,
@@ -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 debugPhases: boolean\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 debugPhases: setDataOptions?.debugPhases === true,\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":";AAqCA,SAAgB,sBACd,gBACwB;CACxB,MAAM,kBAAkB,gBAAgB,mBAAmB;CAC3D,MAAM,oBAAoB,gBAAgB,qBAAqB;CAC/D,MAAM,kBAAkB,gBAAgB,YAAY;CACpD,MAAM,eAAe,OAAO,gBAAgB,iBAAiB,WACzD,KAAK,IAAI,GAAG,eAAgB,YAAa,IACzC,OAAO;CACX,MAAM,kBAAkB,OAAO,gBAAgB,oBAAoB,WAC/D,KAAK,IAAI,GAAG,eAAgB,eAAgB,IAC5C,OAAO;CACX,MAAM,wBAAwB,OAAO,gBAAgB,0BAA0B,WAC3E,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,qBAAsB,CAAC,IAC9D;CACJ,MAAM,gCAAgC,OAAO,gBAAgB,kCAAkC,WAC3F,KAAK,IAAI,GAAG,eAAgB,6BAA8B,IAC1D;CACJ,MAAM,6BAA6B,OAAO,gBAAgB,+BAA+B,WACrF,KAAK,IAAI,GAAG,eAAgB,0BAA2B,IACvD,OAAO;CACX,MAAM,wBAAwB,gBAAgB,yBAAyB;CACvE,MAAM,kBAAkB,gBAAgB,oBAAoB,oBAAoB,UAAU,SAAS;CACnG,MAAM,0BAA0B,OAAO,gBAAgB,4BAA4B,WAC/E,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,uBAAwB,CAAC,IAChE;CACJ,MAAM,yBAAyB,OAAO,gBAAgB,2BAA2B,WAC7E,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,sBAAuB,CAAC,IAC/D;CACJ,MAAM,kBAAkB,gBAAgB;CACxC,MAAM,iBAAiB,gBAAgB;CACvC,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,cAAc,gBAAgB,eAAe;CACnD,MAAM,oBAAoB,gBAAgB;CAC1C,MAAM,cAAc,sBAAsB,SACxC,qBACG,OAAO,sBAAsB,YAC7B,kBAAkB,YAAY,QAE/B,QACA;EACE,gBAAgB,OAAO,sBAAsB,YAAY,OAAO,kBAAkB,mBAAmB,WACjG,KAAK,IAAI,KAAK,KAAK,MAAM,kBAAkB,cAAc,CAAC,IAC1D;EACJ,YAAY,OAAO,sBAAsB,YAAY,OAAO,kBAAkB,eAAe,WACzF,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,UAAU,CAAC,IACpD;EACJ,YAAY,OAAO,sBAAsB,YAAY,OAAO,kBAAkB,eAAe,WACzF,KAAK,IAAI,GAAG,KAAK,MAAM,kBAAkB,UAAU,CAAC,IACpD;CACN;CACJ,MAAM,YAAY,gBAAgB,aAAa;CAC/C,MAAM,kBAAkB,OAAO,gBAAgB,oBAAoB,WAC/D,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,eAAgB,eAAgB,CAAC,IACzD;CACJ,MAAM,yBAAyB,OAAO,gBAAgB,2BAA2B,WAC7E,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,sBAAuB,CAAC,IAC/D,OAAO;CACX,MAAM,kBAAkB,OAAO,gBAAgB,oBAAoB,WAC/D,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,eAAgB,CAAC,IACxD,OAAO;CACX,MAAM,iBAAiB,OAAO,gBAAgB,mBAAmB,WAC7D,KAAK,IAAI,GAAG,KAAK,MAAM,eAAgB,cAAe,CAAC,IACvD,OAAO;CACX,MAAM,mBAAmB,QAAQ,gBAAgB,gBAAgB;CACjE,MAAM,gBAAgB,MAAM,QAAQ,gBAAgB,aAAa,IAC7D,CAAC,GAAG,IAAI,IAAI,eAAe,cAAc,QAAO,SAAQ,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IACrG,CAAC;CACL,MAAM,UAAU,MAAM,QAAQ,gBAAgB,IAAI,KAAK,eAAgB,KAAM,SAAS,IAClF,IAAI,IAAI,eAAgB,IAAI,IAC5B;CACJ,MAAM,UAAU,MAAM,QAAQ,gBAAgB,IAAI,KAAK,eAAgB,KAAM,SAAS,IAClF,IAAI,IAAI,eAAgB,IAAI,IAC5B;CACJ,MAAM,oBAAoB,QAAgB;EACxC,IAAI,WAAW,CAAC,QAAQ,IAAI,GAAG,GAC7B,OAAO;EAET,IAAI,WAAW,QAAQ,IAAI,GAAG,GAC5B,OAAO;EAET,OAAO;CACT;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,gBAAgB,gBAAgB;EAC7C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}
@@ -26,13 +26,13 @@ function resolveRuntimeBindingPlaceholder(key) {
26
26
  if (key.startsWith("__wv_bind_")) return null;
27
27
  if (key.startsWith("__wv_cls_") || key.startsWith("__wv_style_")) return "";
28
28
  }
29
- function resolveRuntimeBindingPlaceholderData(data, setData) {
30
- const pickKeys = Array.isArray(setData?.pick) ? setData.pick : [];
31
- if (!pickKeys.length) return;
32
- const omitKeys = new Set(Array.isArray(setData?.omit) ? setData.omit : []);
29
+ function resolveRuntimeBindingPlaceholderData(data, setData, bindingManifest) {
30
+ const bindingKeys = /* @__PURE__ */ new Set([...Array.isArray(setData?.pick) ? setData.pick : [], ...bindingManifest?.bindings.map((binding) => binding.outputPath) ?? []]);
31
+ if (!bindingKeys.size) return;
32
+ const { shouldIncludeKey } = resolveSetDataOptions(setData);
33
33
  const resolved = {};
34
- for (const key of pickKeys) {
35
- if (omitKeys.has(key) || hasOwn(data, key)) continue;
34
+ for (const key of bindingKeys) {
35
+ if (!shouldIncludeKey(key) || hasOwn(data, key) || key.includes(".") || key.includes("[")) continue;
36
36
  const placeholder = resolveRuntimeBindingPlaceholder(key);
37
37
  if (placeholder !== void 0) resolved[key] = placeholder;
38
38
  }
@@ -109,17 +109,18 @@ function resolveInitialComputedData(options) {
109
109
  }
110
110
  return Object.keys(resolved).length ? resolved : void 0;
111
111
  }
112
- function resolveNativeInitialData(data, computed, setData, methods) {
113
- if (!data || typeof data !== "object") return data;
114
- const initialComputedData = resolveInitialComputedData({
115
- data,
112
+ function resolveNativeInitialData(data, computed, setData, methods, bindingManifest) {
113
+ if (data !== void 0 && (!data || typeof data !== "object")) return data;
114
+ const nativeData = data ?? {};
115
+ const initialComputedData = data === void 0 ? void 0 : resolveInitialComputedData({
116
+ data: nativeData,
116
117
  computed,
117
118
  methods,
118
119
  setData
119
120
  });
120
- const runtimeBindingPlaceholderData = resolveRuntimeBindingPlaceholderData(data, setData);
121
+ const runtimeBindingPlaceholderData = resolveRuntimeBindingPlaceholderData(nativeData, setData, bindingManifest);
121
122
  return initialComputedData || runtimeBindingPlaceholderData ? {
122
- ...data,
123
+ ...nativeData,
123
124
  ...runtimeBindingPlaceholderData,
124
125
  ...initialComputedData
125
126
  } : data;
@@ -1 +1 @@
1
- {"version":3,"file":"initialComputed.mjs","names":[],"sources":["../../../../src/runtime/define/initialComputed.ts"],"sourcesContent":["import type { WritableComputedOptions } from '../../reactivity'\nimport type { ComputedDefinitions, SetDataSnapshotOptions } from '../types'\nimport { WEVU_SLOT_OWNER_ID_KEY } from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\nimport { resolveSetDataOptions } from '../app/setDataOptions'\nimport { toPlain } from '../diff'\n\nclass InitialComputedBailout extends Error {}\n\nfunction resolveComputedGetter(definition: unknown): ((...args: any[]) => unknown) | undefined {\n if (typeof definition === 'function') {\n return definition as (...args: any[]) => unknown\n }\n const getter = (definition as WritableComputedOptions<any> | undefined)?.get\n return typeof getter === 'function' ? getter : undefined\n}\n\nfunction isCompilerGeneratedTemplateComputedKey(key: string) {\n return key.startsWith('__wv_bind_')\n || key.startsWith('__wv_cls_')\n || key.startsWith('__wv_style_')\n}\n\nfunction canResolveInitialTemplateComputed(key: string, getter: (...args: any[]) => unknown) {\n if (!key.startsWith('__wv_bind_')) {\n return false\n }\n try {\n return !/\\bthis\\b/.test(Function.prototype.toString.call(getter))\n }\n catch {\n return false\n }\n}\n\nfunction resolveRuntimeBindingPlaceholder(key: string) {\n if (key === WEVU_SLOT_OWNER_ID_KEY) {\n return ''\n }\n if (key.startsWith('__wv_bind_')) {\n return null\n }\n if (key.startsWith('__wv_cls_') || key.startsWith('__wv_style_')) {\n return ''\n }\n}\n\nfunction resolveRuntimeBindingPlaceholderData(\n data: Record<string, any>,\n setData: SetDataSnapshotOptions | undefined,\n) {\n const pickKeys = Array.isArray(setData?.pick) ? setData.pick : []\n if (!pickKeys.length) {\n return undefined\n }\n const omitKeys = new Set(Array.isArray(setData?.omit) ? setData.omit : [])\n const resolved: Record<string, any> = {}\n for (const key of pickKeys) {\n if (omitKeys.has(key) || hasOwn(data, key)) {\n continue\n }\n const placeholder = resolveRuntimeBindingPlaceholder(key)\n if (placeholder !== undefined) {\n resolved[key] = placeholder\n }\n }\n return Object.keys(resolved).length ? resolved : undefined\n}\n\nexport function resolveInitialComputedData(options: {\n data: Record<string, any>\n computed: ComputedDefinitions | undefined\n methods?: Record<string, any>\n setData: SetDataSnapshotOptions | undefined\n}) {\n const {\n data,\n computed,\n methods,\n setData,\n } = options\n const computedKeys = computed ? Object.keys(computed) : []\n if (!computedKeys.length) {\n return undefined\n }\n\n const {\n includeComputed,\n shouldIncludeKey,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n } = resolveSetDataOptions(setData)\n if (!includeComputed) {\n return undefined\n }\n\n const resolved: Record<string, any> = {}\n const resolving = new Set<string>()\n let proxy!: Record<string, any>\n const resolveComputedValue = (key: string): { ok: true, value: any } | { ok: false } => {\n if (hasOwn(data, key) || !shouldIncludeKey(key)) {\n return { ok: false }\n }\n if (hasOwn(resolved, key)) {\n return { ok: true, value: resolved[key] }\n }\n if (resolving.has(key)) {\n return { ok: false }\n }\n const getter = resolveComputedGetter((computed as ComputedDefinitions)[key])\n if (!getter) {\n return { ok: false }\n }\n resolving.add(key)\n try {\n const rawValue = getter.call(proxy)\n if (rawValue === undefined) {\n return { ok: false }\n }\n const value = toPlain(rawValue, new WeakMap(), {\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n if (value === undefined) {\n return { ok: false }\n }\n resolved[key] = value\n return { ok: true, value }\n }\n catch {\n return { ok: false }\n }\n finally {\n resolving.delete(key)\n }\n }\n\n proxy = new Proxy(data, {\n get(target, key, receiver) {\n if (typeof key === 'string') {\n if (key === 'data' || key === '$state') {\n return data\n }\n if (key === 'props' || key === '$props' || key === '$attrs') {\n throw new InitialComputedBailout()\n }\n if (hasOwn(data, key)) {\n return Reflect.get(target, key, receiver)\n }\n if (methods && hasOwn(methods, key)) {\n const method = methods[key]\n return typeof method === 'function' ? method.bind(proxy) : method\n }\n if (computed && hasOwn(computed, key)) {\n const computedValue = resolveComputedValue(key)\n if (computedValue.ok) {\n return computedValue.value\n }\n throw new InitialComputedBailout()\n }\n throw new InitialComputedBailout()\n }\n return Reflect.get(target, key, receiver)\n },\n has(target, key) {\n return Reflect.has(target, key)\n || (typeof key === 'string' && Boolean(\n computed && hasOwn(computed, key),\n ))\n },\n })\n\n for (const key of computedKeys) {\n const getter = resolveComputedGetter((computed as ComputedDefinitions)[key])\n if (isCompilerGeneratedTemplateComputedKey(key) && (!getter || !canResolveInitialTemplateComputed(key, getter))) {\n continue\n }\n resolveComputedValue(key)\n }\n\n return Object.keys(resolved).length ? resolved : undefined\n}\n\nexport function resolveNativeInitialData(\n data: unknown,\n computed: ComputedDefinitions | undefined,\n setData: SetDataSnapshotOptions | undefined,\n methods?: Record<string, any>,\n) {\n if (!data || typeof data !== 'object') {\n return data\n }\n const initialComputedData = resolveInitialComputedData({\n data: data as Record<string, any>,\n computed,\n methods,\n setData,\n })\n const runtimeBindingPlaceholderData = resolveRuntimeBindingPlaceholderData(data as Record<string, any>, setData)\n return initialComputedData || runtimeBindingPlaceholderData\n ? {\n ...(data as Record<string, any>),\n ...runtimeBindingPlaceholderData,\n ...initialComputedData,\n }\n : data\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"initialComputed.mjs","names":[],"sources":["../../../../src/runtime/define/initialComputed.ts"],"sourcesContent":["import type { WevuRuntimeBindingManifestV1 } from '@weapp-core/constants'\nimport type { WritableComputedOptions } from '../../reactivity'\nimport type { ComputedDefinitions, SetDataSnapshotOptions } from '../types'\nimport { WEVU_SLOT_OWNER_ID_KEY } from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\nimport { resolveSetDataOptions } from '../app/setDataOptions'\nimport { toPlain } from '../diff'\n\nclass InitialComputedBailout extends Error {}\n\nfunction resolveComputedGetter(definition: unknown): ((...args: any[]) => unknown) | undefined {\n if (typeof definition === 'function') {\n return definition as (...args: any[]) => unknown\n }\n const getter = (definition as WritableComputedOptions<any> | undefined)?.get\n return typeof getter === 'function' ? getter : undefined\n}\n\nfunction isCompilerGeneratedTemplateComputedKey(key: string) {\n return key.startsWith('__wv_bind_')\n || key.startsWith('__wv_cls_')\n || key.startsWith('__wv_style_')\n}\n\nfunction canResolveInitialTemplateComputed(key: string, getter: (...args: any[]) => unknown) {\n if (!key.startsWith('__wv_bind_')) {\n return false\n }\n try {\n return !/\\bthis\\b/.test(Function.prototype.toString.call(getter))\n }\n catch {\n return false\n }\n}\n\nfunction resolveRuntimeBindingPlaceholder(key: string) {\n if (key === WEVU_SLOT_OWNER_ID_KEY) {\n return ''\n }\n if (key.startsWith('__wv_bind_')) {\n return null\n }\n if (key.startsWith('__wv_cls_') || key.startsWith('__wv_style_')) {\n return ''\n }\n}\n\nfunction resolveRuntimeBindingPlaceholderData(\n data: Record<string, any>,\n setData: SetDataSnapshotOptions | undefined,\n bindingManifest: WevuRuntimeBindingManifestV1 | undefined,\n) {\n const bindingKeys = new Set([\n ...(Array.isArray(setData?.pick) ? setData.pick : []),\n ...(bindingManifest?.bindings.map(binding => binding.outputPath) ?? []),\n ])\n if (!bindingKeys.size) {\n return undefined\n }\n const { shouldIncludeKey } = resolveSetDataOptions(setData)\n const resolved: Record<string, any> = {}\n for (const key of bindingKeys) {\n if (!shouldIncludeKey(key) || hasOwn(data, key) || key.includes('.') || key.includes('[')) {\n continue\n }\n const placeholder = resolveRuntimeBindingPlaceholder(key)\n if (placeholder !== undefined) {\n resolved[key] = placeholder\n }\n }\n return Object.keys(resolved).length ? resolved : undefined\n}\n\nexport function resolveInitialComputedData(options: {\n data: Record<string, any>\n computed: ComputedDefinitions | undefined\n methods?: Record<string, any>\n setData: SetDataSnapshotOptions | undefined\n}) {\n const {\n data,\n computed,\n methods,\n setData,\n } = options\n const computedKeys = computed ? Object.keys(computed) : []\n if (!computedKeys.length) {\n return undefined\n }\n\n const {\n includeComputed,\n shouldIncludeKey,\n toPlainMaxDepth,\n toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n } = resolveSetDataOptions(setData)\n if (!includeComputed) {\n return undefined\n }\n\n const resolved: Record<string, any> = {}\n const resolving = new Set<string>()\n let proxy!: Record<string, any>\n const resolveComputedValue = (key: string): { ok: true, value: any } | { ok: false } => {\n if (hasOwn(data, key) || !shouldIncludeKey(key)) {\n return { ok: false }\n }\n if (hasOwn(resolved, key)) {\n return { ok: true, value: resolved[key] }\n }\n if (resolving.has(key)) {\n return { ok: false }\n }\n const getter = resolveComputedGetter((computed as ComputedDefinitions)[key])\n if (!getter) {\n return { ok: false }\n }\n resolving.add(key)\n try {\n const rawValue = getter.call(proxy)\n if (rawValue === undefined) {\n return { ok: false }\n }\n const value = toPlain(rawValue, new WeakMap(), {\n maxDepth: toPlainMaxDepth,\n maxKeys: toPlainMaxKeys,\n includeFunctions,\n functionPaths,\n _path: key,\n })\n if (value === undefined) {\n return { ok: false }\n }\n resolved[key] = value\n return { ok: true, value }\n }\n catch {\n return { ok: false }\n }\n finally {\n resolving.delete(key)\n }\n }\n\n proxy = new Proxy(data, {\n get(target, key, receiver) {\n if (typeof key === 'string') {\n if (key === 'data' || key === '$state') {\n return data\n }\n if (key === 'props' || key === '$props' || key === '$attrs') {\n throw new InitialComputedBailout()\n }\n if (hasOwn(data, key)) {\n return Reflect.get(target, key, receiver)\n }\n if (methods && hasOwn(methods, key)) {\n const method = methods[key]\n return typeof method === 'function' ? method.bind(proxy) : method\n }\n if (computed && hasOwn(computed, key)) {\n const computedValue = resolveComputedValue(key)\n if (computedValue.ok) {\n return computedValue.value\n }\n throw new InitialComputedBailout()\n }\n throw new InitialComputedBailout()\n }\n return Reflect.get(target, key, receiver)\n },\n has(target, key) {\n return Reflect.has(target, key)\n || (typeof key === 'string' && Boolean(\n computed && hasOwn(computed, key),\n ))\n },\n })\n\n for (const key of computedKeys) {\n const getter = resolveComputedGetter((computed as ComputedDefinitions)[key])\n if (isCompilerGeneratedTemplateComputedKey(key) && (!getter || !canResolveInitialTemplateComputed(key, getter))) {\n continue\n }\n resolveComputedValue(key)\n }\n\n return Object.keys(resolved).length ? resolved : undefined\n}\n\nexport function resolveNativeInitialData(\n data: unknown,\n computed: ComputedDefinitions | undefined,\n setData: SetDataSnapshotOptions | undefined,\n methods?: Record<string, any>,\n bindingManifest?: WevuRuntimeBindingManifestV1,\n) {\n if (data !== undefined && (!data || typeof data !== 'object')) {\n return data\n }\n const nativeData = (data ?? {}) as Record<string, any>\n const initialComputedData = data === undefined\n ? undefined\n : resolveInitialComputedData({\n data: nativeData,\n computed,\n methods,\n setData,\n })\n const runtimeBindingPlaceholderData = resolveRuntimeBindingPlaceholderData(nativeData, setData, bindingManifest)\n return initialComputedData || runtimeBindingPlaceholderData\n ? {\n ...nativeData,\n ...runtimeBindingPlaceholderData,\n ...initialComputedData,\n }\n : data\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { hasOwn } from "../../utils.mjs";
2
- import { WEVU_SLOT_NAMES_PROP, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_SCOPE_KEY } from "@weapp-core/constants";
2
+ import { WEVU_NATIVE_DECLARATION_ADDRESS_PROP, WEVU_NATIVE_SLOT_CONTEXT_KEY, WEVU_SLOT_NAMES_PROP, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_SCOPE_KEY } from "@weapp-core/constants";
3
3
 
4
4
  //#region src/runtime/define/props.ts
5
5
  const ALLOW_NULL_PROP_INPUT_KEY = "__wevu_allowNullPropInput";
@@ -125,6 +125,10 @@ function normalizeProps(baseOptions, props, explicitProperties) {
125
125
  const shouldAttachInternalProps = Boolean(props || resolvedExplicit);
126
126
  const attachInternalProps = (source) => {
127
127
  const next = { ...source ?? {} };
128
+ if ((!import.meta.env?.PLATFORM || import.meta.env?.PLATFORM === "weapp") && baseOptions[WEVU_NATIVE_SLOT_CONTEXT_KEY] === true) next[WEVU_NATIVE_DECLARATION_ADDRESS_PROP] = {
129
+ type: Array,
130
+ value: []
131
+ };
128
132
  if (!shouldAttachInternalProps) return next;
129
133
  if (!hasOwn(next, WEVU_SLOT_OWNER_ID_PROP)) next[WEVU_SLOT_OWNER_ID_PROP] = {
130
134
  type: String,
@@ -1 +1 @@
1
- {"version":3,"file":"props.mjs","names":[],"sources":["../../../../src/runtime/define/props.ts"],"sourcesContent":["import type {\n ComponentPropsOptions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentShortProperty,\n} from '../types'\nimport {\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\n\nconst ALLOW_NULL_PROP_INPUT_KEY = '__wevu_allowNullPropInput'\nconst PUBLIC_ALLOW_NULL_PROP_INPUT_KEY = 'allowNullPropInput'\n\ntype NormalizedNativePropertyType = MiniProgramComponentShortProperty | FunctionConstructor | null\n\nconst NATIVE_PROPERTY_TYPE_MAP = new Map<unknown, NormalizedNativePropertyType>([\n [String, String],\n [Number, Number],\n [Boolean, Boolean],\n [Object, Object],\n [Array, Array],\n [Function, Function],\n ['String', String],\n ['Number', Number],\n ['Boolean', Boolean],\n ['Object', Object],\n ['Array', Array],\n ['Function', Function],\n [null, null],\n ['null', null],\n ['Null', null],\n])\n\nfunction toNativePropertyType(candidate: unknown) {\n return NATIVE_PROPERTY_TYPE_MAP.get(candidate)\n}\n\nfunction collectNativePropertyTypeCandidates(\n raw: unknown,\n normalized: NormalizedNativePropertyType[] = [],\n) {\n if (Array.isArray(raw)) {\n for (const item of raw) {\n collectNativePropertyTypeCandidates(item, normalized)\n }\n return normalized\n }\n const mapped = toNativePropertyType(raw)\n if (mapped !== undefined && !normalized.includes(mapped)) {\n normalized.push(mapped)\n }\n return normalized\n}\n\nfunction normalizeTypeCandidates(raw: unknown) {\n if (raw === undefined) {\n return []\n }\n const normalized = collectNativePropertyTypeCandidates(raw)\n const requiredNativeTypes = normalized.filter((item): item is Exclude<NormalizedNativePropertyType, null> => item !== null)\n if (requiredNativeTypes.length > 0) {\n return requiredNativeTypes\n }\n return [null]\n}\n\nfunction applyTypeOptions(target: Record<string, unknown>, rawType: unknown) {\n const candidates = normalizeTypeCandidates(rawType)\n if (candidates.length === 0) {\n return\n }\n\n target.type = candidates[0]\n if (candidates.length > 1) {\n const optionalTypes: NormalizedNativePropertyType[] = []\n for (const candidate of candidates.slice(1)) {\n if (!optionalTypes.includes(candidate)) {\n optionalTypes.push(candidate)\n }\n }\n if (optionalTypes.length > 0) {\n target.optionalTypes = optionalTypes\n }\n }\n}\n\nfunction preserveImplicitNativeDefault(target: Record<string, unknown>) {\n if (hasOwn(target, 'value')) {\n return\n }\n if (target.type === String) {\n target.value = ''\n }\n else if (target.type === Number) {\n target.value = 0\n }\n else if (target.type === Boolean) {\n target.value = false\n }\n else if (target.type === Array) {\n target.value = []\n }\n}\n\nfunction applyNullableTransportOptions(\n target: Record<string, unknown>,\n definition: unknown,\n allowNullPropInput: boolean,\n) {\n if (!allowNullPropInput || target.type === null) {\n return\n }\n const definitionRecord = definition && typeof definition === 'object' && !Array.isArray(definition)\n ? (definition as Record<string, unknown>)\n : undefined\n const candidates = collectNativePropertyTypeCandidates(\n definitionRecord\n ? [definitionRecord.type, definitionRecord.optionalTypes]\n : definition,\n )\n const explicitlyNullable = candidates.includes(null)\n const nativeTypes = candidates.filter(candidate => candidate !== null)\n const acceptsMultipleNativeTypes = nativeTypes.length > 1\n const acceptsMissingInput = definitionRecord?.required !== true\n // glass-easel 会先按主 type 校验并转换,optionalTypes 无法保护合法的联合值与空值传输。\n if (!explicitlyNullable && !acceptsMultipleNativeTypes && !acceptsMissingInput) {\n return\n }\n\n // 显式声明的 null 必须保持可观察;其余降级场景则保留原主类型的宿主隐式默认值。\n if (!explicitlyNullable) {\n preserveImplicitNativeDefault(target)\n }\n target.type = null\n delete target.optionalTypes\n}\n\nfunction normalizeVueProps(\n props: ComponentPropsOptions | undefined,\n allowNullPropInput: boolean,\n) {\n const properties: Record<string, any> = {}\n if (!props) {\n return properties\n }\n\n Object.entries(props).forEach(([key, definition]) => {\n if (definition === undefined) {\n return\n }\n if (definition === null) {\n properties[key] = { type: null }\n return\n }\n if (Array.isArray(definition) || typeof definition === 'function') {\n const propOptions: Record<string, unknown> = {}\n applyTypeOptions(propOptions, definition)\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n return\n }\n if (typeof definition === 'object') {\n // 在 Vue <script setup> 中,defineModel() 会生成空的 modifiers props。\n if (key.endsWith('Modifiers') && Object.keys(definition).length === 0) {\n properties[key] = { type: Object, value: {} }\n return\n }\n const propOptions: Record<string, unknown> = {}\n if ('type' in definition && definition.type !== undefined) {\n applyTypeOptions(propOptions, (definition as any).type)\n }\n if (Array.isArray((definition as any).optionalTypes)) {\n const optionalTypes = (definition as any).optionalTypes.map((item: unknown) => toNativePropertyType(item)).filter((item: unknown): item is Exclude<NormalizedNativePropertyType, null> => item !== undefined && item !== null)\n if (optionalTypes.length > 0) {\n const existingOptionalTypes = Array.isArray(propOptions.optionalTypes)\n ? propOptions.optionalTypes as NormalizedNativePropertyType[]\n : []\n for (const optionalType of optionalTypes) {\n if (optionalType === propOptions.type) {\n continue\n }\n if (!existingOptionalTypes.includes(optionalType)) {\n existingOptionalTypes.push(optionalType)\n }\n }\n if (existingOptionalTypes.length > 0) {\n propOptions.optionalTypes = existingOptionalTypes\n }\n }\n }\n if ('observer' in definition && (typeof (definition as any).observer === 'function' || typeof (definition as any).observer === 'string')) {\n propOptions.observer = (definition as any).observer\n }\n const defaultValue = 'default' in definition ? (definition as any).default : (definition as any).value\n if (defaultValue !== undefined) {\n propOptions.value = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue\n }\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n }\n })\n\n return properties\n}\n\nexport function normalizeProps(\n baseOptions: Record<string, any>,\n props?: ComponentPropsOptions,\n explicitProperties?: MiniProgramComponentPropertyOption,\n) {\n const allowNullPropInput = Boolean(\n (baseOptions as any)[ALLOW_NULL_PROP_INPUT_KEY]\n ?? (baseOptions as any)[PUBLIC_ALLOW_NULL_PROP_INPUT_KEY],\n )\n const {\n [ALLOW_NULL_PROP_INPUT_KEY]: _ignoredAllowNullPropInput,\n [PUBLIC_ALLOW_NULL_PROP_INPUT_KEY]: _ignoredPublicAllowNullPropInput,\n ...normalizedBaseOptions\n } = baseOptions\n const baseProperties = (baseOptions as any).properties\n const normalizedBaseProperties = baseProperties && typeof baseProperties === 'object' && Object.keys(baseProperties).length > 0\n ? (baseProperties as any)\n : undefined\n const resolvedExplicit = explicitProperties\n ?? normalizedBaseProperties\n const shouldAttachInternalProps = Boolean(props || resolvedExplicit)\n const attachInternalProps = (source?: Record<string, any>) => {\n const next = { ...(source ?? {}) }\n if (!shouldAttachInternalProps) {\n return next\n }\n if (!hasOwn(next, WEVU_SLOT_OWNER_ID_PROP)) {\n next[WEVU_SLOT_OWNER_ID_PROP] = { type: String, value: '' }\n }\n if (!hasOwn(next, WEVU_SLOT_SCOPE_KEY)) {\n next[WEVU_SLOT_SCOPE_KEY] = { type: null, value: null }\n }\n if (!hasOwn(next, WEVU_SLOT_NAMES_PROP)) {\n next[WEVU_SLOT_NAMES_PROP] = { type: null, value: null }\n }\n return next\n }\n\n if (resolvedExplicit) {\n const {\n properties: _ignored,\n ...rest\n } = normalizedBaseOptions\n const normalizedExplicitProperties = resolvedExplicit\n const normalizedVueProps = normalizeVueProps(props, allowNullPropInput)\n return {\n ...rest,\n properties: attachInternalProps({\n ...normalizedVueProps,\n ...normalizedExplicitProperties,\n }),\n }\n }\n\n return {\n ...normalizedBaseOptions,\n properties: attachInternalProps(normalizeVueProps(props, allowNullPropInput)),\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"props.mjs","names":[],"sources":["../../../../src/runtime/define/props.ts"],"sourcesContent":["import type {\n ComponentPropsOptions,\n MiniProgramComponentPropertyOption,\n MiniProgramComponentShortProperty,\n} from '../types'\nimport {\n WEVU_NATIVE_DECLARATION_ADDRESS_PROP,\n WEVU_NATIVE_SLOT_CONTEXT_KEY,\n WEVU_SLOT_NAMES_PROP,\n WEVU_SLOT_OWNER_ID_PROP,\n WEVU_SLOT_SCOPE_KEY,\n} from '@weapp-core/constants'\nimport { hasOwn } from '../../utils'\n\nconst ALLOW_NULL_PROP_INPUT_KEY = '__wevu_allowNullPropInput'\nconst PUBLIC_ALLOW_NULL_PROP_INPUT_KEY = 'allowNullPropInput'\n\ntype NormalizedNativePropertyType = MiniProgramComponentShortProperty | FunctionConstructor | null\ntype ImportMetaWithEnv = ImportMeta & { env?: { PLATFORM?: string } }\n\nconst NATIVE_PROPERTY_TYPE_MAP = new Map<unknown, NormalizedNativePropertyType>([\n [String, String],\n [Number, Number],\n [Boolean, Boolean],\n [Object, Object],\n [Array, Array],\n [Function, Function],\n ['String', String],\n ['Number', Number],\n ['Boolean', Boolean],\n ['Object', Object],\n ['Array', Array],\n ['Function', Function],\n [null, null],\n ['null', null],\n ['Null', null],\n])\n\nfunction toNativePropertyType(candidate: unknown) {\n return NATIVE_PROPERTY_TYPE_MAP.get(candidate)\n}\n\nfunction collectNativePropertyTypeCandidates(\n raw: unknown,\n normalized: NormalizedNativePropertyType[] = [],\n) {\n if (Array.isArray(raw)) {\n for (const item of raw) {\n collectNativePropertyTypeCandidates(item, normalized)\n }\n return normalized\n }\n const mapped = toNativePropertyType(raw)\n if (mapped !== undefined && !normalized.includes(mapped)) {\n normalized.push(mapped)\n }\n return normalized\n}\n\nfunction normalizeTypeCandidates(raw: unknown) {\n if (raw === undefined) {\n return []\n }\n const normalized = collectNativePropertyTypeCandidates(raw)\n const requiredNativeTypes = normalized.filter((item): item is Exclude<NormalizedNativePropertyType, null> => item !== null)\n if (requiredNativeTypes.length > 0) {\n return requiredNativeTypes\n }\n return [null]\n}\n\nfunction applyTypeOptions(target: Record<string, unknown>, rawType: unknown) {\n const candidates = normalizeTypeCandidates(rawType)\n if (candidates.length === 0) {\n return\n }\n\n target.type = candidates[0]\n if (candidates.length > 1) {\n const optionalTypes: NormalizedNativePropertyType[] = []\n for (const candidate of candidates.slice(1)) {\n if (!optionalTypes.includes(candidate)) {\n optionalTypes.push(candidate)\n }\n }\n if (optionalTypes.length > 0) {\n target.optionalTypes = optionalTypes\n }\n }\n}\n\nfunction preserveImplicitNativeDefault(target: Record<string, unknown>) {\n if (hasOwn(target, 'value')) {\n return\n }\n if (target.type === String) {\n target.value = ''\n }\n else if (target.type === Number) {\n target.value = 0\n }\n else if (target.type === Boolean) {\n target.value = false\n }\n else if (target.type === Array) {\n target.value = []\n }\n}\n\nfunction applyNullableTransportOptions(\n target: Record<string, unknown>,\n definition: unknown,\n allowNullPropInput: boolean,\n) {\n if (!allowNullPropInput || target.type === null) {\n return\n }\n const definitionRecord = definition && typeof definition === 'object' && !Array.isArray(definition)\n ? (definition as Record<string, unknown>)\n : undefined\n const candidates = collectNativePropertyTypeCandidates(\n definitionRecord\n ? [definitionRecord.type, definitionRecord.optionalTypes]\n : definition,\n )\n const explicitlyNullable = candidates.includes(null)\n const nativeTypes = candidates.filter(candidate => candidate !== null)\n const acceptsMultipleNativeTypes = nativeTypes.length > 1\n const acceptsMissingInput = definitionRecord?.required !== true\n // glass-easel 会先按主 type 校验并转换,optionalTypes 无法保护合法的联合值与空值传输。\n if (!explicitlyNullable && !acceptsMultipleNativeTypes && !acceptsMissingInput) {\n return\n }\n\n // 显式声明的 null 必须保持可观察;其余降级场景则保留原主类型的宿主隐式默认值。\n if (!explicitlyNullable) {\n preserveImplicitNativeDefault(target)\n }\n target.type = null\n delete target.optionalTypes\n}\n\nfunction normalizeVueProps(\n props: ComponentPropsOptions | undefined,\n allowNullPropInput: boolean,\n) {\n const properties: Record<string, any> = {}\n if (!props) {\n return properties\n }\n\n Object.entries(props).forEach(([key, definition]) => {\n if (definition === undefined) {\n return\n }\n if (definition === null) {\n properties[key] = { type: null }\n return\n }\n if (Array.isArray(definition) || typeof definition === 'function') {\n const propOptions: Record<string, unknown> = {}\n applyTypeOptions(propOptions, definition)\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n return\n }\n if (typeof definition === 'object') {\n // 在 Vue <script setup> 中,defineModel() 会生成空的 modifiers props。\n if (key.endsWith('Modifiers') && Object.keys(definition).length === 0) {\n properties[key] = { type: Object, value: {} }\n return\n }\n const propOptions: Record<string, unknown> = {}\n if ('type' in definition && definition.type !== undefined) {\n applyTypeOptions(propOptions, (definition as any).type)\n }\n if (Array.isArray((definition as any).optionalTypes)) {\n const optionalTypes = (definition as any).optionalTypes.map((item: unknown) => toNativePropertyType(item)).filter((item: unknown): item is Exclude<NormalizedNativePropertyType, null> => item !== undefined && item !== null)\n if (optionalTypes.length > 0) {\n const existingOptionalTypes = Array.isArray(propOptions.optionalTypes)\n ? propOptions.optionalTypes as NormalizedNativePropertyType[]\n : []\n for (const optionalType of optionalTypes) {\n if (optionalType === propOptions.type) {\n continue\n }\n if (!existingOptionalTypes.includes(optionalType)) {\n existingOptionalTypes.push(optionalType)\n }\n }\n if (existingOptionalTypes.length > 0) {\n propOptions.optionalTypes = existingOptionalTypes\n }\n }\n }\n if ('observer' in definition && (typeof (definition as any).observer === 'function' || typeof (definition as any).observer === 'string')) {\n propOptions.observer = (definition as any).observer\n }\n const defaultValue = 'default' in definition ? (definition as any).default : (definition as any).value\n if (defaultValue !== undefined) {\n propOptions.value = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue\n }\n if (!hasOwn(propOptions, 'type')) {\n propOptions.type = null\n }\n applyNullableTransportOptions(propOptions, definition, allowNullPropInput)\n properties[key] = propOptions\n }\n })\n\n return properties\n}\n\nexport function normalizeProps(\n baseOptions: Record<string, any>,\n props?: ComponentPropsOptions,\n explicitProperties?: MiniProgramComponentPropertyOption,\n) {\n const allowNullPropInput = Boolean(\n (baseOptions as any)[ALLOW_NULL_PROP_INPUT_KEY]\n ?? (baseOptions as any)[PUBLIC_ALLOW_NULL_PROP_INPUT_KEY],\n )\n const {\n [ALLOW_NULL_PROP_INPUT_KEY]: _ignoredAllowNullPropInput,\n [PUBLIC_ALLOW_NULL_PROP_INPUT_KEY]: _ignoredPublicAllowNullPropInput,\n ...normalizedBaseOptions\n } = baseOptions\n const baseProperties = (baseOptions as any).properties\n const normalizedBaseProperties = baseProperties && typeof baseProperties === 'object' && Object.keys(baseProperties).length > 0\n ? (baseProperties as any)\n : undefined\n const resolvedExplicit = explicitProperties\n ?? normalizedBaseProperties\n const shouldAttachInternalProps = Boolean(props || resolvedExplicit)\n const attachInternalProps = (source?: Record<string, any>) => {\n const next = { ...(source ?? {}) }\n if (\n (!(import.meta as ImportMetaWithEnv).env?.PLATFORM || (import.meta as ImportMetaWithEnv).env?.PLATFORM === 'weapp')\n && (baseOptions as Record<string, unknown>)[WEVU_NATIVE_SLOT_CONTEXT_KEY] === true\n ) {\n next[WEVU_NATIVE_DECLARATION_ADDRESS_PROP] = { type: Array, value: [] }\n }\n if (!shouldAttachInternalProps) {\n return next\n }\n if (!hasOwn(next, WEVU_SLOT_OWNER_ID_PROP)) {\n next[WEVU_SLOT_OWNER_ID_PROP] = { type: String, value: '' }\n }\n if (!hasOwn(next, WEVU_SLOT_SCOPE_KEY)) {\n next[WEVU_SLOT_SCOPE_KEY] = { type: null, value: null }\n }\n if (!hasOwn(next, WEVU_SLOT_NAMES_PROP)) {\n next[WEVU_SLOT_NAMES_PROP] = { type: null, value: null }\n }\n return next\n }\n\n if (resolvedExplicit) {\n const {\n properties: _ignored,\n ...rest\n } = normalizedBaseOptions\n const normalizedExplicitProperties = resolvedExplicit\n const normalizedVueProps = normalizeVueProps(props, allowNullPropInput)\n return {\n ...rest,\n properties: attachInternalProps({\n ...normalizedVueProps,\n ...normalizedExplicitProperties,\n }),\n }\n }\n\n return {\n ...normalizedBaseOptions,\n properties: attachInternalProps(normalizeVueProps(props, allowNullPropInput)),\n }\n}\n"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { hasOwn } from "../../utils.mjs";
4
4
  import { cloneSnapshotValue, isDeepEqualValue } from "../app/setData/snapshot.mjs";
5
5
  import { decodeWxmlEntities, resolveDatasetEventValue } from "../inlineDataset.mjs";
6
6
  import { getOwnerProxy, getOwnerSnapshot, getOwnerTarget, subscribeOwner } from "../scopedSlots.mjs";
7
- import { WEVU_BINDING_MANIFEST_KEY, WEVU_INLINE_HANDLER, WEVU_INLINE_MAP_KEY, WEVU_LAYOUT_HOSTS_KEY, WEVU_OWNER_HANDLER, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PUBLIC_RUNTIME_KEY, WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY, WEVU_SLOT_FUNCTION_TOKEN, WEVU_SLOT_OWNER_ID_KEY, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_OWNER_KEY, WEVU_SLOT_OWNER_PROXY_KEY, WEVU_SLOT_PROPS_DATA_KEY, WEVU_SLOT_PROPS_KEY, WEVU_SLOT_SCOPE_KEY, WEVU_TEMPLATE_REFS_KEY } from "@weapp-core/constants";
7
+ import { WEVU_BINDING_MANIFEST_KEY, WEVU_INLINE_HANDLER, WEVU_INLINE_MAP_KEY, WEVU_LAYOUT_HOSTS_KEY, WEVU_NATIVE_SLOT_CONTEXT_KEY, WEVU_OWNER_HANDLER, WEVU_PROPS_DERIVED_KEYS_KEY, WEVU_PUBLIC_RUNTIME_KEY, WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY, WEVU_SLOT_FUNCTION_TOKEN, WEVU_SLOT_OWNER_ID_KEY, WEVU_SLOT_OWNER_ID_PROP, WEVU_SLOT_OWNER_KEY, WEVU_SLOT_OWNER_PROXY_KEY, WEVU_SLOT_PROPS_DATA_KEY, WEVU_SLOT_PROPS_KEY, WEVU_SLOT_SCOPE_KEY, WEVU_TEMPLATE_REFS_KEY } from "@weapp-core/constants";
8
8
 
9
9
  //#region src/runtime/define/scopedSlotOptions.ts
10
10
  const SCOPED_SLOT_SNAPSHOT_OMIT_KEYS = [
@@ -271,6 +271,7 @@ function createScopedSlotOptions(overrides) {
271
271
  return ownerId ? getOwnerTarget(ownerId) : void 0;
272
272
  };
273
273
  const baseOptions = {
274
+ [WEVU_NATIVE_SLOT_CONTEXT_KEY]: overrides?.[WEVU_NATIVE_SLOT_CONTEXT_KEY],
274
275
  [WEVU_SCOPED_SLOT_OWNER_REQUIRED_KEY]: true,
275
276
  options: { virtualHost: true },
276
277
  setData: { omit: SCOPED_SLOT_SNAPSHOT_OMIT_KEYS },