import { hasChanged, isFunction } from '@vue/shared'
import { ReactiveFlags, TrackOpTypes } from './constants'
-import { onTrack, setupFlagsHandler } from './debug'
+import { onTrack, setupOnTrigger } from './debug'
import {
type DebuggerEvent,
type DebuggerOptions,
private readonly setter: ComputedSetter<T> | undefined,
) {
this[ReactiveFlags.IS_READONLY] = !setter
- if (__DEV__) {
- setupFlagsHandler(this)
- }
}
get value(): T {
}
}
+if (__DEV__) {
+ setupOnTrigger(ComputedRefImpl)
+}
+
/**
* Takes a getter function and returns a readonly reactive ref object for the
* returned value from the getter. It can also take an object with get and set
}
}
-export function setupFlagsHandler(target: Subscriber): void {
+export function setupOnTrigger(target: { new (...args: any[]): any }): void {
if (!__DEV__) {
throw new Error(
- `Internal error: setupFlagsHandler should be called only in development.`,
+ `Internal error: setupOnTrigger should be called only in development.`,
)
}
+ Object.defineProperty(target.prototype, 'onTrigger', {
+ get() {
+ return this._onTrigger
+ },
+ set(val) {
+ if (!this._onTrigger) setupFlagsHandler(this)
+ this._onTrigger = val
+ },
+ })
+}
+
+function setupFlagsHandler(target: Subscriber): void {
// @ts-expect-error
target._flags = target.flags
Object.defineProperty(target, 'flags', {
import { extend } from '@vue/shared'
import type { TrackOpTypes, TriggerOpTypes } from './constants'
-import { setupFlagsHandler } from './debug'
+import { setupOnTrigger } from './debug'
import { activeEffectScope } from './effectScope'
import {
type IEffect,
if (activeEffectScope && activeEffectScope.active) {
activeEffectScope.effects.push(this)
}
- if (__DEV__) {
- setupFlagsHandler(this)
- }
}
get active(): boolean {
}
}
+if (__DEV__) {
+ setupOnTrigger(ReactiveEffect)
+}
+
export interface ReactiveEffectRunner<T = any> {
(): T
effect: ReactiveEffect