2024-01-31 06:33:19 +00:00
/ * *
* @ vue / reactivity v3 . 4.15
* ( c ) 2018 - present Yuxi ( Evan ) You and Vue contributors
* @ license MIT
* * /
2024-01-05 12:14:38 +00:00
'use strict' ;
Object . defineProperty ( exports , '__esModule' , { value : true } ) ;
var shared = require ( '@vue/shared' ) ;
let activeEffectScope ;
class EffectScope {
constructor ( detached = false ) {
this . detached = detached ;
/ * *
* @ internal
* /
this . _active = true ;
/ * *
* @ internal
* /
this . effects = [ ] ;
/ * *
* @ internal
* /
this . cleanups = [ ] ;
this . parent = activeEffectScope ;
if ( ! detached && activeEffectScope ) {
this . index = ( activeEffectScope . scopes || ( activeEffectScope . scopes = [ ] ) ) . push (
this
) - 1 ;
}
}
get active ( ) {
return this . _active ;
}
run ( fn ) {
if ( this . _active ) {
const currentEffectScope = activeEffectScope ;
try {
activeEffectScope = this ;
return fn ( ) ;
} finally {
activeEffectScope = currentEffectScope ;
}
}
}
/ * *
* This should only be called on non - detached scopes
* @ internal
* /
on ( ) {
activeEffectScope = this ;
}
/ * *
* This should only be called on non - detached scopes
* @ internal
* /
off ( ) {
activeEffectScope = this . parent ;
}
stop ( fromParent ) {
if ( this . _active ) {
let i , l ;
for ( i = 0 , l = this . effects . length ; i < l ; i ++ ) {
this . effects [ i ] . stop ( ) ;
}
for ( i = 0 , l = this . cleanups . length ; i < l ; i ++ ) {
this . cleanups [ i ] ( ) ;
}
if ( this . scopes ) {
for ( i = 0 , l = this . scopes . length ; i < l ; i ++ ) {
this . scopes [ i ] . stop ( true ) ;
}
}
if ( ! this . detached && this . parent && ! fromParent ) {
const last = this . parent . scopes . pop ( ) ;
if ( last && last !== this ) {
this . parent . scopes [ this . index ] = last ;
last . index = this . index ;
}
}
this . parent = void 0 ;
this . _active = false ;
}
}
}
function effectScope ( detached ) {
return new EffectScope ( detached ) ;
}
function recordEffectScope ( effect , scope = activeEffectScope ) {
if ( scope && scope . active ) {
scope . effects . push ( effect ) ;
}
}
function getCurrentScope ( ) {
return activeEffectScope ;
}
function onScopeDispose ( fn ) {
if ( activeEffectScope ) {
activeEffectScope . cleanups . push ( fn ) ;
}
}
let activeEffect ;
class ReactiveEffect {
constructor ( fn , trigger , scheduler , scope ) {
this . fn = fn ;
this . trigger = trigger ;
this . scheduler = scheduler ;
this . active = true ;
this . deps = [ ] ;
/ * *
* @ internal
* /
2024-01-31 06:33:19 +00:00
this . _dirtyLevel = 2 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
this . _trackId = 0 ;
/ * *
* @ internal
* /
this . _runnings = 0 ;
/ * *
* @ internal
* /
2024-01-31 06:33:19 +00:00
this . _shouldSchedule = false ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
this . _depsLength = 0 ;
recordEffectScope ( this , scope ) ;
}
get dirty ( ) {
if ( this . _dirtyLevel === 1 ) {
pauseTracking ( ) ;
2024-01-31 06:33:19 +00:00
for ( let i = 0 ; i < this . _depsLength ; i ++ ) {
const dep = this . deps [ i ] ;
2024-01-05 12:14:38 +00:00
if ( dep . computed ) {
triggerComputed ( dep . computed ) ;
if ( this . _dirtyLevel >= 2 ) {
break ;
}
}
}
2024-01-31 06:33:19 +00:00
if ( this . _dirtyLevel < 2 ) {
this . _dirtyLevel = 0 ;
}
2024-01-05 12:14:38 +00:00
resetTracking ( ) ;
}
return this . _dirtyLevel >= 2 ;
}
set dirty ( v ) {
2024-01-31 06:33:19 +00:00
this . _dirtyLevel = v ? 2 : 0 ;
2024-01-05 12:14:38 +00:00
}
run ( ) {
this . _dirtyLevel = 0 ;
if ( ! this . active ) {
return this . fn ( ) ;
}
let lastShouldTrack = shouldTrack ;
let lastEffect = activeEffect ;
try {
shouldTrack = true ;
activeEffect = this ;
this . _runnings ++ ;
preCleanupEffect ( this ) ;
return this . fn ( ) ;
} finally {
postCleanupEffect ( this ) ;
this . _runnings -- ;
activeEffect = lastEffect ;
shouldTrack = lastShouldTrack ;
}
}
stop ( ) {
var _a ;
if ( this . active ) {
preCleanupEffect ( this ) ;
postCleanupEffect ( this ) ;
( _a = this . onStop ) == null ? void 0 : _a . call ( this ) ;
this . active = false ;
}
}
}
function triggerComputed ( computed ) {
return computed . value ;
}
function preCleanupEffect ( effect2 ) {
effect2 . _trackId ++ ;
effect2 . _depsLength = 0 ;
}
function postCleanupEffect ( effect2 ) {
if ( effect2 . deps && effect2 . deps . length > effect2 . _depsLength ) {
for ( let i = effect2 . _depsLength ; i < effect2 . deps . length ; i ++ ) {
cleanupDepEffect ( effect2 . deps [ i ] , effect2 ) ;
}
effect2 . deps . length = effect2 . _depsLength ;
}
}
function cleanupDepEffect ( dep , effect2 ) {
const trackId = dep . get ( effect2 ) ;
if ( trackId !== void 0 && effect2 . _trackId !== trackId ) {
dep . delete ( effect2 ) ;
if ( dep . size === 0 ) {
dep . cleanup ( ) ;
}
}
}
function effect ( fn , options ) {
if ( fn . effect instanceof ReactiveEffect ) {
fn = fn . effect . fn ;
}
const _effect = new ReactiveEffect ( fn , shared . NOOP , ( ) => {
if ( _effect . dirty ) {
_effect . run ( ) ;
}
} ) ;
if ( options ) {
shared . extend ( _effect , options ) ;
if ( options . scope )
recordEffectScope ( _effect , options . scope ) ;
}
if ( ! options || ! options . lazy ) {
_effect . run ( ) ;
}
const runner = _effect . run . bind ( _effect ) ;
runner . effect = _effect ;
return runner ;
}
function stop ( runner ) {
runner . effect . stop ( ) ;
}
let shouldTrack = true ;
let pauseScheduleStack = 0 ;
const trackStack = [ ] ;
function pauseTracking ( ) {
trackStack . push ( shouldTrack ) ;
shouldTrack = false ;
}
function enableTracking ( ) {
trackStack . push ( shouldTrack ) ;
shouldTrack = true ;
}
function resetTracking ( ) {
const last = trackStack . pop ( ) ;
shouldTrack = last === void 0 ? true : last ;
}
function pauseScheduling ( ) {
pauseScheduleStack ++ ;
}
function resetScheduling ( ) {
pauseScheduleStack -- ;
while ( ! pauseScheduleStack && queueEffectSchedulers . length ) {
queueEffectSchedulers . shift ( ) ( ) ;
}
}
function trackEffect ( effect2 , dep , debuggerEventExtraInfo ) {
if ( dep . get ( effect2 ) !== effect2 . _trackId ) {
dep . set ( effect2 , effect2 . _trackId ) ;
const oldDep = effect2 . deps [ effect2 . _depsLength ] ;
if ( oldDep !== dep ) {
if ( oldDep ) {
cleanupDepEffect ( oldDep , effect2 ) ;
}
effect2 . deps [ effect2 . _depsLength ++ ] = dep ;
} else {
effect2 . _depsLength ++ ;
}
}
}
const queueEffectSchedulers = [ ] ;
function triggerEffects ( dep , dirtyLevel , debuggerEventExtraInfo ) {
pauseScheduling ( ) ;
for ( const effect2 of dep . keys ( ) ) {
2024-01-31 06:33:19 +00:00
if ( effect2 . _dirtyLevel < dirtyLevel && dep . get ( effect2 ) === effect2 . _trackId ) {
2024-01-05 12:14:38 +00:00
const lastDirtyLevel = effect2 . _dirtyLevel ;
effect2 . _dirtyLevel = dirtyLevel ;
2024-01-31 06:33:19 +00:00
if ( lastDirtyLevel === 0 ) {
effect2 . _shouldSchedule = true ;
2024-01-05 12:14:38 +00:00
effect2 . trigger ( ) ;
}
}
}
2024-01-31 06:33:19 +00:00
scheduleEffects ( dep ) ;
2024-01-05 12:14:38 +00:00
resetScheduling ( ) ;
}
2024-01-31 06:33:19 +00:00
function scheduleEffects ( dep ) {
for ( const effect2 of dep . keys ( ) ) {
if ( effect2 . scheduler && effect2 . _shouldSchedule && ( ! effect2 . _runnings || effect2 . allowRecurse ) && dep . get ( effect2 ) === effect2 . _trackId ) {
effect2 . _shouldSchedule = false ;
queueEffectSchedulers . push ( effect2 . scheduler ) ;
}
}
}
2024-01-05 12:14:38 +00:00
const createDep = ( cleanup , computed ) => {
const dep = /* @__PURE__ */ new Map ( ) ;
dep . cleanup = cleanup ;
dep . computed = computed ;
return dep ;
} ;
const targetMap = /* @__PURE__ */ new WeakMap ( ) ;
const ITERATE _KEY = Symbol ( "" ) ;
const MAP _KEY _ITERATE _KEY = Symbol ( "" ) ;
function track ( target , type , key ) {
if ( shouldTrack && activeEffect ) {
let depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
targetMap . set ( target , depsMap = /* @__PURE__ */ new Map ( ) ) ;
}
let dep = depsMap . get ( key ) ;
if ( ! dep ) {
depsMap . set ( key , dep = createDep ( ( ) => depsMap . delete ( key ) ) ) ;
}
trackEffect (
activeEffect ,
dep ) ;
}
}
function trigger ( target , type , key , newValue , oldValue , oldTarget ) {
const depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
return ;
}
let deps = [ ] ;
if ( type === "clear" ) {
deps = [ ... depsMap . values ( ) ] ;
} else if ( key === "length" && shared . isArray ( target ) ) {
const newLength = Number ( newValue ) ;
depsMap . forEach ( ( dep , key2 ) => {
if ( key2 === "length" || ! shared . isSymbol ( key2 ) && key2 >= newLength ) {
deps . push ( dep ) ;
}
} ) ;
} else {
if ( key !== void 0 ) {
deps . push ( depsMap . get ( key ) ) ;
}
switch ( type ) {
case "add" :
if ( ! shared . isArray ( target ) ) {
deps . push ( depsMap . get ( ITERATE _KEY ) ) ;
if ( shared . isMap ( target ) ) {
deps . push ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
} else if ( shared . isIntegerKey ( key ) ) {
deps . push ( depsMap . get ( "length" ) ) ;
}
break ;
case "delete" :
if ( ! shared . isArray ( target ) ) {
deps . push ( depsMap . get ( ITERATE _KEY ) ) ;
if ( shared . isMap ( target ) ) {
deps . push ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
}
break ;
case "set" :
if ( shared . isMap ( target ) ) {
deps . push ( depsMap . get ( ITERATE _KEY ) ) ;
}
break ;
}
}
pauseScheduling ( ) ;
for ( const dep of deps ) {
if ( dep ) {
triggerEffects (
dep ,
2024-01-31 06:33:19 +00:00
2 ) ;
2024-01-05 12:14:38 +00:00
}
}
resetScheduling ( ) ;
}
function getDepFromReactive ( object , key ) {
var _a ;
return ( _a = targetMap . get ( object ) ) == null ? void 0 : _a . get ( key ) ;
}
const isNonTrackableKeys = /* @__PURE__ */ shared . makeMap ( ` __proto__,__v_isRef,__isVue ` ) ;
const builtInSymbols = new Set (
/* @__PURE__ */ Object . getOwnPropertyNames ( Symbol ) . filter ( ( key ) => key !== "arguments" && key !== "caller" ) . map ( ( key ) => Symbol [ key ] ) . filter ( shared . isSymbol )
) ;
const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations ( ) ;
function createArrayInstrumentations ( ) {
const instrumentations = { } ;
[ "includes" , "indexOf" , "lastIndexOf" ] . forEach ( ( key ) => {
instrumentations [ key ] = function ( ... args ) {
const arr = toRaw ( this ) ;
for ( let i = 0 , l = this . length ; i < l ; i ++ ) {
track ( arr , "get" , i + "" ) ;
}
const res = arr [ key ] ( ... args ) ;
if ( res === - 1 || res === false ) {
return arr [ key ] ( ... args . map ( toRaw ) ) ;
} else {
return res ;
}
} ;
} ) ;
[ "push" , "pop" , "shift" , "unshift" , "splice" ] . forEach ( ( key ) => {
instrumentations [ key ] = function ( ... args ) {
pauseTracking ( ) ;
pauseScheduling ( ) ;
const res = toRaw ( this ) [ key ] . apply ( this , args ) ;
resetScheduling ( ) ;
resetTracking ( ) ;
return res ;
} ;
} ) ;
return instrumentations ;
}
function hasOwnProperty ( key ) {
const obj = toRaw ( this ) ;
track ( obj , "has" , key ) ;
return obj . hasOwnProperty ( key ) ;
}
class BaseReactiveHandler {
constructor ( _isReadonly = false , _shallow = false ) {
this . _isReadonly = _isReadonly ;
this . _shallow = _shallow ;
}
get ( target , key , receiver ) {
const isReadonly2 = this . _isReadonly , shallow = this . _shallow ;
if ( key === "__v_isReactive" ) {
return ! isReadonly2 ;
} else if ( key === "__v_isReadonly" ) {
return isReadonly2 ;
} else if ( key === "__v_isShallow" ) {
return shallow ;
} else if ( key === "__v_raw" ) {
if ( receiver === ( isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap ) . get ( target ) || // receiver is not the reactive proxy, but has the same prototype
// this means the reciever is a user proxy of the reactive proxy
Object . getPrototypeOf ( target ) === Object . getPrototypeOf ( receiver ) ) {
return target ;
}
return ;
}
const targetIsArray = shared . isArray ( target ) ;
if ( ! isReadonly2 ) {
if ( targetIsArray && shared . hasOwn ( arrayInstrumentations , key ) ) {
return Reflect . get ( arrayInstrumentations , key , receiver ) ;
}
if ( key === "hasOwnProperty" ) {
return hasOwnProperty ;
}
}
const res = Reflect . get ( target , key , receiver ) ;
if ( shared . isSymbol ( key ) ? builtInSymbols . has ( key ) : isNonTrackableKeys ( key ) ) {
return res ;
}
if ( ! isReadonly2 ) {
track ( target , "get" , key ) ;
}
if ( shallow ) {
return res ;
}
if ( isRef ( res ) ) {
return targetIsArray && shared . isIntegerKey ( key ) ? res : res . value ;
}
if ( shared . isObject ( res ) ) {
return isReadonly2 ? readonly ( res ) : reactive ( res ) ;
}
return res ;
}
}
class MutableReactiveHandler extends BaseReactiveHandler {
constructor ( shallow = false ) {
super ( false , shallow ) ;
}
set ( target , key , value , receiver ) {
let oldValue = target [ key ] ;
if ( ! this . _shallow ) {
const isOldValueReadonly = isReadonly ( oldValue ) ;
if ( ! isShallow ( value ) && ! isReadonly ( value ) ) {
oldValue = toRaw ( oldValue ) ;
value = toRaw ( value ) ;
}
if ( ! shared . isArray ( target ) && isRef ( oldValue ) && ! isRef ( value ) ) {
if ( isOldValueReadonly ) {
return false ;
} else {
oldValue . value = value ;
return true ;
}
}
}
const hadKey = shared . isArray ( target ) && shared . isIntegerKey ( key ) ? Number ( key ) < target . length : shared . hasOwn ( target , key ) ;
const result = Reflect . set ( target , key , value , receiver ) ;
if ( target === toRaw ( receiver ) ) {
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( shared . hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value ) ;
}
}
return result ;
}
deleteProperty ( target , key ) {
const hadKey = shared . hasOwn ( target , key ) ;
target [ key ] ;
const result = Reflect . deleteProperty ( target , key ) ;
if ( result && hadKey ) {
trigger ( target , "delete" , key , void 0 ) ;
}
return result ;
}
has ( target , key ) {
const result = Reflect . has ( target , key ) ;
if ( ! shared . isSymbol ( key ) || ! builtInSymbols . has ( key ) ) {
track ( target , "has" , key ) ;
}
return result ;
}
ownKeys ( target ) {
track (
target ,
"iterate" ,
shared . isArray ( target ) ? "length" : ITERATE _KEY
) ;
return Reflect . ownKeys ( target ) ;
}
}
class ReadonlyReactiveHandler extends BaseReactiveHandler {
constructor ( shallow = false ) {
super ( true , shallow ) ;
}
set ( target , key ) {
return true ;
}
deleteProperty ( target , key ) {
return true ;
}
}
const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler ( ) ;
const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler ( ) ;
const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler (
true
) ;
const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler ( true ) ;
const toShallow = ( value ) => value ;
const getProto = ( v ) => Reflect . getPrototypeOf ( v ) ;
function get ( target , key , isReadonly = false , isShallow = false ) {
target = target [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( ! isReadonly ) {
if ( shared . hasChanged ( key , rawKey ) ) {
track ( rawTarget , "get" , key ) ;
}
track ( rawTarget , "get" , rawKey ) ;
}
const { has : has2 } = getProto ( rawTarget ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
if ( has2 . call ( rawTarget , key ) ) {
return wrap ( target . get ( key ) ) ;
} else if ( has2 . call ( rawTarget , rawKey ) ) {
return wrap ( target . get ( rawKey ) ) ;
} else if ( target !== rawTarget ) {
target . get ( key ) ;
}
}
function has ( key , isReadonly = false ) {
const target = this [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( ! isReadonly ) {
if ( shared . hasChanged ( key , rawKey ) ) {
track ( rawTarget , "has" , key ) ;
}
track ( rawTarget , "has" , rawKey ) ;
}
return key === rawKey ? target . has ( key ) : target . has ( key ) || target . has ( rawKey ) ;
}
function size ( target , isReadonly = false ) {
target = target [ "__v_raw" ] ;
! isReadonly && track ( toRaw ( target ) , "iterate" , ITERATE _KEY ) ;
return Reflect . get ( target , "size" , target ) ;
}
function add ( value ) {
value = toRaw ( value ) ;
const target = toRaw ( this ) ;
const proto = getProto ( target ) ;
const hadKey = proto . has . call ( target , value ) ;
if ( ! hadKey ) {
target . add ( value ) ;
trigger ( target , "add" , value , value ) ;
}
return this ;
}
function set ( key , value ) {
value = toRaw ( value ) ;
const target = toRaw ( this ) ;
const { has : has2 , get : get2 } = getProto ( target ) ;
let hadKey = has2 . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has2 . call ( target , key ) ;
}
const oldValue = get2 . call ( target , key ) ;
target . set ( key , value ) ;
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( shared . hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value ) ;
}
return this ;
}
function deleteEntry ( key ) {
const target = toRaw ( this ) ;
const { has : has2 , get : get2 } = getProto ( target ) ;
let hadKey = has2 . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has2 . call ( target , key ) ;
}
get2 ? get2 . call ( target , key ) : void 0 ;
const result = target . delete ( key ) ;
if ( hadKey ) {
trigger ( target , "delete" , key , void 0 ) ;
}
return result ;
}
function clear ( ) {
const target = toRaw ( this ) ;
const hadItems = target . size !== 0 ;
const result = target . clear ( ) ;
if ( hadItems ) {
trigger ( target , "clear" , void 0 , void 0 ) ;
}
return result ;
}
function createForEach ( isReadonly , isShallow ) {
return function forEach ( callback , thisArg ) {
const observed = this ;
const target = observed [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
! isReadonly && track ( rawTarget , "iterate" , ITERATE _KEY ) ;
return target . forEach ( ( value , key ) => {
return callback . call ( thisArg , wrap ( value ) , wrap ( key ) , observed ) ;
} ) ;
} ;
}
function createIterableMethod ( method , isReadonly , isShallow ) {
return function ( ... args ) {
const target = this [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const targetIsMap = shared . isMap ( rawTarget ) ;
const isPair = method === "entries" || method === Symbol . iterator && targetIsMap ;
const isKeyOnly = method === "keys" && targetIsMap ;
const innerIterator = target [ method ] ( ... args ) ;
const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive ;
! isReadonly && track (
rawTarget ,
"iterate" ,
isKeyOnly ? MAP _KEY _ITERATE _KEY : ITERATE _KEY
) ;
return {
// iterator protocol
next ( ) {
const { value , done } = innerIterator . next ( ) ;
return done ? { value , done } : {
value : isPair ? [ wrap ( value [ 0 ] ) , wrap ( value [ 1 ] ) ] : wrap ( value ) ,
done
} ;
} ,
// iterable protocol
[ Symbol . iterator ] ( ) {
return this ;
}
} ;
} ;
}
function createReadonlyMethod ( type ) {
return function ( ... args ) {
return type === "delete" ? false : type === "clear" ? void 0 : this ;
} ;
}
function createInstrumentations ( ) {
const mutableInstrumentations2 = {
get ( key ) {
return get ( this , key ) ;
} ,
get size ( ) {
return size ( this ) ;
} ,
has ,
add ,
set ,
delete : deleteEntry ,
clear ,
forEach : createForEach ( false , false )
} ;
const shallowInstrumentations2 = {
get ( key ) {
return get ( this , key , false , true ) ;
} ,
get size ( ) {
return size ( this ) ;
} ,
has ,
add ,
set ,
delete : deleteEntry ,
clear ,
forEach : createForEach ( false , true )
} ;
const readonlyInstrumentations2 = {
get ( key ) {
return get ( this , key , true ) ;
} ,
get size ( ) {
return size ( this , true ) ;
} ,
has ( key ) {
return has . call ( this , key , true ) ;
} ,
add : createReadonlyMethod ( "add" ) ,
set : createReadonlyMethod ( "set" ) ,
delete : createReadonlyMethod ( "delete" ) ,
clear : createReadonlyMethod ( "clear" ) ,
forEach : createForEach ( true , false )
} ;
const shallowReadonlyInstrumentations2 = {
get ( key ) {
return get ( this , key , true , true ) ;
} ,
get size ( ) {
return size ( this , true ) ;
} ,
has ( key ) {
return has . call ( this , key , true ) ;
} ,
add : createReadonlyMethod ( "add" ) ,
set : createReadonlyMethod ( "set" ) ,
delete : createReadonlyMethod ( "delete" ) ,
clear : createReadonlyMethod ( "clear" ) ,
forEach : createForEach ( true , true )
} ;
const iteratorMethods = [ "keys" , "values" , "entries" , Symbol . iterator ] ;
iteratorMethods . forEach ( ( method ) => {
mutableInstrumentations2 [ method ] = createIterableMethod (
method ,
false ,
false
) ;
readonlyInstrumentations2 [ method ] = createIterableMethod (
method ,
true ,
false
) ;
shallowInstrumentations2 [ method ] = createIterableMethod (
method ,
false ,
true
) ;
shallowReadonlyInstrumentations2 [ method ] = createIterableMethod (
method ,
true ,
true
) ;
} ) ;
return [
mutableInstrumentations2 ,
readonlyInstrumentations2 ,
shallowInstrumentations2 ,
shallowReadonlyInstrumentations2
] ;
}
const [
mutableInstrumentations ,
readonlyInstrumentations ,
shallowInstrumentations ,
shallowReadonlyInstrumentations
] = /* @__PURE__ */ createInstrumentations ( ) ;
function createInstrumentationGetter ( isReadonly , shallow ) {
const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations ;
return ( target , key , receiver ) => {
if ( key === "__v_isReactive" ) {
return ! isReadonly ;
} else if ( key === "__v_isReadonly" ) {
return isReadonly ;
} else if ( key === "__v_raw" ) {
return target ;
}
return Reflect . get (
shared . hasOwn ( instrumentations , key ) && key in target ? instrumentations : target ,
key ,
receiver
) ;
} ;
}
const mutableCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( false , false )
} ;
const shallowCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( false , true )
} ;
const readonlyCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( true , false )
} ;
const shallowReadonlyCollectionHandlers = {
get : /* @__PURE__ */ createInstrumentationGetter ( true , true )
} ;
const reactiveMap = /* @__PURE__ */ new WeakMap ( ) ;
const shallowReactiveMap = /* @__PURE__ */ new WeakMap ( ) ;
const readonlyMap = /* @__PURE__ */ new WeakMap ( ) ;
const shallowReadonlyMap = /* @__PURE__ */ new WeakMap ( ) ;
function targetTypeMap ( rawType ) {
switch ( rawType ) {
case "Object" :
case "Array" :
return 1 /* COMMON */ ;
case "Map" :
case "Set" :
case "WeakMap" :
case "WeakSet" :
return 2 /* COLLECTION */ ;
default :
return 0 /* INVALID */ ;
}
}
function getTargetType ( value ) {
return value [ "__v_skip" ] || ! Object . isExtensible ( value ) ? 0 /* INVALID */ : targetTypeMap ( shared . toRawType ( value ) ) ;
}
function reactive ( target ) {
if ( isReadonly ( target ) ) {
return target ;
}
return createReactiveObject (
target ,
false ,
mutableHandlers ,
mutableCollectionHandlers ,
reactiveMap
) ;
}
function shallowReactive ( target ) {
return createReactiveObject (
target ,
false ,
shallowReactiveHandlers ,
shallowCollectionHandlers ,
shallowReactiveMap
) ;
}
function readonly ( target ) {
return createReactiveObject (
target ,
true ,
readonlyHandlers ,
readonlyCollectionHandlers ,
readonlyMap
) ;
}
function shallowReadonly ( target ) {
return createReactiveObject (
target ,
true ,
shallowReadonlyHandlers ,
shallowReadonlyCollectionHandlers ,
shallowReadonlyMap
) ;
}
function createReactiveObject ( target , isReadonly2 , baseHandlers , collectionHandlers , proxyMap ) {
if ( ! shared . isObject ( target ) ) {
return target ;
}
if ( target [ "__v_raw" ] && ! ( isReadonly2 && target [ "__v_isReactive" ] ) ) {
return target ;
}
const existingProxy = proxyMap . get ( target ) ;
if ( existingProxy ) {
return existingProxy ;
}
const targetType = getTargetType ( target ) ;
if ( targetType === 0 /* INVALID */ ) {
return target ;
}
const proxy = new Proxy (
target ,
targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers
) ;
proxyMap . set ( target , proxy ) ;
return proxy ;
}
function isReactive ( value ) {
if ( isReadonly ( value ) ) {
return isReactive ( value [ "__v_raw" ] ) ;
}
return ! ! ( value && value [ "__v_isReactive" ] ) ;
}
function isReadonly ( value ) {
return ! ! ( value && value [ "__v_isReadonly" ] ) ;
}
function isShallow ( value ) {
return ! ! ( value && value [ "__v_isShallow" ] ) ;
}
function isProxy ( value ) {
return isReactive ( value ) || isReadonly ( value ) ;
}
function toRaw ( observed ) {
const raw = observed && observed [ "__v_raw" ] ;
return raw ? toRaw ( raw ) : observed ;
}
function markRaw ( value ) {
shared . def ( value , "__v_skip" , true ) ;
return value ;
}
const toReactive = ( value ) => shared . isObject ( value ) ? reactive ( value ) : value ;
const toReadonly = ( value ) => shared . isObject ( value ) ? readonly ( value ) : value ;
class ComputedRefImpl {
constructor ( getter , _setter , isReadonly , isSSR ) {
this . _setter = _setter ;
this . dep = void 0 ;
this . _ _v _isRef = true ;
this [ "__v_isReadonly" ] = false ;
this . effect = new ReactiveEffect (
( ) => getter ( this . _value ) ,
2024-01-31 06:33:19 +00:00
( ) => triggerRefValue ( this , 1 ) ,
( ) => this . dep && scheduleEffects ( this . dep )
2024-01-05 12:14:38 +00:00
) ;
this . effect . computed = this ;
this . effect . active = this . _cacheable = ! isSSR ;
this [ "__v_isReadonly" ] = isReadonly ;
}
get value ( ) {
const self = toRaw ( this ) ;
if ( ! self . _cacheable || self . effect . dirty ) {
if ( shared . hasChanged ( self . _value , self . _value = self . effect . run ( ) ) ) {
triggerRefValue ( self , 2 ) ;
}
}
2024-01-31 06:33:19 +00:00
trackRefValue ( self ) ;
if ( self . effect . _dirtyLevel >= 1 ) {
triggerRefValue ( self , 1 ) ;
}
2024-01-05 12:14:38 +00:00
return self . _value ;
}
set value ( newValue ) {
this . _setter ( newValue ) ;
}
// #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
get _dirty ( ) {
return this . effect . dirty ;
}
set _dirty ( v ) {
this . effect . dirty = v ;
}
// #endregion
}
function computed ( getterOrOptions , debugOptions , isSSR = false ) {
let getter ;
let setter ;
const onlyGetter = shared . isFunction ( getterOrOptions ) ;
if ( onlyGetter ) {
getter = getterOrOptions ;
setter = shared . NOOP ;
} else {
getter = getterOrOptions . get ;
setter = getterOrOptions . set ;
}
const cRef = new ComputedRefImpl ( getter , setter , onlyGetter || ! setter , isSSR ) ;
return cRef ;
}
function trackRefValue ( ref2 ) {
if ( shouldTrack && activeEffect ) {
ref2 = toRaw ( ref2 ) ;
trackEffect (
activeEffect ,
ref2 . dep || ( ref2 . dep = createDep (
( ) => ref2 . dep = void 0 ,
ref2 instanceof ComputedRefImpl ? ref2 : void 0
) ) ) ;
}
}
2024-01-31 06:33:19 +00:00
function triggerRefValue ( ref2 , dirtyLevel = 2 , newVal ) {
2024-01-05 12:14:38 +00:00
ref2 = toRaw ( ref2 ) ;
const dep = ref2 . dep ;
if ( dep ) {
triggerEffects (
dep ,
dirtyLevel ) ;
}
}
function isRef ( r ) {
return ! ! ( r && r . _ _v _isRef === true ) ;
}
function ref ( value ) {
return createRef ( value , false ) ;
}
function shallowRef ( value ) {
return createRef ( value , true ) ;
}
function createRef ( rawValue , shallow ) {
if ( isRef ( rawValue ) ) {
return rawValue ;
}
return new RefImpl ( rawValue , shallow ) ;
}
class RefImpl {
constructor ( value , _ _v _isShallow ) {
this . _ _v _isShallow = _ _v _isShallow ;
this . dep = void 0 ;
this . _ _v _isRef = true ;
this . _rawValue = _ _v _isShallow ? value : toRaw ( value ) ;
this . _value = _ _v _isShallow ? value : toReactive ( value ) ;
}
get value ( ) {
trackRefValue ( this ) ;
return this . _value ;
}
set value ( newVal ) {
const useDirectValue = this . _ _v _isShallow || isShallow ( newVal ) || isReadonly ( newVal ) ;
newVal = useDirectValue ? newVal : toRaw ( newVal ) ;
if ( shared . hasChanged ( newVal , this . _rawValue ) ) {
this . _rawValue = newVal ;
this . _value = useDirectValue ? newVal : toReactive ( newVal ) ;
2024-01-31 06:33:19 +00:00
triggerRefValue ( this , 2 ) ;
2024-01-05 12:14:38 +00:00
}
}
}
function triggerRef ( ref2 ) {
2024-01-31 06:33:19 +00:00
triggerRefValue ( ref2 , 2 ) ;
2024-01-05 12:14:38 +00:00
}
function unref ( ref2 ) {
return isRef ( ref2 ) ? ref2 . value : ref2 ;
}
function toValue ( source ) {
return shared . isFunction ( source ) ? source ( ) : unref ( source ) ;
}
const shallowUnwrapHandlers = {
get : ( target , key , receiver ) => unref ( Reflect . get ( target , key , receiver ) ) ,
set : ( target , key , value , receiver ) => {
const oldValue = target [ key ] ;
if ( isRef ( oldValue ) && ! isRef ( value ) ) {
oldValue . value = value ;
return true ;
} else {
return Reflect . set ( target , key , value , receiver ) ;
}
}
} ;
function proxyRefs ( objectWithRefs ) {
return isReactive ( objectWithRefs ) ? objectWithRefs : new Proxy ( objectWithRefs , shallowUnwrapHandlers ) ;
}
class CustomRefImpl {
constructor ( factory ) {
this . dep = void 0 ;
this . _ _v _isRef = true ;
const { get , set } = factory (
( ) => trackRefValue ( this ) ,
( ) => triggerRefValue ( this )
) ;
this . _get = get ;
this . _set = set ;
}
get value ( ) {
return this . _get ( ) ;
}
set value ( newVal ) {
this . _set ( newVal ) ;
}
}
function customRef ( factory ) {
return new CustomRefImpl ( factory ) ;
}
function toRefs ( object ) {
const ret = shared . isArray ( object ) ? new Array ( object . length ) : { } ;
for ( const key in object ) {
ret [ key ] = propertyToRef ( object , key ) ;
}
return ret ;
}
class ObjectRefImpl {
constructor ( _object , _key , _defaultValue ) {
this . _object = _object ;
this . _key = _key ;
this . _defaultValue = _defaultValue ;
this . _ _v _isRef = true ;
}
get value ( ) {
const val = this . _object [ this . _key ] ;
return val === void 0 ? this . _defaultValue : val ;
}
set value ( newVal ) {
this . _object [ this . _key ] = newVal ;
}
get dep ( ) {
return getDepFromReactive ( toRaw ( this . _object ) , this . _key ) ;
}
}
class GetterRefImpl {
constructor ( _getter ) {
this . _getter = _getter ;
this . _ _v _isRef = true ;
this . _ _v _isReadonly = true ;
}
get value ( ) {
return this . _getter ( ) ;
}
}
function toRef ( source , key , defaultValue ) {
if ( isRef ( source ) ) {
return source ;
} else if ( shared . isFunction ( source ) ) {
return new GetterRefImpl ( source ) ;
} else if ( shared . isObject ( source ) && arguments . length > 1 ) {
return propertyToRef ( source , key , defaultValue ) ;
} else {
return ref ( source ) ;
}
}
function propertyToRef ( source , key , defaultValue ) {
const val = source [ key ] ;
return isRef ( val ) ? val : new ObjectRefImpl ( source , key , defaultValue ) ;
}
const deferredComputed = computed ;
const TrackOpTypes = {
"GET" : "get" ,
"HAS" : "has" ,
"ITERATE" : "iterate"
} ;
const TriggerOpTypes = {
"SET" : "set" ,
"ADD" : "add" ,
"DELETE" : "delete" ,
"CLEAR" : "clear"
} ;
const ReactiveFlags = {
"SKIP" : "__v_skip" ,
"IS_REACTIVE" : "__v_isReactive" ,
"IS_READONLY" : "__v_isReadonly" ,
"IS_SHALLOW" : "__v_isShallow" ,
"RAW" : "__v_raw"
} ;
exports . EffectScope = EffectScope ;
exports . ITERATE _KEY = ITERATE _KEY ;
exports . ReactiveEffect = ReactiveEffect ;
exports . ReactiveFlags = ReactiveFlags ;
exports . TrackOpTypes = TrackOpTypes ;
exports . TriggerOpTypes = TriggerOpTypes ;
exports . computed = computed ;
exports . customRef = customRef ;
exports . deferredComputed = deferredComputed ;
exports . effect = effect ;
exports . effectScope = effectScope ;
exports . enableTracking = enableTracking ;
exports . getCurrentScope = getCurrentScope ;
exports . isProxy = isProxy ;
exports . isReactive = isReactive ;
exports . isReadonly = isReadonly ;
exports . isRef = isRef ;
exports . isShallow = isShallow ;
exports . markRaw = markRaw ;
exports . onScopeDispose = onScopeDispose ;
exports . pauseScheduling = pauseScheduling ;
exports . pauseTracking = pauseTracking ;
exports . proxyRefs = proxyRefs ;
exports . reactive = reactive ;
exports . readonly = readonly ;
exports . ref = ref ;
exports . resetScheduling = resetScheduling ;
exports . resetTracking = resetTracking ;
exports . shallowReactive = shallowReactive ;
exports . shallowReadonly = shallowReadonly ;
exports . shallowRef = shallowRef ;
exports . stop = stop ;
exports . toRaw = toRaw ;
exports . toRef = toRef ;
exports . toRefs = toRefs ;
exports . toValue = toValue ;
exports . track = track ;
exports . trigger = trigger ;
exports . triggerRef = triggerRef ;
exports . unref = unref ;