wevu 6.18.7 → 6.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/defineProperty.mjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/toPrimitive.mjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/toPropertyKey.mjs +1 -0
- package/dist/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/typeof.mjs +1 -0
- package/dist/dev/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/defineProperty.mjs +14 -0
- package/dist/dev/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/toPrimitive.mjs +16 -0
- package/dist/dev/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/toPropertyKey.mjs +11 -0
- package/dist/dev/_virtual/_@oxc-project_runtime@0.142.0/helpers/esm/typeof.mjs +12 -0
- package/dist/dev/index.mjs +48 -10
- package/dist/dev/internal-reactivity.mjs +15 -5
- package/dist/dev/internal-runtime.mjs +32 -4
- package/dist/dev/internal-template.mjs +1 -1
- package/dist/dev/package.mjs +6 -0
- package/dist/dev/package.mjs.map +1 -0
- package/dist/dev/reactivity/computed.mjs +49 -0
- package/dist/dev/reactivity/computed.mjs.map +1 -0
- package/dist/dev/reactivity/core.mjs +184 -0
- package/dist/dev/reactivity/core.mjs.map +1 -0
- package/dist/dev/reactivity/reactive/mutation.mjs +12 -0
- package/dist/dev/reactivity/reactive/mutation.mjs.map +1 -0
- package/dist/dev/{computed-BxRsUJgi.mjs → reactivity/reactive/patch.mjs} +8 -49
- package/dist/dev/reactivity/reactive/patch.mjs.map +1 -0
- package/dist/dev/reactivity/reactive/patchState.mjs +138 -0
- package/dist/dev/reactivity/reactive/patchState.mjs.map +1 -0
- package/dist/dev/reactivity/reactive/shallow.mjs +77 -0
- package/dist/dev/reactivity/reactive/shallow.mjs.map +1 -0
- package/dist/dev/reactivity/reactive/shared.mjs +40 -0
- package/dist/dev/reactivity/reactive/shared.mjs.map +1 -0
- package/dist/dev/reactivity/reactive/state.mjs +8 -0
- package/dist/dev/reactivity/reactive/state.mjs.map +1 -0
- package/dist/dev/reactivity/reactive.mjs +213 -0
- package/dist/dev/reactivity/reactive.mjs.map +1 -0
- package/dist/dev/reactivity/readonly.mjs +69 -0
- package/dist/dev/reactivity/readonly.mjs.map +1 -0
- package/dist/dev/reactivity/ref.mjs +97 -0
- package/dist/dev/reactivity/ref.mjs.map +1 -0
- package/dist/dev/reactivity/shallowRef.mjs +71 -0
- package/dist/dev/reactivity/shallowRef.mjs.map +1 -0
- package/dist/dev/{toRefs-D06VmFK2.mjs → reactivity/toRefs.mjs} +4 -3
- package/dist/dev/reactivity/toRefs.mjs.map +1 -0
- package/dist/dev/reactivity/traverse.mjs +40 -0
- package/dist/dev/reactivity/traverse.mjs.map +1 -0
- package/dist/dev/reactivity/watch/helpers.mjs +78 -0
- package/dist/dev/reactivity/watch/helpers.mjs.map +1 -0
- package/dist/dev/reactivity/watch/types.mjs +20 -0
- package/dist/dev/reactivity/watch/types.mjs.map +1 -0
- package/dist/dev/reactivity/watch.mjs +167 -0
- package/dist/dev/reactivity/watch.mjs.map +1 -0
- package/dist/dev/router/backNavigation.mjs +32 -0
- package/dist/dev/router/backNavigation.mjs.map +1 -0
- package/dist/dev/router/createRouter.mjs +179 -0
- package/dist/dev/router/createRouter.mjs.map +1 -0
- package/dist/dev/router/instance.mjs +17 -0
- package/dist/dev/router/instance.mjs.map +1 -0
- package/dist/dev/router/navigationApi.mjs +94 -0
- package/dist/dev/router/navigationApi.mjs.map +1 -0
- package/dist/dev/router/navigationCore.mjs +139 -0
- package/dist/dev/router/navigationCore.mjs.map +1 -0
- package/dist/dev/router/navigationResult.mjs +54 -0
- package/dist/dev/router/navigationResult.mjs.map +1 -0
- package/dist/dev/router/navigationTarget.mjs +122 -0
- package/dist/dev/router/navigationTarget.mjs.map +1 -0
- package/dist/dev/router/navigationTargetHelpers.mjs +38 -0
- package/dist/dev/router/navigationTargetHelpers.mjs.map +1 -0
- package/dist/dev/router/resolve.mjs +29 -0
- package/dist/dev/router/resolve.mjs.map +1 -0
- package/dist/dev/router/routeRegistry.mjs +78 -0
- package/dist/dev/router/routeRegistry.mjs.map +1 -0
- package/dist/dev/router/routeSync.mjs +72 -0
- package/dist/dev/router/routeSync.mjs.map +1 -0
- package/dist/dev/router/types.mjs +11 -0
- package/dist/dev/router/types.mjs.map +1 -0
- package/dist/dev/router/useRoute.mjs +106 -0
- package/dist/dev/router/useRoute.mjs.map +1 -0
- package/dist/dev/router/useRouter.mjs +15 -0
- package/dist/dev/router/useRouter.mjs.map +1 -0
- package/dist/dev/router.mjs +9 -1378
- package/dist/dev/routerInternal/location.mjs +68 -0
- package/dist/dev/routerInternal/location.mjs.map +1 -0
- package/dist/dev/routerInternal/matching.mjs +149 -0
- package/dist/dev/routerInternal/matching.mjs.map +1 -0
- package/dist/dev/routerInternal/params.mjs +95 -0
- package/dist/dev/routerInternal/params.mjs.map +1 -0
- package/dist/dev/routerInternal/path.mjs +42 -0
- package/dist/dev/routerInternal/path.mjs.map +1 -0
- package/dist/dev/routerInternal/query.mjs +113 -0
- package/dist/dev/routerInternal/query.mjs.map +1 -0
- package/dist/dev/routerInternal/records.mjs +173 -0
- package/dist/dev/routerInternal/records.mjs.map +1 -0
- package/dist/dev/routerInternal/recordsWarnings.mjs +49 -0
- package/dist/dev/routerInternal/recordsWarnings.mjs.map +1 -0
- package/dist/dev/routerInternal/snapshots.mjs +126 -0
- package/dist/dev/routerInternal/snapshots.mjs.map +1 -0
- package/dist/dev/runtime/app/computed.mjs +68 -0
- package/dist/dev/runtime/app/computed.mjs.map +1 -0
- package/dist/dev/runtime/app/context.mjs +275 -0
- package/dist/dev/runtime/app/context.mjs.map +1 -0
- package/dist/dev/runtime/app/diagnostics.mjs +34 -0
- package/dist/dev/runtime/app/diagnostics.mjs.map +1 -0
- package/dist/dev/runtime/app/mount.mjs +270 -0
- package/dist/dev/runtime/app/mount.mjs.map +1 -0
- package/dist/dev/runtime/app/pending.mjs +14 -0
- package/dist/dev/runtime/app/pending.mjs.map +1 -0
- package/dist/dev/runtime/app/setData/patchScheduler.mjs +158 -0
- package/dist/dev/runtime/app/setData/patchScheduler.mjs.map +1 -0
- package/dist/dev/runtime/app/setData/payload.mjs +161 -0
- package/dist/dev/runtime/app/setData/payload.mjs.map +1 -0
- package/dist/dev/runtime/app/setData/scheduler.mjs +313 -0
- package/dist/dev/runtime/app/setData/scheduler.mjs.map +1 -0
- package/dist/dev/runtime/app/setData/snapshot.mjs +129 -0
- package/dist/dev/runtime/app/setData/snapshot.mjs.map +1 -0
- package/dist/dev/runtime/app/setDataOptions.mjs +73 -0
- package/dist/dev/runtime/app/setDataOptions.mjs.map +1 -0
- package/dist/dev/runtime/app.mjs +93 -0
- package/dist/dev/runtime/app.mjs.map +1 -0
- package/dist/dev/runtime/bindModel.mjs +92 -0
- package/dist/dev/runtime/bindModel.mjs.map +1 -0
- package/dist/dev/runtime/defaults.mjs +61 -0
- package/dist/dev/runtime/defaults.mjs.map +1 -0
- package/dist/dev/runtime/define/initialComputed.mjs +125 -0
- package/dist/dev/runtime/define/initialComputed.mjs.map +1 -0
- package/dist/dev/runtime/define/options.mjs +169 -0
- package/dist/dev/runtime/define/options.mjs.map +1 -0
- package/dist/dev/runtime/define/optionsApi.mjs +48 -0
- package/dist/dev/runtime/define/optionsApi.mjs.map +1 -0
- package/dist/dev/runtime/define/props.mjs +194 -0
- package/dist/dev/runtime/define/props.mjs.map +1 -0
- package/dist/dev/runtime/define/scopedSlotOptions.mjs +316 -0
- package/dist/dev/runtime/define/scopedSlotOptions.mjs.map +1 -0
- package/dist/dev/runtime/define/setupResult.mjs +78 -0
- package/dist/dev/runtime/define/setupResult.mjs.map +1 -0
- package/dist/dev/runtime/define.mjs +142 -0
- package/dist/dev/runtime/define.mjs.map +1 -0
- package/dist/dev/runtime/diff.mjs +193 -0
- package/dist/dev/runtime/diff.mjs.map +1 -0
- package/dist/dev/runtime/disposables.mjs +81 -0
- package/dist/dev/runtime/disposables.mjs.map +1 -0
- package/dist/dev/runtime/elementIntersectionObserver.mjs +80 -0
- package/dist/dev/runtime/elementIntersectionObserver.mjs.map +1 -0
- package/dist/dev/runtime/emit.mjs +36 -0
- package/dist/dev/runtime/emit.mjs.map +1 -0
- package/dist/dev/{base-CYkvI7w8.mjs → runtime/hooks/base.mjs} +3 -140
- package/dist/dev/runtime/hooks/base.mjs.map +1 -0
- package/dist/dev/runtime/hooks/register.mjs +92 -0
- package/dist/dev/runtime/hooks/register.mjs.map +1 -0
- package/dist/dev/runtime/hooks/vue.mjs +81 -0
- package/dist/dev/runtime/hooks/vue.mjs.map +1 -0
- package/dist/dev/runtime/internal.mjs +18 -0
- package/dist/dev/runtime/internal.mjs.map +1 -0
- package/dist/dev/runtime/intersectionObserver.mjs +46 -0
- package/dist/dev/runtime/intersectionObserver.mjs.map +1 -0
- package/dist/dev/runtime/layoutBridge.mjs +303 -0
- package/dist/dev/runtime/layoutBridge.mjs.map +1 -0
- package/dist/dev/runtime/layoutComponentMatcher.mjs +11 -0
- package/dist/dev/runtime/layoutComponentMatcher.mjs.map +1 -0
- package/dist/dev/runtime/nativeBridge.mjs +21 -0
- package/dist/dev/runtime/nativeBridge.mjs.map +1 -0
- package/dist/dev/runtime/noSetData.mjs +18 -0
- package/dist/dev/runtime/noSetData.mjs.map +1 -0
- package/dist/dev/runtime/pageEnvironment.mjs +100 -0
- package/dist/dev/runtime/pageEnvironment.mjs.map +1 -0
- package/dist/dev/runtime/pageLayout.mjs +71 -0
- package/dist/dev/runtime/pageLayout.mjs.map +1 -0
- package/dist/dev/runtime/pageScroll.mjs +110 -0
- package/dist/dev/runtime/pageScroll.mjs.map +1 -0
- package/dist/dev/runtime/platform.mjs +79 -0
- package/dist/dev/runtime/platform.mjs.map +1 -0
- package/dist/dev/runtime/provide.mjs +71 -0
- package/dist/dev/runtime/provide.mjs.map +1 -0
- package/dist/dev/runtime/provideContext.mjs +101 -0
- package/dist/dev/runtime/provideContext.mjs.map +1 -0
- package/dist/dev/runtime/provideStore.mjs +18 -0
- package/dist/dev/runtime/provideStore.mjs.map +1 -0
- package/dist/dev/runtime/pullDownRefresh.mjs +24 -0
- package/dist/dev/runtime/pullDownRefresh.mjs.map +1 -0
- package/dist/dev/runtime/register/app.mjs +161 -0
- package/dist/dev/runtime/register/app.mjs.map +1 -0
- package/dist/dev/runtime/register/component/features.mjs +43 -0
- package/dist/dev/runtime/register/component/features.mjs.map +1 -0
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs +64 -0
- package/dist/dev/runtime/register/component/lifecycle/optionalHooks.mjs.map +1 -0
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs +96 -0
- package/dist/dev/runtime/register/component/lifecycle/platform.mjs.map +1 -0
- package/dist/dev/runtime/register/component/lifecycle.mjs +122 -0
- package/dist/dev/runtime/register/component/lifecycle.mjs.map +1 -0
- package/dist/dev/runtime/register/component/methods.mjs +82 -0
- package/dist/dev/runtime/register/component/methods.mjs.map +1 -0
- package/dist/dev/runtime/register/component/options.mjs +204 -0
- package/dist/dev/runtime/register/component/options.mjs.map +1 -0
- package/dist/dev/runtime/register/component/props.mjs +218 -0
- package/dist/dev/runtime/register/component/props.mjs.map +1 -0
- package/dist/dev/runtime/register/component/registerDefinition.mjs +290 -0
- package/dist/dev/runtime/register/component/registerDefinition.mjs.map +1 -0
- package/dist/dev/runtime/register/component.mjs +129 -0
- package/dist/dev/runtime/register/component.mjs.map +1 -0
- package/dist/dev/runtime/register/inline.mjs +145 -0
- package/dist/dev/runtime/register/inline.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs +53 -0
- package/dist/dev/runtime/register/runtimeInstance/methodBridge.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs +34 -0
- package/dist/dev/runtime/register/runtimeInstance/provideContext.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs +230 -0
- package/dist/dev/runtime/register/runtimeInstance/setupContext.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs +166 -0
- package/dist/dev/runtime/register/runtimeInstance/setupPhase.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance/utils.mjs +122 -0
- package/dist/dev/runtime/register/runtimeInstance/utils.mjs.map +1 -0
- package/dist/dev/runtime/register/runtimeInstance.mjs +441 -0
- package/dist/dev/runtime/register/runtimeInstance.mjs.map +1 -0
- package/dist/dev/runtime/register/setDataFrequencyWarning.mjs +95 -0
- package/dist/dev/runtime/register/setDataFrequencyWarning.mjs.map +1 -0
- package/dist/dev/runtime/register/setup.mjs +22 -0
- package/dist/dev/runtime/register/setup.mjs.map +1 -0
- package/dist/dev/runtime/register/snapshot.mjs +18 -0
- package/dist/dev/runtime/register/snapshot.mjs.map +1 -0
- package/dist/dev/runtime/register/watch.mjs +57 -0
- package/dist/dev/runtime/register/watch.mjs.map +1 -0
- package/dist/dev/runtime/scopedSlots.mjs +115 -0
- package/dist/dev/runtime/scopedSlots.mjs.map +1 -0
- package/dist/dev/runtime/selectorQuery.mjs +49 -0
- package/dist/dev/runtime/selectorQuery.mjs.map +1 -0
- package/dist/dev/runtime/setupTracking.mjs +59 -0
- package/dist/dev/runtime/setupTracking.mjs.map +1 -0
- package/dist/dev/{template-n_iVr0ey.mjs → runtime/template.mjs} +7 -4
- package/dist/dev/runtime/template.mjs.map +1 -0
- package/dist/dev/runtime/templateRefs/helpers.mjs +259 -0
- package/dist/dev/runtime/templateRefs/helpers.mjs.map +1 -0
- package/dist/dev/runtime/templateRefs.mjs +162 -0
- package/dist/dev/runtime/templateRefs.mjs.map +1 -0
- package/dist/dev/runtime/uniAppHost.mjs +119 -0
- package/dist/dev/runtime/uniAppHost.mjs.map +1 -0
- package/dist/dev/runtime/updatePerformance.mjs +41 -0
- package/dist/dev/runtime/updatePerformance.mjs.map +1 -0
- package/dist/dev/runtime/use.mjs +25 -0
- package/dist/dev/runtime/use.mjs.map +1 -0
- package/dist/dev/runtime/vueCompat/context.mjs +25 -0
- package/dist/dev/runtime/vueCompat/context.mjs.map +1 -0
- package/dist/dev/runtime/vueCompat/model.mjs +119 -0
- package/dist/dev/runtime/vueCompat/model.mjs.map +1 -0
- package/dist/dev/runtime/vueCompat/router.mjs +124 -0
- package/dist/dev/runtime/vueCompat/router.mjs.map +1 -0
- package/dist/dev/runtime/vueCompat/templateRef.mjs +37 -0
- package/dist/dev/runtime/vueCompat/templateRef.mjs.map +1 -0
- package/dist/dev/scheduler.mjs +75 -0
- package/dist/dev/scheduler.mjs.map +1 -0
- package/dist/dev/store/actions.mjs +40 -0
- package/dist/dev/store/actions.mjs.map +1 -0
- package/dist/dev/store/base.mjs +56 -0
- package/dist/dev/store/base.mjs.map +1 -0
- package/dist/dev/store/define/optionsStyle.mjs +125 -0
- package/dist/dev/store/define/optionsStyle.mjs.map +1 -0
- package/dist/dev/store/define/setupStyle.mjs +145 -0
- package/dist/dev/store/define/setupStyle.mjs.map +1 -0
- package/dist/dev/store/define/shared.mjs +38 -0
- package/dist/dev/store/define/shared.mjs.map +1 -0
- package/dist/dev/store/define.mjs +23 -0
- package/dist/dev/store/define.mjs.map +1 -0
- package/dist/dev/store/manager.mjs +21 -0
- package/dist/dev/store/manager.mjs.map +1 -0
- package/dist/dev/store/storeToRefs.mjs +29 -0
- package/dist/dev/store/storeToRefs.mjs.map +1 -0
- package/dist/dev/store/utils.mjs +49 -0
- package/dist/dev/store/utils.mjs.map +1 -0
- package/dist/dev/store.mjs +3 -1
- package/dist/dev/utils.mjs +16 -0
- package/dist/dev/utils.mjs.map +1 -0
- package/dist/dev/version.mjs +8 -0
- package/dist/dev/version.mjs.map +1 -0
- package/dist/dev/vue-demi.mjs +48 -168
- package/dist/dev/vue-demi.mjs.map +1 -1
- package/dist/index.d.mts +71 -7
- package/dist/index.mjs +1 -1
- package/dist/internal-reactivity.d.mts +16 -2
- package/dist/internal-reactivity.mjs +1 -1
- package/dist/internal-runtime.d.mts +35 -2
- package/dist/internal-runtime.mjs +1 -1
- package/dist/internal-template.d.mts +1 -1
- package/dist/internal-template.mjs +1 -1
- package/dist/jsx-runtime.d.mts +1 -1
- package/dist/macros/shared.d.mts +81 -0
- package/dist/macros.d.mts +70 -0
- package/dist/package.mjs +1 -0
- package/dist/reactivity/computed.d.mts +21 -0
- package/dist/reactivity/computed.mjs +1 -0
- package/dist/reactivity/core.d.mts +34 -0
- package/dist/reactivity/core.mjs +1 -0
- package/dist/reactivity/index.d.mts +15 -0
- package/dist/reactivity/reactive/mutation.d.mts +21 -0
- package/dist/reactivity/reactive/mutation.mjs +1 -0
- package/dist/reactivity/reactive/patch.d.mts +18 -0
- package/dist/reactivity/reactive/patch.mjs +1 -0
- package/dist/reactivity/reactive/patchState.mjs +1 -0
- package/dist/reactivity/reactive/shallow.d.mts +22 -0
- package/dist/reactivity/reactive/shallow.mjs +1 -0
- package/dist/reactivity/reactive/shared.d.mts +4 -0
- package/dist/reactivity/reactive/shared.mjs +1 -0
- package/dist/reactivity/reactive/state.mjs +1 -0
- package/dist/reactivity/reactive.d.mts +41 -0
- package/dist/reactivity/reactive.mjs +1 -0
- package/dist/reactivity/readonly.d.mts +27 -0
- package/dist/reactivity/readonly.mjs +1 -0
- package/dist/reactivity/ref.d.mts +27 -0
- package/dist/reactivity/ref.mjs +1 -0
- package/dist/reactivity/shallowRef.d.mts +19 -0
- package/dist/reactivity/shallowRef.mjs +1 -0
- package/dist/reactivity/toRefs.d.mts +43 -0
- package/dist/reactivity/toRefs.mjs +1 -0
- package/dist/reactivity/traverse.d.mts +8 -0
- package/dist/reactivity/traverse.mjs +1 -0
- package/dist/reactivity/watch/helpers.mjs +1 -0
- package/dist/reactivity/watch/types.d.mts +43 -0
- package/dist/reactivity/watch/types.mjs +1 -0
- package/dist/reactivity/watch.d.mts +21 -0
- package/dist/reactivity/watch.mjs +1 -0
- package/dist/router/backNavigation.mjs +1 -0
- package/dist/router/createRouter.d.mts +8 -0
- package/dist/router/createRouter.mjs +1 -0
- package/dist/router/instance.mjs +1 -0
- package/dist/router/navigationApi.mjs +1 -0
- package/dist/router/navigationCore.d.mts +6 -0
- package/dist/router/navigationCore.mjs +1 -0
- package/dist/router/navigationResult.mjs +1 -0
- package/dist/router/navigationTarget.mjs +1 -0
- package/dist/router/navigationTargetHelpers.mjs +1 -0
- package/dist/router/resolve.d.mts +6 -0
- package/dist/router/resolve.mjs +1 -0
- package/dist/router/routeRegistry.mjs +1 -0
- package/dist/router/routeSync.d.mts +1 -0
- package/dist/router/routeSync.mjs +1 -0
- package/dist/router/types.d.mts +163 -0
- package/dist/router/types.mjs +1 -0
- package/dist/router/useRoute.d.mts +19 -0
- package/dist/router/useRoute.mjs +1 -0
- package/dist/router/useRouter.d.mts +8 -0
- package/dist/router/useRouter.mjs +1 -0
- package/dist/router.d.mts +9 -204
- package/dist/router.mjs +1 -1
- package/dist/routerInternal/location.mjs +1 -0
- package/dist/routerInternal/matching.mjs +1 -0
- package/dist/routerInternal/params.mjs +1 -0
- package/dist/routerInternal/path.mjs +1 -0
- package/dist/routerInternal/query.d.mts +7 -0
- package/dist/routerInternal/query.mjs +1 -0
- package/dist/routerInternal/records.mjs +1 -0
- package/dist/routerInternal/recordsWarnings.mjs +1 -0
- package/dist/routerInternal/snapshots.mjs +1 -0
- package/dist/routerInternal/types.d.mts +9 -0
- package/dist/runtime/app/computed.mjs +1 -0
- package/dist/runtime/app/context.mjs +1 -0
- package/dist/runtime/app/diagnostics.mjs +1 -0
- package/dist/runtime/app/mount.mjs +1 -0
- package/dist/runtime/app/pending.d.mts +10 -0
- package/dist/runtime/app/pending.mjs +1 -0
- package/dist/runtime/app/setData/patchScheduler.mjs +1 -0
- package/dist/runtime/app/setData/payload.mjs +1 -0
- package/dist/runtime/app/setData/scheduler.mjs +1 -0
- package/dist/runtime/app/setData/snapshot.mjs +1 -0
- package/dist/runtime/app/setDataOptions.mjs +1 -0
- package/dist/runtime/app.d.mts +8 -0
- package/dist/runtime/app.mjs +1 -0
- package/dist/runtime/bindModel.mjs +1 -0
- package/dist/runtime/defaults.d.mts +11 -0
- package/dist/runtime/defaults.mjs +1 -0
- package/dist/runtime/define/initialComputed.mjs +1 -0
- package/dist/runtime/define/options.mjs +1 -0
- package/dist/runtime/define/optionsApi.mjs +1 -0
- package/dist/runtime/define/props.mjs +1 -0
- package/dist/runtime/define/scopedSlotOptions.mjs +1 -0
- package/dist/runtime/define/setupResult.mjs +1 -0
- package/dist/runtime/define.d.mts +105 -0
- package/dist/runtime/define.mjs +1 -0
- package/dist/runtime/diff.mjs +1 -0
- package/dist/runtime/disposables.d.mts +31 -0
- package/dist/runtime/disposables.mjs +1 -0
- package/dist/runtime/elementIntersectionObserver.d.mts +26 -0
- package/dist/runtime/elementIntersectionObserver.mjs +1 -0
- package/dist/runtime/emit.mjs +1 -0
- package/dist/runtime/hooks/base.d.mts +27 -0
- package/dist/runtime/hooks/base.mjs +1 -0
- package/dist/runtime/hooks/register.d.mts +30 -0
- package/dist/runtime/hooks/register.mjs +1 -0
- package/dist/runtime/hooks/vue.d.mts +53 -0
- package/dist/runtime/hooks/vue.mjs +1 -0
- package/dist/runtime/hooks.d.mts +4 -0
- package/dist/runtime/index.d.mts +47 -0
- package/dist/runtime/internal.mjs +1 -0
- package/dist/runtime/intersectionObserver.d.mts +14 -0
- package/dist/runtime/intersectionObserver.mjs +1 -0
- package/dist/runtime/layoutBridge.d.mts +59 -0
- package/dist/runtime/layoutBridge.mjs +1 -0
- package/dist/runtime/layoutComponentMatcher.mjs +1 -0
- package/dist/runtime/nativeBridge.mjs +1 -0
- package/dist/runtime/noSetData.d.mts +5 -0
- package/dist/runtime/noSetData.mjs +1 -0
- package/dist/runtime/pageEnvironment.d.mts +50 -0
- package/dist/runtime/pageEnvironment.mjs +1 -0
- package/dist/runtime/pageLayout.d.mts +26 -0
- package/dist/runtime/pageLayout.mjs +1 -0
- package/dist/runtime/pageScroll.d.mts +29 -0
- package/dist/runtime/pageScroll.mjs +1 -0
- package/dist/runtime/platform.mjs +1 -0
- package/dist/runtime/provide.d.mts +59 -0
- package/dist/runtime/provide.mjs +1 -0
- package/dist/runtime/provideContext.mjs +1 -0
- package/dist/runtime/provideStore.d.mts +7 -0
- package/dist/runtime/provideStore.mjs +1 -0
- package/dist/runtime/pullDownRefresh.d.mts +12 -0
- package/dist/runtime/pullDownRefresh.mjs +1 -0
- package/dist/runtime/register/app.d.mts +14 -0
- package/dist/runtime/register/app.mjs +1 -0
- package/dist/runtime/register/component/features.mjs +1 -0
- package/dist/runtime/register/component/lifecycle/optionalHooks.mjs +1 -0
- package/dist/runtime/register/component/lifecycle/platform.mjs +1 -0
- package/dist/runtime/register/component/lifecycle.mjs +1 -0
- package/dist/runtime/register/component/methods.mjs +1 -0
- package/dist/runtime/register/component/options.mjs +1 -0
- package/dist/runtime/register/component/props.mjs +1 -0
- package/dist/runtime/register/component/registerDefinition.mjs +1 -0
- package/dist/runtime/register/component.d.mts +15 -0
- package/dist/runtime/register/component.mjs +1 -0
- package/dist/runtime/register/inline.d.mts +15 -0
- package/dist/runtime/register/inline.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/methodBridge.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/provideContext.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/setupContext.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/setupPhase.mjs +1 -0
- package/dist/runtime/register/runtimeInstance/utils.mjs +1 -0
- package/dist/runtime/register/runtimeInstance.d.mts +26 -0
- package/dist/runtime/register/runtimeInstance.mjs +1 -0
- package/dist/runtime/register/setDataFrequencyWarning.mjs +1 -0
- package/dist/runtime/register/setup.d.mts +11 -0
- package/dist/runtime/register/setup.mjs +1 -0
- package/dist/runtime/register/snapshot.mjs +1 -0
- package/dist/runtime/register/watch.d.mts +12 -0
- package/dist/runtime/register/watch.mjs +1 -0
- package/dist/runtime/register.d.mts +5 -0
- package/dist/runtime/scopedSlots.mjs +1 -0
- package/dist/runtime/selectorQuery.d.mts +54 -0
- package/dist/runtime/selectorQuery.mjs +1 -0
- package/dist/runtime/setupTracking.mjs +1 -0
- package/dist/{template-DE8e5dj_.d.mts → runtime/template.d.mts} +1 -1
- package/dist/runtime/template.mjs +1 -0
- package/dist/runtime/templateRefTypes.d.mts +7 -0
- package/dist/runtime/templateRefs/helpers.mjs +1 -0
- package/dist/runtime/templateRefs.d.mts +11 -0
- package/dist/runtime/templateRefs.mjs +1 -0
- package/dist/runtime/types/core.d.mts +35 -0
- package/dist/runtime/types/miniprogram.d.mts +80 -0
- package/dist/runtime/types/miniprogramHost.d.mts +44 -0
- package/dist/runtime/types/miniprogramHostSources.d.mts +112 -0
- package/dist/runtime/types/options.d.mts +136 -0
- package/dist/runtime/types/props/propTypes.d.mts +79 -0
- package/dist/runtime/types/props/router.d.mts +51 -0
- package/dist/runtime/types/props/setup.d.mts +96 -0
- package/dist/runtime/types/props.d.mts +4 -0
- package/dist/runtime/types/runtime.d.mts +59 -0
- package/dist/runtime/types/setData.d.mts +220 -0
- package/dist/runtime/types.d.mts +28 -0
- package/dist/runtime/uniAppHost.d.mts +8 -0
- package/dist/runtime/uniAppHost.mjs +1 -0
- package/dist/runtime/updatePerformance.d.mts +13 -0
- package/dist/runtime/updatePerformance.mjs +1 -0
- package/dist/runtime/use.d.mts +13 -0
- package/dist/runtime/use.mjs +1 -0
- package/dist/runtime/vueCompat/context.d.mts +8 -0
- package/dist/runtime/vueCompat/context.mjs +1 -0
- package/dist/runtime/vueCompat/model.d.mts +30 -0
- package/dist/runtime/vueCompat/model.mjs +1 -0
- package/dist/runtime/vueCompat/router.d.mts +28 -0
- package/dist/runtime/vueCompat/router.mjs +1 -0
- package/dist/runtime/vueCompat/templateRef.d.mts +9 -0
- package/dist/runtime/vueCompat/templateRef.mjs +1 -0
- package/dist/runtime/vueCompat.d.mts +5 -0
- package/dist/scheduler.d.mts +4 -0
- package/dist/scheduler.mjs +1 -0
- package/dist/store/actions.mjs +1 -0
- package/dist/store/base.mjs +1 -0
- package/dist/store/define/optionsStyle.mjs +1 -0
- package/dist/store/define/setupStyle.mjs +1 -0
- package/dist/store/define/shared.mjs +1 -0
- package/dist/store/define.d.mts +26 -0
- package/dist/store/define.mjs +1 -0
- package/dist/store/manager.d.mts +8 -0
- package/dist/store/manager.mjs +1 -0
- package/dist/store/storeToRefs.d.mts +13 -0
- package/dist/store/storeToRefs.mjs +1 -0
- package/dist/store/types.d.mts +70 -0
- package/dist/store/utils.mjs +1 -0
- package/dist/store.d.mts +4 -1
- package/dist/store.mjs +1 -1
- package/dist/utils.mjs +1 -0
- package/dist/version.d.mts +4 -0
- package/dist/version.mjs +1 -0
- package/dist/vue-augment.d.mts +6 -0
- package/dist/vue-demi.d.mts +68 -10
- package/dist/vue-demi.mjs +1 -1
- package/dist/vue-types.d.mts +18 -0
- package/dist/weappIntrinsicElements/base.d.mts +22 -0
- package/dist/weappIntrinsicElements/elements/ad-custom.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/ad.d.mts +16 -0
- package/dist/weappIntrinsicElements/elements/audio.d.mts +20 -0
- package/dist/weappIntrinsicElements/elements/block.d.mts +8 -0
- package/dist/weappIntrinsicElements/elements/button.d.mts +40 -0
- package/dist/weappIntrinsicElements/elements/camera.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/canvas.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/checkbox-group.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/checkbox.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/cover-image.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/cover-view.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/editor.d.mts +22 -0
- package/dist/weappIntrinsicElements/elements/form.d.mts +16 -0
- package/dist/weappIntrinsicElements/elements/functional-page-navigator.d.mts +15 -0
- package/dist/weappIntrinsicElements/elements/icon.d.mts +12 -0
- package/dist/weappIntrinsicElements/elements/image.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/import.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/include.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/input.d.mts +47 -0
- package/dist/weappIntrinsicElements/elements/keyboard-accessory.d.mts +8 -0
- package/dist/weappIntrinsicElements/elements/label.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/live-player.d.mts +35 -0
- package/dist/weappIntrinsicElements/elements/live-pusher.d.mts +57 -0
- package/dist/weappIntrinsicElements/elements/map.d.mts +105 -0
- package/dist/weappIntrinsicElements/elements/match-media.d.mts +16 -0
- package/dist/weappIntrinsicElements/elements/movable-area.d.mts +26 -0
- package/dist/weappIntrinsicElements/elements/movable-view.d.mts +26 -0
- package/dist/weappIntrinsicElements/elements/navigation-bar.d.mts +15 -0
- package/dist/weappIntrinsicElements/elements/navigator.d.mts +25 -0
- package/dist/weappIntrinsicElements/elements/official-account.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/open-data.d.mts +15 -0
- package/dist/weappIntrinsicElements/elements/page-container.d.mts +25 -0
- package/dist/weappIntrinsicElements/elements/page-meta.d.mts +23 -0
- package/dist/weappIntrinsicElements/elements/picker-view-column.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/picker-view.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/picker.d.mts +23 -0
- package/dist/weappIntrinsicElements/elements/progress.d.mts +21 -0
- package/dist/weappIntrinsicElements/elements/radio-group.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/radio.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/rich-text.d.mts +17 -0
- package/dist/weappIntrinsicElements/elements/scroll-view.d.mts +68 -0
- package/dist/weappIntrinsicElements/elements/share-element.d.mts +18 -0
- package/dist/weappIntrinsicElements/elements/slider.d.mts +23 -0
- package/dist/weappIntrinsicElements/elements/slot.d.mts +10 -0
- package/dist/weappIntrinsicElements/elements/swiper-item.d.mts +42 -0
- package/dist/weappIntrinsicElements/elements/swiper.d.mts +42 -0
- package/dist/weappIntrinsicElements/elements/switch.d.mts +14 -0
- package/dist/weappIntrinsicElements/elements/template.d.mts +12 -0
- package/dist/weappIntrinsicElements/elements/text.d.mts +15 -0
- package/dist/weappIntrinsicElements/elements/textarea.d.mts +40 -0
- package/dist/weappIntrinsicElements/elements/video.d.mts +71 -0
- package/dist/weappIntrinsicElements/elements/view.d.mts +13 -0
- package/dist/weappIntrinsicElements/elements/voip-room.d.mts +14 -0
- package/dist/weappIntrinsicElements/elements/web-view.d.mts +13 -0
- package/dist/weappIntrinsicElements.d.mts +153 -0
- package/package.json +6 -6
- package/dist/base-BxKbbKVO.mjs +0 -1
- package/dist/computed-Xoi9XEUx.mjs +0 -1
- package/dist/dev/base-CYkvI7w8.mjs.map +0 -1
- package/dist/dev/computed-BxRsUJgi.mjs.map +0 -1
- package/dist/dev/ref-DRZC3Kc5.mjs +0 -695
- package/dist/dev/ref-DRZC3Kc5.mjs.map +0 -1
- package/dist/dev/rolldown-runtime-BUUfjzRC.mjs +0 -36
- package/dist/dev/router-D0JQfgyN.mjs +0 -754
- package/dist/dev/router-D0JQfgyN.mjs.map +0 -1
- package/dist/dev/router.mjs.map +0 -1
- package/dist/dev/store-HNsiQJ4d.mjs +0 -479
- package/dist/dev/store-HNsiQJ4d.mjs.map +0 -1
- package/dist/dev/template-n_iVr0ey.mjs.map +0 -1
- package/dist/dev/templateRef-BLnYcEH0.mjs +0 -6439
- package/dist/dev/templateRef-BLnYcEH0.mjs.map +0 -1
- package/dist/dev/toRefs-D06VmFK2.mjs.map +0 -1
- package/dist/dev/watch-jrgL5ald.mjs +0 -445
- package/dist/dev/watch-jrgL5ald.mjs.map +0 -1
- package/dist/index-BiHILcmb.d.mts +0 -1215
- package/dist/index-CCET_bCY.d.mts +0 -111
- package/dist/ref-D37CknuD.mjs +0 -1
- package/dist/rolldown-runtime-CenpyGzJ.mjs +0 -1
- package/dist/router-D4W4lEXM.mjs +0 -1
- package/dist/store-eHrHBQiv.mjs +0 -1
- package/dist/template-CNzlwH-E.mjs +0 -1
- package/dist/templateRef-DOTHWzZ5.mjs +0 -1
- package/dist/toRefs-CoytPyo0.mjs +0 -1
- package/dist/traverse-B4Ez44Gd.d.mts +0 -108
- package/dist/vue-types-B3N60cGV.d.mts +0 -757
- package/dist/watch-Bbd-gmEg.mjs +0 -1
- package/dist/weappIntrinsicElements-BgDtC53_.d.mts +0 -1257
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { mutationRecorders } from "./mutation.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/reactivity/reactive/patchState.ts
|
|
4
|
+
const rawRootMap = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
const rawVersionMap = /* @__PURE__ */ new WeakMap();
|
|
6
|
+
const rawParentMap = /* @__PURE__ */ new WeakMap();
|
|
7
|
+
const rawParentsMap = /* @__PURE__ */ new WeakMap();
|
|
8
|
+
const rawMultiParentSet = /* @__PURE__ */ new WeakSet();
|
|
9
|
+
const rawPathMap = /* @__PURE__ */ new WeakMap();
|
|
10
|
+
const rootPatchNodesMap = /* @__PURE__ */ new WeakMap();
|
|
11
|
+
function getRootPatchNodes(root) {
|
|
12
|
+
let nodes = rootPatchNodesMap.get(root);
|
|
13
|
+
if (!nodes) {
|
|
14
|
+
nodes = /* @__PURE__ */ new Set();
|
|
15
|
+
rootPatchNodesMap.set(root, nodes);
|
|
16
|
+
}
|
|
17
|
+
return nodes;
|
|
18
|
+
}
|
|
19
|
+
function indexPatchNode(root, node) {
|
|
20
|
+
getRootPatchNodes(root).add(node);
|
|
21
|
+
}
|
|
22
|
+
function bumpRawVersion(target) {
|
|
23
|
+
var _rawVersionMap$get;
|
|
24
|
+
rawVersionMap.set(target, ((_rawVersionMap$get = rawVersionMap.get(target)) !== null && _rawVersionMap$get !== void 0 ? _rawVersionMap$get : 0) + 1);
|
|
25
|
+
}
|
|
26
|
+
function getRawVersion(target) {
|
|
27
|
+
var _rawVersionMap$get2;
|
|
28
|
+
return (_rawVersionMap$get2 = rawVersionMap.get(target)) !== null && _rawVersionMap$get2 !== void 0 ? _rawVersionMap$get2 : 0;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 将尚未归属父状态树的响应式节点接入父级根节点。
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
function adoptReactiveRoot(child, parent) {
|
|
35
|
+
var _rawRootMap$get;
|
|
36
|
+
const parentRoot = (_rawRootMap$get = rawRootMap.get(parent)) !== null && _rawRootMap$get !== void 0 ? _rawRootMap$get : parent;
|
|
37
|
+
const existingRoot = rawRootMap.get(child);
|
|
38
|
+
if (!existingRoot || existingRoot === child || existingRoot === parent) rawRootMap.set(child, parentRoot);
|
|
39
|
+
}
|
|
40
|
+
function bumpAncestorVersions(target) {
|
|
41
|
+
const visited = /* @__PURE__ */ new Set();
|
|
42
|
+
const stack = [target];
|
|
43
|
+
for (let i = 0; i < 2e3 && stack.length; i++) {
|
|
44
|
+
const current = stack.pop();
|
|
45
|
+
const parents = rawParentsMap.get(current);
|
|
46
|
+
if (!parents) continue;
|
|
47
|
+
for (const parent of parents.keys()) {
|
|
48
|
+
if (visited.has(parent)) continue;
|
|
49
|
+
visited.add(parent);
|
|
50
|
+
bumpRawVersion(parent);
|
|
51
|
+
stack.push(parent);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function refreshPathUniqueness(child) {
|
|
56
|
+
const parents = rawParentsMap.get(child);
|
|
57
|
+
if (!parents) {
|
|
58
|
+
rawMultiParentSet.delete(child);
|
|
59
|
+
rawParentMap.delete(child);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
let uniqueParent;
|
|
63
|
+
let uniqueKey;
|
|
64
|
+
let total = 0;
|
|
65
|
+
for (const [parent, keys] of parents) {
|
|
66
|
+
for (const k of keys) {
|
|
67
|
+
total += 1;
|
|
68
|
+
if (total > 1) break;
|
|
69
|
+
uniqueParent = parent;
|
|
70
|
+
uniqueKey = k;
|
|
71
|
+
}
|
|
72
|
+
if (total > 1) break;
|
|
73
|
+
}
|
|
74
|
+
if (total === 1 && uniqueParent && uniqueKey) {
|
|
75
|
+
rawMultiParentSet.delete(child);
|
|
76
|
+
rawParentMap.set(child, {
|
|
77
|
+
parent: uniqueParent,
|
|
78
|
+
key: uniqueKey
|
|
79
|
+
});
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
rawMultiParentSet.add(child);
|
|
83
|
+
rawParentMap.delete(child);
|
|
84
|
+
}
|
|
85
|
+
function recordParentLink(child, parent, key) {
|
|
86
|
+
if (typeof key !== "string") {
|
|
87
|
+
rawMultiParentSet.add(child);
|
|
88
|
+
rawParentMap.delete(child);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (mutationRecorders.size) {
|
|
92
|
+
var _rawRootMap$get2;
|
|
93
|
+
const root = (_rawRootMap$get2 = rawRootMap.get(parent)) !== null && _rawRootMap$get2 !== void 0 ? _rawRootMap$get2 : parent;
|
|
94
|
+
indexPatchNode(root, parent);
|
|
95
|
+
indexPatchNode(root, child);
|
|
96
|
+
}
|
|
97
|
+
let parents = rawParentsMap.get(child);
|
|
98
|
+
if (!parents) {
|
|
99
|
+
parents = /* @__PURE__ */ new Map();
|
|
100
|
+
rawParentsMap.set(child, parents);
|
|
101
|
+
}
|
|
102
|
+
let keys = parents.get(parent);
|
|
103
|
+
if (!keys) {
|
|
104
|
+
keys = /* @__PURE__ */ new Set();
|
|
105
|
+
parents.set(parent, keys);
|
|
106
|
+
}
|
|
107
|
+
keys.add(key);
|
|
108
|
+
refreshPathUniqueness(child);
|
|
109
|
+
}
|
|
110
|
+
function removeParentLink(child, parent, key) {
|
|
111
|
+
const parents = rawParentsMap.get(child);
|
|
112
|
+
if (!parents) return;
|
|
113
|
+
const keys = parents.get(parent);
|
|
114
|
+
if (!keys) return;
|
|
115
|
+
keys.delete(key);
|
|
116
|
+
if (!keys.size) parents.delete(parent);
|
|
117
|
+
if (!parents.size) rawParentsMap.delete(child);
|
|
118
|
+
refreshPathUniqueness(child);
|
|
119
|
+
}
|
|
120
|
+
function resolvePathToTarget(root, target) {
|
|
121
|
+
if (target === root) return [];
|
|
122
|
+
if (rawMultiParentSet.has(target)) return;
|
|
123
|
+
const segments = [];
|
|
124
|
+
let current = target;
|
|
125
|
+
for (let i = 0; i < 2e3; i++) {
|
|
126
|
+
if (current === root) return segments.reverse();
|
|
127
|
+
if (rawMultiParentSet.has(current)) return;
|
|
128
|
+
const info = rawParentMap.get(current);
|
|
129
|
+
if (!info) return;
|
|
130
|
+
if (typeof info.key !== "string") return;
|
|
131
|
+
segments.push(info.key);
|
|
132
|
+
current = info.parent;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
//#endregion
|
|
137
|
+
export { adoptReactiveRoot, bumpAncestorVersions, bumpRawVersion, getRawVersion, indexPatchNode, rawMultiParentSet, rawParentMap, rawParentsMap, rawPathMap, rawRootMap, rawVersionMap, recordParentLink, removeParentLink, resolvePathToTarget, rootPatchNodesMap };
|
|
138
|
+
//# sourceMappingURL=patchState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchState.mjs","names":[],"sources":["../../../../src/reactivity/reactive/patchState.ts"],"sourcesContent":["import { mutationRecorders } from './mutation'\n\nexport const rawRootMap = new WeakMap<object, object>()\nexport const rawVersionMap = new WeakMap<object, number>()\nexport const rawParentMap = new WeakMap<object, { parent: object, key: PropertyKey }>()\nexport const rawParentsMap = new WeakMap<object, Map<object, Set<PropertyKey>>>()\nexport const rawMultiParentSet = new WeakSet<object>()\nexport const rawPathMap = new WeakMap<object, string>()\nexport const rootPatchNodesMap = new WeakMap<object, Set<object>>()\n\nfunction getRootPatchNodes(root: object) {\n let nodes = rootPatchNodesMap.get(root)\n if (!nodes) {\n nodes = new Set()\n rootPatchNodesMap.set(root, nodes)\n }\n return nodes\n}\n\nexport function indexPatchNode(root: object, node: object) {\n getRootPatchNodes(root).add(node)\n}\n\nexport function bumpRawVersion(target: object) {\n rawVersionMap.set(target, (rawVersionMap.get(target) ?? 0) + 1)\n}\n\nexport function getRawVersion(target: object) {\n return rawVersionMap.get(target) ?? 0\n}\n\n/**\n * 将尚未归属父状态树的响应式节点接入父级根节点。\n * @internal\n */\nexport function adoptReactiveRoot(child: object, parent: object) {\n const parentRoot = rawRootMap.get(parent) ?? parent\n const existingRoot = rawRootMap.get(child)\n if (!existingRoot || existingRoot === child || existingRoot === parent) {\n rawRootMap.set(child, parentRoot)\n }\n}\n\nexport function bumpAncestorVersions(target: object) {\n const visited = new Set<object>()\n const stack: object[] = [target]\n for (let i = 0; i < 2000 && stack.length; i++) {\n const current = stack.pop()!\n const parents = rawParentsMap.get(current)\n if (!parents) {\n continue\n }\n for (const parent of parents.keys()) {\n if (visited.has(parent)) {\n continue\n }\n visited.add(parent)\n bumpRawVersion(parent)\n stack.push(parent)\n }\n }\n}\n\nfunction refreshPathUniqueness(child: object) {\n const parents = rawParentsMap.get(child)\n if (!parents) {\n rawMultiParentSet.delete(child)\n rawParentMap.delete(child)\n return\n }\n\n let uniqueParent: object | undefined\n let uniqueKey: PropertyKey | undefined\n let total = 0\n for (const [parent, keys] of parents) {\n for (const k of keys) {\n total += 1\n if (total > 1) {\n break\n }\n uniqueParent = parent\n uniqueKey = k\n }\n if (total > 1) {\n break\n }\n }\n\n if (total === 1 && uniqueParent && uniqueKey) {\n rawMultiParentSet.delete(child)\n rawParentMap.set(child, { parent: uniqueParent, key: uniqueKey })\n return\n }\n\n rawMultiParentSet.add(child)\n rawParentMap.delete(child)\n}\n\nexport function recordParentLink(child: object, parent: object, key: PropertyKey) {\n if (typeof key !== 'string') {\n rawMultiParentSet.add(child)\n rawParentMap.delete(child)\n return\n }\n\n if (mutationRecorders.size) {\n const root = rawRootMap.get(parent) ?? parent\n indexPatchNode(root, parent)\n indexPatchNode(root, child)\n }\n\n let parents = rawParentsMap.get(child)\n if (!parents) {\n parents = new Map()\n rawParentsMap.set(child, parents)\n }\n\n let keys = parents.get(parent)\n if (!keys) {\n keys = new Set()\n parents.set(parent, keys)\n }\n\n keys.add(key)\n refreshPathUniqueness(child)\n}\n\nexport function removeParentLink(child: object, parent: object, key: PropertyKey) {\n const parents = rawParentsMap.get(child)\n if (!parents) {\n return\n }\n const keys = parents.get(parent)\n if (!keys) {\n return\n }\n keys.delete(key)\n if (!keys.size) {\n parents.delete(parent)\n }\n if (!parents.size) {\n rawParentsMap.delete(child)\n }\n refreshPathUniqueness(child)\n}\n\nexport function resolvePathToTarget(root: object, target: object): string[] | undefined {\n if (target === root) {\n return []\n }\n if (rawMultiParentSet.has(target)) {\n return undefined\n }\n const segments: string[] = []\n let current: object = target\n for (let i = 0; i < 2000; i++) {\n if (current === root) {\n return segments.reverse()\n }\n if (rawMultiParentSet.has(current)) {\n return undefined\n }\n const info = rawParentMap.get(current)\n if (!info) {\n return undefined\n }\n if (typeof info.key !== 'string') {\n return undefined\n }\n segments.push(info.key)\n current = info.parent\n }\n return undefined\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { track, trigger } from "../core.mjs";
|
|
2
|
+
import { bumpRawVersion, rawVersionMap } from "./patchState.mjs";
|
|
3
|
+
import { VERSION_KEY, getTargetType, hasOwn, isObject, toRaw } from "./shared.mjs";
|
|
4
|
+
import { rawMap, shallowReactiveMap } from "./state.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/reactivity/reactive/shallow.ts
|
|
7
|
+
const shallowHandlers = {
|
|
8
|
+
get(target, key, receiver) {
|
|
9
|
+
if (key === "__r_isReactive") return true;
|
|
10
|
+
if (key === "__r_raw") return target;
|
|
11
|
+
const res = Reflect.get(target, key, receiver);
|
|
12
|
+
track(target, key);
|
|
13
|
+
return res;
|
|
14
|
+
},
|
|
15
|
+
set(target, key, value, receiver) {
|
|
16
|
+
const oldValue = Reflect.get(target, key, receiver);
|
|
17
|
+
const result = Reflect.set(target, key, value, receiver);
|
|
18
|
+
if (!Object.is(oldValue, value)) {
|
|
19
|
+
trigger(target, key);
|
|
20
|
+
trigger(target, VERSION_KEY);
|
|
21
|
+
bumpRawVersion(target);
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
},
|
|
25
|
+
deleteProperty(target, key) {
|
|
26
|
+
const hadKey = hasOwn(target, key);
|
|
27
|
+
const result = Reflect.deleteProperty(target, key);
|
|
28
|
+
if (hadKey && result) {
|
|
29
|
+
trigger(target, key);
|
|
30
|
+
trigger(target, VERSION_KEY);
|
|
31
|
+
bumpRawVersion(target);
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
},
|
|
35
|
+
ownKeys(target) {
|
|
36
|
+
track(target, Symbol.iterator);
|
|
37
|
+
track(target, VERSION_KEY);
|
|
38
|
+
return Reflect.ownKeys(target);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* 创建一个浅层响应式代理:仅跟踪第一层属性变更,不深度递归嵌套对象。
|
|
43
|
+
*
|
|
44
|
+
* @param target 待转换的对象
|
|
45
|
+
* @returns 浅层响应式代理
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* const state = shallowReactive({ nested: { count: 0 } })
|
|
50
|
+
*
|
|
51
|
+
* state.nested.count++ // 不会触发 effect(嵌套对象未深度代理)
|
|
52
|
+
* state.nested = { count: 1 } // 会触发 effect(顶层属性变更)
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
function shallowReactive(target) {
|
|
56
|
+
if (!isObject(target)) return target;
|
|
57
|
+
if (target["__r_isReactive"]) return target;
|
|
58
|
+
const existingProxy = shallowReactiveMap.get(target);
|
|
59
|
+
if (existingProxy) return existingProxy;
|
|
60
|
+
if (getTargetType(target) === 0) return target;
|
|
61
|
+
const proxy = new Proxy(target, shallowHandlers);
|
|
62
|
+
shallowReactiveMap.set(target, proxy);
|
|
63
|
+
rawMap.set(proxy, target);
|
|
64
|
+
if (!rawVersionMap.has(target)) rawVersionMap.set(target, 0);
|
|
65
|
+
return proxy;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 判断一个值是否为 shallowReactive 创建的浅层响应式对象
|
|
69
|
+
*/
|
|
70
|
+
function isShallowReactive(value) {
|
|
71
|
+
const raw = toRaw(value);
|
|
72
|
+
return shallowReactiveMap.has(raw);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//#endregion
|
|
76
|
+
export { isShallowReactive, shallowReactive };
|
|
77
|
+
//# sourceMappingURL=shallow.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shallow.mjs","names":[],"sources":["../../../../src/reactivity/reactive/shallow.ts"],"sourcesContent":["import { track, trigger } from '../core'\nimport { bumpRawVersion, rawVersionMap } from './patchState'\nimport { getTargetType, hasOwn, isObject, ReactiveFlags, TargetType, toRaw, VERSION_KEY } from './shared'\nimport { rawMap, shallowReactiveMap } from './state'\n\nconst shallowHandlers: ProxyHandler<any> = {\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_REACTIVE) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n track(target, key)\n // 浅层模式:不对嵌套对象做自动响应式转换\n return res\n },\n set(target, key, value, receiver) {\n const oldValue = Reflect.get(target, key, receiver)\n const result = Reflect.set(target, key, value, receiver)\n if (!Object.is(oldValue, value)) {\n trigger(target, key)\n // 浅层同样维护通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n }\n return result\n },\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key)\n const result = Reflect.deleteProperty(target, key)\n if (hadKey && result) {\n trigger(target, key)\n // 删除时也同步通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n }\n return result\n },\n ownKeys(target) {\n track(target, Symbol.iterator)\n // 遍历时订阅通用版本号\n track(target, VERSION_KEY)\n return Reflect.ownKeys(target)\n },\n}\n\n/**\n * 创建一个浅层响应式代理:仅跟踪第一层属性变更,不深度递归嵌套对象。\n *\n * @param target 待转换的对象\n * @returns 浅层响应式代理\n *\n * @example\n * ```ts\n * const state = shallowReactive({ nested: { count: 0 } })\n *\n * state.nested.count++ // 不会触发 effect(嵌套对象未深度代理)\n * state.nested = { count: 1 } // 会触发 effect(顶层属性变更)\n * ```\n */\nexport function shallowReactive<T extends object>(target: T): T {\n if (!isObject(target)) {\n return target\n }\n if ((target as any)[ReactiveFlags.IS_REACTIVE]) {\n return target\n }\n const existingProxy = shallowReactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n if (getTargetType(target) === TargetType.INVALID) {\n return target\n }\n const proxy = new Proxy(target, shallowHandlers)\n shallowReactiveMap.set(target, proxy)\n rawMap.set(proxy, target)\n if (!rawVersionMap.has(target)) {\n rawVersionMap.set(target, 0)\n }\n // 浅层响应式不初始化根映射,避免误导深度版本追踪\n return proxy\n}\n\n/**\n * 判断一个值是否为 shallowReactive 创建的浅层响应式对象\n */\nexport function isShallowReactive(value: unknown): boolean {\n const raw = toRaw(value as any)\n return shallowReactiveMap.has(raw)\n}\n"],"mappings":";;;;;;AAKA,MAAM,kBAAqC;CACzC,IAAI,QAAQ,KAAK,UAAU;EACzB,IAAI,0BACF,OAAO;EAET,IAAI,mBACF,OAAO;EAET,MAAM,MAAM,QAAQ,IAAI,QAAQ,KAAK,QAAQ;EAC7C,MAAM,QAAQ,GAAG;EAEjB,OAAO;CACT;CACA,IAAI,QAAQ,KAAK,OAAO,UAAU;EAChC,MAAM,WAAW,QAAQ,IAAI,QAAQ,KAAK,QAAQ;EAClD,MAAM,SAAS,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ;EACvD,IAAI,CAAC,OAAO,GAAG,UAAU,KAAK,GAAG;GAC/B,QAAQ,QAAQ,GAAG;GAEnB,QAAQ,QAAQ,WAAW;GAC3B,eAAe,MAAM;EACvB;EACA,OAAO;CACT;CACA,eAAe,QAAQ,KAAK;EAC1B,MAAM,SAAS,OAAO,QAAQ,GAAG;EACjC,MAAM,SAAS,QAAQ,eAAe,QAAQ,GAAG;EACjD,IAAI,UAAU,QAAQ;GACpB,QAAQ,QAAQ,GAAG;GAEnB,QAAQ,QAAQ,WAAW;GAC3B,eAAe,MAAM;EACvB;EACA,OAAO;CACT;CACA,QAAQ,QAAQ;EACd,MAAM,QAAQ,OAAO,QAAQ;EAE7B,MAAM,QAAQ,WAAW;EACzB,OAAO,QAAQ,QAAQ,MAAM;CAC/B;AACF;;;;;;;;;;;;;;;AAgBA,SAAgB,gBAAkC,QAAc;CAC9D,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO;CAET,IAAK,0BACH,OAAO;CAET,MAAM,gBAAgB,mBAAmB,IAAI,MAAM;CACnD,IAAI,eACF,OAAO;CAET,IAAI,cAAc,MAAM,SACtB,OAAO;CAET,MAAM,QAAQ,IAAI,MAAM,QAAQ,eAAe;CAC/C,mBAAmB,IAAI,QAAQ,KAAK;CACpC,OAAO,IAAI,OAAO,MAAM;CACxB,IAAI,CAAC,cAAc,IAAI,MAAM,GAC3B,cAAc,IAAI,QAAQ,CAAC;CAG7B,OAAO;AACT;;;;AAKA,SAAgB,kBAAkB,OAAyB;CACzD,MAAM,MAAM,MAAM,KAAY;CAC9B,OAAO,mBAAmB,IAAI,GAAG;AACnC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/reactivity/reactive/shared.ts
|
|
2
|
+
function isObject(value) {
|
|
3
|
+
return typeof value === "object" && value !== null;
|
|
4
|
+
}
|
|
5
|
+
function hasOwn(source, key) {
|
|
6
|
+
return Object.prototype.hasOwnProperty.call(source, key);
|
|
7
|
+
}
|
|
8
|
+
function toRawType(value) {
|
|
9
|
+
return Object.prototype.toString.call(value).slice(8, -1);
|
|
10
|
+
}
|
|
11
|
+
function targetTypeMap(rawType) {
|
|
12
|
+
switch (rawType) {
|
|
13
|
+
case "Object":
|
|
14
|
+
case "Array": return 1;
|
|
15
|
+
case "Map":
|
|
16
|
+
case "Set":
|
|
17
|
+
case "WeakMap":
|
|
18
|
+
case "WeakSet": return 0;
|
|
19
|
+
default: return 0;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function getTargetType(value) {
|
|
23
|
+
return value["__r_skip"] ? 0 : targetTypeMap(toRawType(value));
|
|
24
|
+
}
|
|
25
|
+
const VERSION_KEY = Symbol("wevu.version");
|
|
26
|
+
function isArrayIndexKey(key) {
|
|
27
|
+
if (!key) return false;
|
|
28
|
+
const code0 = key.charCodeAt(0);
|
|
29
|
+
if (code0 < 48 || code0 > 57) return false;
|
|
30
|
+
const n = Number(key);
|
|
31
|
+
return Number.isInteger(n) && n >= 0 && String(n) === key;
|
|
32
|
+
}
|
|
33
|
+
function toRaw(observed) {
|
|
34
|
+
var _ReactiveFlags$RAW;
|
|
35
|
+
return (_ReactiveFlags$RAW = observed === null || observed === void 0 ? void 0 : observed["__r_raw"]) !== null && _ReactiveFlags$RAW !== void 0 ? _ReactiveFlags$RAW : observed;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
export { VERSION_KEY, getTargetType, hasOwn, isArrayIndexKey, isObject, toRaw, toRawType };
|
|
40
|
+
//# sourceMappingURL=shared.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.mjs","names":[],"sources":["../../../../src/reactivity/reactive/shared.ts"],"sourcesContent":["export enum ReactiveFlags {\n IS_REACTIVE = '__r_isReactive',\n IS_READONLY = '__r_isReadonly',\n RAW = '__r_raw',\n SKIP = '__r_skip', // 标记此对象无需转换为响应式(用于 markRaw)\n}\n\nexport enum TargetType {\n INVALID = 0,\n COMMON = 1,\n}\n\nexport function isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null\n}\n\nexport function hasOwn(source: object, key: PropertyKey) {\n return Object.prototype.hasOwnProperty.call(source, key)\n}\n\nexport function toRawType(value: unknown) {\n return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nfunction targetTypeMap(rawType: string) {\n switch (rawType) {\n case 'Object':\n case 'Array':\n return TargetType.COMMON\n case 'Map':\n case 'Set':\n case 'WeakMap':\n case 'WeakSet':\n // TODO: 后续如需支持集合响应式,需要引入专门的 collection handlers。\n return TargetType.INVALID\n default:\n return TargetType.INVALID\n }\n}\n\nexport function getTargetType(value: object) {\n return (value as any)[ReactiveFlags.SKIP]\n ? TargetType.INVALID\n : targetTypeMap(toRawType(value))\n}\n\n// 版本键(VERSION_KEY)表示“任意字段发生变化”,用于订阅整体版本避免深度遍历跟踪\nexport const VERSION_KEY: unique symbol = Symbol('wevu.version')\n\nexport function isArrayIndexKey(key: string) {\n if (!key) {\n return false\n }\n const code0 = key.charCodeAt(0)\n if (code0 < 48 || code0 > 57) {\n return false\n }\n const n = Number(key)\n return Number.isInteger(n) && n >= 0 && String(n) === key\n}\n\nexport function toRaw<T>(observed: T): T {\n return ((observed as any)?.[ReactiveFlags.RAW] ?? observed) as T\n}\n"],"mappings":";AAYA,SAAgB,SAAS,OAAiC;CACxD,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAgB,OAAO,QAAgB,KAAkB;CACvD,OAAO,OAAO,UAAU,eAAe,KAAK,QAAQ,GAAG;AACzD;AAEA,SAAgB,UAAU,OAAgB;CACxC,OAAO,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AAC1D;AAEA,SAAS,cAAc,SAAiB;CACtC,QAAQ,SAAR;EACE,KAAK;EACL,KAAK,SACH;EACF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WAEH;EACF,SACE;CACJ;AACF;AAEA,SAAgB,cAAc,OAAe;CAC3C,OAAQ,wBAEJ,cAAc,UAAU,KAAK,CAAC;AACpC;AAGA,MAAa,cAA6B,OAAO,cAAc;AAE/D,SAAgB,gBAAgB,KAAa;CAC3C,IAAI,CAAC,KACH,OAAO;CAET,MAAM,QAAQ,IAAI,WAAW,CAAC;CAC9B,IAAI,QAAQ,MAAM,QAAQ,IACxB,OAAO;CAET,MAAM,IAAI,OAAO,GAAG;CACpB,OAAO,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,OAAO,CAAC,MAAM;AACxD;AAEA,SAAgB,MAAS,UAAgB;;CACvC,iFAAS,sFAAyC;AACpD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/reactivity/reactive/state.ts
|
|
2
|
+
const reactiveMap = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
const rawMap = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { rawMap, reactiveMap, shallowReactiveMap };
|
|
8
|
+
//# sourceMappingURL=state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.mjs","names":[],"sources":["../../../../src/reactivity/reactive/state.ts"],"sourcesContent":["export const reactiveMap = new WeakMap<object, any>()\nexport const rawMap = new WeakMap<any, object>()\nexport const shallowReactiveMap = new WeakMap<object, any>()\n"],"mappings":";AAAA,MAAa,8BAAc,IAAI,QAAqB;AACpD,MAAa,yBAAS,IAAI,QAAqB;AAC/C,MAAa,qCAAqB,IAAI,QAAqB"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { track, trigger } from "./core.mjs";
|
|
2
|
+
import { addMutationRecorder, mutationRecorders, removeMutationRecorder } from "./reactive/mutation.mjs";
|
|
3
|
+
import { adoptReactiveRoot, bumpAncestorVersions, bumpRawVersion, getRawVersion, rawMultiParentSet, rawParentsMap, rawPathMap, rawRootMap, rawVersionMap, recordParentLink, removeParentLink, resolvePathToTarget } from "./reactive/patchState.mjs";
|
|
4
|
+
import { VERSION_KEY, getTargetType, hasOwn, isArrayIndexKey, isObject, toRaw } from "./reactive/shared.mjs";
|
|
5
|
+
import { rawMap, reactiveMap } from "./reactive/state.mjs";
|
|
6
|
+
import { clearPatchIndices, prelinkReactiveTree, touchReactive } from "./reactive/patch.mjs";
|
|
7
|
+
import { isShallowReactive, shallowReactive } from "./reactive/shallow.mjs";
|
|
8
|
+
|
|
9
|
+
//#region src/reactivity/reactive.ts
|
|
10
|
+
/**
|
|
11
|
+
* 读取响应式版本号(框架内部调试能力)。
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
function getReactiveVersion(target) {
|
|
15
|
+
const raw = toRaw(target);
|
|
16
|
+
return getRawVersion(raw);
|
|
17
|
+
}
|
|
18
|
+
function emitMutation(target, key, op) {
|
|
19
|
+
var _rawRootMap$get;
|
|
20
|
+
if (!mutationRecorders.size) return;
|
|
21
|
+
if (typeof key !== "string") return;
|
|
22
|
+
if (key.startsWith("__r_")) return;
|
|
23
|
+
const root = (_rawRootMap$get = rawRootMap.get(target)) !== null && _rawRootMap$get !== void 0 ? _rawRootMap$get : target;
|
|
24
|
+
const kind = Array.isArray(target) && (key === "length" || isArrayIndexKey(key)) ? "array" : "property";
|
|
25
|
+
const baseSegments = resolvePathToTarget(root, target);
|
|
26
|
+
if (!baseSegments) {
|
|
27
|
+
const fallback = /* @__PURE__ */ new Set();
|
|
28
|
+
const parents = rawParentsMap.get(target);
|
|
29
|
+
if (parents) for (const [parent, keys] of parents) {
|
|
30
|
+
var _resolvePathToTarget;
|
|
31
|
+
const parentPath = rawPathMap.get(parent);
|
|
32
|
+
const topFromParentPath = parentPath ? parentPath.split(".", 1)[0] : void 0;
|
|
33
|
+
const topFromResolve = !topFromParentPath ? (_resolvePathToTarget = resolvePathToTarget(root, parent)) === null || _resolvePathToTarget === void 0 ? void 0 : _resolvePathToTarget[0] : void 0;
|
|
34
|
+
for (const k of keys) {
|
|
35
|
+
var _ref;
|
|
36
|
+
if (typeof k !== "string") continue;
|
|
37
|
+
fallback.add((_ref = topFromParentPath !== null && topFromParentPath !== void 0 ? topFromParentPath : topFromResolve) !== null && _ref !== void 0 ? _ref : k);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else fallback.add(key);
|
|
41
|
+
for (const recorder of mutationRecorders) recorder({
|
|
42
|
+
root,
|
|
43
|
+
kind,
|
|
44
|
+
op,
|
|
45
|
+
path: void 0,
|
|
46
|
+
fallbackTopKeys: fallback.size ? [...fallback] : void 0
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const arrayIndexPos = baseSegments.findIndex((seg) => isArrayIndexKey(seg));
|
|
51
|
+
if (arrayIndexPos !== -1) {
|
|
52
|
+
const path = baseSegments.slice(0, arrayIndexPos).join(".") || void 0;
|
|
53
|
+
for (const recorder of mutationRecorders) recorder({
|
|
54
|
+
root,
|
|
55
|
+
kind: "array",
|
|
56
|
+
op,
|
|
57
|
+
path
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const basePath = baseSegments.length ? baseSegments.join(".") : "";
|
|
62
|
+
const path = kind === "array" ? basePath || void 0 : basePath ? `${basePath}.${key}` : key;
|
|
63
|
+
for (const recorder of mutationRecorders) recorder({
|
|
64
|
+
root,
|
|
65
|
+
kind,
|
|
66
|
+
op,
|
|
67
|
+
path
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const mutableHandlers = {
|
|
71
|
+
get(target, key, receiver) {
|
|
72
|
+
if (key === "__r_isReactive") return true;
|
|
73
|
+
if (key === "__r_raw") return target;
|
|
74
|
+
const res = Reflect.get(target, key, receiver);
|
|
75
|
+
track(target, key);
|
|
76
|
+
if (isObject(res)) {
|
|
77
|
+
var _ReactiveFlags$RAW;
|
|
78
|
+
if (res["__r_skip"]) return res;
|
|
79
|
+
const childRaw = (_ReactiveFlags$RAW = res === null || res === void 0 ? void 0 : res["__r_raw"]) !== null && _ReactiveFlags$RAW !== void 0 ? _ReactiveFlags$RAW : res;
|
|
80
|
+
adoptReactiveRoot(childRaw, target);
|
|
81
|
+
recordParentLink(childRaw, target, key);
|
|
82
|
+
const parentPath = rawPathMap.get(target);
|
|
83
|
+
if (mutationRecorders.size && typeof key === "string" && parentPath != null && !rawMultiParentSet.has(childRaw)) {
|
|
84
|
+
const nextPath = parentPath ? `${parentPath}.${key}` : key;
|
|
85
|
+
rawPathMap.set(childRaw, nextPath);
|
|
86
|
+
}
|
|
87
|
+
return reactive(res);
|
|
88
|
+
}
|
|
89
|
+
return res;
|
|
90
|
+
},
|
|
91
|
+
set(target, key, value, receiver) {
|
|
92
|
+
const isArr = Array.isArray(target);
|
|
93
|
+
const oldLength = isArr ? target.length : 0;
|
|
94
|
+
const oldValue = Reflect.get(target, key, receiver);
|
|
95
|
+
const oldRawValue = isObject(oldValue) ? toRaw(oldValue) : oldValue;
|
|
96
|
+
const rawValue = isObject(value) ? toRaw(value) : value;
|
|
97
|
+
if (Object.is(oldRawValue, rawValue)) return true;
|
|
98
|
+
const result = Reflect.set(target, key, value, receiver);
|
|
99
|
+
if (result) {
|
|
100
|
+
const oldRaw = isObject(oldRawValue) ? oldRawValue : void 0;
|
|
101
|
+
if (oldRaw) removeParentLink(oldRaw, target, key);
|
|
102
|
+
if (isObject(rawValue) && !rawValue["__r_skip"]) {
|
|
103
|
+
const childRaw = rawValue;
|
|
104
|
+
adoptReactiveRoot(childRaw, target);
|
|
105
|
+
recordParentLink(childRaw, target, key);
|
|
106
|
+
const parentPath = rawPathMap.get(target);
|
|
107
|
+
if (mutationRecorders.size && typeof key === "string" && parentPath != null && !rawMultiParentSet.has(childRaw)) {
|
|
108
|
+
const nextPath = parentPath ? `${parentPath}.${key}` : key;
|
|
109
|
+
rawPathMap.set(childRaw, nextPath);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
trigger(target, key);
|
|
113
|
+
if (isArr && typeof key === "string" && isArrayIndexKey(key) && Number(key) >= oldLength) trigger(target, "length");
|
|
114
|
+
trigger(target, VERSION_KEY);
|
|
115
|
+
bumpRawVersion(target);
|
|
116
|
+
bumpAncestorVersions(target);
|
|
117
|
+
const root = rawRootMap.get(target);
|
|
118
|
+
if (root && root !== target) {
|
|
119
|
+
trigger(root, VERSION_KEY);
|
|
120
|
+
bumpRawVersion(root);
|
|
121
|
+
}
|
|
122
|
+
emitMutation(target, key, "set");
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
125
|
+
},
|
|
126
|
+
deleteProperty(target, key) {
|
|
127
|
+
const hadKey = hasOwn(target, key);
|
|
128
|
+
const oldValue = hadKey ? target[key] : void 0;
|
|
129
|
+
const result = Reflect.deleteProperty(target, key);
|
|
130
|
+
if (hadKey && result) {
|
|
131
|
+
var _ReactiveFlags$RAW2;
|
|
132
|
+
const oldRaw = isObject(oldValue) ? (_ReactiveFlags$RAW2 = oldValue === null || oldValue === void 0 ? void 0 : oldValue["__r_raw"]) !== null && _ReactiveFlags$RAW2 !== void 0 ? _ReactiveFlags$RAW2 : oldValue : void 0;
|
|
133
|
+
if (oldRaw) removeParentLink(oldRaw, target, key);
|
|
134
|
+
trigger(target, key);
|
|
135
|
+
trigger(target, VERSION_KEY);
|
|
136
|
+
bumpRawVersion(target);
|
|
137
|
+
bumpAncestorVersions(target);
|
|
138
|
+
const root = rawRootMap.get(target);
|
|
139
|
+
if (root && root !== target) {
|
|
140
|
+
trigger(root, VERSION_KEY);
|
|
141
|
+
bumpRawVersion(root);
|
|
142
|
+
}
|
|
143
|
+
emitMutation(target, key, "delete");
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
},
|
|
147
|
+
ownKeys(target) {
|
|
148
|
+
track(target, Symbol.iterator);
|
|
149
|
+
track(target, VERSION_KEY);
|
|
150
|
+
return Reflect.ownKeys(target);
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
function reactive(target) {
|
|
154
|
+
if (!isObject(target)) return target;
|
|
155
|
+
if (target["__r_isReactive"]) return target;
|
|
156
|
+
const existingProxy = reactiveMap.get(target);
|
|
157
|
+
if (existingProxy) return existingProxy;
|
|
158
|
+
if (getTargetType(target) === 0) return target;
|
|
159
|
+
const proxy = new Proxy(target, mutableHandlers);
|
|
160
|
+
reactiveMap.set(target, proxy);
|
|
161
|
+
rawMap.set(proxy, target);
|
|
162
|
+
if (!rawVersionMap.has(target)) rawVersionMap.set(target, 0);
|
|
163
|
+
if (!rawRootMap.has(target)) rawRootMap.set(target, target);
|
|
164
|
+
return proxy;
|
|
165
|
+
}
|
|
166
|
+
function isReactive(value) {
|
|
167
|
+
return Boolean(value && value["__r_isReactive"]);
|
|
168
|
+
}
|
|
169
|
+
function convertToReactive(value) {
|
|
170
|
+
return isObject(value) ? reactive(value) : value;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* 标记对象为“原始”状态,后续不会被转换为响应式,返回原对象本身。
|
|
174
|
+
*
|
|
175
|
+
* @param value 需要标记的对象
|
|
176
|
+
* @returns 带有跳过标记的原对象
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```ts
|
|
180
|
+
* const foo = markRaw({
|
|
181
|
+
* nested: {}
|
|
182
|
+
* })
|
|
183
|
+
*
|
|
184
|
+
* const state = reactive({
|
|
185
|
+
* foo
|
|
186
|
+
* })
|
|
187
|
+
*
|
|
188
|
+
* state.foo // 不是响应式对象
|
|
189
|
+
* ```
|
|
190
|
+
*/
|
|
191
|
+
function markRaw(value) {
|
|
192
|
+
if (!isObject(value)) return value;
|
|
193
|
+
Object.defineProperty(value, "__r_skip", {
|
|
194
|
+
value: true,
|
|
195
|
+
configurable: true,
|
|
196
|
+
enumerable: false,
|
|
197
|
+
writable: true
|
|
198
|
+
});
|
|
199
|
+
return value;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* 判断某个值是否被标记为原始(即不应转换为响应式)。
|
|
203
|
+
*
|
|
204
|
+
* @param value 待检测的值
|
|
205
|
+
* @returns 若含有跳过标记则返回 true
|
|
206
|
+
*/
|
|
207
|
+
function isRaw(value) {
|
|
208
|
+
return isObject(value) && "__r_skip" in value;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
//#endregion
|
|
212
|
+
export { addMutationRecorder, clearPatchIndices, convertToReactive, getReactiveVersion, isObject, isRaw, isReactive, isShallowReactive, markRaw, prelinkReactiveTree, reactive, removeMutationRecorder, shallowReactive, toRaw, touchReactive };
|
|
213
|
+
//# sourceMappingURL=reactive.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.mjs","names":[],"sources":["../../../src/reactivity/reactive.ts"],"sourcesContent":["import type { MutationKind, MutationOp } from './reactive/mutation'\nimport { track, trigger } from './core'\nimport { mutationRecorders } from './reactive/mutation'\nimport {\n adoptReactiveRoot,\n bumpAncestorVersions,\n bumpRawVersion,\n getRawVersion,\n rawMultiParentSet,\n rawParentsMap,\n rawPathMap,\n rawRootMap,\n rawVersionMap,\n recordParentLink,\n removeParentLink,\n resolvePathToTarget,\n} from './reactive/patchState'\nimport { getTargetType, hasOwn, isArrayIndexKey, isObject, ReactiveFlags, TargetType, toRaw, VERSION_KEY } from './reactive/shared'\nimport { rawMap, reactiveMap } from './reactive/state'\n\nexport { addMutationRecorder, removeMutationRecorder } from './reactive/mutation'\nexport type { MutationKind, MutationOp, MutationRecord } from './reactive/mutation'\nexport type { PrelinkReactiveTreeOptions } from './reactive/patch'\nexport { clearPatchIndices, prelinkReactiveTree, touchReactive } from './reactive/patch'\nexport { isShallowReactive, shallowReactive } from './reactive/shallow'\nexport { isObject, ReactiveFlags, toRaw } from './reactive/shared'\n\n/**\n * 读取响应式版本号(框架内部调试能力)。\n * @internal\n */\nexport function getReactiveVersion(target: object) {\n const raw = toRaw(target as any) as object\n return getRawVersion(raw)\n}\n\nfunction emitMutation(target: object, key: PropertyKey, op: MutationOp) {\n if (!mutationRecorders.size) {\n return\n }\n if (typeof key !== 'string') {\n return\n }\n if (key.startsWith('__r_')) {\n return\n }\n const root = rawRootMap.get(target) ?? target\n const isArray = Array.isArray(target)\n const kind: MutationKind = isArray && (key === 'length' || isArrayIndexKey(key)) ? 'array' : 'property'\n\n const baseSegments = resolvePathToTarget(root, target)\n if (!baseSegments) {\n // 路径不唯一/无法解析:尝试从父引用收集可能的顶层 key,供 patch 模式做“局部回退”。\n const fallback = new Set<string>()\n const parents = rawParentsMap.get(target)\n if (parents) {\n for (const [parent, keys] of parents) {\n const parentPath = rawPathMap.get(parent)\n const topFromParentPath = parentPath ? parentPath.split('.', 1)[0] : undefined\n const topFromResolve = !topFromParentPath\n ? (resolvePathToTarget(root, parent)?.[0] as string | undefined)\n : undefined\n for (const k of keys) {\n if (typeof k !== 'string') {\n continue\n }\n fallback.add(topFromParentPath ?? topFromResolve ?? k)\n }\n }\n }\n else {\n // 若目标就是 root 的直接子属性(未记录 parent link),仍可用 key 作为顶层回退\n fallback.add(key)\n }\n for (const recorder of mutationRecorders) {\n recorder({ root, kind, op, path: undefined, fallbackTopKeys: fallback.size ? [...fallback] : undefined })\n }\n return\n }\n\n // 若目标位于数组内部(例如 arr[0].x),直接回退到数组本身的路径,保持“数组整体替换”的策略。\n const arrayIndexPos = baseSegments.findIndex(seg => isArrayIndexKey(seg))\n if (arrayIndexPos !== -1) {\n const arrayPath = baseSegments.slice(0, arrayIndexPos).join('.')\n const path = arrayPath || undefined\n for (const recorder of mutationRecorders) {\n recorder({ root, kind: 'array', op, path })\n }\n return\n }\n\n const basePath = baseSegments.length ? baseSegments.join('.') : ''\n const path = kind === 'array' ? (basePath || undefined) : (basePath ? `${basePath}.${key}` : (key as string))\n\n for (const recorder of mutationRecorders) {\n recorder({\n root,\n kind,\n op,\n path,\n })\n }\n}\n\nconst mutableHandlers: ProxyHandler<any> = {\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_REACTIVE) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n track(target, key)\n if (isObject(res)) {\n // 检查返回值是否被 markRaw 标记为跳过响应式\n if ((res as any)[ReactiveFlags.SKIP]) {\n return res\n }\n // 确保子对象的根引用与当前目标一致,便于版本号级联\n const childRaw = ((res as any)?.[ReactiveFlags.RAW] ?? res) as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n // eslint-disable-next-line ts/no-use-before-define -- 避免递归调用的顺序警告\n return reactive(res)\n }\n return res\n },\n set(target, key, value, receiver) {\n const isArr = Array.isArray(target)\n const oldLength = isArr ? target.length : 0\n const oldValue = Reflect.get(target, key, receiver)\n const oldRawValue = isObject(oldValue) ? toRaw(oldValue) : oldValue\n const rawValue = isObject(value) ? toRaw(value) : value\n if (Object.is(oldRawValue, rawValue)) {\n return true\n }\n const result = Reflect.set(target, key, value, receiver)\n if (result) {\n const oldRaw = isObject(oldRawValue) ? oldRawValue as object : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n if (isObject(rawValue) && !(rawValue as any)[ReactiveFlags.SKIP]) {\n const childRaw = rawValue as object\n adoptReactiveRoot(childRaw, target)\n recordParentLink(childRaw, target, key)\n const parentPath = rawPathMap.get(target)\n if (mutationRecorders.size && typeof key === 'string' && parentPath != null && !rawMultiParentSet.has(childRaw)) {\n const nextPath = parentPath ? `${parentPath}.${key}` : key\n rawPathMap.set(childRaw, nextPath)\n }\n }\n trigger(target, key)\n if (isArr && typeof key === 'string' && isArrayIndexKey(key) && Number(key) >= oldLength) {\n trigger(target, 'length')\n }\n // 任意写操作都提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n emitMutation(target, key, 'set')\n }\n return result\n },\n deleteProperty(target, key) {\n const hadKey = hasOwn(target, key)\n const oldValue = hadKey ? (target as any)[key] : undefined\n const result = Reflect.deleteProperty(target, key)\n if (hadKey && result) {\n const oldRaw = isObject(oldValue) ? (((oldValue as any)?.[ReactiveFlags.RAW] ?? oldValue) as object) : undefined\n if (oldRaw) {\n removeParentLink(oldRaw, target, key)\n }\n trigger(target, key)\n // 删除同样提升通用版本号\n trigger(target, VERSION_KEY)\n bumpRawVersion(target)\n bumpAncestorVersions(target)\n const root = rawRootMap.get(target)\n if (root && root !== target) {\n trigger(root, VERSION_KEY)\n bumpRawVersion(root)\n }\n emitMutation(target, key, 'delete')\n }\n return result\n },\n ownKeys(target) {\n track(target, Symbol.iterator)\n // 遍历时也订阅通用版本号,确保新增/删除键可触发\n track(target, VERSION_KEY)\n return Reflect.ownKeys(target)\n },\n}\n\nexport function reactive<T extends object>(target: T): T {\n if (!isObject(target)) {\n return target\n }\n if ((target as any)[ReactiveFlags.IS_REACTIVE]) {\n return target\n }\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n if (getTargetType(target) === TargetType.INVALID) {\n return target\n }\n const proxy = new Proxy(target, mutableHandlers)\n reactiveMap.set(target, proxy)\n rawMap.set(proxy, target)\n if (!rawVersionMap.has(target)) {\n rawVersionMap.set(target, 0)\n }\n // 新的原始对象在被观察时初始化根节点映射\n if (!rawRootMap.has(target)) {\n rawRootMap.set(target, target)\n }\n return proxy\n}\n\nexport function isReactive(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_REACTIVE])\n}\n\nexport function convertToReactive<T>(value: T): T {\n return isObject(value) ? reactive(value as any) : value\n}\n\n// ============================================================================\n// 标记对象跳过响应式转换(markRaw)\n// ============================================================================\n\n/**\n * 标记对象为“原始”状态,后续不会被转换为响应式,返回原对象本身。\n *\n * @param value 需要标记的对象\n * @returns 带有跳过标记的原对象\n *\n * @example\n * ```ts\n * const foo = markRaw({\n * nested: {}\n * })\n *\n * const state = reactive({\n * foo\n * })\n *\n * state.foo // 不是响应式对象\n * ```\n */\nexport function markRaw<T extends object>(value: T): T {\n if (!isObject(value)) {\n return value\n }\n Object.defineProperty(value, ReactiveFlags.SKIP, {\n value: true,\n configurable: true,\n enumerable: false,\n writable: true,\n })\n return value\n}\n\n/**\n * 判断某个值是否被标记为原始(即不应转换为响应式)。\n *\n * @param value 待检测的值\n * @returns 若含有跳过标记则返回 true\n */\nexport function isRaw(value: unknown): boolean {\n return isObject(value) && ReactiveFlags.SKIP in (value as object)\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { getTargetType, isObject } from "./reactive/shared.mjs";
|
|
2
|
+
import { isReactive } from "./reactive.mjs";
|
|
3
|
+
import { isRef, markAsRef } from "./ref.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/reactivity/readonly.ts
|
|
6
|
+
function createReadonlyWrapper(target) {
|
|
7
|
+
if (isRef(target)) {
|
|
8
|
+
const source = target;
|
|
9
|
+
const readonlyRef = markAsRef({
|
|
10
|
+
get value() {
|
|
11
|
+
return source.value;
|
|
12
|
+
},
|
|
13
|
+
set value(_v) {
|
|
14
|
+
throw new Error("无法给只读 ref 赋值");
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperties(readonlyRef, {
|
|
18
|
+
["__r_isReadonly"]: {
|
|
19
|
+
value: true,
|
|
20
|
+
configurable: true
|
|
21
|
+
},
|
|
22
|
+
["__r_raw"]: {
|
|
23
|
+
value: source,
|
|
24
|
+
configurable: true
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
return readonlyRef;
|
|
28
|
+
}
|
|
29
|
+
if (!isObject(target)) return target;
|
|
30
|
+
if (getTargetType(target) === 0) return target;
|
|
31
|
+
return new Proxy(target, {
|
|
32
|
+
set() {
|
|
33
|
+
throw new Error("无法在只读对象上设置属性");
|
|
34
|
+
},
|
|
35
|
+
deleteProperty() {
|
|
36
|
+
throw new Error("无法在只读对象上删除属性");
|
|
37
|
+
},
|
|
38
|
+
defineProperty() {
|
|
39
|
+
throw new Error("无法在只读对象上定义属性");
|
|
40
|
+
},
|
|
41
|
+
get(target, key, receiver) {
|
|
42
|
+
if (key === "__r_isReadonly") return true;
|
|
43
|
+
if (key === "__r_raw") return target;
|
|
44
|
+
return Reflect.get(target, key, receiver);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function readonly(target) {
|
|
49
|
+
return createReadonlyWrapper(target);
|
|
50
|
+
}
|
|
51
|
+
function shallowReadonly(target) {
|
|
52
|
+
return createReadonlyWrapper(target);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 判断值是否为只读代理或只读 ref 包装。
|
|
56
|
+
*/
|
|
57
|
+
function isReadonly(value) {
|
|
58
|
+
return Boolean(value && value["__r_isReadonly"]);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 判断值是否为响应式代理或只读代理。
|
|
62
|
+
*/
|
|
63
|
+
function isProxy(value) {
|
|
64
|
+
return isReactive(value) || isReadonly(value);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { isProxy, isReadonly, readonly, shallowReadonly };
|
|
69
|
+
//# sourceMappingURL=readonly.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readonly.mjs","names":[],"sources":["../../../src/reactivity/readonly.ts"],"sourcesContent":["import type { Ref } from './ref'\nimport { isObject, isReactive } from './reactive'\nimport { getTargetType, ReactiveFlags, TargetType } from './reactive/shared'\nimport { isRef, markAsRef } from './ref'\n\nfunction createReadonlyWrapper(target: any): any {\n if (isRef(target)) {\n const source = target\n const readonlyRef = markAsRef({\n get value() {\n return source.value\n },\n set value(_v: any) {\n throw new Error('无法给只读 ref 赋值')\n },\n })\n Object.defineProperties(readonlyRef, {\n [ReactiveFlags.IS_READONLY]: {\n value: true,\n configurable: true,\n },\n [ReactiveFlags.RAW]: {\n value: source,\n configurable: true,\n },\n })\n return readonlyRef\n }\n if (!isObject(target)) {\n return target\n }\n if (getTargetType(target as object) === TargetType.INVALID) {\n return target\n }\n return new Proxy(target as object, {\n set() {\n throw new Error('无法在只读对象上设置属性')\n },\n deleteProperty() {\n throw new Error('无法在只读对象上删除属性')\n },\n defineProperty() {\n throw new Error('无法在只读对象上定义属性')\n },\n get(target, key, receiver) {\n if (key === ReactiveFlags.IS_READONLY) {\n return true\n }\n if (key === ReactiveFlags.RAW) {\n return target\n }\n const res = Reflect.get(target, key, receiver)\n // 仅处理顶层属性,嵌套对象维持原引用以避免深拷贝和额外代理\n return res\n },\n })\n}\n\n/**\n * readonly 会为对象/数组创建一个“浅层”只读代理,并为 Ref 创建只读包装。\n * 选择浅层而非深层递归,是为了在小程序环境中保持实现和运行时开销最小,\n * 仅阻止直接属性写入/删除,嵌套对象仍按原样透传。\n */\nexport function readonly<T extends object>(target: T): T\nexport function readonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function readonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 与 Vue 3 的 `shallowReadonly()` 对齐。\n *\n * 当前 wevu 的只读语义本身就是浅层只读,因此这里直接复用同一套实现,\n * 让依赖 Vue 兼容 API 的代码可以无缝迁移。\n */\nexport function shallowReadonly<T extends object>(target: T): Readonly<T>\nexport function shallowReadonly<T>(target: Ref<T>): Readonly<Ref<T>>\nexport function shallowReadonly(target: any): any {\n return createReadonlyWrapper(target)\n}\n\n/**\n * 判断值是否为只读代理或只读 ref 包装。\n */\nexport function isReadonly(value: unknown): boolean {\n return Boolean(value && (value as any)[ReactiveFlags.IS_READONLY])\n}\n\n/**\n * 判断值是否为响应式代理或只读代理。\n */\nexport function isProxy(value: unknown): boolean {\n return isReactive(value) || isReadonly(value)\n}\n"],"mappings":";;;;;AAKA,SAAS,sBAAsB,QAAkB;CAC/C,IAAI,MAAM,MAAM,GAAG;EACjB,MAAM,SAAS;EACf,MAAM,cAAc,UAAU;GAC5B,IAAI,QAAQ;IACV,OAAO,OAAO;GAChB;GACA,IAAI,MAAM,IAAS;IACjB,MAAM,IAAI,MAAM,cAAc;GAChC;EACF,CAAC;EACD,OAAO,iBAAiB,aAAa;uBACN;IAC3B,OAAO;IACP,cAAc;GAChB;gBACqB;IACnB,OAAO;IACP,cAAc;GAChB;EACF,CAAC;EACD,OAAO;CACT;CACA,IAAI,CAAC,SAAS,MAAM,GAClB,OAAO;CAET,IAAI,cAAc,MAAgB,SAChC,OAAO;CAET,OAAO,IAAI,MAAM,QAAkB;EACjC,MAAM;GACJ,MAAM,IAAI,MAAM,cAAc;EAChC;EACA,iBAAiB;GACf,MAAM,IAAI,MAAM,cAAc;EAChC;EACA,iBAAiB;GACf,MAAM,IAAI,MAAM,cAAc;EAChC;EACA,IAAI,QAAQ,KAAK,UAAU;GACzB,IAAI,0BACF,OAAO;GAET,IAAI,mBACF,OAAO;GAIT,OAFY,QAAQ,IAAI,QAAQ,KAAK,QAE5B;EACX;CACF,CAAC;AACH;AASA,SAAgB,SAAS,QAAkB;CACzC,OAAO,sBAAsB,MAAM;AACrC;AAUA,SAAgB,gBAAgB,QAAkB;CAChD,OAAO,sBAAsB,MAAM;AACrC;;;;AAKA,SAAgB,WAAW,OAAyB;CAClD,OAAO,QAAQ,SAAU,uBAAwC;AACnE;;;;AAKA,SAAgB,QAAQ,OAAyB;CAC/C,OAAO,WAAW,KAAK,KAAK,WAAW,KAAK;AAC9C"}
|