2024-01-31 06:33:19 +00:00
/ * *
2026-02-11 16:20:26 +00:00
* @ vue / server - renderer v3 . 5.28
2024-01-31 06:33:19 +00:00
* ( c ) 2018 - present Yuxi ( Evan ) You and Vue contributors
* @ license MIT
* * /
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
function makeMap ( str ) {
const map = /* @__PURE__ */ Object . create ( null ) ;
for ( const key of str . split ( "," ) ) map [ key ] = 1 ;
return ( val ) => val in map ;
2024-01-05 12:14:38 +00:00
}
const EMPTY _OBJ = Object . freeze ( { } ) ;
const EMPTY _ARR = Object . freeze ( [ ] ) ;
const NOOP = ( ) => {
} ;
const NO = ( ) => false ;
const isOn = ( key ) => key . charCodeAt ( 0 ) === 111 && key . charCodeAt ( 1 ) === 110 && // uppercase letter
( key . charCodeAt ( 2 ) > 122 || key . charCodeAt ( 2 ) < 97 ) ;
const isModelListener = ( key ) => key . startsWith ( "onUpdate:" ) ;
const extend = Object . assign ;
const remove = ( arr , el ) => {
const i = arr . indexOf ( el ) ;
if ( i > - 1 ) {
arr . splice ( i , 1 ) ;
}
} ;
const hasOwnProperty$1 = Object . prototype . hasOwnProperty ;
const hasOwn = ( val , key ) => hasOwnProperty$1 . call ( val , key ) ;
const isArray = Array . isArray ;
const isMap = ( val ) => toTypeString ( val ) === "[object Map]" ;
const isSet = ( val ) => toTypeString ( val ) === "[object Set]" ;
const isDate = ( val ) => toTypeString ( val ) === "[object Date]" ;
const isFunction = ( val ) => typeof val === "function" ;
const isString = ( val ) => typeof val === "string" ;
const isSymbol = ( val ) => typeof val === "symbol" ;
const isObject = ( val ) => val !== null && typeof val === "object" ;
const isPromise = ( val ) => {
return ( isObject ( val ) || isFunction ( val ) ) && isFunction ( val . then ) && isFunction ( val . catch ) ;
} ;
const objectToString = Object . prototype . toString ;
const toTypeString = ( value ) => objectToString . call ( value ) ;
const toRawType = ( value ) => {
return toTypeString ( value ) . slice ( 8 , - 1 ) ;
} ;
const isPlainObject = ( val ) => toTypeString ( val ) === "[object Object]" ;
const isIntegerKey = ( key ) => isString ( key ) && key !== "NaN" && key [ 0 ] !== "-" && "" + parseInt ( key , 10 ) === key ;
const isReservedProp = /* @__PURE__ */ makeMap (
// the leading comma is intentional so empty string "" is also included
",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
) ;
const isBuiltInDirective = /* @__PURE__ */ makeMap (
"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
) ;
const cacheStringFunction = ( fn ) => {
const cache = /* @__PURE__ */ Object . create ( null ) ;
2026-02-11 16:20:26 +00:00
return ( ( str ) => {
2024-01-05 12:14:38 +00:00
const hit = cache [ str ] ;
return hit || ( cache [ str ] = fn ( str ) ) ;
2026-02-11 16:20:26 +00:00
} ) ;
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
const camelizeRE = /-\w/g ;
const camelize = cacheStringFunction (
( str ) => {
return str . replace ( camelizeRE , ( c ) => c . slice ( 1 ) . toUpperCase ( ) ) ;
}
) ;
2024-01-05 12:14:38 +00:00
const hyphenateRE = /\B([A-Z])/g ;
const hyphenate = cacheStringFunction (
( str ) => str . replace ( hyphenateRE , "-$1" ) . toLowerCase ( )
) ;
const capitalize = cacheStringFunction ( ( str ) => {
return str . charAt ( 0 ) . toUpperCase ( ) + str . slice ( 1 ) ;
} ) ;
2026-02-11 16:20:26 +00:00
const toHandlerKey = cacheStringFunction (
( str ) => {
const s = str ? ` on ${ capitalize ( str ) } ` : ` ` ;
return s ;
}
) ;
2024-01-05 12:14:38 +00:00
const hasChanged = ( value , oldValue ) => ! Object . is ( value , oldValue ) ;
2026-02-11 16:20:26 +00:00
const invokeArrayFns = ( fns , ... arg ) => {
2024-01-05 12:14:38 +00:00
for ( let i = 0 ; i < fns . length ; i ++ ) {
2026-02-11 16:20:26 +00:00
fns [ i ] ( ... arg ) ;
2024-01-05 12:14:38 +00:00
}
} ;
2026-02-11 16:20:26 +00:00
const def = ( obj , key , value , writable = false ) => {
2024-01-05 12:14:38 +00:00
Object . defineProperty ( obj , key , {
configurable : true ,
enumerable : false ,
2026-02-11 16:20:26 +00:00
writable ,
2024-01-05 12:14:38 +00:00
value
} ) ;
} ;
const looseToNumber = ( val ) => {
const n = parseFloat ( val ) ;
return isNaN ( n ) ? val : n ;
} ;
let _globalThis ;
const getGlobalThis = ( ) => {
return _globalThis || ( _globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : { } ) ;
} ;
function normalizeStyle ( value ) {
if ( isArray ( value ) ) {
const res = { } ;
for ( let i = 0 ; i < value . length ; i ++ ) {
const item = value [ i ] ;
const normalized = isString ( item ) ? parseStringStyle ( item ) : normalizeStyle ( item ) ;
if ( normalized ) {
for ( const key in normalized ) {
res [ key ] = normalized [ key ] ;
}
}
}
return res ;
} else if ( isString ( value ) || isObject ( value ) ) {
return value ;
}
}
const listDelimiterRE = /;(?![^(]*\))/g ;
const propertyDelimiterRE = /:([^]+)/ ;
const styleCommentRE = /\/\*[^]*?\*\//g ;
function parseStringStyle ( cssText ) {
const ret = { } ;
cssText . replace ( styleCommentRE , "" ) . split ( listDelimiterRE ) . forEach ( ( item ) => {
if ( item ) {
const tmp = item . split ( propertyDelimiterRE ) ;
tmp . length > 1 && ( ret [ tmp [ 0 ] . trim ( ) ] = tmp [ 1 ] . trim ( ) ) ;
}
} ) ;
return ret ;
}
function stringifyStyle ( styles ) {
2026-02-11 16:20:26 +00:00
if ( ! styles ) return "" ;
if ( isString ( styles ) ) return styles ;
2024-01-05 12:14:38 +00:00
let ret = "" ;
for ( const key in styles ) {
const value = styles [ key ] ;
if ( isString ( value ) || typeof value === "number" ) {
2026-02-11 16:20:26 +00:00
const normalizedKey = key . startsWith ( ` -- ` ) ? key : hyphenate ( key ) ;
2024-01-05 12:14:38 +00:00
ret += ` ${ normalizedKey } : ${ value } ; ` ;
}
}
return ret ;
}
function normalizeClass ( value ) {
let res = "" ;
if ( isString ( value ) ) {
res = value ;
} else if ( isArray ( value ) ) {
for ( let i = 0 ; i < value . length ; i ++ ) {
const normalized = normalizeClass ( value [ i ] ) ;
if ( normalized ) {
res += normalized + " " ;
}
}
} else if ( isObject ( value ) ) {
for ( const name in value ) {
if ( value [ name ] ) {
res += name + " " ;
}
}
}
return res . trim ( ) ;
}
const HTML _TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot" ;
const SVG _TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view" ;
const MATH _TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics" ;
const VOID _TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr" ;
const isHTMLTag = /* @__PURE__ */ makeMap ( HTML _TAGS ) ;
const isSVGTag = /* @__PURE__ */ makeMap ( SVG _TAGS ) ;
const isMathMLTag = /* @__PURE__ */ makeMap ( MATH _TAGS ) ;
const isVoidTag = /* @__PURE__ */ makeMap ( VOID _TAGS ) ;
const specialBooleanAttrs = ` itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly ` ;
const isSpecialBooleanAttr = /* @__PURE__ */ makeMap ( specialBooleanAttrs ) ;
const isBooleanAttr = /* @__PURE__ */ makeMap (
specialBooleanAttrs + ` ,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected `
) ;
function includeBooleanAttr ( value ) {
return ! ! value || value === "" ;
}
const unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/ ;
const attrValidationCache = { } ;
function isSSRSafeAttrName ( name ) {
if ( attrValidationCache . hasOwnProperty ( name ) ) {
return attrValidationCache [ name ] ;
}
const isUnsafe = unsafeAttrCharRE . test ( name ) ;
if ( isUnsafe ) {
console . error ( ` unsafe attribute name: ${ name } ` ) ;
}
return attrValidationCache [ name ] = ! isUnsafe ;
}
const propsToAttrMap = {
acceptCharset : "accept-charset" ,
className : "class" ,
htmlFor : "for" ,
httpEquiv : "http-equiv"
} ;
2024-01-31 06:33:19 +00:00
function isRenderableAttrValue ( value ) {
if ( value == null ) {
return false ;
}
const type = typeof value ;
return type === "string" || type === "number" || type === "boolean" ;
}
2024-01-05 12:14:38 +00:00
const escapeRE = /["'&<>]/ ;
function escapeHtml ( string ) {
const str = "" + string ;
const match = escapeRE . exec ( str ) ;
if ( ! match ) {
return str ;
}
let html = "" ;
let escaped ;
let index ;
let lastIndex = 0 ;
for ( index = match . index ; index < str . length ; index ++ ) {
switch ( str . charCodeAt ( index ) ) {
case 34 :
escaped = """ ;
break ;
case 38 :
escaped = "&" ;
break ;
case 39 :
escaped = "'" ;
break ;
case 60 :
escaped = "<" ;
break ;
case 62 :
escaped = ">" ;
break ;
default :
continue ;
}
if ( lastIndex !== index ) {
html += str . slice ( lastIndex , index ) ;
}
lastIndex = index + 1 ;
html += escaped ;
}
return lastIndex !== index ? html + str . slice ( lastIndex , index ) : html ;
}
const commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g ;
function escapeHtmlComment ( src ) {
return src . replace ( commentStripRE , "" ) ;
}
function looseCompareArrays ( a , b ) {
2026-02-11 16:20:26 +00:00
if ( a . length !== b . length ) return false ;
2024-01-05 12:14:38 +00:00
let equal = true ;
for ( let i = 0 ; equal && i < a . length ; i ++ ) {
equal = looseEqual ( a [ i ] , b [ i ] ) ;
}
return equal ;
}
function looseEqual ( a , b ) {
2026-02-11 16:20:26 +00:00
if ( a === b ) return true ;
2024-01-05 12:14:38 +00:00
let aValidType = isDate ( a ) ;
let bValidType = isDate ( b ) ;
if ( aValidType || bValidType ) {
return aValidType && bValidType ? a . getTime ( ) === b . getTime ( ) : false ;
}
aValidType = isSymbol ( a ) ;
bValidType = isSymbol ( b ) ;
if ( aValidType || bValidType ) {
return a === b ;
}
aValidType = isArray ( a ) ;
bValidType = isArray ( b ) ;
if ( aValidType || bValidType ) {
return aValidType && bValidType ? looseCompareArrays ( a , b ) : false ;
}
aValidType = isObject ( a ) ;
bValidType = isObject ( b ) ;
if ( aValidType || bValidType ) {
if ( ! aValidType || ! bValidType ) {
return false ;
}
const aKeysCount = Object . keys ( a ) . length ;
const bKeysCount = Object . keys ( b ) . length ;
if ( aKeysCount !== bKeysCount ) {
return false ;
}
for ( const key in a ) {
const aHasKey = a . hasOwnProperty ( key ) ;
const bHasKey = b . hasOwnProperty ( key ) ;
if ( aHasKey && ! bHasKey || ! aHasKey && bHasKey || ! looseEqual ( a [ key ] , b [ key ] ) ) {
return false ;
}
}
}
return String ( a ) === String ( b ) ;
}
function looseIndexOf ( arr , val ) {
return arr . findIndex ( ( item ) => looseEqual ( item , val ) ) ;
}
2026-02-11 16:20:26 +00:00
const isRef$1 = ( val ) => {
return ! ! ( val && val [ "__v_isRef" ] === true ) ;
} ;
2024-01-05 12:14:38 +00:00
const toDisplayString = ( val ) => {
2026-02-11 16:20:26 +00:00
return isString ( val ) ? val : val == null ? "" : isArray ( val ) || isObject ( val ) && ( val . toString === objectToString || ! isFunction ( val . toString ) ) ? isRef$1 ( val ) ? toDisplayString ( val . value ) : JSON . stringify ( val , replacer , 2 ) : String ( val ) ;
2024-01-05 12:14:38 +00:00
} ;
const replacer = ( _key , val ) => {
2026-02-11 16:20:26 +00:00
if ( isRef$1 ( val ) ) {
2024-01-05 12:14:38 +00:00
return replacer ( _key , val . value ) ;
} else if ( isMap ( val ) ) {
return {
[ ` Map( ${ val . size } ) ` ] : [ ... val . entries ( ) ] . reduce (
( entries , [ key , val2 ] , i ) => {
entries [ stringifySymbol ( key , i ) + " =>" ] = val2 ;
return entries ;
} ,
{ }
)
} ;
} else if ( isSet ( val ) ) {
return {
[ ` Set( ${ val . size } ) ` ] : [ ... val . values ( ) ] . map ( ( v ) => stringifySymbol ( v ) )
} ;
} else if ( isSymbol ( val ) ) {
return stringifySymbol ( val ) ;
} else if ( isObject ( val ) && ! isArray ( val ) && ! isPlainObject ( val ) ) {
return String ( val ) ;
}
return val ;
} ;
const stringifySymbol = ( v , i = "" ) => {
var _a ;
2026-02-11 16:20:26 +00:00
return (
// Symbol.description in es2019+ so we need to cast here to pass
// the lib: es2016 check
isSymbol ( v ) ? ` Symbol( ${ ( _a = v . description ) != null ? _a : i } ) ` : v
) ;
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
function normalizeCssVarValue ( value ) {
if ( value == null ) {
return "initial" ;
}
if ( typeof value === "string" ) {
return value === "" ? " " : value ;
}
if ( typeof value !== "number" || ! Number . isFinite ( value ) ) {
{
console . warn (
"[Vue warn] Invalid value used for CSS binding. Expected a string or a finite number but received:" ,
value
) ;
}
}
return String ( value ) ;
}
2024-01-05 12:14:38 +00:00
function warn$2 ( msg , ... args ) {
console . warn ( ` [Vue warn] ${ msg } ` , ... args ) ;
}
let activeEffectScope ;
class EffectScope {
2026-02-11 16:20:26 +00:00
// TODO isolatedDeclarations "__v_skip"
2024-01-05 12:14:38 +00:00
constructor ( detached = false ) {
this . detached = detached ;
/ * *
* @ internal
* /
this . _active = true ;
2026-02-11 16:20:26 +00:00
/ * *
* @ internal track ` on ` calls , allow ` on ` call multiple times
* /
this . _on = 0 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
this . effects = [ ] ;
/ * *
* @ internal
* /
this . cleanups = [ ] ;
2026-02-11 16:20:26 +00:00
this . _isPaused = false ;
this . _ _v _skip = true ;
2024-01-05 12:14:38 +00:00
this . parent = activeEffectScope ;
if ( ! detached && activeEffectScope ) {
this . index = ( activeEffectScope . scopes || ( activeEffectScope . scopes = [ ] ) ) . push (
this
) - 1 ;
}
}
get active ( ) {
return this . _active ;
}
2026-02-11 16:20:26 +00:00
pause ( ) {
if ( this . _active ) {
this . _isPaused = true ;
let i , l ;
if ( this . scopes ) {
for ( i = 0 , l = this . scopes . length ; i < l ; i ++ ) {
this . scopes [ i ] . pause ( ) ;
}
}
for ( i = 0 , l = this . effects . length ; i < l ; i ++ ) {
this . effects [ i ] . pause ( ) ;
}
}
}
/ * *
* Resumes the effect scope , including all child scopes and effects .
* /
resume ( ) {
if ( this . _active ) {
if ( this . _isPaused ) {
this . _isPaused = false ;
let i , l ;
if ( this . scopes ) {
for ( i = 0 , l = this . scopes . length ; i < l ; i ++ ) {
this . scopes [ i ] . resume ( ) ;
}
}
for ( i = 0 , l = this . effects . length ; i < l ; i ++ ) {
this . effects [ i ] . resume ( ) ;
}
}
}
}
2024-01-05 12:14:38 +00:00
run ( fn ) {
if ( this . _active ) {
const currentEffectScope = activeEffectScope ;
try {
activeEffectScope = this ;
return fn ( ) ;
} finally {
activeEffectScope = currentEffectScope ;
}
} else {
warn$2 ( ` cannot run an inactive effect scope. ` ) ;
}
}
/ * *
* This should only be called on non - detached scopes
* @ internal
* /
on ( ) {
2026-02-11 16:20:26 +00:00
if ( ++ this . _on === 1 ) {
this . prevScope = activeEffectScope ;
activeEffectScope = this ;
}
2024-01-05 12:14:38 +00:00
}
/ * *
* This should only be called on non - detached scopes
* @ internal
* /
off ( ) {
2026-02-11 16:20:26 +00:00
if ( this . _on > 0 && -- this . _on === 0 ) {
activeEffectScope = this . prevScope ;
this . prevScope = void 0 ;
}
2024-01-05 12:14:38 +00:00
}
stop ( fromParent ) {
if ( this . _active ) {
2026-02-11 16:20:26 +00:00
this . _active = false ;
2024-01-05 12:14:38 +00:00
let i , l ;
for ( i = 0 , l = this . effects . length ; i < l ; i ++ ) {
this . effects [ i ] . stop ( ) ;
}
2026-02-11 16:20:26 +00:00
this . effects . length = 0 ;
2024-01-05 12:14:38 +00:00
for ( i = 0 , l = this . cleanups . length ; i < l ; i ++ ) {
this . cleanups [ i ] ( ) ;
}
2026-02-11 16:20:26 +00:00
this . cleanups . length = 0 ;
2024-01-05 12:14:38 +00:00
if ( this . scopes ) {
for ( i = 0 , l = this . scopes . length ; i < l ; i ++ ) {
this . scopes [ i ] . stop ( true ) ;
}
2026-02-11 16:20:26 +00:00
this . scopes . length = 0 ;
2024-01-05 12:14:38 +00:00
}
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 ;
}
}
}
function getCurrentScope ( ) {
return activeEffectScope ;
}
2026-02-11 16:20:26 +00:00
let activeSub ;
const pausedQueueEffects = /* @__PURE__ */ new WeakSet ( ) ;
2024-01-05 12:14:38 +00:00
class ReactiveEffect {
2026-02-11 16:20:26 +00:00
constructor ( fn ) {
2024-01-05 12:14:38 +00:00
this . fn = fn ;
/ * *
* @ internal
* /
2026-02-11 16:20:26 +00:00
this . deps = void 0 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
2026-02-11 16:20:26 +00:00
this . depsTail = void 0 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
2026-02-11 16:20:26 +00:00
this . flags = 1 | 4 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
2026-02-11 16:20:26 +00:00
this . next = void 0 ;
2024-01-05 12:14:38 +00:00
/ * *
* @ internal
* /
2026-02-11 16:20:26 +00:00
this . cleanup = void 0 ;
this . scheduler = void 0 ;
if ( activeEffectScope && activeEffectScope . active ) {
activeEffectScope . effects . push ( this ) ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
pause ( ) {
this . flags |= 64 ;
}
resume ( ) {
if ( this . flags & 64 ) {
this . flags &= - 65 ;
if ( pausedQueueEffects . has ( this ) ) {
pausedQueueEffects . delete ( this ) ;
this . trigger ( ) ;
2024-01-31 06:33:19 +00:00
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
/ * *
* @ internal
* /
notify ( ) {
if ( this . flags & 2 && ! ( this . flags & 32 ) ) {
return ;
}
if ( ! ( this . flags & 8 ) ) {
batch ( this ) ;
}
2024-01-05 12:14:38 +00:00
}
run ( ) {
2026-02-11 16:20:26 +00:00
if ( ! ( this . flags & 1 ) ) {
2024-01-05 12:14:38 +00:00
return this . fn ( ) ;
}
2026-02-11 16:20:26 +00:00
this . flags |= 2 ;
cleanupEffect ( this ) ;
prepareDeps ( this ) ;
const prevEffect = activeSub ;
const prevShouldTrack = shouldTrack ;
activeSub = this ;
shouldTrack = true ;
2024-01-05 12:14:38 +00:00
try {
return this . fn ( ) ;
} finally {
2026-02-11 16:20:26 +00:00
if ( activeSub !== this ) {
warn$2 (
"Active effect was not restored correctly - this is likely a Vue internal bug."
) ;
}
cleanupDeps ( this ) ;
activeSub = prevEffect ;
shouldTrack = prevShouldTrack ;
this . flags &= - 3 ;
2024-01-05 12:14:38 +00:00
}
}
stop ( ) {
2026-02-11 16:20:26 +00:00
if ( this . flags & 1 ) {
for ( let link = this . deps ; link ; link = link . nextDep ) {
removeSub ( link ) ;
}
this . deps = this . depsTail = void 0 ;
cleanupEffect ( this ) ;
this . onStop && this . onStop ( ) ;
this . flags &= - 2 ;
}
}
trigger ( ) {
if ( this . flags & 64 ) {
pausedQueueEffects . add ( this ) ;
} else if ( this . scheduler ) {
this . scheduler ( ) ;
} else {
this . runIfDirty ( ) ;
}
}
/ * *
* @ internal
* /
runIfDirty ( ) {
if ( isDirty ( this ) ) {
this . run ( ) ;
}
}
get dirty ( ) {
return isDirty ( this ) ;
}
}
let batchDepth = 0 ;
let batchedSub ;
let batchedComputed ;
function batch ( sub , isComputed = false ) {
sub . flags |= 8 ;
if ( isComputed ) {
sub . next = batchedComputed ;
batchedComputed = sub ;
return ;
}
sub . next = batchedSub ;
batchedSub = sub ;
}
function startBatch ( ) {
batchDepth ++ ;
}
function endBatch ( ) {
if ( -- batchDepth > 0 ) {
return ;
}
if ( batchedComputed ) {
let e = batchedComputed ;
batchedComputed = void 0 ;
while ( e ) {
const next = e . next ;
e . next = void 0 ;
e . flags &= - 9 ;
e = next ;
}
}
let error ;
while ( batchedSub ) {
let e = batchedSub ;
batchedSub = void 0 ;
while ( e ) {
const next = e . next ;
e . next = void 0 ;
e . flags &= - 9 ;
if ( e . flags & 1 ) {
try {
;
e . trigger ( ) ;
} catch ( err ) {
if ( ! error ) error = err ;
}
}
e = next ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( error ) throw error ;
}
function prepareDeps ( sub ) {
for ( let link = sub . deps ; link ; link = link . nextDep ) {
link . version = - 1 ;
link . prevActiveLink = link . dep . activeLink ;
link . dep . activeLink = link ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function cleanupDeps ( sub ) {
let head ;
let tail = sub . depsTail ;
let link = tail ;
while ( link ) {
const prev = link . prevDep ;
if ( link . version === - 1 ) {
if ( link === tail ) tail = prev ;
removeSub ( link ) ;
removeDep ( link ) ;
} else {
head = link ;
}
link . dep . activeLink = link . prevActiveLink ;
link . prevActiveLink = void 0 ;
link = prev ;
}
sub . deps = head ;
sub . depsTail = tail ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function isDirty ( sub ) {
for ( let link = sub . deps ; link ; link = link . nextDep ) {
if ( link . dep . version !== link . version || link . dep . computed && ( refreshComputed ( link . dep . computed ) || link . dep . version !== link . version ) ) {
return true ;
}
}
if ( sub . _dirty ) {
return true ;
}
return false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function refreshComputed ( computed ) {
if ( computed . flags & 4 && ! ( computed . flags & 16 ) ) {
return ;
}
computed . flags &= - 17 ;
if ( computed . globalVersion === globalVersion ) {
return ;
}
computed . globalVersion = globalVersion ;
if ( ! computed . isSSR && computed . flags & 128 && ( ! computed . deps && ! computed . _dirty || ! isDirty ( computed ) ) ) {
return ;
}
computed . flags |= 2 ;
const dep = computed . dep ;
const prevSub = activeSub ;
const prevShouldTrack = shouldTrack ;
activeSub = computed ;
shouldTrack = true ;
try {
prepareDeps ( computed ) ;
const value = computed . fn ( computed . _value ) ;
if ( dep . version === 0 || hasChanged ( value , computed . _value ) ) {
computed . flags |= 128 ;
computed . _value = value ;
dep . version ++ ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} catch ( err ) {
dep . version ++ ;
throw err ;
} finally {
activeSub = prevSub ;
shouldTrack = prevShouldTrack ;
cleanupDeps ( computed ) ;
computed . flags &= - 3 ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
function removeSub ( link , soft = false ) {
const { dep , prevSub , nextSub } = link ;
if ( prevSub ) {
prevSub . nextSub = nextSub ;
link . prevSub = void 0 ;
}
if ( nextSub ) {
nextSub . prevSub = prevSub ;
link . nextSub = void 0 ;
}
if ( dep . subsHead === link ) {
dep . subsHead = nextSub ;
}
if ( dep . subs === link ) {
dep . subs = prevSub ;
if ( ! prevSub && dep . computed ) {
dep . computed . flags &= - 5 ;
for ( let l = dep . computed . deps ; l ; l = l . nextDep ) {
removeSub ( l , true ) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( ! soft && ! -- dep . sc && dep . map ) {
dep . map . delete ( dep . key ) ;
}
}
function removeDep ( link ) {
const { prevDep , nextDep } = link ;
if ( prevDep ) {
prevDep . nextDep = nextDep ;
link . prevDep = void 0 ;
}
if ( nextDep ) {
nextDep . prevDep = prevDep ;
link . nextDep = void 0 ;
}
2024-01-05 12:14:38 +00:00
}
let shouldTrack = true ;
const trackStack = [ ] ;
function pauseTracking ( ) {
trackStack . push ( shouldTrack ) ;
shouldTrack = false ;
}
function resetTracking ( ) {
const last = trackStack . pop ( ) ;
shouldTrack = last === void 0 ? true : last ;
}
2026-02-11 16:20:26 +00:00
function cleanupEffect ( e ) {
const { cleanup } = e ;
e . cleanup = void 0 ;
if ( cleanup ) {
const prevSub = activeSub ;
activeSub = void 0 ;
try {
cleanup ( ) ;
} finally {
activeSub = prevSub ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
let globalVersion = 0 ;
class Link {
constructor ( sub , dep ) {
this . sub = sub ;
this . dep = dep ;
this . version = dep . version ;
this . nextDep = this . prevDep = this . nextSub = this . prevSub = this . prevActiveLink = void 0 ;
}
}
class Dep {
// TODO isolatedDeclarations "__v_skip"
constructor ( computed ) {
this . computed = computed ;
this . version = 0 ;
/ * *
* Link between this dep and the current active effect
* /
this . activeLink = void 0 ;
/ * *
* Doubly linked list representing the subscribing effects ( tail )
* /
this . subs = void 0 ;
/ * *
* For object property deps cleanup
* /
this . map = void 0 ;
this . key = void 0 ;
/ * *
* Subscriber counter
* /
this . sc = 0 ;
/ * *
* @ internal
* /
this . _ _v _skip = true ;
2024-01-05 12:14:38 +00:00
{
2026-02-11 16:20:26 +00:00
this . subsHead = void 0 ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
track ( debugInfo ) {
if ( ! activeSub || ! shouldTrack || activeSub === this . computed ) {
return ;
}
let link = this . activeLink ;
if ( link === void 0 || link . sub !== activeSub ) {
link = this . activeLink = new Link ( activeSub , this ) ;
if ( ! activeSub . deps ) {
activeSub . deps = activeSub . depsTail = link ;
} else {
link . prevDep = activeSub . depsTail ;
activeSub . depsTail . nextDep = link ;
activeSub . depsTail = link ;
}
addSub ( link ) ;
} else if ( link . version === - 1 ) {
link . version = this . version ;
if ( link . nextDep ) {
const next = link . nextDep ;
next . prevDep = link . prevDep ;
if ( link . prevDep ) {
link . prevDep . nextDep = next ;
}
link . prevDep = activeSub . depsTail ;
link . nextDep = void 0 ;
activeSub . depsTail . nextDep = link ;
activeSub . depsTail = link ;
if ( activeSub . deps === link ) {
activeSub . deps = next ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
if ( activeSub . onTrack ) {
activeSub . onTrack (
extend (
{
effect : activeSub
} ,
debugInfo
)
) ;
}
return link ;
}
trigger ( debugInfo ) {
this . version ++ ;
globalVersion ++ ;
this . notify ( debugInfo ) ;
}
notify ( debugInfo ) {
startBatch ( ) ;
try {
if ( true ) {
for ( let head = this . subsHead ; head ; head = head . nextSub ) {
if ( head . sub . onTrigger && ! ( head . sub . flags & 8 ) ) {
head . sub . onTrigger (
extend (
{
effect : head . sub
} ,
debugInfo
)
) ;
}
}
}
for ( let link = this . subs ; link ; link = link . prevSub ) {
if ( link . sub . notify ( ) ) {
;
link . sub . dep . notify ( ) ;
}
}
} finally {
endBatch ( ) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
function addSub ( link ) {
link . dep . sc ++ ;
if ( link . sub . flags & 4 ) {
const computed = link . dep . computed ;
if ( computed && ! link . dep . subs ) {
computed . flags |= 4 | 16 ;
for ( let l = computed . deps ; l ; l = l . nextDep ) {
addSub ( l ) ;
}
2024-01-31 06:33:19 +00:00
}
2026-02-11 16:20:26 +00:00
const currentTail = link . dep . subs ;
if ( currentTail !== link ) {
link . prevSub = currentTail ;
if ( currentTail ) currentTail . nextSub = link ;
}
if ( link . dep . subsHead === void 0 ) {
link . dep . subsHead = link ;
}
link . dep . subs = link ;
2024-01-31 06:33:19 +00:00
}
}
2024-01-05 12:14:38 +00:00
const targetMap = /* @__PURE__ */ new WeakMap ( ) ;
2026-02-11 16:20:26 +00:00
const ITERATE _KEY = /* @__PURE__ */ Symbol (
"Object iterate"
) ;
const MAP _KEY _ITERATE _KEY = /* @__PURE__ */ Symbol (
"Map keys iterate"
) ;
const ARRAY _ITERATE _KEY = /* @__PURE__ */ Symbol (
"Array iterate"
) ;
2024-01-05 12:14:38 +00:00
function track ( target , type , key ) {
2026-02-11 16:20:26 +00:00
if ( shouldTrack && activeSub ) {
2024-01-05 12:14:38 +00:00
let depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
targetMap . set ( target , depsMap = /* @__PURE__ */ new Map ( ) ) ;
}
let dep = depsMap . get ( key ) ;
if ( ! dep ) {
2026-02-11 16:20:26 +00:00
depsMap . set ( key , dep = new Dep ( ) ) ;
dep . map = depsMap ;
dep . key = key ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
{
dep . track ( {
2024-01-05 12:14:38 +00:00
target ,
type ,
key
2026-02-11 16:20:26 +00:00
} ) ;
}
2024-01-05 12:14:38 +00:00
}
}
function trigger ( target , type , key , newValue , oldValue , oldTarget ) {
const depsMap = targetMap . get ( target ) ;
if ( ! depsMap ) {
2026-02-11 16:20:26 +00:00
globalVersion ++ ;
2024-01-05 12:14:38 +00:00
return ;
}
2026-02-11 16:20:26 +00:00
const run = ( dep ) => {
2024-01-05 12:14:38 +00:00
if ( dep ) {
2026-02-11 16:20:26 +00:00
{
dep . trigger ( {
2024-01-05 12:14:38 +00:00
target ,
type ,
key ,
newValue ,
oldValue ,
oldTarget
2026-02-11 16:20:26 +00:00
} ) ;
}
}
} ;
startBatch ( ) ;
if ( type === "clear" ) {
depsMap . forEach ( run ) ;
} else {
const targetIsArray = isArray ( target ) ;
const isArrayIndex = targetIsArray && isIntegerKey ( key ) ;
if ( targetIsArray && key === "length" ) {
const newLength = Number ( newValue ) ;
depsMap . forEach ( ( dep , key2 ) => {
if ( key2 === "length" || key2 === ARRAY _ITERATE _KEY || ! isSymbol ( key2 ) && key2 >= newLength ) {
run ( dep ) ;
}
} ) ;
} else {
if ( key !== void 0 || depsMap . has ( void 0 ) ) {
run ( depsMap . get ( key ) ) ;
}
if ( isArrayIndex ) {
run ( depsMap . get ( ARRAY _ITERATE _KEY ) ) ;
}
switch ( type ) {
case "add" :
if ( ! targetIsArray ) {
run ( depsMap . get ( ITERATE _KEY ) ) ;
if ( isMap ( target ) ) {
run ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
} else if ( isArrayIndex ) {
run ( depsMap . get ( "length" ) ) ;
}
break ;
case "delete" :
if ( ! targetIsArray ) {
run ( depsMap . get ( ITERATE _KEY ) ) ;
if ( isMap ( target ) ) {
run ( depsMap . get ( MAP _KEY _ITERATE _KEY ) ) ;
}
}
break ;
case "set" :
if ( isMap ( target ) ) {
run ( depsMap . get ( ITERATE _KEY ) ) ;
}
break ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
endBatch ( ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function reactiveReadArray ( array ) {
const raw = toRaw ( array ) ;
if ( raw === array ) return raw ;
track ( raw , "iterate" , ARRAY _ITERATE _KEY ) ;
return isShallow ( array ) ? raw : raw . map ( toReactive ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function shallowReadArray ( arr ) {
track ( arr = toRaw ( arr ) , "iterate" , ARRAY _ITERATE _KEY ) ;
return arr ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function toWrapped ( target , item ) {
if ( isReadonly ( target ) ) {
return isReactive ( target ) ? toReadonly ( toReactive ( item ) ) : toReadonly ( item ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return toReactive ( item ) ;
}
const arrayInstrumentations = {
_ _proto _ _ : null ,
[ Symbol . iterator ] ( ) {
return iterator ( this , Symbol . iterator , ( item ) => toWrapped ( this , item ) ) ;
} ,
concat ( ... args ) {
return reactiveReadArray ( this ) . concat (
... args . map ( ( x ) => isArray ( x ) ? reactiveReadArray ( x ) : x )
) ;
} ,
entries ( ) {
return iterator ( this , "entries" , ( value ) => {
value [ 1 ] = toWrapped ( this , value [ 1 ] ) ;
return value ;
} ) ;
} ,
every ( fn , thisArg ) {
return apply ( this , "every" , fn , thisArg , void 0 , arguments ) ;
} ,
filter ( fn , thisArg ) {
return apply (
this ,
"filter" ,
fn ,
thisArg ,
( v ) => v . map ( ( item ) => toWrapped ( this , item ) ) ,
arguments
) ;
} ,
find ( fn , thisArg ) {
return apply (
this ,
"find" ,
fn ,
thisArg ,
( item ) => toWrapped ( this , item ) ,
arguments
) ;
} ,
findIndex ( fn , thisArg ) {
return apply ( this , "findIndex" , fn , thisArg , void 0 , arguments ) ;
} ,
findLast ( fn , thisArg ) {
return apply (
this ,
"findLast" ,
fn ,
thisArg ,
( item ) => toWrapped ( this , item ) ,
arguments
) ;
} ,
findLastIndex ( fn , thisArg ) {
return apply ( this , "findLastIndex" , fn , thisArg , void 0 , arguments ) ;
} ,
// flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement
forEach ( fn , thisArg ) {
return apply ( this , "forEach" , fn , thisArg , void 0 , arguments ) ;
} ,
includes ( ... args ) {
return searchProxy ( this , "includes" , args ) ;
} ,
indexOf ( ... args ) {
return searchProxy ( this , "indexOf" , args ) ;
} ,
join ( separator ) {
return reactiveReadArray ( this ) . join ( separator ) ;
} ,
// keys() iterator only reads `length`, no optimization required
lastIndexOf ( ... args ) {
return searchProxy ( this , "lastIndexOf" , args ) ;
} ,
map ( fn , thisArg ) {
return apply ( this , "map" , fn , thisArg , void 0 , arguments ) ;
} ,
pop ( ) {
return noTracking ( this , "pop" ) ;
} ,
push ( ... args ) {
return noTracking ( this , "push" , args ) ;
} ,
reduce ( fn , ... args ) {
return reduce ( this , "reduce" , fn , args ) ;
} ,
reduceRight ( fn , ... args ) {
return reduce ( this , "reduceRight" , fn , args ) ;
} ,
shift ( ) {
return noTracking ( this , "shift" ) ;
} ,
// slice could use ARRAY_ITERATE but also seems to beg for range tracking
some ( fn , thisArg ) {
return apply ( this , "some" , fn , thisArg , void 0 , arguments ) ;
} ,
splice ( ... args ) {
return noTracking ( this , "splice" , args ) ;
} ,
toReversed ( ) {
return reactiveReadArray ( this ) . toReversed ( ) ;
} ,
toSorted ( comparer ) {
return reactiveReadArray ( this ) . toSorted ( comparer ) ;
} ,
toSpliced ( ... args ) {
return reactiveReadArray ( this ) . toSpliced ( ... args ) ;
} ,
unshift ( ... args ) {
return noTracking ( this , "unshift" , args ) ;
} ,
values ( ) {
return iterator ( this , "values" , ( item ) => toWrapped ( this , item ) ) ;
}
} ;
function iterator ( self , method , wrapValue ) {
const arr = shallowReadArray ( self ) ;
const iter = arr [ method ] ( ) ;
if ( arr !== self && ! isShallow ( self ) ) {
iter . _next = iter . next ;
iter . next = ( ) => {
const result = iter . _next ( ) ;
if ( ! result . done ) {
result . value = wrapValue ( result . value ) ;
}
return result ;
} ;
}
return iter ;
}
const arrayProto = Array . prototype ;
function apply ( self , method , fn , thisArg , wrappedRetFn , args ) {
const arr = shallowReadArray ( self ) ;
const needsWrap = arr !== self && ! isShallow ( self ) ;
const methodFn = arr [ method ] ;
if ( methodFn !== arrayProto [ method ] ) {
const result2 = methodFn . apply ( self , args ) ;
return needsWrap ? toReactive ( result2 ) : result2 ;
}
let wrappedFn = fn ;
if ( arr !== self ) {
if ( needsWrap ) {
wrappedFn = function ( item , index ) {
return fn . call ( this , toWrapped ( self , item ) , index , self ) ;
} ;
} else if ( fn . length > 2 ) {
wrappedFn = function ( item , index ) {
return fn . call ( this , item , index , self ) ;
} ;
}
}
const result = methodFn . call ( arr , wrappedFn , thisArg ) ;
return needsWrap && wrappedRetFn ? wrappedRetFn ( result ) : result ;
}
function reduce ( self , method , fn , args ) {
const arr = shallowReadArray ( self ) ;
let wrappedFn = fn ;
if ( arr !== self ) {
if ( ! isShallow ( self ) ) {
wrappedFn = function ( acc , item , index ) {
return fn . call ( this , acc , toWrapped ( self , item ) , index , self ) ;
} ;
} else if ( fn . length > 3 ) {
wrappedFn = function ( acc , item , index ) {
return fn . call ( this , acc , item , index , self ) ;
} ;
}
}
return arr [ method ] ( wrappedFn , ... args ) ;
}
function searchProxy ( self , method , args ) {
const arr = toRaw ( self ) ;
track ( arr , "iterate" , ARRAY _ITERATE _KEY ) ;
const res = arr [ method ] ( ... args ) ;
if ( ( res === - 1 || res === false ) && isProxy ( args [ 0 ] ) ) {
args [ 0 ] = toRaw ( args [ 0 ] ) ;
return arr [ method ] ( ... args ) ;
}
return res ;
}
function noTracking ( self , method , args = [ ] ) {
pauseTracking ( ) ;
startBatch ( ) ;
const res = toRaw ( self ) [ method ] . apply ( self , args ) ;
endBatch ( ) ;
resetTracking ( ) ;
return res ;
}
const isNonTrackableKeys = /* @__PURE__ */ makeMap ( ` __proto__,__v_isRef,__isVue ` ) ;
const builtInSymbols = new Set (
/* @__PURE__ */ Object . getOwnPropertyNames ( Symbol ) . filter ( ( key ) => key !== "arguments" && key !== "caller" ) . map ( ( key ) => Symbol [ key ] ) . filter ( isSymbol )
) ;
function hasOwnProperty ( key ) {
if ( ! isSymbol ( key ) ) key = String ( key ) ;
const obj = toRaw ( this ) ;
track ( obj , "has" , key ) ;
return obj . hasOwnProperty ( key ) ;
}
class BaseReactiveHandler {
constructor ( _isReadonly = false , _isShallow = false ) {
this . _isReadonly = _isReadonly ;
this . _isShallow = _isShallow ;
}
get ( target , key , receiver ) {
if ( key === "__v_skip" ) return target [ "__v_skip" ] ;
const isReadonly2 = this . _isReadonly , isShallow2 = this . _isShallow ;
if ( key === "__v_isReactive" ) {
return ! isReadonly2 ;
} else if ( key === "__v_isReadonly" ) {
return isReadonly2 ;
} else if ( key === "__v_isShallow" ) {
return isShallow2 ;
} else if ( key === "__v_raw" ) {
if ( receiver === ( isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap ) . get ( target ) || // receiver is not the reactive proxy, but has the same prototype
// this means the receiver is a user proxy of the reactive proxy
Object . getPrototypeOf ( target ) === Object . getPrototypeOf ( receiver ) ) {
return target ;
}
return ;
}
const targetIsArray = isArray ( target ) ;
if ( ! isReadonly2 ) {
let fn ;
if ( targetIsArray && ( fn = arrayInstrumentations [ key ] ) ) {
return fn ;
}
if ( key === "hasOwnProperty" ) {
return hasOwnProperty ;
}
}
const res = Reflect . get (
target ,
key ,
// if this is a proxy wrapping a ref, return methods using the raw ref
// as receiver so that we don't have to call `toRaw` on the ref in all
// its class methods
isRef ( target ) ? target : receiver
) ;
if ( isSymbol ( key ) ? builtInSymbols . has ( key ) : isNonTrackableKeys ( key ) ) {
return res ;
2024-01-05 12:14:38 +00:00
}
if ( ! isReadonly2 ) {
track ( target , "get" , key ) ;
}
2026-02-11 16:20:26 +00:00
if ( isShallow2 ) {
2024-01-05 12:14:38 +00:00
return res ;
}
if ( isRef ( res ) ) {
2026-02-11 16:20:26 +00:00
const value = targetIsArray && isIntegerKey ( key ) ? res : res . value ;
return isReadonly2 && isObject ( value ) ? readonly ( value ) : value ;
2024-01-05 12:14:38 +00:00
}
if ( isObject ( res ) ) {
return isReadonly2 ? readonly ( res ) : reactive ( res ) ;
}
return res ;
}
}
class MutableReactiveHandler extends BaseReactiveHandler {
2026-02-11 16:20:26 +00:00
constructor ( isShallow2 = false ) {
super ( false , isShallow2 ) ;
2024-01-05 12:14:38 +00:00
}
set ( target , key , value , receiver ) {
let oldValue = target [ key ] ;
2026-02-11 16:20:26 +00:00
const isArrayWithIntegerKey = isArray ( target ) && isIntegerKey ( key ) ;
if ( ! this . _isShallow ) {
2024-01-05 12:14:38 +00:00
const isOldValueReadonly = isReadonly ( oldValue ) ;
if ( ! isShallow ( value ) && ! isReadonly ( value ) ) {
oldValue = toRaw ( oldValue ) ;
value = toRaw ( value ) ;
}
2026-02-11 16:20:26 +00:00
if ( ! isArrayWithIntegerKey && isRef ( oldValue ) && ! isRef ( value ) ) {
2024-01-05 12:14:38 +00:00
if ( isOldValueReadonly ) {
2026-02-11 16:20:26 +00:00
{
warn$2 (
` Set operation on key " ${ String ( key ) } " failed: target is readonly. ` ,
target [ key ]
) ;
}
return true ;
2024-01-05 12:14:38 +00:00
} else {
oldValue . value = value ;
return true ;
}
}
}
2026-02-11 16:20:26 +00:00
const hadKey = isArrayWithIntegerKey ? Number ( key ) < target . length : hasOwn ( target , key ) ;
const result = Reflect . set (
target ,
key ,
value ,
isRef ( target ) ? target : receiver
) ;
2024-01-05 12:14:38 +00:00
if ( target === toRaw ( receiver ) ) {
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value , oldValue ) ;
}
}
return result ;
}
deleteProperty ( target , key ) {
const hadKey = hasOwn ( target , key ) ;
const oldValue = target [ key ] ;
const result = Reflect . deleteProperty ( target , key ) ;
if ( result && hadKey ) {
trigger ( target , "delete" , key , void 0 , oldValue ) ;
}
return result ;
}
has ( target , key ) {
const result = Reflect . has ( target , key ) ;
if ( ! isSymbol ( key ) || ! builtInSymbols . has ( key ) ) {
track ( target , "has" , key ) ;
}
return result ;
}
ownKeys ( target ) {
track (
target ,
"iterate" ,
isArray ( target ) ? "length" : ITERATE _KEY
) ;
return Reflect . ownKeys ( target ) ;
}
}
class ReadonlyReactiveHandler extends BaseReactiveHandler {
2026-02-11 16:20:26 +00:00
constructor ( isShallow2 = false ) {
super ( true , isShallow2 ) ;
2024-01-05 12:14:38 +00:00
}
set ( target , key ) {
{
warn$2 (
` Set operation on key " ${ String ( key ) } " failed: target is readonly. ` ,
target
) ;
}
return true ;
}
deleteProperty ( target , key ) {
{
warn$2 (
` Delete operation on key " ${ String ( key ) } " failed: target is readonly. ` ,
target
) ;
}
return true ;
}
}
const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler ( ) ;
const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler ( ) ;
2026-02-11 16:20:26 +00:00
const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler ( true ) ;
2024-01-05 12:14:38 +00:00
const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler ( true ) ;
const toShallow = ( value ) => value ;
const getProto = ( v ) => Reflect . getPrototypeOf ( v ) ;
2026-02-11 16:20:26 +00:00
function createIterableMethod ( method , isReadonly2 , isShallow2 ) {
2024-01-05 12:14:38 +00:00
return function ( ... args ) {
const target = this [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const targetIsMap = isMap ( rawTarget ) ;
const isPair = method === "entries" || method === Symbol . iterator && targetIsMap ;
const isKeyOnly = method === "keys" && targetIsMap ;
const innerIterator = target [ method ] ( ... args ) ;
2026-02-11 16:20:26 +00:00
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive ;
! isReadonly2 && track (
2024-01-05 12:14:38 +00:00
rawTarget ,
"iterate" ,
isKeyOnly ? MAP _KEY _ITERATE _KEY : ITERATE _KEY
) ;
2026-02-11 16:20:26 +00:00
return extend (
// inheriting all iterator properties
Object . create ( innerIterator ) ,
{
// iterator protocol
next ( ) {
const { value , done } = innerIterator . next ( ) ;
return done ? { value , done } : {
value : isPair ? [ wrap ( value [ 0 ] ) , wrap ( value [ 1 ] ) ] : wrap ( value ) ,
done
} ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
) ;
2024-01-05 12:14:38 +00:00
} ;
}
function createReadonlyMethod ( type ) {
return function ( ... args ) {
{
const key = args [ 0 ] ? ` on key " ${ args [ 0 ] } " ` : ` ` ;
2026-02-11 16:20:26 +00:00
warn$2 (
2024-01-05 12:14:38 +00:00
` ${ capitalize ( type ) } operation ${ key } failed: target is readonly. ` ,
toRaw ( this )
) ;
}
return type === "delete" ? false : type === "clear" ? void 0 : this ;
} ;
}
2026-02-11 16:20:26 +00:00
function createInstrumentations ( readonly , shallow ) {
const instrumentations = {
2024-01-05 12:14:38 +00:00
get ( key ) {
2026-02-11 16:20:26 +00:00
const target = this [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( ! readonly ) {
if ( hasChanged ( key , rawKey ) ) {
track ( rawTarget , "get" , key ) ;
}
track ( rawTarget , "get" , rawKey ) ;
}
const { has } = getProto ( rawTarget ) ;
const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive ;
if ( has . call ( rawTarget , key ) ) {
return wrap ( target . get ( key ) ) ;
} else if ( has . call ( rawTarget , rawKey ) ) {
return wrap ( target . get ( rawKey ) ) ;
} else if ( target !== rawTarget ) {
target . get ( key ) ;
}
2024-01-05 12:14:38 +00:00
} ,
get size ( ) {
2026-02-11 16:20:26 +00:00
const target = this [ "__v_raw" ] ;
! readonly && track ( toRaw ( target ) , "iterate" , ITERATE _KEY ) ;
return target . size ;
2024-01-05 12:14:38 +00:00
} ,
has ( key ) {
2026-02-11 16:20:26 +00:00
const target = this [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const rawKey = toRaw ( key ) ;
if ( ! readonly ) {
if ( hasChanged ( key , rawKey ) ) {
track ( rawTarget , "has" , key ) ;
}
track ( rawTarget , "has" , rawKey ) ;
}
return key === rawKey ? target . has ( key ) : target . has ( key ) || target . has ( rawKey ) ;
2024-01-05 12:14:38 +00:00
} ,
2026-02-11 16:20:26 +00:00
forEach ( callback , thisArg ) {
const observed = this ;
const target = observed [ "__v_raw" ] ;
const rawTarget = toRaw ( target ) ;
const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive ;
! readonly && track ( rawTarget , "iterate" , ITERATE _KEY ) ;
return target . forEach ( ( value , key ) => {
return callback . call ( thisArg , wrap ( value ) , wrap ( key ) , observed ) ;
} ) ;
}
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
extend (
instrumentations ,
readonly ? {
add : createReadonlyMethod ( "add" ) ,
set : createReadonlyMethod ( "set" ) ,
delete : createReadonlyMethod ( "delete" ) ,
clear : createReadonlyMethod ( "clear" )
} : {
add ( value ) {
if ( ! shallow && ! isShallow ( value ) && ! isReadonly ( 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 ;
} ,
set ( key , value ) {
if ( ! shallow && ! isShallow ( value ) && ! isReadonly ( value ) ) {
value = toRaw ( value ) ;
}
const target = toRaw ( this ) ;
const { has , get } = getProto ( target ) ;
let hadKey = has . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has . call ( target , key ) ;
} else {
checkIdentityKeys ( target , has , key ) ;
}
const oldValue = get . call ( target , key ) ;
target . set ( key , value ) ;
if ( ! hadKey ) {
trigger ( target , "add" , key , value ) ;
} else if ( hasChanged ( value , oldValue ) ) {
trigger ( target , "set" , key , value , oldValue ) ;
}
return this ;
} ,
delete ( key ) {
const target = toRaw ( this ) ;
const { has , get } = getProto ( target ) ;
let hadKey = has . call ( target , key ) ;
if ( ! hadKey ) {
key = toRaw ( key ) ;
hadKey = has . call ( target , key ) ;
} else {
checkIdentityKeys ( target , has , key ) ;
}
const oldValue = get ? get . call ( target , key ) : void 0 ;
const result = target . delete ( key ) ;
if ( hadKey ) {
trigger ( target , "delete" , key , void 0 , oldValue ) ;
}
return result ;
} ,
clear ( ) {
const target = toRaw ( this ) ;
const hadItems = target . size !== 0 ;
const oldTarget = isMap ( target ) ? new Map ( target ) : new Set ( target ) ;
const result = target . clear ( ) ;
if ( hadItems ) {
trigger (
target ,
"clear" ,
void 0 ,
void 0 ,
oldTarget
) ;
}
return result ;
}
}
) ;
const iteratorMethods = [
"keys" ,
"values" ,
"entries" ,
Symbol . iterator
] ;
2024-01-05 12:14:38 +00:00
iteratorMethods . forEach ( ( method ) => {
2026-02-11 16:20:26 +00:00
instrumentations [ method ] = createIterableMethod ( method , readonly , shallow ) ;
2024-01-05 12:14:38 +00:00
} ) ;
2026-02-11 16:20:26 +00:00
return instrumentations ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function createInstrumentationGetter ( isReadonly2 , shallow ) {
const instrumentations = createInstrumentations ( isReadonly2 , shallow ) ;
2024-01-05 12:14:38 +00:00
return ( target , key , receiver ) => {
if ( key === "__v_isReactive" ) {
2026-02-11 16:20:26 +00:00
return ! isReadonly2 ;
2024-01-05 12:14:38 +00:00
} else if ( key === "__v_isReadonly" ) {
2026-02-11 16:20:26 +00:00
return isReadonly2 ;
2024-01-05 12:14:38 +00:00
} else if ( key === "__v_raw" ) {
return target ;
}
return Reflect . get (
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 )
} ;
2026-02-11 16:20:26 +00:00
function checkIdentityKeys ( target , has , key ) {
2024-01-05 12:14:38 +00:00
const rawKey = toRaw ( key ) ;
2026-02-11 16:20:26 +00:00
if ( rawKey !== key && has . call ( target , rawKey ) ) {
2024-01-05 12:14:38 +00:00
const type = toRawType ( target ) ;
2026-02-11 16:20:26 +00:00
warn$2 (
2024-01-05 12:14:38 +00:00
` Reactive ${ type } contains both the raw and reactive versions of the same object ${ type === ` Map ` ? ` as keys ` : ` ` } , which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible. `
) ;
}
}
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 ( toRawType ( value ) ) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function reactive ( target ) {
2026-02-11 16:20:26 +00:00
if ( /* @__PURE__ */ isReadonly ( target ) ) {
2024-01-05 12:14:38 +00:00
return target ;
}
return createReactiveObject (
target ,
false ,
mutableHandlers ,
mutableCollectionHandlers ,
reactiveMap
) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function shallowReactive ( target ) {
return createReactiveObject (
target ,
false ,
shallowReactiveHandlers ,
shallowCollectionHandlers ,
shallowReactiveMap
) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function readonly ( target ) {
return createReactiveObject (
target ,
true ,
readonlyHandlers ,
readonlyCollectionHandlers ,
readonlyMap
) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function shallowReadonly ( target ) {
return createReactiveObject (
target ,
true ,
shallowReadonlyHandlers ,
shallowReadonlyCollectionHandlers ,
shallowReadonlyMap
) ;
}
function createReactiveObject ( target , isReadonly2 , baseHandlers , collectionHandlers , proxyMap ) {
if ( ! isObject ( target ) ) {
{
2026-02-11 16:20:26 +00:00
warn$2 (
` value cannot be made ${ isReadonly2 ? "readonly" : "reactive" } : ${ String (
target
) } `
) ;
2024-01-05 12:14:38 +00:00
}
return target ;
}
if ( target [ "__v_raw" ] && ! ( isReadonly2 && target [ "__v_isReactive" ] ) ) {
return target ;
}
const targetType = getTargetType ( target ) ;
if ( targetType === 0 /* INVALID */ ) {
return target ;
}
2026-02-11 16:20:26 +00:00
const existingProxy = proxyMap . get ( target ) ;
if ( existingProxy ) {
return existingProxy ;
}
2024-01-05 12:14:38 +00:00
const proxy = new Proxy (
target ,
targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers
) ;
proxyMap . set ( target , proxy ) ;
return proxy ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function isReactive ( value ) {
2026-02-11 16:20:26 +00:00
if ( /* @__PURE__ */ isReadonly ( value ) ) {
return /* @__PURE__ */ isReactive ( value [ "__v_raw" ] ) ;
2024-01-05 12:14:38 +00:00
}
return ! ! ( value && value [ "__v_isReactive" ] ) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function isReadonly ( value ) {
return ! ! ( value && value [ "__v_isReadonly" ] ) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function isShallow ( value ) {
return ! ! ( value && value [ "__v_isShallow" ] ) ;
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function isProxy ( value ) {
2026-02-11 16:20:26 +00:00
return value ? ! ! value [ "__v_raw" ] : false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function toRaw ( observed ) {
const raw = observed && observed [ "__v_raw" ] ;
2026-02-11 16:20:26 +00:00
return raw ? /* @__PURE__ */ toRaw ( raw ) : observed ;
2024-01-05 12:14:38 +00:00
}
function markRaw ( value ) {
2026-02-11 16:20:26 +00:00
if ( ! hasOwn ( value , "__v_skip" ) && Object . isExtensible ( value ) ) {
def ( value , "__v_skip" , true ) ;
}
2024-01-05 12:14:38 +00:00
return value ;
}
2026-02-11 16:20:26 +00:00
const toReactive = ( value ) => isObject ( value ) ? /* @__PURE__ */ reactive ( value ) : value ;
const toReadonly = ( value ) => isObject ( value ) ? /* @__PURE__ */ readonly ( value ) : value ;
// @__NO_SIDE_EFFECTS__
function isRef ( r ) {
return r ? r [ "__v_isRef" ] === true : false ;
}
function unref ( ref2 ) {
return /* @__PURE__ */ isRef ( ref2 ) ? ref2 . value : ref2 ;
}
const shallowUnwrapHandlers = {
get : ( target , key , receiver ) => key === "__v_raw" ? target : unref ( Reflect . get ( target , key , receiver ) ) ,
set : ( target , key , value , receiver ) => {
const oldValue = target [ key ] ;
if ( /* @__PURE__ */ isRef ( oldValue ) && ! /* @__PURE__ */ 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 ) ;
}
2024-01-05 12:14:38 +00:00
class ComputedRefImpl {
2026-02-11 16:20:26 +00:00
constructor ( fn , setter , isSSR ) {
this . fn = fn ;
this . setter = setter ;
/ * *
* @ internal
* /
this . _value = void 0 ;
/ * *
* @ internal
* /
this . dep = new Dep ( this ) ;
/ * *
* @ internal
* /
2024-01-05 12:14:38 +00:00
this . _ _v _isRef = true ;
2026-02-11 16:20:26 +00:00
// TODO isolatedDeclarations "__v_isReadonly"
// A computed is also a subscriber that tracks other deps
/ * *
* @ internal
* /
this . deps = void 0 ;
/ * *
* @ internal
* /
this . depsTail = void 0 ;
/ * *
* @ internal
* /
this . flags = 16 ;
/ * *
* @ internal
* /
this . globalVersion = globalVersion - 1 ;
/ * *
* @ internal
* /
this . next = void 0 ;
// for backwards compat
this . effect = this ;
this [ "__v_isReadonly" ] = ! setter ;
this . isSSR = isSSR ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
/ * *
* @ internal
* /
notify ( ) {
this . flags |= 16 ;
if ( ! ( this . flags & 8 ) && // avoid infinite self recursion
activeSub !== this ) {
batch ( this , true ) ;
return true ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
}
get value ( ) {
const link = this . dep . track ( {
target : this ,
type : "get" ,
key : "value"
} ) ;
refreshComputed ( this ) ;
if ( link ) {
link . version = this . dep . version ;
2024-01-31 06:33:19 +00:00
}
2026-02-11 16:20:26 +00:00
return this . _value ;
2024-01-05 12:14:38 +00:00
}
set value ( newValue ) {
2026-02-11 16:20:26 +00:00
if ( this . setter ) {
this . setter ( newValue ) ;
} else {
warn$2 ( "Write operation failed: computed value is readonly" ) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function computed$1 ( getterOrOptions , debugOptions , isSSR = false ) {
let getter ;
let setter ;
2026-02-11 16:20:26 +00:00
if ( isFunction ( getterOrOptions ) ) {
2024-01-05 12:14:38 +00:00
getter = getterOrOptions ;
} else {
getter = getterOrOptions . get ;
setter = getterOrOptions . set ;
}
2026-02-11 16:20:26 +00:00
const cRef = new ComputedRefImpl ( getter , setter , isSSR ) ;
2024-01-05 12:14:38 +00:00
return cRef ;
}
2026-02-11 16:20:26 +00:00
const INITIAL _WATCHER _VALUE = { } ;
const cleanupMap = /* @__PURE__ */ new WeakMap ( ) ;
let activeWatcher = void 0 ;
function onWatcherCleanup ( cleanupFn , failSilently = false , owner = activeWatcher ) {
if ( owner ) {
let cleanups = cleanupMap . get ( owner ) ;
if ( ! cleanups ) cleanupMap . set ( owner , cleanups = [ ] ) ;
cleanups . push ( cleanupFn ) ;
} else if ( ! failSilently ) {
warn$2 (
` onWatcherCleanup() was called when there was no active watcher to associate with. `
2024-01-05 12:14:38 +00:00
) ;
}
}
2026-02-11 16:20:26 +00:00
function watch$1 ( source , cb , options = EMPTY _OBJ ) {
const { immediate , deep , once , scheduler , augmentJob , call } = options ;
const warnInvalidSource = ( s ) => {
( options . onWarn || warn$2 ) (
` Invalid watch source: ` ,
s ,
` A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types. `
2024-01-05 12:14:38 +00:00
) ;
2026-02-11 16:20:26 +00:00
} ;
const reactiveGetter = ( source2 ) => {
if ( deep ) return source2 ;
if ( isShallow ( source2 ) || deep === false || deep === 0 )
return traverse ( source2 , 1 ) ;
return traverse ( source2 ) ;
} ;
let effect ;
let getter ;
let cleanup ;
let boundCleanup ;
let forceTrigger = false ;
let isMultiSource = false ;
if ( isRef ( source ) ) {
getter = ( ) => source . value ;
forceTrigger = isShallow ( source ) ;
} else if ( isReactive ( source ) ) {
getter = ( ) => reactiveGetter ( source ) ;
forceTrigger = true ;
} else if ( isArray ( source ) ) {
isMultiSource = true ;
forceTrigger = source . some ( ( s ) => isReactive ( s ) || isShallow ( s ) ) ;
getter = ( ) => source . map ( ( s ) => {
if ( isRef ( s ) ) {
return s . value ;
} else if ( isReactive ( s ) ) {
return reactiveGetter ( s ) ;
} else if ( isFunction ( s ) ) {
return call ? call ( s , 2 ) : s ( ) ;
} else {
warnInvalidSource ( s ) ;
}
} ) ;
} else if ( isFunction ( source ) ) {
if ( cb ) {
getter = call ? ( ) => call ( source , 2 ) : source ;
} else {
getter = ( ) => {
if ( cleanup ) {
pauseTracking ( ) ;
try {
cleanup ( ) ;
} finally {
resetTracking ( ) ;
}
}
const currentEffect = activeWatcher ;
activeWatcher = effect ;
try {
return call ? call ( source , 3 , [ boundCleanup ] ) : source ( boundCleanup ) ;
} finally {
activeWatcher = currentEffect ;
}
} ;
}
} else {
getter = NOOP ;
warnInvalidSource ( source ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( cb && deep ) {
const baseGetter = getter ;
const depth = deep === true ? Infinity : deep ;
getter = ( ) => traverse ( baseGetter ( ) , depth ) ;
}
const scope = getCurrentScope ( ) ;
const watchHandle = ( ) => {
effect . stop ( ) ;
if ( scope && scope . active ) {
remove ( scope . effects , effect ) ;
}
} ;
if ( once && cb ) {
const _cb = cb ;
cb = ( ... args ) => {
_cb ( ... args ) ;
watchHandle ( ) ;
} ;
}
let oldValue = isMultiSource ? new Array ( source . length ) . fill ( INITIAL _WATCHER _VALUE ) : INITIAL _WATCHER _VALUE ;
const job = ( immediateFirstRun ) => {
if ( ! ( effect . flags & 1 ) || ! effect . dirty && ! immediateFirstRun ) {
return ;
}
if ( cb ) {
const newValue = effect . run ( ) ;
if ( deep || forceTrigger || ( isMultiSource ? newValue . some ( ( v , i ) => hasChanged ( v , oldValue [ i ] ) ) : hasChanged ( newValue , oldValue ) ) ) {
if ( cleanup ) {
cleanup ( ) ;
}
const currentWatcher = activeWatcher ;
activeWatcher = effect ;
try {
const args = [
newValue ,
// pass undefined as the old value when it's changed for the first time
oldValue === INITIAL _WATCHER _VALUE ? void 0 : isMultiSource && oldValue [ 0 ] === INITIAL _WATCHER _VALUE ? [ ] : oldValue ,
boundCleanup
] ;
oldValue = newValue ;
call ? call ( cb , 3 , args ) : (
// @ts-expect-error
cb ( ... args )
) ;
} finally {
activeWatcher = currentWatcher ;
}
}
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
effect . run ( ) ;
}
} ;
if ( augmentJob ) {
augmentJob ( job ) ;
}
effect = new ReactiveEffect ( getter ) ;
effect . scheduler = scheduler ? ( ) => scheduler ( job , false ) : job ;
boundCleanup = ( fn ) => onWatcherCleanup ( fn , false , effect ) ;
cleanup = effect . onStop = ( ) => {
const cleanups = cleanupMap . get ( effect ) ;
if ( cleanups ) {
if ( call ) {
call ( cleanups , 4 ) ;
} else {
for ( const cleanup2 of cleanups ) cleanup2 ( ) ;
}
cleanupMap . delete ( effect ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
{
effect . onTrack = options . onTrack ;
effect . onTrigger = options . onTrigger ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( cb ) {
if ( immediate ) {
job ( true ) ;
} else {
oldValue = effect . run ( ) ;
}
} else if ( scheduler ) {
scheduler ( job . bind ( null , true ) , true ) ;
} else {
effect . run ( ) ;
}
watchHandle . pause = effect . pause . bind ( effect ) ;
watchHandle . resume = effect . resume . bind ( effect ) ;
watchHandle . stop = watchHandle ;
return watchHandle ;
}
function traverse ( value , depth = Infinity , seen ) {
if ( depth <= 0 || ! isObject ( value ) || value [ "__v_skip" ] ) {
return value ;
}
seen = seen || /* @__PURE__ */ new Map ( ) ;
if ( ( seen . get ( value ) || 0 ) >= depth ) {
return value ;
}
seen . set ( value , depth ) ;
depth -- ;
if ( isRef ( value ) ) {
traverse ( value . value , depth , seen ) ;
} else if ( isArray ( value ) ) {
for ( let i = 0 ; i < value . length ; i ++ ) {
traverse ( value [ i ] , depth , seen ) ;
}
} else if ( isSet ( value ) || isMap ( value ) ) {
value . forEach ( ( v ) => {
traverse ( v , depth , seen ) ;
} ) ;
} else if ( isPlainObject ( value ) ) {
for ( const key in value ) {
traverse ( value [ key ] , depth , seen ) ;
}
for ( const key of Object . getOwnPropertySymbols ( value ) ) {
if ( Object . prototype . propertyIsEnumerable . call ( value , key ) ) {
traverse ( value [ key ] , depth , seen ) ;
}
}
}
return value ;
2024-01-05 12:14:38 +00:00
}
const stack = [ ] ;
2026-02-11 16:20:26 +00:00
function pushWarningContext$1 ( vnode ) {
2024-01-05 12:14:38 +00:00
stack . push ( vnode ) ;
}
2026-02-11 16:20:26 +00:00
function popWarningContext$1 ( ) {
2024-01-05 12:14:38 +00:00
stack . pop ( ) ;
}
2026-02-11 16:20:26 +00:00
let isWarning = false ;
2024-01-05 12:14:38 +00:00
function warn$1 ( msg , ... args ) {
2026-02-11 16:20:26 +00:00
if ( isWarning ) return ;
isWarning = true ;
2024-01-05 12:14:38 +00:00
pauseTracking ( ) ;
const instance = stack . length ? stack [ stack . length - 1 ] . component : null ;
const appWarnHandler = instance && instance . appContext . config . warnHandler ;
const trace = getComponentTrace ( ) ;
if ( appWarnHandler ) {
callWithErrorHandling (
appWarnHandler ,
instance ,
11 ,
[
2026-02-11 16:20:26 +00:00
// eslint-disable-next-line no-restricted-syntax
msg + args . map ( ( a ) => {
var _a , _b ;
return ( _b = ( _a = a . toString ) == null ? void 0 : _a . call ( a ) ) != null ? _b : JSON . stringify ( a ) ;
} ) . join ( "" ) ,
2024-01-05 12:14:38 +00:00
instance && instance . proxy ,
trace . map (
( { vnode } ) => ` at < ${ formatComponentName ( instance , vnode . type ) } > `
) . join ( "\n" ) ,
trace
]
) ;
} else {
const warnArgs = [ ` [Vue warn]: ${ msg } ` , ... args ] ;
if ( trace . length && // avoid spamming console during tests
true ) {
warnArgs . push ( `
` , ...formatTrace(trace));
}
console . warn ( ... warnArgs ) ;
}
resetTracking ( ) ;
2026-02-11 16:20:26 +00:00
isWarning = false ;
2024-01-05 12:14:38 +00:00
}
function getComponentTrace ( ) {
let currentVNode = stack [ stack . length - 1 ] ;
if ( ! currentVNode ) {
return [ ] ;
}
const normalizedStack = [ ] ;
while ( currentVNode ) {
const last = normalizedStack [ 0 ] ;
if ( last && last . vnode === currentVNode ) {
last . recurseCount ++ ;
} else {
normalizedStack . push ( {
vnode : currentVNode ,
recurseCount : 0
} ) ;
}
const parentInstance = currentVNode . component && currentVNode . component . parent ;
currentVNode = parentInstance && parentInstance . vnode ;
}
return normalizedStack ;
}
function formatTrace ( trace ) {
const logs = [ ] ;
trace . forEach ( ( entry , i ) => {
logs . push ( ... i === 0 ? [ ] : [ `
` ], ...formatTraceEntry(entry));
} ) ;
return logs ;
}
function formatTraceEntry ( { vnode , recurseCount } ) {
const postfix = recurseCount > 0 ? ` ... ( ${ recurseCount } recursive calls) ` : ` ` ;
const isRoot = vnode . component ? vnode . component . parent == null : false ;
const open = ` at < ${ formatComponentName (
vnode . component ,
vnode . type ,
isRoot
) } ` ;
const close = ` > ` + postfix ;
return vnode . props ? [ open , ... formatProps ( vnode . props ) , close ] : [ open + close ] ;
}
function formatProps ( props ) {
const res = [ ] ;
const keys = Object . keys ( props ) ;
keys . slice ( 0 , 3 ) . forEach ( ( key ) => {
res . push ( ... formatProp ( key , props [ key ] ) ) ;
} ) ;
if ( keys . length > 3 ) {
res . push ( ` ... ` ) ;
}
return res ;
}
function formatProp ( key , value , raw ) {
if ( isString ( value ) ) {
value = JSON . stringify ( value ) ;
return raw ? value : [ ` ${ key } = ${ value } ` ] ;
} else if ( typeof value === "number" || typeof value === "boolean" || value == null ) {
return raw ? value : [ ` ${ key } = ${ value } ` ] ;
} else if ( isRef ( value ) ) {
value = formatProp ( key , toRaw ( value . value ) , true ) ;
return raw ? value : [ ` ${ key } =Ref< ` , value , ` > ` ] ;
} else if ( isFunction ( value ) ) {
return [ ` ${ key } =fn ${ value . name ? ` < ${ value . name } > ` : ` ` } ` ] ;
} else {
value = toRaw ( value ) ;
return raw ? value : [ ` ${ key } = ` , value ] ;
}
}
const ErrorTypeStrings = {
[ "sp" ] : "serverPrefetch hook" ,
[ "bc" ] : "beforeCreate hook" ,
[ "c" ] : "created hook" ,
[ "bm" ] : "beforeMount hook" ,
[ "m" ] : "mounted hook" ,
[ "bu" ] : "beforeUpdate hook" ,
[ "u" ] : "updated" ,
[ "bum" ] : "beforeUnmount hook" ,
[ "um" ] : "unmounted hook" ,
[ "a" ] : "activated hook" ,
[ "da" ] : "deactivated hook" ,
[ "ec" ] : "errorCaptured hook" ,
[ "rtc" ] : "renderTracked hook" ,
[ "rtg" ] : "renderTriggered hook" ,
[ 0 ] : "setup function" ,
[ 1 ] : "render function" ,
[ 2 ] : "watcher getter" ,
[ 3 ] : "watcher callback" ,
[ 4 ] : "watcher cleanup function" ,
[ 5 ] : "native event handler" ,
[ 6 ] : "component event handler" ,
[ 7 ] : "vnode hook" ,
[ 8 ] : "directive hook" ,
[ 9 ] : "transition hook" ,
[ 10 ] : "app errorHandler" ,
[ 11 ] : "app warnHandler" ,
[ 12 ] : "ref function" ,
[ 13 ] : "async component loader" ,
2026-02-11 16:20:26 +00:00
[ 14 ] : "scheduler flush" ,
[ 15 ] : "component update" ,
[ 16 ] : "app unmount cleanup function"
2024-01-05 12:14:38 +00:00
} ;
function callWithErrorHandling ( fn , instance , type , args ) {
try {
2026-02-11 16:20:26 +00:00
return args ? fn ( ... args ) : fn ( ) ;
2024-01-05 12:14:38 +00:00
} catch ( err ) {
handleError ( err , instance , type ) ;
}
}
function callWithAsyncErrorHandling ( fn , instance , type , args ) {
if ( isFunction ( fn ) ) {
const res = callWithErrorHandling ( fn , instance , type , args ) ;
if ( res && isPromise ( res ) ) {
res . catch ( ( err ) => {
handleError ( err , instance , type ) ;
} ) ;
}
return res ;
}
2026-02-11 16:20:26 +00:00
if ( isArray ( fn ) ) {
const values = [ ] ;
for ( let i = 0 ; i < fn . length ; i ++ ) {
values . push ( callWithAsyncErrorHandling ( fn [ i ] , instance , type , args ) ) ;
}
return values ;
} else {
warn$1 (
` Invalid value type passed to callWithAsyncErrorHandling(): ${ typeof fn } `
) ;
2024-01-05 12:14:38 +00:00
}
}
function handleError ( err , instance , type , throwInDev = true ) {
const contextVNode = instance ? instance . vnode : null ;
2026-02-11 16:20:26 +00:00
const { errorHandler , throwUnhandledErrorInProduction } = instance && instance . appContext . config || EMPTY _OBJ ;
2024-01-05 12:14:38 +00:00
if ( instance ) {
let cur = instance . parent ;
const exposedInstance = instance . proxy ;
const errorInfo = ErrorTypeStrings [ type ] ;
while ( cur ) {
const errorCapturedHooks = cur . ec ;
if ( errorCapturedHooks ) {
for ( let i = 0 ; i < errorCapturedHooks . length ; i ++ ) {
if ( errorCapturedHooks [ i ] ( err , exposedInstance , errorInfo ) === false ) {
return ;
}
}
}
cur = cur . parent ;
}
2026-02-11 16:20:26 +00:00
if ( errorHandler ) {
pauseTracking ( ) ;
callWithErrorHandling ( errorHandler , null , 10 , [
err ,
exposedInstance ,
errorInfo
] ) ;
resetTracking ( ) ;
2024-01-05 12:14:38 +00:00
return ;
}
}
2026-02-11 16:20:26 +00:00
logError ( err , type , contextVNode , throwInDev , throwUnhandledErrorInProduction ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function logError ( err , type , contextVNode , throwInDev = true , throwInProd = false ) {
2024-01-05 12:14:38 +00:00
{
const info = ErrorTypeStrings [ type ] ;
if ( contextVNode ) {
2026-02-11 16:20:26 +00:00
pushWarningContext$1 ( contextVNode ) ;
2024-01-05 12:14:38 +00:00
}
warn$1 ( ` Unhandled error ${ info ? ` during execution of ${ info } ` : ` ` } ` ) ;
if ( contextVNode ) {
2026-02-11 16:20:26 +00:00
popWarningContext$1 ( ) ;
2024-01-05 12:14:38 +00:00
}
if ( throwInDev ) {
throw err ;
} else {
console . error ( err ) ;
}
}
}
const queue = [ ] ;
2026-02-11 16:20:26 +00:00
let flushIndex = - 1 ;
2024-01-05 12:14:38 +00:00
const pendingPostFlushCbs = [ ] ;
let activePostFlushCbs = null ;
let postFlushIndex = 0 ;
const resolvedPromise = /* @__PURE__ */ Promise . resolve ( ) ;
let currentFlushPromise = null ;
const RECURSION _LIMIT = 100 ;
function nextTick ( fn ) {
const p = currentFlushPromise || resolvedPromise ;
return fn ? p . then ( this ? fn . bind ( this ) : fn ) : p ;
}
function findInsertionIndex ( id ) {
let start = flushIndex + 1 ;
let end = queue . length ;
while ( start < end ) {
const middle = start + end >>> 1 ;
const middleJob = queue [ middle ] ;
const middleJobId = getId ( middleJob ) ;
2026-02-11 16:20:26 +00:00
if ( middleJobId < id || middleJobId === id && middleJob . flags & 2 ) {
2024-01-05 12:14:38 +00:00
start = middle + 1 ;
} else {
end = middle ;
}
}
return start ;
}
function queueJob ( job ) {
2026-02-11 16:20:26 +00:00
if ( ! ( job . flags & 1 ) ) {
const jobId = getId ( job ) ;
const lastJob = queue [ queue . length - 1 ] ;
if ( ! lastJob || // fast path when the job id is larger than the tail
! ( job . flags & 2 ) && jobId >= getId ( lastJob ) ) {
2024-01-05 12:14:38 +00:00
queue . push ( job ) ;
} else {
2026-02-11 16:20:26 +00:00
queue . splice ( findInsertionIndex ( jobId ) , 0 , job ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
job . flags |= 1 ;
2024-01-05 12:14:38 +00:00
queueFlush ( ) ;
}
}
function queueFlush ( ) {
2026-02-11 16:20:26 +00:00
if ( ! currentFlushPromise ) {
2024-01-05 12:14:38 +00:00
currentFlushPromise = resolvedPromise . then ( flushJobs ) ;
}
}
function queuePostFlushCb ( cb ) {
if ( ! isArray ( cb ) ) {
2026-02-11 16:20:26 +00:00
if ( activePostFlushCbs && cb . id === - 1 ) {
activePostFlushCbs . splice ( postFlushIndex + 1 , 0 , cb ) ;
} else if ( ! ( cb . flags & 1 ) ) {
2024-01-05 12:14:38 +00:00
pendingPostFlushCbs . push ( cb ) ;
2026-02-11 16:20:26 +00:00
cb . flags |= 1 ;
2024-01-05 12:14:38 +00:00
}
} else {
pendingPostFlushCbs . push ( ... cb ) ;
}
queueFlush ( ) ;
}
2026-02-11 16:20:26 +00:00
function flushPreFlushCbs ( instance , seen , i = flushIndex + 1 ) {
2024-01-05 12:14:38 +00:00
{
seen = seen || /* @__PURE__ */ new Map ( ) ;
}
for ( ; i < queue . length ; i ++ ) {
const cb = queue [ i ] ;
2026-02-11 16:20:26 +00:00
if ( cb && cb . flags & 2 ) {
2024-01-05 12:14:38 +00:00
if ( instance && cb . id !== instance . uid ) {
continue ;
}
if ( checkRecursiveUpdates ( seen , cb ) ) {
continue ;
}
queue . splice ( i , 1 ) ;
i -- ;
2026-02-11 16:20:26 +00:00
if ( cb . flags & 4 ) {
cb . flags &= - 2 ;
}
2024-01-05 12:14:38 +00:00
cb ( ) ;
2026-02-11 16:20:26 +00:00
if ( ! ( cb . flags & 4 ) ) {
cb . flags &= - 2 ;
}
2024-01-05 12:14:38 +00:00
}
}
}
function flushPostFlushCbs ( seen ) {
if ( pendingPostFlushCbs . length ) {
2024-01-31 06:33:19 +00:00
const deduped = [ ... new Set ( pendingPostFlushCbs ) ] . sort (
( a , b ) => getId ( a ) - getId ( b )
) ;
2024-01-05 12:14:38 +00:00
pendingPostFlushCbs . length = 0 ;
if ( activePostFlushCbs ) {
activePostFlushCbs . push ( ... deduped ) ;
return ;
}
activePostFlushCbs = deduped ;
{
seen = seen || /* @__PURE__ */ new Map ( ) ;
}
for ( postFlushIndex = 0 ; postFlushIndex < activePostFlushCbs . length ; postFlushIndex ++ ) {
2026-02-11 16:20:26 +00:00
const cb = activePostFlushCbs [ postFlushIndex ] ;
if ( checkRecursiveUpdates ( seen , cb ) ) {
2024-01-05 12:14:38 +00:00
continue ;
}
2026-02-11 16:20:26 +00:00
if ( cb . flags & 4 ) {
cb . flags &= - 2 ;
}
if ( ! ( cb . flags & 8 ) ) cb ( ) ;
cb . flags &= - 2 ;
2024-01-05 12:14:38 +00:00
}
activePostFlushCbs = null ;
postFlushIndex = 0 ;
}
}
2026-02-11 16:20:26 +00:00
const getId = ( job ) => job . id == null ? job . flags & 2 ? - 1 : Infinity : job . id ;
2024-01-05 12:14:38 +00:00
function flushJobs ( seen ) {
{
seen = seen || /* @__PURE__ */ new Map ( ) ;
}
const check = ( job ) => checkRecursiveUpdates ( seen , job ) ;
try {
for ( flushIndex = 0 ; flushIndex < queue . length ; flushIndex ++ ) {
const job = queue [ flushIndex ] ;
2026-02-11 16:20:26 +00:00
if ( job && ! ( job . flags & 8 ) ) {
2024-01-05 12:14:38 +00:00
if ( check ( job ) ) {
continue ;
}
2026-02-11 16:20:26 +00:00
if ( job . flags & 4 ) {
job . flags &= ~ 1 ;
}
callWithErrorHandling (
job ,
job . i ,
job . i ? 15 : 14
) ;
if ( ! ( job . flags & 4 ) ) {
job . flags &= ~ 1 ;
}
2024-01-05 12:14:38 +00:00
}
}
} finally {
2026-02-11 16:20:26 +00:00
for ( ; flushIndex < queue . length ; flushIndex ++ ) {
const job = queue [ flushIndex ] ;
if ( job ) {
job . flags &= - 2 ;
}
}
flushIndex = - 1 ;
2024-01-05 12:14:38 +00:00
queue . length = 0 ;
flushPostFlushCbs ( seen ) ;
currentFlushPromise = null ;
if ( queue . length || pendingPostFlushCbs . length ) {
flushJobs ( seen ) ;
}
}
}
function checkRecursiveUpdates ( seen , fn ) {
2026-02-11 16:20:26 +00:00
const count = seen . get ( fn ) || 0 ;
if ( count > RECURSION _LIMIT ) {
const instance = fn . i ;
const componentName = instance && getComponentName ( instance . type ) ;
handleError (
` Maximum recursive updates exceeded ${ componentName ? ` in component < ${ componentName } > ` : ` ` } . This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function. ` ,
null ,
10
) ;
return true ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
seen . set ( fn , count + 1 ) ;
return false ;
2024-01-05 12:14:38 +00:00
}
let isHmrUpdating = false ;
2026-02-11 16:20:26 +00:00
const hmrDirtyComponents = /* @__PURE__ */ new Map ( ) ;
2024-01-05 12:14:38 +00:00
{
getGlobalThis ( ) . _ _VUE _HMR _RUNTIME _ _ = {
createRecord : tryWrap ( createRecord ) ,
rerender : tryWrap ( rerender ) ,
reload : tryWrap ( reload )
} ;
}
const map = /* @__PURE__ */ new Map ( ) ;
function registerHMR ( instance ) {
const id = instance . type . _ _hmrId ;
let record = map . get ( id ) ;
if ( ! record ) {
createRecord ( id , instance . type ) ;
record = map . get ( id ) ;
}
record . instances . add ( instance ) ;
}
function unregisterHMR ( instance ) {
map . get ( instance . type . _ _hmrId ) . instances . delete ( instance ) ;
}
function createRecord ( id , initialDef ) {
if ( map . has ( id ) ) {
return false ;
}
map . set ( id , {
initialDef : normalizeClassComponent ( initialDef ) ,
instances : /* @__PURE__ */ new Set ( )
} ) ;
return true ;
}
function normalizeClassComponent ( component ) {
return isClassComponent ( component ) ? component . _ _vccOpts : component ;
}
function rerender ( id , newRender ) {
const record = map . get ( id ) ;
if ( ! record ) {
return ;
}
record . initialDef . render = newRender ;
[ ... record . instances ] . forEach ( ( instance ) => {
if ( newRender ) {
instance . render = newRender ;
normalizeClassComponent ( instance . type ) . render = newRender ;
}
instance . renderCache = [ ] ;
isHmrUpdating = true ;
2026-02-11 16:20:26 +00:00
if ( ! ( instance . job . flags & 8 ) ) {
instance . update ( ) ;
}
2024-01-05 12:14:38 +00:00
isHmrUpdating = false ;
} ) ;
}
function reload ( id , newComp ) {
const record = map . get ( id ) ;
2026-02-11 16:20:26 +00:00
if ( ! record ) return ;
2024-01-05 12:14:38 +00:00
newComp = normalizeClassComponent ( newComp ) ;
updateComponentDef ( record . initialDef , newComp ) ;
const instances = [ ... record . instances ] ;
2026-02-11 16:20:26 +00:00
for ( let i = 0 ; i < instances . length ; i ++ ) {
const instance = instances [ i ] ;
2024-01-05 12:14:38 +00:00
const oldComp = normalizeClassComponent ( instance . type ) ;
2026-02-11 16:20:26 +00:00
let dirtyInstances = hmrDirtyComponents . get ( oldComp ) ;
if ( ! dirtyInstances ) {
2024-01-05 12:14:38 +00:00
if ( oldComp !== record . initialDef ) {
updateComponentDef ( oldComp , newComp ) ;
}
2026-02-11 16:20:26 +00:00
hmrDirtyComponents . set ( oldComp , dirtyInstances = /* @__PURE__ */ new Set ( ) ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
dirtyInstances . add ( instance ) ;
2024-01-05 12:14:38 +00:00
instance . appContext . propsCache . delete ( instance . type ) ;
instance . appContext . emitsCache . delete ( instance . type ) ;
instance . appContext . optionsCache . delete ( instance . type ) ;
if ( instance . ceReload ) {
2026-02-11 16:20:26 +00:00
dirtyInstances . add ( instance ) ;
2024-01-05 12:14:38 +00:00
instance . ceReload ( newComp . styles ) ;
2026-02-11 16:20:26 +00:00
dirtyInstances . delete ( instance ) ;
2024-01-05 12:14:38 +00:00
} else if ( instance . parent ) {
2026-02-11 16:20:26 +00:00
queueJob ( ( ) => {
if ( ! ( instance . job . flags & 8 ) ) {
isHmrUpdating = true ;
instance . parent . update ( ) ;
isHmrUpdating = false ;
dirtyInstances . delete ( instance ) ;
}
} ) ;
2024-01-05 12:14:38 +00:00
} else if ( instance . appContext . reload ) {
instance . appContext . reload ( ) ;
} else if ( typeof window !== "undefined" ) {
window . location . reload ( ) ;
} else {
console . warn (
"[HMR] Root or manually mounted instance modified. Full reload required."
) ;
}
2026-02-11 16:20:26 +00:00
if ( instance . root . ce && instance !== instance . root ) {
instance . root . ce . _removeChildStyle ( oldComp ) ;
}
2024-01-05 12:14:38 +00:00
}
queuePostFlushCb ( ( ) => {
2026-02-11 16:20:26 +00:00
hmrDirtyComponents . clear ( ) ;
2024-01-05 12:14:38 +00:00
} ) ;
}
function updateComponentDef ( oldComp , newComp ) {
extend ( oldComp , newComp ) ;
for ( const key in oldComp ) {
if ( key !== "__file" && ! ( key in newComp ) ) {
delete oldComp [ key ] ;
}
}
}
function tryWrap ( fn ) {
return ( id , arg ) => {
try {
return fn ( id , arg ) ;
} catch ( e ) {
console . error ( e ) ;
console . warn (
` [HMR] Something went wrong during Vue component hot-reload. Full reload required. `
) ;
}
} ;
}
let devtools ;
let buffer = [ ] ;
let devtoolsNotInstalled = false ;
function emit$1 ( event , ... args ) {
if ( devtools ) {
devtools . emit ( event , ... args ) ;
} else if ( ! devtoolsNotInstalled ) {
buffer . push ( { event , args } ) ;
}
}
function setDevtoolsHook ( hook , target ) {
var _a , _b ;
devtools = hook ;
if ( devtools ) {
devtools . enabled = true ;
buffer . forEach ( ( { event , args } ) => devtools . emit ( event , ... args ) ) ;
buffer = [ ] ;
} else if (
// handle late devtools injection - only do this if we are in an actual
// browser environment to avoid the timer handle stalling test runner exit
// (#4815)
typeof window !== "undefined" && // some envs mock window but not fully
window . HTMLElement && // also exclude jsdom
2026-02-11 16:20:26 +00:00
// eslint-disable-next-line no-restricted-syntax
2024-01-05 12:14:38 +00:00
! ( ( _b = ( _a = window . navigator ) == null ? void 0 : _a . userAgent ) == null ? void 0 : _b . includes ( "jsdom" ) )
) {
const replay = target . _ _VUE _DEVTOOLS _HOOK _REPLAY _ _ = target . _ _VUE _DEVTOOLS _HOOK _REPLAY _ _ || [ ] ;
replay . push ( ( newHook ) => {
setDevtoolsHook ( newHook , target ) ;
} ) ;
setTimeout ( ( ) => {
if ( ! devtools ) {
target . _ _VUE _DEVTOOLS _HOOK _REPLAY _ _ = null ;
devtoolsNotInstalled = true ;
buffer = [ ] ;
}
} , 3e3 ) ;
} else {
devtoolsNotInstalled = true ;
buffer = [ ] ;
}
}
function devtoolsInitApp ( app , version ) {
emit$1 ( "app:init" /* APP_INIT */ , app , version , {
Fragment ,
Text ,
Comment ,
Static
} ) ;
}
function devtoolsUnmountApp ( app ) {
emit$1 ( "app:unmount" /* APP_UNMOUNT */ , app ) ;
}
2026-02-11 16:20:26 +00:00
const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook ( "component:added" /* COMPONENT_ADDED */ ) ;
2024-01-05 12:14:38 +00:00
const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook ( "component:updated" /* COMPONENT_UPDATED */ ) ;
const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook (
"component:removed" /* COMPONENT_REMOVED */
) ;
const devtoolsComponentRemoved = ( component ) => {
if ( devtools && typeof devtools . cleanupBuffer === "function" && // remove the component if it wasn't buffered
! devtools . cleanupBuffer ( component ) ) {
_devtoolsComponentRemoved ( component ) ;
}
} ;
2026-02-11 16:20:26 +00:00
// @__NO_SIDE_EFFECTS__
2024-01-05 12:14:38 +00:00
function createDevtoolsComponentHook ( hook ) {
return ( component ) => {
emit$1 (
hook ,
component . appContext . app ,
component . uid ,
component . parent ? component . parent . uid : void 0 ,
component
) ;
} ;
}
2026-02-11 16:20:26 +00:00
const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook ( "perf:start" /* PERFORMANCE_START */ ) ;
const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook ( "perf:end" /* PERFORMANCE_END */ ) ;
2024-01-05 12:14:38 +00:00
function createDevtoolsPerformanceHook ( hook ) {
return ( component , type , time ) => {
emit$1 ( hook , component . appContext . app , component . uid , component , type , time ) ;
} ;
}
function devtoolsComponentEmit ( component , event , params ) {
emit$1 (
"component:emit" /* COMPONENT_EMIT */ ,
component . appContext . app ,
component ,
event ,
params
) ;
}
2026-02-11 16:20:26 +00:00
let currentRenderingInstance = null ;
let currentScopeId = null ;
function setCurrentRenderingInstance$1 ( instance ) {
const prev = currentRenderingInstance ;
currentRenderingInstance = instance ;
currentScopeId = instance && instance . type . _ _scopeId || null ;
return prev ;
}
function withCtx ( fn , ctx = currentRenderingInstance , isNonScopedSlot ) {
if ( ! ctx ) return fn ;
if ( fn . _n ) {
return fn ;
}
const renderFnWithContext = ( ... args ) => {
if ( renderFnWithContext . _d ) {
setBlockTracking ( - 1 ) ;
}
const prevInstance = setCurrentRenderingInstance$1 ( ctx ) ;
let res ;
try {
res = fn ( ... args ) ;
} finally {
setCurrentRenderingInstance$1 ( prevInstance ) ;
if ( renderFnWithContext . _d ) {
setBlockTracking ( 1 ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
{
devtoolsComponentUpdated ( ctx ) ;
}
return res ;
} ;
renderFnWithContext . _n = true ;
renderFnWithContext . _c = true ;
renderFnWithContext . _d = true ;
return renderFnWithContext ;
}
function validateDirectiveName ( name ) {
if ( isBuiltInDirective ( name ) ) {
warn$1 ( "Do not use built-in directive ids as custom directive id: " + name ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
}
function invokeDirectiveHook ( vnode , prevVNode , instance , name ) {
const bindings = vnode . dirs ;
const oldBindings = prevVNode && prevVNode . dirs ;
for ( let i = 0 ; i < bindings . length ; i ++ ) {
const binding = bindings [ i ] ;
if ( oldBindings ) {
binding . oldValue = oldBindings [ i ] . value ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
let hook = binding . dir [ name ] ;
if ( hook ) {
pauseTracking ( ) ;
callWithAsyncErrorHandling ( hook , instance , 8 , [
vnode . el ,
binding ,
vnode ,
prevVNode
] ) ;
resetTracking ( ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
}
function provide ( key , value ) {
2024-01-05 12:14:38 +00:00
{
2026-02-11 16:20:26 +00:00
if ( ! currentInstance || currentInstance . isMounted ) {
warn$1 ( ` provide() can only be used inside setup(). ` ) ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( currentInstance ) {
let provides = currentInstance . provides ;
const parentProvides = currentInstance . parent && currentInstance . parent . provides ;
if ( parentProvides === provides ) {
provides = currentInstance . provides = Object . create ( parentProvides ) ;
}
provides [ key ] = value ;
}
}
function inject ( key , defaultValue , treatDefaultAsFactory = false ) {
const instance = getCurrentInstance ( ) ;
if ( instance || currentApp ) {
let provides = currentApp ? currentApp . _context . provides : instance ? instance . parent == null || instance . ce ? instance . vnode . appContext && instance . vnode . appContext . provides : instance . parent . provides : void 0 ;
if ( provides && key in provides ) {
return provides [ key ] ;
} else if ( arguments . length > 1 ) {
return treatDefaultAsFactory && isFunction ( defaultValue ) ? defaultValue . call ( instance && instance . proxy ) : defaultValue ;
} else {
warn$1 ( ` injection " ${ String ( key ) } " not found. ` ) ;
}
} else {
warn$1 ( ` inject() can only be used inside setup() or functional components. ` ) ;
}
}
const ssrContextKey = /* @__PURE__ */ Symbol . for ( "v-scx" ) ;
const useSSRContext = ( ) => {
{
const ctx = inject ( ssrContextKey ) ;
if ( ! ctx ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build. `
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
return ctx ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
function watch ( source , cb , options ) {
if ( ! isFunction ( cb ) ) {
warn$1 (
` \` watch(fn, options?) \` signature has been moved to a separate API. Use \` watchEffect(fn, options?) \` instead. \` watch \` now only supports \` watch(source, cb, options?) signature. `
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
return doWatch ( source , cb , options ) ;
}
function doWatch ( source , cb , options = EMPTY _OBJ ) {
const { immediate , deep , flush , once } = options ;
if ( ! cb ) {
if ( immediate !== void 0 ) {
warn$1 (
` watch() "immediate" option is only respected when using the watch(source, callback, options?) signature. `
) ;
}
if ( deep !== void 0 ) {
warn$1 (
` watch() "deep" option is only respected when using the watch(source, callback, options?) signature. `
) ;
}
if ( once !== void 0 ) {
warn$1 (
` watch() "once" option is only respected when using the watch(source, callback, options?) signature. `
) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
const baseWatchOptions = extend ( { } , options ) ;
baseWatchOptions . onWarn = warn$1 ;
const runsImmediately = cb && immediate || ! cb && flush !== "post" ;
let ssrCleanup ;
if ( isInSSRComponentSetup ) {
if ( flush === "sync" ) {
const ctx = useSSRContext ( ) ;
ssrCleanup = ctx . _ _watcherHandles || ( ctx . _ _watcherHandles = [ ] ) ;
} else if ( ! runsImmediately ) {
const watchStopHandle = ( ) => {
} ;
watchStopHandle . stop = NOOP ;
watchStopHandle . resume = NOOP ;
watchStopHandle . pause = NOOP ;
return watchStopHandle ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const instance = currentInstance ;
baseWatchOptions . call = ( fn , type , args ) => callWithAsyncErrorHandling ( fn , instance , type , args ) ;
let isPre = false ;
if ( flush === "post" ) {
baseWatchOptions . scheduler = ( job ) => {
queuePostRenderEffect ( job , instance && instance . suspense ) ;
} ;
} else if ( flush !== "sync" ) {
isPre = true ;
baseWatchOptions . scheduler = ( job , isFirstRun ) => {
if ( isFirstRun ) {
job ( ) ;
} else {
queueJob ( job ) ;
2024-01-05 12:14:38 +00:00
}
} ;
2026-02-11 16:20:26 +00:00
}
baseWatchOptions . augmentJob = ( job ) => {
if ( cb ) {
job . flags |= 4 ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( isPre ) {
job . flags |= 2 ;
if ( instance ) {
job . id = instance . uid ;
job . i = instance ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
const watchHandle = watch$1 ( source , cb , baseWatchOptions ) ;
if ( isInSSRComponentSetup ) {
if ( ssrCleanup ) {
ssrCleanup . push ( watchHandle ) ;
} else if ( runsImmediately ) {
watchHandle ( ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
return watchHandle ;
}
function instanceWatch ( source , value , options ) {
const publicThis = this . proxy ;
const getter = isString ( source ) ? source . includes ( "." ) ? createPathGetter ( publicThis , source ) : ( ) => publicThis [ source ] : source . bind ( publicThis , publicThis ) ;
let cb ;
if ( isFunction ( value ) ) {
cb = value ;
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
cb = value . handler ;
options = value ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const reset = setCurrentInstance ( this ) ;
const res = doWatch ( getter , cb . bind ( publicThis ) , options ) ;
reset ( ) ;
return res ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function createPathGetter ( ctx , path ) {
const segments = path . split ( "." ) ;
return ( ) => {
let cur = ctx ;
for ( let i = 0 ; i < segments . length && cur ; i ++ ) {
cur = cur [ segments [ i ] ] ;
}
return cur ;
} ;
}
const TeleportEndKey = /* @__PURE__ */ Symbol ( "_vte" ) ;
const isTeleport = ( type ) => type . _ _isTeleport ;
const leaveCbKey = /* @__PURE__ */ Symbol ( "_leaveCb" ) ;
function setTransitionHooks ( vnode , hooks ) {
if ( vnode . shapeFlag & 6 && vnode . component ) {
vnode . transition = hooks ;
setTransitionHooks ( vnode . component . subTree , hooks ) ;
} else if ( vnode . shapeFlag & 128 ) {
vnode . ssContent . transition = hooks . clone ( vnode . ssContent ) ;
vnode . ssFallback . transition = hooks . clone ( vnode . ssFallback ) ;
} else {
vnode . transition = hooks ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
function markAsyncBoundary ( instance ) {
instance . ids = [ instance . ids [ 0 ] + instance . ids [ 2 ] ++ + "-" , 0 , 0 ] ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const knownTemplateRefs = /* @__PURE__ */ new WeakSet ( ) ;
function isTemplateRefKey ( refs , key ) {
let desc ;
return ! ! ( ( desc = Object . getOwnPropertyDescriptor ( refs , key ) ) && ! desc . configurable ) ;
}
const pendingSetRefMap = /* @__PURE__ */ new WeakMap ( ) ;
function setRef ( rawRef , oldRawRef , parentSuspense , vnode , isUnmount = false ) {
if ( isArray ( rawRef ) ) {
rawRef . forEach (
( r , i ) => setRef (
r ,
oldRawRef && ( isArray ( oldRawRef ) ? oldRawRef [ i ] : oldRawRef ) ,
parentSuspense ,
vnode ,
isUnmount
)
) ;
return ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( isAsyncWrapper ( vnode ) && ! isUnmount ) {
if ( vnode . shapeFlag & 512 && vnode . type . _ _asyncResolved && vnode . component . subTree . component ) {
setRef ( rawRef , oldRawRef , parentSuspense , vnode . component . subTree ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return ;
}
const refValue = vnode . shapeFlag & 4 ? getComponentPublicInstance ( vnode . component ) : vnode . el ;
const value = isUnmount ? null : refValue ;
const { i : owner , r : ref } = rawRef ;
if ( ! owner ) {
warn$1 (
` Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function. `
) ;
return ;
}
const oldRef = oldRawRef && oldRawRef . r ;
const refs = owner . refs === EMPTY _OBJ ? owner . refs = { } : owner . refs ;
const setupState = owner . setupState ;
const rawSetupState = toRaw ( setupState ) ;
const canSetSetupRef = setupState === EMPTY _OBJ ? NO : ( key ) => {
{
if ( hasOwn ( rawSetupState , key ) && ! isRef ( rawSetupState [ key ] ) ) {
warn$1 (
` Template ref " ${ key } " used on a non-ref value. It will not work in the production build. `
) ;
}
if ( knownTemplateRefs . has ( rawSetupState [ key ] ) ) {
return false ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( isTemplateRefKey ( refs , key ) ) {
return false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return hasOwn ( rawSetupState , key ) ;
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
const canSetRef = ( ref2 , key ) => {
if ( knownTemplateRefs . has ( ref2 ) ) {
return false ;
}
if ( key && isTemplateRefKey ( refs , key ) ) {
return false ;
}
return true ;
} ;
if ( oldRef != null && oldRef !== ref ) {
invalidatePendingSetRef ( oldRawRef ) ;
if ( isString ( oldRef ) ) {
refs [ oldRef ] = null ;
if ( canSetSetupRef ( oldRef ) ) {
setupState [ oldRef ] = null ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( isRef ( oldRef ) ) {
const oldRawRefAtom = oldRawRef ;
if ( canSetRef ( oldRef , oldRawRefAtom . k ) ) {
oldRef . value = null ;
}
if ( oldRawRefAtom . k ) refs [ oldRawRefAtom . k ] = null ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( isFunction ( ref ) ) {
callWithErrorHandling ( ref , owner , 12 , [ value , refs ] ) ;
} else {
const _isString = isString ( ref ) ;
const _isRef = isRef ( ref ) ;
if ( _isString || _isRef ) {
const doSet = ( ) => {
if ( rawRef . f ) {
const existing = _isString ? canSetSetupRef ( ref ) ? setupState [ ref ] : refs [ ref ] : canSetRef ( ref ) || ! rawRef . k ? ref . value : refs [ rawRef . k ] ;
if ( isUnmount ) {
isArray ( existing ) && remove ( existing , refValue ) ;
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
if ( ! isArray ( existing ) ) {
if ( _isString ) {
refs [ ref ] = [ refValue ] ;
if ( canSetSetupRef ( ref ) ) {
setupState [ ref ] = refs [ ref ] ;
}
} else {
const newVal = [ refValue ] ;
if ( canSetRef ( ref , rawRef . k ) ) {
ref . value = newVal ;
}
if ( rawRef . k ) refs [ rawRef . k ] = newVal ;
}
} else if ( ! existing . includes ( refValue ) ) {
existing . push ( refValue ) ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( _isString ) {
refs [ ref ] = value ;
if ( canSetSetupRef ( ref ) ) {
setupState [ ref ] = value ;
}
} else if ( _isRef ) {
if ( canSetRef ( ref , rawRef . k ) ) {
ref . value = value ;
}
if ( rawRef . k ) refs [ rawRef . k ] = value ;
} else {
warn$1 ( "Invalid template ref type:" , ref , ` ( ${ typeof ref } ) ` ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
if ( value ) {
const job = ( ) => {
doSet ( ) ;
pendingSetRefMap . delete ( rawRef ) ;
} ;
job . id = - 1 ;
pendingSetRefMap . set ( rawRef , job ) ;
queuePostRenderEffect ( job , parentSuspense ) ;
} else {
invalidatePendingSetRef ( rawRef ) ;
doSet ( ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else {
warn$1 ( "Invalid template ref type:" , ref , ` ( ${ typeof ref } ) ` ) ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
function invalidatePendingSetRef ( rawRef ) {
const pendingSetRef = pendingSetRefMap . get ( rawRef ) ;
if ( pendingSetRef ) {
pendingSetRef . flags |= 8 ;
pendingSetRefMap . delete ( rawRef ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
}
const isAsyncWrapper = ( i ) => ! ! i . type . _ _asyncLoader ;
const isKeepAlive = ( vnode ) => vnode . type . _ _isKeepAlive ;
function onActivated ( hook , target ) {
registerKeepAliveHook ( hook , "a" , target ) ;
}
function onDeactivated ( hook , target ) {
registerKeepAliveHook ( hook , "da" , target ) ;
}
function registerKeepAliveHook ( hook , type , target = currentInstance ) {
const wrappedHook = hook . _ _wdc || ( hook . _ _wdc = ( ) => {
let current = target ;
while ( current ) {
if ( current . isDeactivated ) {
return ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
current = current . parent ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return hook ( ) ;
} ) ;
injectHook ( type , wrappedHook , target ) ;
if ( target ) {
let current = target . parent ;
while ( current && current . parent ) {
if ( isKeepAlive ( current . parent . vnode ) ) {
injectToKeepAliveRoot ( wrappedHook , type , target , current ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
current = current . parent ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
function injectToKeepAliveRoot ( hook , type , target , keepAliveRoot ) {
const injected = injectHook (
type ,
hook ,
keepAliveRoot ,
true
/* prepend */
) ;
onUnmounted ( ( ) => {
remove ( keepAliveRoot [ type ] , injected ) ;
} , target ) ;
}
function injectHook ( type , hook , target = currentInstance , prepend = false ) {
if ( target ) {
const hooks = target [ type ] || ( target [ type ] = [ ] ) ;
const wrappedHook = hook . _ _weh || ( hook . _ _weh = ( ... args ) => {
pauseTracking ( ) ;
const reset = setCurrentInstance ( target ) ;
const res = callWithAsyncErrorHandling ( hook , target , type , args ) ;
reset ( ) ;
resetTracking ( ) ;
return res ;
} ) ;
if ( prepend ) {
hooks . unshift ( wrappedHook ) ;
} else {
hooks . push ( wrappedHook ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return wrappedHook ;
} else {
const apiName = toHandlerKey ( ErrorTypeStrings [ type ] . replace ( / hook$/ , "" ) ) ;
warn$1 (
` ${ apiName } is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). ` + ( ` If you are using async setup(), make sure to register lifecycle hooks before the first await statement. ` )
) ;
}
}
const createHook = ( lifecycle ) => ( hook , target = currentInstance ) => {
if ( ! isInSSRComponentSetup || lifecycle === "sp" ) {
injectHook ( lifecycle , ( ... args ) => hook ( ... args ) , target ) ;
2024-01-05 12:14:38 +00:00
}
} ;
2026-02-11 16:20:26 +00:00
const onBeforeMount = createHook ( "bm" ) ;
const onMounted = createHook ( "m" ) ;
const onBeforeUpdate = createHook (
"bu"
) ;
const onUpdated = createHook ( "u" ) ;
const onBeforeUnmount = createHook (
"bum"
) ;
const onUnmounted = createHook ( "um" ) ;
const onServerPrefetch = createHook (
"sp"
) ;
const onRenderTriggered = createHook ( "rtg" ) ;
const onRenderTracked = createHook ( "rtc" ) ;
function onErrorCaptured ( hook , target = currentInstance ) {
injectHook ( "ec" , hook , target ) ;
}
const NULL _DYNAMIC _COMPONENT = /* @__PURE__ */ Symbol . for ( "v-ndc" ) ;
function ensureValidVNode$1 ( vnodes ) {
return vnodes . some ( ( child ) => {
if ( ! isVNode$2 ( child ) ) return true ;
if ( child . type === Comment ) return false ;
if ( child . type === Fragment && ! ensureValidVNode$1 ( child . children ) )
return false ;
2024-01-05 12:14:38 +00:00
return true ;
2026-02-11 16:20:26 +00:00
} ) ? vnodes : null ;
}
const getPublicInstance = ( i ) => {
if ( ! i ) return null ;
if ( isStatefulComponent ( i ) ) return getComponentPublicInstance ( i ) ;
return getPublicInstance ( i . parent ) ;
} ;
const publicPropertiesMap = (
// Move PURE marker to new line to workaround compiler discarding it
// due to type annotation
/* @__PURE__ */ extend ( /* @__PURE__ */ Object . create ( null ) , {
$ : ( i ) => i ,
$el : ( i ) => i . vnode . el ,
$data : ( i ) => i . data ,
$props : ( i ) => shallowReadonly ( i . props ) ,
$attrs : ( i ) => shallowReadonly ( i . attrs ) ,
$slots : ( i ) => shallowReadonly ( i . slots ) ,
$refs : ( i ) => shallowReadonly ( i . refs ) ,
$parent : ( i ) => getPublicInstance ( i . parent ) ,
$root : ( i ) => getPublicInstance ( i . root ) ,
$host : ( i ) => i . ce ,
$emit : ( i ) => i . emit ,
$options : ( i ) => resolveMergedOptions ( i ) ,
$forceUpdate : ( i ) => i . f || ( i . f = ( ) => {
queueJob ( i . update ) ;
} ) ,
$nextTick : ( i ) => i . n || ( i . n = nextTick . bind ( i . proxy ) ) ,
$watch : ( i ) => instanceWatch . bind ( i )
} )
) ;
const isReservedPrefix = ( key ) => key === "_" || key === "$" ;
const hasSetupBinding = ( state , key ) => state !== EMPTY _OBJ && ! state . _ _isScriptSetup && hasOwn ( state , key ) ;
const PublicInstanceProxyHandlers = {
get ( { _ : instance } , key ) {
if ( key === "__v_skip" ) {
2024-01-05 12:14:38 +00:00
return true ;
}
2026-02-11 16:20:26 +00:00
const { ctx , setupState , data , props , accessCache , type , appContext } = instance ;
if ( key === "__isVue" ) {
return true ;
}
if ( key [ 0 ] !== "$" ) {
const n = accessCache [ key ] ;
if ( n !== void 0 ) {
switch ( n ) {
case 1 /* SETUP */ :
return setupState [ key ] ;
case 2 /* DATA */ :
return data [ key ] ;
case 4 /* CONTEXT */ :
return ctx [ key ] ;
case 3 /* PROPS */ :
return props [ key ] ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( hasSetupBinding ( setupState , key ) ) {
accessCache [ key ] = 1 /* SETUP */ ;
return setupState [ key ] ;
} else if ( data !== EMPTY _OBJ && hasOwn ( data , key ) ) {
accessCache [ key ] = 2 /* DATA */ ;
return data [ key ] ;
} else if ( hasOwn ( props , key ) ) {
accessCache [ key ] = 3 /* PROPS */ ;
return props [ key ] ;
} else if ( ctx !== EMPTY _OBJ && hasOwn ( ctx , key ) ) {
accessCache [ key ] = 4 /* CONTEXT */ ;
return ctx [ key ] ;
} else if ( shouldCacheAccess ) {
accessCache [ key ] = 0 /* OTHER */ ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
const publicGetter = publicPropertiesMap [ key ] ;
let cssModule , globalProperties ;
if ( publicGetter ) {
if ( key === "$attrs" ) {
track ( instance . attrs , "get" , "" ) ;
markAttrsAccessed ( ) ;
} else if ( key === "$slots" ) {
track ( instance , "get" , key ) ;
}
return publicGetter ( instance ) ;
} else if (
// css module (injected by vue-loader)
( cssModule = type . _ _cssModules ) && ( cssModule = cssModule [ key ] )
) {
return cssModule ;
} else if ( ctx !== EMPTY _OBJ && hasOwn ( ctx , key ) ) {
accessCache [ key ] = 4 /* CONTEXT */ ;
return ctx [ key ] ;
} else if (
// global properties
globalProperties = appContext . config . globalProperties , hasOwn ( globalProperties , key )
) {
{
return globalProperties [ key ] ;
}
} else if ( currentRenderingInstance && ( ! isString ( key ) || // #1091 avoid internal isRef/isVNode checks on component instance leading
// to infinite warning loop
key . indexOf ( "__v" ) !== 0 ) ) {
if ( data !== EMPTY _OBJ && isReservedPrefix ( key [ 0 ] ) && hasOwn ( data , key ) ) {
warn$1 (
` Property ${ JSON . stringify (
key
) } must be accessed via $data because it starts with a reserved character ( "$" or "_" ) and is not proxied on the render context . `
) ;
} else if ( instance === currentRenderingInstance ) {
warn$1 (
` Property ${ JSON . stringify ( key ) } was accessed during render but is not defined on instance. `
) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
} ,
set ( { _ : instance } , key , value ) {
const { data , setupState , ctx } = instance ;
if ( hasSetupBinding ( setupState , key ) ) {
setupState [ key ] = value ;
2024-01-05 12:14:38 +00:00
return true ;
2026-02-11 16:20:26 +00:00
} else if ( setupState . _ _isScriptSetup && hasOwn ( setupState , key ) ) {
warn$1 ( ` Cannot mutate <script setup> binding " ${ key } " from Options API. ` ) ;
return false ;
} else if ( data !== EMPTY _OBJ && hasOwn ( data , key ) ) {
data [ key ] = value ;
2024-01-05 12:14:38 +00:00
return true ;
2026-02-11 16:20:26 +00:00
} else if ( hasOwn ( instance . props , key ) ) {
warn$1 ( ` Attempting to mutate prop " ${ key } ". Props are readonly. ` ) ;
return false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( key [ 0 ] === "$" && key . slice ( 1 ) in instance ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Attempting to mutate public property " ${ key } ". Properties starting with $ are reserved and readonly. `
2024-01-05 12:14:38 +00:00
) ;
2026-02-11 16:20:26 +00:00
return false ;
} else {
if ( key in instance . appContext . config . globalProperties ) {
Object . defineProperty ( ctx , key , {
enumerable : true ,
configurable : true ,
value
} ) ;
} else {
ctx [ key ] = value ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return true ;
} ,
has ( {
_ : { data , setupState , accessCache , ctx , appContext , props , type }
} , key ) {
let cssModules ;
return ! ! ( accessCache [ key ] || data !== EMPTY _OBJ && key [ 0 ] !== "$" && hasOwn ( data , key ) || hasSetupBinding ( setupState , key ) || hasOwn ( props , key ) || hasOwn ( ctx , key ) || hasOwn ( publicPropertiesMap , key ) || hasOwn ( appContext . config . globalProperties , key ) || ( cssModules = type . _ _cssModules ) && cssModules [ key ] ) ;
} ,
defineProperty ( target , key , descriptor ) {
if ( descriptor . get != null ) {
target . _ . accessCache [ key ] = 0 ;
} else if ( hasOwn ( descriptor , "value" ) ) {
this . set ( target , key , descriptor . value , null ) ;
}
return Reflect . defineProperty ( target , key , descriptor ) ;
2024-01-05 12:14:38 +00:00
}
} ;
2026-02-11 16:20:26 +00:00
{
PublicInstanceProxyHandlers . ownKeys = ( target ) => {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead. `
2024-01-05 12:14:38 +00:00
) ;
2026-02-11 16:20:26 +00:00
return Reflect . ownKeys ( target ) ;
} ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function createDevRenderContext ( instance ) {
const target = { } ;
Object . defineProperty ( target , ` _ ` , {
configurable : true ,
enumerable : false ,
get : ( ) => instance
} ) ;
Object . keys ( publicPropertiesMap ) . forEach ( ( key ) => {
Object . defineProperty ( target , key , {
configurable : true ,
enumerable : false ,
get : ( ) => publicPropertiesMap [ key ] ( instance ) ,
// intercepted by the proxy so no need for implementation,
// but needed to prevent set errors
set : NOOP
} ) ;
} ) ;
return target ;
}
function exposePropsOnRenderContext ( instance ) {
const {
ctx ,
propsOptions : [ propsOptions ]
} = instance ;
if ( propsOptions ) {
Object . keys ( propsOptions ) . forEach ( ( key ) => {
Object . defineProperty ( ctx , key , {
enumerable : true ,
configurable : true ,
get : ( ) => instance . props [ key ] ,
set : NOOP
} ) ;
} ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
}
function exposeSetupStateOnRenderContext ( instance ) {
const { ctx , setupState } = instance ;
Object . keys ( toRaw ( setupState ) ) . forEach ( ( key ) => {
if ( ! setupState . _ _isScriptSetup ) {
if ( isReservedPrefix ( key [ 0 ] ) ) {
warn$1 (
` setup() return property ${ JSON . stringify (
key
) } should not start with "$" or "_" which are reserved prefixes for Vue internals . `
) ;
return ;
}
Object . defineProperty ( ctx , key , {
enumerable : true ,
configurable : true ,
get : ( ) => setupState [ key ] ,
set : NOOP
} ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ) ;
}
function normalizePropsOrEmits ( props ) {
return isArray ( props ) ? props . reduce (
( normalized , p ) => ( normalized [ p ] = null , normalized ) ,
{ }
) : props ;
}
function createDuplicateChecker ( ) {
const cache = /* @__PURE__ */ Object . create ( null ) ;
return ( type , key ) => {
if ( cache [ key ] ) {
warn$1 ( ` ${ type } property " ${ key } " is already defined in ${ cache [ key ] } . ` ) ;
} else {
cache [ key ] = type ;
2024-01-05 12:14:38 +00:00
}
} ;
2026-02-11 16:20:26 +00:00
}
let shouldCacheAccess = true ;
function applyOptions ( instance ) {
const options = resolveMergedOptions ( instance ) ;
const publicThis = instance . proxy ;
const ctx = instance . ctx ;
shouldCacheAccess = false ;
if ( options . beforeCreate ) {
callHook ( options . beforeCreate , instance , "bc" ) ;
}
const {
// state
data : dataOptions ,
computed : computedOptions ,
methods ,
watch : watchOptions ,
provide : provideOptions ,
inject : injectOptions ,
// lifecycle
created ,
beforeMount ,
mounted ,
beforeUpdate ,
updated ,
activated ,
deactivated ,
beforeDestroy ,
beforeUnmount ,
destroyed ,
unmounted ,
render ,
renderTracked ,
renderTriggered ,
errorCaptured ,
serverPrefetch ,
// public API
expose ,
inheritAttrs ,
// assets
components ,
directives ,
filters
} = options ;
const checkDuplicateProperties = createDuplicateChecker ( ) ;
{
const [ propsOptions ] = instance . propsOptions ;
if ( propsOptions ) {
for ( const key in propsOptions ) {
checkDuplicateProperties ( "Props" /* PROPS */ , key ) ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
if ( injectOptions ) {
resolveInjections ( injectOptions , ctx , checkDuplicateProperties ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( methods ) {
for ( const key in methods ) {
const methodHandler = methods [ key ] ;
if ( isFunction ( methodHandler ) ) {
{
Object . defineProperty ( ctx , key , {
value : methodHandler . bind ( publicThis ) ,
configurable : true ,
enumerable : true ,
writable : true
} ) ;
}
{
checkDuplicateProperties ( "Methods" /* METHODS */ , key ) ;
}
} else {
warn$1 (
` Method " ${ key } " has type " ${ typeof methodHandler } " in the component definition. Did you reference the function correctly? `
) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( dataOptions ) {
if ( ! isFunction ( dataOptions ) ) {
warn$1 (
` The data option must be a function. Plain object usage is no longer supported. `
) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const data = dataOptions . call ( publicThis , publicThis ) ;
if ( isPromise ( data ) ) {
warn$1 (
` data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>. `
) ;
}
if ( ! isObject ( data ) ) {
warn$1 ( ` data() should return an object. ` ) ;
} else {
instance . data = reactive ( data ) ;
{
for ( const key in data ) {
checkDuplicateProperties ( "Data" /* DATA */ , key ) ;
if ( ! isReservedPrefix ( key [ 0 ] ) ) {
Object . defineProperty ( ctx , key , {
configurable : true ,
enumerable : true ,
get : ( ) => data [ key ] ,
set : NOOP
} ) ;
}
2024-01-05 12:14:38 +00:00
}
}
}
}
2026-02-11 16:20:26 +00:00
shouldCacheAccess = true ;
if ( computedOptions ) {
for ( const key in computedOptions ) {
const opt = computedOptions [ key ] ;
const get = isFunction ( opt ) ? opt . bind ( publicThis , publicThis ) : isFunction ( opt . get ) ? opt . get . bind ( publicThis , publicThis ) : NOOP ;
if ( get === NOOP ) {
warn$1 ( ` Computed property " ${ key } " has no getter. ` ) ;
}
const set = ! isFunction ( opt ) && isFunction ( opt . set ) ? opt . set . bind ( publicThis ) : ( ) => {
warn$1 (
` Write operation failed: computed property " ${ key } " is readonly. `
) ;
} ;
const c = computed ( {
get ,
set
} ) ;
Object . defineProperty ( ctx , key , {
enumerable : true ,
configurable : true ,
get : ( ) => c . value ,
set : ( v ) => c . value = v
} ) ;
{
checkDuplicateProperties ( "Computed" /* COMPUTED */ , key ) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( watchOptions ) {
for ( const key in watchOptions ) {
createWatcher ( watchOptions [ key ] , ctx , publicThis , key ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( provideOptions ) {
const provides = isFunction ( provideOptions ) ? provideOptions . call ( publicThis ) : provideOptions ;
Reflect . ownKeys ( provides ) . forEach ( ( key ) => {
provide ( key , provides [ key ] ) ;
} ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( created ) {
callHook ( created , instance , "c" ) ;
}
function registerLifecycleHook ( register , hook ) {
if ( isArray ( hook ) ) {
hook . forEach ( ( _hook ) => register ( _hook . bind ( publicThis ) ) ) ;
} else if ( hook ) {
register ( hook . bind ( publicThis ) ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
registerLifecycleHook ( onBeforeMount , beforeMount ) ;
registerLifecycleHook ( onMounted , mounted ) ;
registerLifecycleHook ( onBeforeUpdate , beforeUpdate ) ;
registerLifecycleHook ( onUpdated , updated ) ;
registerLifecycleHook ( onActivated , activated ) ;
registerLifecycleHook ( onDeactivated , deactivated ) ;
registerLifecycleHook ( onErrorCaptured , errorCaptured ) ;
registerLifecycleHook ( onRenderTracked , renderTracked ) ;
registerLifecycleHook ( onRenderTriggered , renderTriggered ) ;
registerLifecycleHook ( onBeforeUnmount , beforeUnmount ) ;
registerLifecycleHook ( onUnmounted , unmounted ) ;
registerLifecycleHook ( onServerPrefetch , serverPrefetch ) ;
if ( isArray ( expose ) ) {
if ( expose . length ) {
const exposed = instance . exposed || ( instance . exposed = { } ) ;
expose . forEach ( ( key ) => {
Object . defineProperty ( exposed , key , {
get : ( ) => publicThis [ key ] ,
set : ( val ) => publicThis [ key ] = val ,
enumerable : true
} ) ;
} ) ;
} else if ( ! instance . exposed ) {
instance . exposed = { } ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( render && instance . render === NOOP ) {
instance . render = render ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( inheritAttrs != null ) {
instance . inheritAttrs = inheritAttrs ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( components ) instance . components = components ;
if ( directives ) instance . directives = directives ;
if ( serverPrefetch ) {
markAsyncBoundary ( instance ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
function resolveInjections ( injectOptions , ctx , checkDuplicateProperties = NOOP ) {
if ( isArray ( injectOptions ) ) {
injectOptions = normalizeInject ( injectOptions ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
for ( const key in injectOptions ) {
const opt = injectOptions [ key ] ;
let injected ;
if ( isObject ( opt ) ) {
if ( "default" in opt ) {
injected = inject (
opt . from || key ,
opt . default ,
true
) ;
} else {
injected = inject ( opt . from || key ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else {
injected = inject ( opt ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( isRef ( injected ) ) {
Object . defineProperty ( ctx , key , {
enumerable : true ,
configurable : true ,
get : ( ) => injected . value ,
set : ( v ) => injected . value = v
} ) ;
} else {
ctx [ key ] = injected ;
}
{
checkDuplicateProperties ( "Inject" /* INJECT */ , key ) ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
function callHook ( hook , instance , type ) {
callWithAsyncErrorHandling (
isArray ( hook ) ? hook . map ( ( h ) => h . bind ( instance . proxy ) ) : hook . bind ( instance . proxy ) ,
instance ,
type
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
function createWatcher ( raw , ctx , publicThis , key ) {
let getter = key . includes ( "." ) ? createPathGetter ( publicThis , key ) : ( ) => publicThis [ key ] ;
if ( isString ( raw ) ) {
const handler = ctx [ raw ] ;
if ( isFunction ( handler ) ) {
{
watch ( getter , handler ) ;
2024-01-05 12:14:38 +00:00
}
} else {
2026-02-11 16:20:26 +00:00
warn$1 ( ` Invalid watch handler specified by key " ${ raw } " ` , handler ) ;
}
} else if ( isFunction ( raw ) ) {
{
watch ( getter , raw . bind ( publicThis ) ) ;
}
} else if ( isObject ( raw ) ) {
if ( isArray ( raw ) ) {
raw . forEach ( ( r ) => createWatcher ( r , ctx , publicThis , key ) ) ;
} else {
const handler = isFunction ( raw . handler ) ? raw . handler . bind ( publicThis ) : ctx [ raw . handler ] ;
if ( isFunction ( handler ) ) {
watch ( getter , handler , raw ) ;
} else {
warn$1 ( ` Invalid watch handler specified by key " ${ raw . handler } " ` , handler ) ;
}
2024-01-05 12:14:38 +00:00
}
} else {
2026-02-11 16:20:26 +00:00
warn$1 ( ` Invalid watch option: " ${ key } " ` , raw ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
function resolveMergedOptions ( instance ) {
const base = instance . type ;
const { mixins , extends : extendsOptions } = base ;
const {
mixins : globalMixins ,
optionsCache : cache ,
config : { optionMergeStrategies }
} = instance . appContext ;
const cached = cache . get ( base ) ;
let resolved ;
if ( cached ) {
resolved = cached ;
} else if ( ! globalMixins . length && ! mixins && ! extendsOptions ) {
{
resolved = base ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else {
resolved = { } ;
if ( globalMixins . length ) {
globalMixins . forEach (
( m ) => mergeOptions ( resolved , m , optionMergeStrategies , true )
) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
mergeOptions ( resolved , base , optionMergeStrategies ) ;
}
if ( isObject ( base ) ) {
cache . set ( base , resolved ) ;
}
return resolved ;
}
function mergeOptions ( to , from , strats , asMixin = false ) {
const { mixins , extends : extendsOptions } = from ;
if ( extendsOptions ) {
mergeOptions ( to , extendsOptions , strats , true ) ;
}
if ( mixins ) {
mixins . forEach (
( m ) => mergeOptions ( to , m , strats , true )
) ;
}
for ( const key in from ) {
if ( asMixin && key === "expose" ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` "expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself. `
2024-01-05 12:14:38 +00:00
) ;
} else {
2026-02-11 16:20:26 +00:00
const strat = internalOptionMergeStrats [ key ] || strats && strats [ key ] ;
to [ key ] = strat ? strat ( to [ key ] , from [ key ] ) : from [ key ] ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
return to ;
}
const internalOptionMergeStrats = {
data : mergeDataFn ,
props : mergeEmitsOrPropsOptions ,
emits : mergeEmitsOrPropsOptions ,
// objects
methods : mergeObjectOptions ,
computed : mergeObjectOptions ,
// lifecycle
beforeCreate : mergeAsArray ,
created : mergeAsArray ,
beforeMount : mergeAsArray ,
mounted : mergeAsArray ,
beforeUpdate : mergeAsArray ,
updated : mergeAsArray ,
beforeDestroy : mergeAsArray ,
beforeUnmount : mergeAsArray ,
destroyed : mergeAsArray ,
unmounted : mergeAsArray ,
activated : mergeAsArray ,
deactivated : mergeAsArray ,
errorCaptured : mergeAsArray ,
serverPrefetch : mergeAsArray ,
// assets
components : mergeObjectOptions ,
directives : mergeObjectOptions ,
// watch
watch : mergeWatchOptions ,
// provide / inject
provide : mergeDataFn ,
inject : mergeInject
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
function mergeDataFn ( to , from ) {
if ( ! from ) {
return to ;
}
if ( ! to ) {
return from ;
}
return function mergedDataFn ( ) {
return ( extend ) (
isFunction ( to ) ? to . call ( this , this ) : to ,
isFunction ( from ) ? from . call ( this , this ) : from
2024-01-05 12:14:38 +00:00
) ;
} ;
}
2026-02-11 16:20:26 +00:00
function mergeInject ( to , from ) {
return mergeObjectOptions ( normalizeInject ( to ) , normalizeInject ( from ) ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function normalizeInject ( raw ) {
if ( isArray ( raw ) ) {
const res = { } ;
for ( let i = 0 ; i < raw . length ; i ++ ) {
res [ raw [ i ] ] = raw [ i ] ;
}
return res ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return raw ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function mergeAsArray ( to , from ) {
return to ? [ ... new Set ( [ ] . concat ( to , from ) ) ] : from ;
}
function mergeObjectOptions ( to , from ) {
return to ? extend ( /* @__PURE__ */ Object . create ( null ) , to , from ) : from ;
}
function mergeEmitsOrPropsOptions ( to , from ) {
if ( to ) {
if ( isArray ( to ) && isArray ( from ) ) {
return [ ... /* @__PURE__ */ new Set ( [ ... to , ... from ] ) ] ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return extend (
/* @__PURE__ */ Object . create ( null ) ,
normalizePropsOrEmits ( to ) ,
normalizePropsOrEmits ( from != null ? from : { } )
) ;
} else {
return from ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function mergeWatchOptions ( to , from ) {
if ( ! to ) return from ;
if ( ! from ) return to ;
const merged = extend ( /* @__PURE__ */ Object . create ( null ) , to ) ;
for ( const key in from ) {
merged [ key ] = mergeAsArray ( to [ key ] , from [ key ] ) ;
}
return merged ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function createAppContext ( ) {
return {
app : null ,
config : {
isNativeTag : NO ,
performance : false ,
globalProperties : { } ,
optionMergeStrategies : { } ,
errorHandler : void 0 ,
warnHandler : void 0 ,
compilerOptions : { }
} ,
mixins : [ ] ,
components : { } ,
directives : { } ,
provides : /* @__PURE__ */ Object . create ( null ) ,
optionsCache : /* @__PURE__ */ new WeakMap ( ) ,
propsCache : /* @__PURE__ */ new WeakMap ( ) ,
emitsCache : /* @__PURE__ */ new WeakMap ( )
2024-01-05 12:14:38 +00:00
} ;
}
2026-02-11 16:20:26 +00:00
let uid$1 = 0 ;
function createAppAPI ( render , hydrate ) {
return function createApp ( rootComponent , rootProps = null ) {
if ( ! isFunction ( rootComponent ) ) {
rootComponent = extend ( { } , rootComponent ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( rootProps != null && ! isObject ( rootProps ) ) {
warn$1 ( ` root props passed to app.mount() must be an object. ` ) ;
rootProps = null ;
}
const context = createAppContext ( ) ;
const installedPlugins = /* @__PURE__ */ new WeakSet ( ) ;
const pluginCleanupFns = [ ] ;
let isMounted = false ;
const app = context . app = {
_uid : uid$1 ++ ,
_component : rootComponent ,
_props : rootProps ,
_container : null ,
_context : context ,
_instance : null ,
version ,
get config ( ) {
return context . config ;
} ,
set config ( v ) {
2024-01-05 12:14:38 +00:00
{
2026-02-11 16:20:26 +00:00
warn$1 (
` app.config cannot be replaced. Modify individual options instead. `
) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ,
use ( plugin , ... options ) {
if ( installedPlugins . has ( plugin ) ) {
warn$1 ( ` Plugin has already been applied to target app. ` ) ;
} else if ( plugin && isFunction ( plugin . install ) ) {
installedPlugins . add ( plugin ) ;
plugin . install ( app , ... options ) ;
} else if ( isFunction ( plugin ) ) {
installedPlugins . add ( plugin ) ;
plugin ( app , ... options ) ;
} else {
warn$1 (
` A plugin must either be a function or an object with an "install" function. `
) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return app ;
} ,
mixin ( mixin ) {
{
if ( ! context . mixins . includes ( mixin ) ) {
context . mixins . push ( mixin ) ;
} else {
warn$1 (
"Mixin has already been applied to target app" + ( mixin . name ? ` : ${ mixin . name } ` : "" )
) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
return app ;
} ,
component ( name , component ) {
{
validateComponentName ( name , context . config ) ;
}
if ( ! component ) {
return context . components [ name ] ;
}
if ( context . components [ name ] ) {
warn$1 ( ` Component " ${ name } " has already been registered in target app. ` ) ;
}
context . components [ name ] = component ;
return app ;
} ,
directive ( name , directive ) {
{
validateDirectiveName ( name ) ;
}
if ( ! directive ) {
return context . directives [ name ] ;
}
if ( context . directives [ name ] ) {
warn$1 ( ` Directive " ${ name } " has already been registered in target app. ` ) ;
}
context . directives [ name ] = directive ;
return app ;
} ,
mount ( rootContainer , isHydrate , namespace ) {
if ( ! isMounted ) {
if ( rootContainer . _ _vue _app _ _ ) {
warn$1 (
` There is already an app instance mounted on the host container.
If you want to mount another app on the same host container , you need to unmount the previous app by calling \ ` app.unmount() \` first. `
) ;
}
const vnode = app . _ceVNode || createVNode ( rootComponent , rootProps ) ;
vnode . appContext = context ;
if ( namespace === true ) {
namespace = "svg" ;
} else if ( namespace === false ) {
namespace = void 0 ;
}
{
context . reload = ( ) => {
const cloned = cloneVNode ( vnode ) ;
cloned . el = null ;
render ( cloned , rootContainer , namespace ) ;
} ;
}
{
render ( vnode , rootContainer , namespace ) ;
}
isMounted = true ;
app . _container = rootContainer ;
rootContainer . _ _vue _app _ _ = app ;
{
app . _instance = vnode . component ;
devtoolsInitApp ( app , version ) ;
}
return getComponentPublicInstance ( vnode . component ) ;
} else {
warn$1 (
` App has already been mounted.
If you want to remount the same app , move your app creation logic into a factory function and create fresh app instances for each mount - e . g . \ ` const createMyApp = () => createApp(App) \` `
) ;
}
} ,
onUnmount ( cleanupFn ) {
if ( typeof cleanupFn !== "function" ) {
warn$1 (
` Expected function as first argument to app.onUnmount(), but got ${ typeof cleanupFn } `
) ;
}
pluginCleanupFns . push ( cleanupFn ) ;
} ,
unmount ( ) {
if ( isMounted ) {
callWithAsyncErrorHandling (
pluginCleanupFns ,
app . _instance ,
16
) ;
render ( null , app . _container ) ;
{
app . _instance = null ;
devtoolsUnmountApp ( app ) ;
}
delete app . _container . _ _vue _app _ _ ;
} else {
warn$1 ( ` Cannot unmount an app that is not mounted. ` ) ;
}
} ,
provide ( key , value ) {
if ( key in context . provides ) {
if ( hasOwn ( context . provides , key ) ) {
warn$1 (
` App already provides property with key " ${ String ( key ) } ". It will be overwritten with the new value. `
) ;
} else {
warn$1 (
` App already provides property with key " ${ String ( key ) } " inherited from its parent element. It will be overwritten with the new value. `
) ;
}
}
context . provides [ key ] = value ;
return app ;
} ,
runWithContext ( fn ) {
const lastApp = currentApp ;
currentApp = app ;
try {
return fn ( ) ;
} finally {
currentApp = lastApp ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
return app ;
} ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
let currentApp = null ;
const getModelModifiers = ( props , modelName ) => {
return modelName === "modelValue" || modelName === "model-value" ? props . modelModifiers : props [ ` ${ modelName } Modifiers ` ] || props [ ` ${ camelize ( modelName ) } Modifiers ` ] || props [ ` ${ hyphenate ( modelName ) } Modifiers ` ] ;
} ;
function emit ( instance , event , ... rawArgs ) {
if ( instance . isUnmounted ) return ;
const props = instance . vnode . props || EMPTY _OBJ ;
{
const {
emitsOptions ,
propsOptions : [ propsOptions ]
} = instance ;
if ( emitsOptions ) {
if ( ! ( event in emitsOptions ) && true ) {
if ( ! propsOptions || ! ( toHandlerKey ( camelize ( event ) ) in propsOptions ) ) {
warn$1 (
` Component emitted event " ${ event } " but it is neither declared in the emits option nor as an " ${ toHandlerKey ( camelize ( event ) ) } " prop. `
) ;
}
} else {
const validator = emitsOptions [ event ] ;
if ( isFunction ( validator ) ) {
const isValid = validator ( ... rawArgs ) ;
if ( ! isValid ) {
warn$1 (
` Invalid event arguments: event validation failed for event " ${ event } ". `
) ;
}
}
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
let args = rawArgs ;
const isModelListener = event . startsWith ( "update:" ) ;
const modifiers = isModelListener && getModelModifiers ( props , event . slice ( 7 ) ) ;
if ( modifiers ) {
if ( modifiers . trim ) {
args = rawArgs . map ( ( a ) => isString ( a ) ? a . trim ( ) : a ) ;
}
if ( modifiers . number ) {
args = rawArgs . map ( looseToNumber ) ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
{
devtoolsComponentEmit ( instance , event , args ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
{
const lowerCaseEvent = event . toLowerCase ( ) ;
if ( lowerCaseEvent !== event && props [ toHandlerKey ( lowerCaseEvent ) ] ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Event " ${ lowerCaseEvent } " is emitted in component ${ formatComponentName (
instance ,
instance . type
) } but the handler is registered for "${event}" . Note that HTML attributes are case - insensitive and you cannot use v - on to listen to camelCase events when using in - DOM templates . You should probably use " $ { hyphenate (
event
) } " instead of " $ { event } " . `
2024-01-05 12:14:38 +00:00
) ;
}
}
2026-02-11 16:20:26 +00:00
let handlerName ;
let handler = props [ handlerName = toHandlerKey ( event ) ] || // also try camelCase event handler (#2249)
props [ handlerName = toHandlerKey ( camelize ( event ) ) ] ;
if ( ! handler && isModelListener ) {
handler = props [ handlerName = toHandlerKey ( hyphenate ( event ) ) ] ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( handler ) {
callWithAsyncErrorHandling (
handler ,
instance ,
6 ,
args
) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const onceHandler = props [ handlerName + ` Once ` ] ;
if ( onceHandler ) {
if ( ! instance . emitted ) {
instance . emitted = { } ;
} else if ( instance . emitted [ handlerName ] ) {
return ;
}
instance . emitted [ handlerName ] = true ;
callWithAsyncErrorHandling (
onceHandler ,
instance ,
6 ,
args
2024-01-05 12:14:38 +00:00
) ;
2026-02-11 16:20:26 +00:00
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const mixinEmitsCache = /* @__PURE__ */ new WeakMap ( ) ;
function normalizeEmitsOptions ( comp , appContext , asMixin = false ) {
const cache = asMixin ? mixinEmitsCache : appContext . emitsCache ;
const cached = cache . get ( comp ) ;
if ( cached !== void 0 ) {
return cached ;
}
const raw = comp . emits ;
let normalized = { } ;
let hasExtends = false ;
if ( ! isFunction ( comp ) ) {
const extendEmits = ( raw2 ) => {
const normalizedFromExtend = normalizeEmitsOptions ( raw2 , appContext , true ) ;
if ( normalizedFromExtend ) {
hasExtends = true ;
extend ( normalized , normalizedFromExtend ) ;
}
} ;
if ( ! asMixin && appContext . mixins . length ) {
appContext . mixins . forEach ( extendEmits ) ;
}
if ( comp . extends ) {
extendEmits ( comp . extends ) ;
}
if ( comp . mixins ) {
comp . mixins . forEach ( extendEmits ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( ! raw && ! hasExtends ) {
if ( isObject ( comp ) ) {
cache . set ( comp , null ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return null ;
}
if ( isArray ( raw ) ) {
raw . forEach ( ( key ) => normalized [ key ] = null ) ;
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
extend ( normalized , raw ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( isObject ( comp ) ) {
cache . set ( comp , normalized ) ;
}
return normalized ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function isEmitListener ( options , key ) {
if ( ! options || ! isOn ( key ) ) {
return false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
key = key . slice ( 2 ) . replace ( /Once$/ , "" ) ;
return hasOwn ( options , key [ 0 ] . toLowerCase ( ) + key . slice ( 1 ) ) || hasOwn ( options , hyphenate ( key ) ) || hasOwn ( options , key ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
let accessedAttrs = false ;
function markAttrsAccessed ( ) {
accessedAttrs = true ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function renderComponentRoot$1 ( instance ) {
const {
type : Component ,
vnode ,
proxy ,
withProxy ,
propsOptions : [ propsOptions ] ,
slots ,
attrs ,
emit ,
render ,
renderCache ,
props ,
data ,
setupState ,
ctx ,
inheritAttrs
} = instance ;
const prev = setCurrentRenderingInstance$1 ( instance ) ;
let result ;
let fallthroughAttrs ;
{
accessedAttrs = false ;
}
try {
if ( vnode . shapeFlag & 4 ) {
const proxyToUse = withProxy || proxy ;
const thisProxy = setupState . _ _isScriptSetup ? new Proxy ( proxyToUse , {
get ( target , key , receiver ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Property ' ${ String (
key
) } ' was accessed via ' this '. Avoid using ' this ' in templates . `
2024-01-05 12:14:38 +00:00
) ;
2026-02-11 16:20:26 +00:00
return Reflect . get ( target , key , receiver ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ) : proxyToUse ;
result = normalizeVNode$1 (
render . call (
thisProxy ,
proxyToUse ,
renderCache ,
true ? shallowReadonly ( props ) : props ,
setupState ,
data ,
ctx
)
) ;
fallthroughAttrs = attrs ;
} else {
const render2 = Component ;
if ( attrs === props ) {
markAttrsAccessed ( ) ;
}
result = normalizeVNode$1 (
render2 . length > 1 ? render2 (
true ? shallowReadonly ( props ) : props ,
true ? {
get attrs ( ) {
markAttrsAccessed ( ) ;
return shallowReadonly ( attrs ) ;
} ,
slots ,
emit
} : { attrs , slots , emit }
) : render2 (
true ? shallowReadonly ( props ) : props ,
null
)
) ;
fallthroughAttrs = Component . props ? attrs : getFunctionalFallthrough ( attrs ) ;
}
} catch ( err ) {
handleError ( err , instance , 1 ) ;
result = createVNode ( Comment ) ;
}
let root = result ;
let setRoot = void 0 ;
if ( result . patchFlag > 0 && result . patchFlag & 2048 ) {
[ root , setRoot ] = getChildRoot ( result ) ;
}
if ( fallthroughAttrs && inheritAttrs !== false ) {
const keys = Object . keys ( fallthroughAttrs ) ;
const { shapeFlag } = root ;
if ( keys . length ) {
if ( shapeFlag & ( 1 | 6 ) ) {
if ( propsOptions && keys . some ( isModelListener ) ) {
fallthroughAttrs = filterModelListeners (
fallthroughAttrs ,
propsOptions
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
root = cloneVNode ( root , fallthroughAttrs , false , true ) ;
} else if ( ! accessedAttrs && root . type !== Comment ) {
const allAttrs = Object . keys ( attrs ) ;
const eventAttrs = [ ] ;
const extraAttrs = [ ] ;
for ( let i = 0 , l = allAttrs . length ; i < l ; i ++ ) {
const key = allAttrs [ i ] ;
if ( isOn ( key ) ) {
if ( ! isModelListener ( key ) ) {
eventAttrs . push ( key [ 2 ] . toLowerCase ( ) + key . slice ( 3 ) ) ;
}
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
extraAttrs . push ( key ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
if ( extraAttrs . length ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Extraneous non-props attributes ( ${ extraAttrs . join ( ", " ) } ) were passed to component but could not be automatically inherited because component renders fragment or text or teleport root nodes. `
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
if ( eventAttrs . length ) {
2024-01-05 12:14:38 +00:00
warn$1 (
2026-02-11 16:20:26 +00:00
` Extraneous non-emits event listeners ( ${ eventAttrs . join ( ", " ) } ) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option. `
2024-01-05 12:14:38 +00:00
) ;
}
2026-02-11 16:20:26 +00:00
}
}
}
if ( vnode . dirs ) {
if ( ! isElementRoot ( root ) ) {
warn$1 (
` Runtime directive used on component with non-element root node. The directives will not function as intended. `
) ;
}
root = cloneVNode ( root , null , false , true ) ;
root . dirs = root . dirs ? root . dirs . concat ( vnode . dirs ) : vnode . dirs ;
}
if ( vnode . transition ) {
if ( ! isElementRoot ( root ) ) {
warn$1 (
` Component inside <Transition> renders non-element root node that cannot be animated. `
) ;
}
setTransitionHooks ( root , vnode . transition ) ;
}
if ( setRoot ) {
setRoot ( root ) ;
} else {
result = root ;
}
setCurrentRenderingInstance$1 ( prev ) ;
return result ;
}
const getChildRoot = ( vnode ) => {
const rawChildren = vnode . children ;
const dynamicChildren = vnode . dynamicChildren ;
const childRoot = filterSingleRoot ( rawChildren , false ) ;
if ( ! childRoot ) {
return [ vnode , void 0 ] ;
} else if ( childRoot . patchFlag > 0 && childRoot . patchFlag & 2048 ) {
return getChildRoot ( childRoot ) ;
}
const index = rawChildren . indexOf ( childRoot ) ;
const dynamicIndex = dynamicChildren ? dynamicChildren . indexOf ( childRoot ) : - 1 ;
const setRoot = ( updatedRoot ) => {
rawChildren [ index ] = updatedRoot ;
if ( dynamicChildren ) {
if ( dynamicIndex > - 1 ) {
dynamicChildren [ dynamicIndex ] = updatedRoot ;
} else if ( updatedRoot . patchFlag > 0 ) {
vnode . dynamicChildren = [ ... dynamicChildren , updatedRoot ] ;
}
}
} ;
return [ normalizeVNode$1 ( childRoot ) , setRoot ] ;
} ;
function filterSingleRoot ( children , recurse = true ) {
let singleRoot ;
for ( let i = 0 ; i < children . length ; i ++ ) {
const child = children [ i ] ;
if ( isVNode$2 ( child ) ) {
if ( child . type !== Comment || child . children === "v-if" ) {
if ( singleRoot ) {
return ;
} else {
singleRoot = child ;
if ( recurse && singleRoot . patchFlag > 0 && singleRoot . patchFlag & 2048 ) {
return filterSingleRoot ( singleRoot . children ) ;
}
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
} else {
return ;
}
}
return singleRoot ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
const getFunctionalFallthrough = ( attrs ) => {
let res ;
for ( const key in attrs ) {
if ( key === "class" || key === "style" || isOn ( key ) ) {
( res || ( res = { } ) ) [ key ] = attrs [ key ] ;
}
}
return res ;
} ;
const filterModelListeners = ( attrs , props ) => {
const res = { } ;
for ( const key in attrs ) {
if ( ! isModelListener ( key ) || ! ( key . slice ( 9 ) in props ) ) {
res [ key ] = attrs [ key ] ;
}
}
return res ;
} ;
const isElementRoot = ( vnode ) => {
return vnode . shapeFlag & ( 6 | 1 ) || vnode . type === Comment ;
} ;
function shouldUpdateComponent ( prevVNode , nextVNode , optimized ) {
const { props : prevProps , children : prevChildren , component } = prevVNode ;
const { props : nextProps , children : nextChildren , patchFlag } = nextVNode ;
const emits = component . emitsOptions ;
if ( ( prevChildren || nextChildren ) && isHmrUpdating ) {
return true ;
}
if ( nextVNode . dirs || nextVNode . transition ) {
return true ;
}
if ( optimized && patchFlag >= 0 ) {
if ( patchFlag & 1024 ) {
return true ;
}
if ( patchFlag & 16 ) {
if ( ! prevProps ) {
return ! ! nextProps ;
}
return hasPropsChanged ( prevProps , nextProps , emits ) ;
} else if ( patchFlag & 8 ) {
const dynamicProps = nextVNode . dynamicProps ;
for ( let i = 0 ; i < dynamicProps . length ; i ++ ) {
const key = dynamicProps [ i ] ;
if ( hasPropValueChanged ( nextProps , prevProps , key ) && ! isEmitListener ( emits , key ) ) {
return true ;
}
}
2024-01-05 12:14:38 +00:00
}
} else {
2026-02-11 16:20:26 +00:00
if ( prevChildren || nextChildren ) {
if ( ! nextChildren || ! nextChildren . $stable ) {
return true ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( prevProps === nextProps ) {
return false ;
}
if ( ! prevProps ) {
return ! ! nextProps ;
}
if ( ! nextProps ) {
return true ;
}
return hasPropsChanged ( prevProps , nextProps , emits ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return false ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function hasPropsChanged ( prevProps , nextProps , emitsOptions ) {
const nextKeys = Object . keys ( nextProps ) ;
if ( nextKeys . length !== Object . keys ( prevProps ) . length ) {
return true ;
}
for ( let i = 0 ; i < nextKeys . length ; i ++ ) {
const key = nextKeys [ i ] ;
if ( hasPropValueChanged ( nextProps , prevProps , key ) && ! isEmitListener ( emitsOptions , key ) ) {
return true ;
}
}
return false ;
}
function hasPropValueChanged ( nextProps , prevProps , key ) {
const nextProp = nextProps [ key ] ;
const prevProp = prevProps [ key ] ;
if ( key === "style" && isObject ( nextProp ) && isObject ( prevProp ) ) {
return ! looseEqual ( nextProp , prevProp ) ;
}
return nextProp !== prevProp ;
}
function updateHOCHostEl ( { vnode , parent } , el ) {
while ( parent ) {
const root = parent . subTree ;
if ( root . suspense && root . suspense . activeBranch === vnode ) {
root . el = vnode . el ;
}
if ( root === vnode ) {
( vnode = parent . vnode ) . el = el ;
parent = parent . parent ;
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
break ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
const internalObjectProto = { } ;
const createInternalObject = ( ) => Object . create ( internalObjectProto ) ;
const isInternalObject = ( obj ) => Object . getPrototypeOf ( obj ) === internalObjectProto ;
2024-01-05 12:14:38 +00:00
function initProps ( instance , rawProps , isStateful , isSSR = false ) {
const props = { } ;
2026-02-11 16:20:26 +00:00
const attrs = createInternalObject ( ) ;
2024-01-05 12:14:38 +00:00
instance . propsDefaults = /* @__PURE__ */ Object . create ( null ) ;
setFullProps ( instance , rawProps , props , attrs ) ;
for ( const key in instance . propsOptions [ 0 ] ) {
if ( ! ( key in props ) ) {
props [ key ] = void 0 ;
}
}
{
validateProps ( rawProps || { } , props , instance ) ;
}
if ( isStateful ) {
instance . props = isSSR ? props : shallowReactive ( props ) ;
} else {
if ( ! instance . type . props ) {
instance . props = attrs ;
} else {
instance . props = props ;
}
}
instance . attrs = attrs ;
}
function isInHmrContext ( instance ) {
while ( instance ) {
2026-02-11 16:20:26 +00:00
if ( instance . type . _ _hmrId ) return true ;
2024-01-05 12:14:38 +00:00
instance = instance . parent ;
}
}
function updateProps ( instance , rawProps , rawPrevProps , optimized ) {
const {
props ,
attrs ,
vnode : { patchFlag }
} = instance ;
const rawCurrentProps = toRaw ( props ) ;
const [ options ] = instance . propsOptions ;
let hasAttrsChanged = false ;
if (
// always force full diff in dev
// - #1942 if hmr is enabled with sfc component
// - vite#872 non-sfc component used by sfc component
! isInHmrContext ( instance ) && ( optimized || patchFlag > 0 ) && ! ( patchFlag & 16 )
) {
if ( patchFlag & 8 ) {
const propsToUpdate = instance . vnode . dynamicProps ;
for ( let i = 0 ; i < propsToUpdate . length ; i ++ ) {
let key = propsToUpdate [ i ] ;
if ( isEmitListener ( instance . emitsOptions , key ) ) {
continue ;
}
const value = rawProps [ key ] ;
if ( options ) {
if ( hasOwn ( attrs , key ) ) {
if ( value !== attrs [ key ] ) {
attrs [ key ] = value ;
hasAttrsChanged = true ;
}
} else {
const camelizedKey = camelize ( key ) ;
props [ camelizedKey ] = resolvePropValue (
options ,
rawCurrentProps ,
camelizedKey ,
value ,
instance ,
false
) ;
}
} else {
if ( value !== attrs [ key ] ) {
attrs [ key ] = value ;
hasAttrsChanged = true ;
}
}
}
}
} else {
if ( setFullProps ( instance , rawProps , props , attrs ) ) {
hasAttrsChanged = true ;
}
let kebabKey ;
for ( const key in rawCurrentProps ) {
if ( ! rawProps || // for camelCase
! hasOwn ( rawProps , key ) && // it's possible the original props was passed in as kebab-case
// and converted to camelCase (#955)
( ( kebabKey = hyphenate ( key ) ) === key || ! hasOwn ( rawProps , kebabKey ) ) ) {
if ( options ) {
if ( rawPrevProps && // for camelCase
( rawPrevProps [ key ] !== void 0 || // for kebab-case
rawPrevProps [ kebabKey ] !== void 0 ) ) {
props [ key ] = resolvePropValue (
options ,
rawCurrentProps ,
key ,
void 0 ,
instance ,
true
) ;
}
} else {
delete props [ key ] ;
}
}
}
if ( attrs !== rawCurrentProps ) {
for ( const key in attrs ) {
if ( ! rawProps || ! hasOwn ( rawProps , key ) && true ) {
delete attrs [ key ] ;
hasAttrsChanged = true ;
}
}
}
}
if ( hasAttrsChanged ) {
2026-02-11 16:20:26 +00:00
trigger ( instance . attrs , "set" , "" ) ;
2024-01-05 12:14:38 +00:00
}
{
validateProps ( rawProps || { } , props , instance ) ;
}
}
function setFullProps ( instance , rawProps , props , attrs ) {
const [ options , needCastKeys ] = instance . propsOptions ;
let hasAttrsChanged = false ;
let rawCastValues ;
if ( rawProps ) {
for ( let key in rawProps ) {
if ( isReservedProp ( key ) ) {
continue ;
}
const value = rawProps [ key ] ;
let camelKey ;
if ( options && hasOwn ( options , camelKey = camelize ( key ) ) ) {
if ( ! needCastKeys || ! needCastKeys . includes ( camelKey ) ) {
props [ camelKey ] = value ;
} else {
( rawCastValues || ( rawCastValues = { } ) ) [ camelKey ] = value ;
}
} else if ( ! isEmitListener ( instance . emitsOptions , key ) ) {
if ( ! ( key in attrs ) || value !== attrs [ key ] ) {
attrs [ key ] = value ;
hasAttrsChanged = true ;
}
}
}
}
if ( needCastKeys ) {
const rawCurrentProps = toRaw ( props ) ;
const castValues = rawCastValues || EMPTY _OBJ ;
for ( let i = 0 ; i < needCastKeys . length ; i ++ ) {
const key = needCastKeys [ i ] ;
props [ key ] = resolvePropValue (
options ,
rawCurrentProps ,
key ,
castValues [ key ] ,
instance ,
! hasOwn ( castValues , key )
) ;
}
}
return hasAttrsChanged ;
}
function resolvePropValue ( options , props , key , value , instance , isAbsent ) {
const opt = options [ key ] ;
if ( opt != null ) {
const hasDefault = hasOwn ( opt , "default" ) ;
if ( hasDefault && value === void 0 ) {
const defaultValue = opt . default ;
if ( opt . type !== Function && ! opt . skipFactory && isFunction ( defaultValue ) ) {
const { propsDefaults } = instance ;
if ( key in propsDefaults ) {
value = propsDefaults [ key ] ;
} else {
2024-01-31 06:33:19 +00:00
const reset = setCurrentInstance ( instance ) ;
2024-01-05 12:14:38 +00:00
value = propsDefaults [ key ] = defaultValue . call (
null ,
props
) ;
2024-01-31 06:33:19 +00:00
reset ( ) ;
2024-01-05 12:14:38 +00:00
}
} else {
value = defaultValue ;
}
2026-02-11 16:20:26 +00:00
if ( instance . ce ) {
instance . ce . _setProp ( key , value ) ;
}
2024-01-05 12:14:38 +00:00
}
if ( opt [ 0 /* shouldCast */ ] ) {
if ( isAbsent && ! hasDefault ) {
value = false ;
} else if ( opt [ 1 /* shouldCastTrue */ ] && ( value === "" || value === hyphenate ( key ) ) ) {
value = true ;
}
}
}
return value ;
}
2026-02-11 16:20:26 +00:00
const mixinPropsCache = /* @__PURE__ */ new WeakMap ( ) ;
2024-01-05 12:14:38 +00:00
function normalizePropsOptions ( comp , appContext , asMixin = false ) {
2026-02-11 16:20:26 +00:00
const cache = asMixin ? mixinPropsCache : appContext . propsCache ;
2024-01-05 12:14:38 +00:00
const cached = cache . get ( comp ) ;
if ( cached ) {
return cached ;
}
const raw = comp . props ;
const normalized = { } ;
const needCastKeys = [ ] ;
let hasExtends = false ;
if ( ! isFunction ( comp ) ) {
const extendProps = ( raw2 ) => {
hasExtends = true ;
const [ props , keys ] = normalizePropsOptions ( raw2 , appContext , true ) ;
extend ( normalized , props ) ;
2026-02-11 16:20:26 +00:00
if ( keys ) needCastKeys . push ( ... keys ) ;
2024-01-05 12:14:38 +00:00
} ;
if ( ! asMixin && appContext . mixins . length ) {
appContext . mixins . forEach ( extendProps ) ;
}
if ( comp . extends ) {
extendProps ( comp . extends ) ;
}
if ( comp . mixins ) {
comp . mixins . forEach ( extendProps ) ;
}
}
if ( ! raw && ! hasExtends ) {
if ( isObject ( comp ) ) {
cache . set ( comp , EMPTY _ARR ) ;
}
return EMPTY _ARR ;
}
if ( isArray ( raw ) ) {
for ( let i = 0 ; i < raw . length ; i ++ ) {
if ( ! isString ( raw [ i ] ) ) {
warn$1 ( ` props must be strings when using array syntax. ` , raw [ i ] ) ;
}
const normalizedKey = camelize ( raw [ i ] ) ;
if ( validatePropName ( normalizedKey ) ) {
normalized [ normalizedKey ] = EMPTY _OBJ ;
}
}
} else if ( raw ) {
if ( ! isObject ( raw ) ) {
warn$1 ( ` invalid props options ` , raw ) ;
}
for ( const key in raw ) {
const normalizedKey = camelize ( key ) ;
if ( validatePropName ( normalizedKey ) ) {
const opt = raw [ key ] ;
const prop = normalized [ normalizedKey ] = isArray ( opt ) || isFunction ( opt ) ? { type : opt } : extend ( { } , opt ) ;
2026-02-11 16:20:26 +00:00
const propType = prop . type ;
let shouldCast = false ;
let shouldCastTrue = true ;
if ( isArray ( propType ) ) {
for ( let index = 0 ; index < propType . length ; ++ index ) {
const type = propType [ index ] ;
const typeName = isFunction ( type ) && type . name ;
if ( typeName === "Boolean" ) {
shouldCast = true ;
break ;
} else if ( typeName === "String" ) {
shouldCastTrue = false ;
}
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else {
shouldCast = isFunction ( propType ) && propType . name === "Boolean" ;
}
prop [ 0 /* shouldCast */ ] = shouldCast ;
prop [ 1 /* shouldCastTrue */ ] = shouldCastTrue ;
if ( shouldCast || hasOwn ( prop , "default" ) ) {
needCastKeys . push ( normalizedKey ) ;
2024-01-05 12:14:38 +00:00
}
}
}
}
const res = [ normalized , needCastKeys ] ;
if ( isObject ( comp ) ) {
cache . set ( comp , res ) ;
}
return res ;
}
function validatePropName ( key ) {
2026-02-11 16:20:26 +00:00
if ( key [ 0 ] !== "$" && ! isReservedProp ( key ) ) {
2024-01-05 12:14:38 +00:00
return true ;
} else {
warn$1 ( ` Invalid prop name: " ${ key } " is a reserved property. ` ) ;
}
return false ;
}
function getType ( ctor ) {
2026-02-11 16:20:26 +00:00
if ( ctor === null ) {
return "null" ;
}
if ( typeof ctor === "function" ) {
return ctor . name || "" ;
} else if ( typeof ctor === "object" ) {
const name = ctor . constructor && ctor . constructor . name ;
return name || "" ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return "" ;
2024-01-05 12:14:38 +00:00
}
function validateProps ( rawProps , props , instance ) {
const resolvedValues = toRaw ( props ) ;
const options = instance . propsOptions [ 0 ] ;
2026-02-11 16:20:26 +00:00
const camelizePropsKey = Object . keys ( rawProps ) . map ( ( key ) => camelize ( key ) ) ;
2024-01-05 12:14:38 +00:00
for ( const key in options ) {
let opt = options [ key ] ;
2026-02-11 16:20:26 +00:00
if ( opt == null ) continue ;
2024-01-05 12:14:38 +00:00
validateProp (
key ,
resolvedValues [ key ] ,
opt ,
shallowReadonly ( resolvedValues ) ,
2026-02-11 16:20:26 +00:00
! camelizePropsKey . includes ( key )
2024-01-05 12:14:38 +00:00
) ;
}
}
function validateProp ( name , value , prop , props , isAbsent ) {
const { type , required , validator , skipCheck } = prop ;
if ( required && isAbsent ) {
warn$1 ( 'Missing required prop: "' + name + '"' ) ;
return ;
}
if ( value == null && ! required ) {
return ;
}
if ( type != null && type !== true && ! skipCheck ) {
let isValid = false ;
const types = isArray ( type ) ? type : [ type ] ;
const expectedTypes = [ ] ;
for ( let i = 0 ; i < types . length && ! isValid ; i ++ ) {
const { valid , expectedType } = assertType ( value , types [ i ] ) ;
expectedTypes . push ( expectedType || "" ) ;
isValid = valid ;
}
if ( ! isValid ) {
warn$1 ( getInvalidTypeMessage ( name , value , expectedTypes ) ) ;
return ;
}
}
if ( validator && ! validator ( value , props ) ) {
warn$1 ( 'Invalid prop: custom validator check failed for prop "' + name + '".' ) ;
}
}
const isSimpleType = /* @__PURE__ */ makeMap (
"String,Number,Boolean,Function,Symbol,BigInt"
) ;
function assertType ( value , type ) {
let valid ;
const expectedType = getType ( type ) ;
2026-02-11 16:20:26 +00:00
if ( expectedType === "null" ) {
valid = value === null ;
} else if ( isSimpleType ( expectedType ) ) {
2024-01-05 12:14:38 +00:00
const t = typeof value ;
valid = t === expectedType . toLowerCase ( ) ;
if ( ! valid && t === "object" ) {
valid = value instanceof type ;
}
} else if ( expectedType === "Object" ) {
valid = isObject ( value ) ;
} else if ( expectedType === "Array" ) {
valid = isArray ( value ) ;
} else {
valid = value instanceof type ;
}
return {
valid ,
expectedType
} ;
}
function getInvalidTypeMessage ( name , value , expectedTypes ) {
if ( expectedTypes . length === 0 ) {
return ` Prop type [] for prop " ${ name } " won't match anything. Did you mean to use type Array instead? ` ;
}
let message = ` Invalid prop: type check failed for prop " ${ name } ". Expected ${ expectedTypes . map ( capitalize ) . join ( " | " ) } ` ;
const expectedType = expectedTypes [ 0 ] ;
const receivedType = toRawType ( value ) ;
const expectedValue = styleValue ( value , expectedType ) ;
const receivedValue = styleValue ( value , receivedType ) ;
if ( expectedTypes . length === 1 && isExplicable ( expectedType ) && ! isBoolean ( expectedType , receivedType ) ) {
message += ` with value ${ expectedValue } ` ;
}
message += ` , got ${ receivedType } ` ;
if ( isExplicable ( receivedType ) ) {
message += ` with value ${ receivedValue } . ` ;
}
return message ;
}
function styleValue ( value , type ) {
if ( type === "String" ) {
return ` " ${ value } " ` ;
} else if ( type === "Number" ) {
return ` ${ Number ( value ) } ` ;
} else {
return ` ${ value } ` ;
}
}
function isExplicable ( type ) {
const explicitTypes = [ "string" , "number" , "boolean" ] ;
return explicitTypes . some ( ( elem ) => type . toLowerCase ( ) === elem ) ;
}
function isBoolean ( ... args ) {
return args . some ( ( elem ) => elem . toLowerCase ( ) === "boolean" ) ;
}
2026-02-11 16:20:26 +00:00
const isInternalKey = ( key ) => key === "_" || key === "_ctx" || key === "$stable" ;
2024-01-05 12:14:38 +00:00
const normalizeSlotValue = ( value ) => isArray ( value ) ? value . map ( normalizeVNode$1 ) : [ normalizeVNode$1 ( value ) ] ;
const normalizeSlot = ( key , rawSlot , ctx ) => {
if ( rawSlot . _n ) {
return rawSlot ;
}
const normalized = withCtx ( ( ... args ) => {
2026-02-11 16:20:26 +00:00
if ( currentInstance && ! ( ctx === null && currentRenderingInstance ) && ! ( ctx && ctx . root !== currentInstance . root ) ) {
2024-01-05 12:14:38 +00:00
warn$1 (
` Slot " ${ key } " invoked outside of the render function: this will not track dependencies used in the slot. Invoke the slot function inside the render function instead. `
) ;
}
return normalizeSlotValue ( rawSlot ( ... args ) ) ;
} , ctx ) ;
normalized . _c = false ;
return normalized ;
} ;
const normalizeObjectSlots = ( rawSlots , slots , instance ) => {
const ctx = rawSlots . _ctx ;
for ( const key in rawSlots ) {
2026-02-11 16:20:26 +00:00
if ( isInternalKey ( key ) ) continue ;
2024-01-05 12:14:38 +00:00
const value = rawSlots [ key ] ;
if ( isFunction ( value ) ) {
slots [ key ] = normalizeSlot ( key , value , ctx ) ;
} else if ( value != null ) {
{
warn$1 (
` Non-function value encountered for slot " ${ key } ". Prefer function slots for better performance. `
) ;
}
const normalized = normalizeSlotValue ( value ) ;
slots [ key ] = ( ) => normalized ;
}
}
} ;
const normalizeVNodeSlots = ( instance , children ) => {
if ( ! isKeepAlive ( instance . vnode ) && true ) {
warn$1 (
` Non-function value encountered for default slot. Prefer function slots for better performance. `
) ;
}
const normalized = normalizeSlotValue ( children ) ;
instance . slots . default = ( ) => normalized ;
} ;
2026-02-11 16:20:26 +00:00
const assignSlots = ( slots , children , optimized ) => {
for ( const key in children ) {
if ( optimized || ! isInternalKey ( key ) ) {
slots [ key ] = children [ key ] ;
}
}
} ;
const initSlots = ( instance , children , optimized ) => {
const slots = instance . slots = createInternalObject ( ) ;
2024-01-05 12:14:38 +00:00
if ( instance . vnode . shapeFlag & 32 ) {
const type = children . _ ;
if ( type ) {
2026-02-11 16:20:26 +00:00
assignSlots ( slots , children , optimized ) ;
if ( optimized ) {
def ( slots , "_" , type , true ) ;
}
2024-01-05 12:14:38 +00:00
} else {
2026-02-11 16:20:26 +00:00
normalizeObjectSlots ( children , slots ) ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( children ) {
normalizeVNodeSlots ( instance , children ) ;
2024-01-05 12:14:38 +00:00
}
} ;
const updateSlots = ( instance , children , optimized ) => {
const { vnode , slots } = instance ;
let needDeletionCheck = true ;
let deletionComparisonTarget = EMPTY _OBJ ;
if ( vnode . shapeFlag & 32 ) {
const type = children . _ ;
if ( type ) {
if ( isHmrUpdating ) {
2026-02-11 16:20:26 +00:00
assignSlots ( slots , children , optimized ) ;
2024-01-05 12:14:38 +00:00
trigger ( instance , "set" , "$slots" ) ;
} else if ( optimized && type === 1 ) {
needDeletionCheck = false ;
} else {
2026-02-11 16:20:26 +00:00
assignSlots ( slots , children , optimized ) ;
2024-01-05 12:14:38 +00:00
}
} else {
needDeletionCheck = ! children . $stable ;
normalizeObjectSlots ( children , slots ) ;
}
deletionComparisonTarget = children ;
} else if ( children ) {
normalizeVNodeSlots ( instance , children ) ;
deletionComparisonTarget = { default : 1 } ;
}
if ( needDeletionCheck ) {
for ( const key in slots ) {
if ( ! isInternalKey ( key ) && deletionComparisonTarget [ key ] == null ) {
delete slots [ key ] ;
}
}
}
} ;
let supported ;
let perf ;
function startMeasure ( instance , type ) {
if ( instance . appContext . config . performance && isSupported ( ) ) {
perf . mark ( ` vue- ${ type } - ${ instance . uid } ` ) ;
}
{
devtoolsPerfStart ( instance , type , isSupported ( ) ? perf . now ( ) : Date . now ( ) ) ;
}
}
function endMeasure ( instance , type ) {
if ( instance . appContext . config . performance && isSupported ( ) ) {
const startTag = ` vue- ${ type } - ${ instance . uid } ` ;
const endTag = startTag + ` :end ` ;
2026-02-11 16:20:26 +00:00
const measureName = ` < ${ formatComponentName ( instance , instance . type ) } > ${ type } ` ;
2024-01-05 12:14:38 +00:00
perf . mark ( endTag ) ;
2026-02-11 16:20:26 +00:00
perf . measure ( measureName , startTag , endTag ) ;
perf . clearMeasures ( measureName ) ;
2024-01-05 12:14:38 +00:00
perf . clearMarks ( startTag ) ;
perf . clearMarks ( endTag ) ;
}
{
devtoolsPerfEnd ( instance , type , isSupported ( ) ? perf . now ( ) : Date . now ( ) ) ;
}
}
function isSupported ( ) {
if ( supported !== void 0 ) {
return supported ;
}
if ( typeof window !== "undefined" && window . performance ) {
supported = true ;
perf = window . performance ;
} else {
supported = false ;
}
return supported ;
}
const queuePostRenderEffect = queueEffectWithSuspense ;
function createRenderer ( options ) {
return baseCreateRenderer ( options ) ;
}
function baseCreateRenderer ( options , createHydrationFns ) {
const target = getGlobalThis ( ) ;
target . _ _VUE _ _ = true ;
{
setDevtoolsHook ( target . _ _VUE _DEVTOOLS _GLOBAL _HOOK _ _ , target ) ;
}
const {
insert : hostInsert ,
remove : hostRemove ,
patchProp : hostPatchProp ,
createElement : hostCreateElement ,
createText : hostCreateText ,
createComment : hostCreateComment ,
setText : hostSetText ,
setElementText : hostSetElementText ,
parentNode : hostParentNode ,
nextSibling : hostNextSibling ,
setScopeId : hostSetScopeId = NOOP ,
insertStaticContent : hostInsertStaticContent
} = options ;
const patch = ( n1 , n2 , container , anchor = null , parentComponent = null , parentSuspense = null , namespace = void 0 , slotScopeIds = null , optimized = isHmrUpdating ? false : ! ! n2 . dynamicChildren ) => {
if ( n1 === n2 ) {
return ;
}
if ( n1 && ! isSameVNodeType ( n1 , n2 ) ) {
anchor = getNextHostNode ( n1 ) ;
unmount ( n1 , parentComponent , parentSuspense , true ) ;
n1 = null ;
}
if ( n2 . patchFlag === - 2 ) {
optimized = false ;
n2 . dynamicChildren = null ;
}
const { type , ref , shapeFlag } = n2 ;
switch ( type ) {
case Text :
processText ( n1 , n2 , container , anchor ) ;
break ;
case Comment :
processCommentNode ( n1 , n2 , container , anchor ) ;
break ;
case Static :
if ( n1 == null ) {
mountStaticNode ( n2 , container , anchor , namespace ) ;
} else {
patchStaticNode ( n1 , n2 , container , namespace ) ;
}
break ;
case Fragment :
processFragment (
n1 ,
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
break ;
default :
if ( shapeFlag & 1 ) {
processElement (
n1 ,
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else if ( shapeFlag & 6 ) {
processComponent (
n1 ,
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else if ( shapeFlag & 64 ) {
type . process (
n1 ,
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized ,
internals
) ;
} else if ( shapeFlag & 128 ) {
type . process (
n1 ,
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized ,
internals
) ;
} else {
warn$1 ( "Invalid VNode type:" , type , ` ( ${ typeof type } ) ` ) ;
}
}
if ( ref != null && parentComponent ) {
setRef ( ref , n1 && n1 . ref , parentSuspense , n2 || n1 , ! n2 ) ;
2026-02-11 16:20:26 +00:00
} else if ( ref == null && n1 && n1 . ref != null ) {
setRef ( n1 . ref , null , parentSuspense , n1 , true ) ;
2024-01-05 12:14:38 +00:00
}
} ;
const processText = ( n1 , n2 , container , anchor ) => {
if ( n1 == null ) {
hostInsert (
n2 . el = hostCreateText ( n2 . children ) ,
container ,
anchor
) ;
} else {
const el = n2 . el = n1 . el ;
if ( n2 . children !== n1 . children ) {
hostSetText ( el , n2 . children ) ;
}
}
} ;
const processCommentNode = ( n1 , n2 , container , anchor ) => {
if ( n1 == null ) {
hostInsert (
n2 . el = hostCreateComment ( n2 . children || "" ) ,
container ,
anchor
) ;
} else {
n2 . el = n1 . el ;
}
} ;
const mountStaticNode = ( n2 , container , anchor , namespace ) => {
[ n2 . el , n2 . anchor ] = hostInsertStaticContent (
n2 . children ,
container ,
anchor ,
namespace ,
n2 . el ,
n2 . anchor
) ;
} ;
const patchStaticNode = ( n1 , n2 , container , namespace ) => {
if ( n2 . children !== n1 . children ) {
const anchor = hostNextSibling ( n1 . anchor ) ;
removeStaticNode ( n1 ) ;
[ n2 . el , n2 . anchor ] = hostInsertStaticContent (
n2 . children ,
container ,
anchor ,
namespace
) ;
} else {
n2 . el = n1 . el ;
n2 . anchor = n1 . anchor ;
}
} ;
const moveStaticNode = ( { el , anchor } , container , nextSibling ) => {
let next ;
while ( el && el !== anchor ) {
next = hostNextSibling ( el ) ;
hostInsert ( el , container , nextSibling ) ;
el = next ;
}
hostInsert ( anchor , container , nextSibling ) ;
} ;
const removeStaticNode = ( { el , anchor } ) => {
let next ;
while ( el && el !== anchor ) {
next = hostNextSibling ( el ) ;
hostRemove ( el ) ;
el = next ;
}
hostRemove ( anchor ) ;
} ;
const processElement = ( n1 , n2 , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
if ( n2 . type === "svg" ) {
namespace = "svg" ;
} else if ( n2 . type === "math" ) {
namespace = "mathml" ;
}
if ( n1 == null ) {
mountElement (
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else {
2026-02-11 16:20:26 +00:00
const customElement = n1 . el && n1 . el . _isVueCE ? n1 . el : null ;
try {
if ( customElement ) {
customElement . _beginPatch ( ) ;
}
patchElement (
n1 ,
n2 ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} finally {
if ( customElement ) {
customElement . _endPatch ( ) ;
}
}
2024-01-05 12:14:38 +00:00
}
} ;
const mountElement = ( vnode , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
let el ;
let vnodeHook ;
const { props , shapeFlag , transition , dirs } = vnode ;
el = vnode . el = hostCreateElement (
vnode . type ,
namespace ,
props && props . is ,
props
) ;
if ( shapeFlag & 8 ) {
hostSetElementText ( el , vnode . children ) ;
} else if ( shapeFlag & 16 ) {
mountChildren (
vnode . children ,
el ,
null ,
parentComponent ,
parentSuspense ,
resolveChildrenNamespace ( vnode , namespace ) ,
slotScopeIds ,
optimized
) ;
}
if ( dirs ) {
invokeDirectiveHook ( vnode , null , parentComponent , "created" ) ;
}
setScopeId ( el , vnode , vnode . scopeId , slotScopeIds , parentComponent ) ;
if ( props ) {
for ( const key in props ) {
if ( key !== "value" && ! isReservedProp ( key ) ) {
2026-02-11 16:20:26 +00:00
hostPatchProp ( el , key , null , props [ key ] , namespace , parentComponent ) ;
2024-01-05 12:14:38 +00:00
}
}
if ( "value" in props ) {
hostPatchProp ( el , "value" , null , props . value , namespace ) ;
}
if ( vnodeHook = props . onVnodeBeforeMount ) {
invokeVNodeHook ( vnodeHook , parentComponent , vnode ) ;
}
}
{
2026-02-11 16:20:26 +00:00
def ( el , "__vnode" , vnode , true ) ;
def ( el , "__vueParentComponent" , parentComponent , true ) ;
2024-01-05 12:14:38 +00:00
}
if ( dirs ) {
invokeDirectiveHook ( vnode , null , parentComponent , "beforeMount" ) ;
}
const needCallTransitionHooks = needTransition ( parentSuspense , transition ) ;
if ( needCallTransitionHooks ) {
transition . beforeEnter ( el ) ;
}
hostInsert ( el , container , anchor ) ;
if ( ( vnodeHook = props && props . onVnodeMounted ) || needCallTransitionHooks || dirs ) {
queuePostRenderEffect ( ( ) => {
vnodeHook && invokeVNodeHook ( vnodeHook , parentComponent , vnode ) ;
needCallTransitionHooks && transition . enter ( el ) ;
dirs && invokeDirectiveHook ( vnode , null , parentComponent , "mounted" ) ;
} , parentSuspense ) ;
}
} ;
const setScopeId = ( el , vnode , scopeId , slotScopeIds , parentComponent ) => {
if ( scopeId ) {
hostSetScopeId ( el , scopeId ) ;
}
if ( slotScopeIds ) {
for ( let i = 0 ; i < slotScopeIds . length ; i ++ ) {
hostSetScopeId ( el , slotScopeIds [ i ] ) ;
}
}
if ( parentComponent ) {
let subTree = parentComponent . subTree ;
if ( subTree . patchFlag > 0 && subTree . patchFlag & 2048 ) {
subTree = filterSingleRoot ( subTree . children ) || subTree ;
}
2026-02-11 16:20:26 +00:00
if ( vnode === subTree || isSuspense ( subTree . type ) && ( subTree . ssContent === vnode || subTree . ssFallback === vnode ) ) {
2024-01-05 12:14:38 +00:00
const parentVNode = parentComponent . vnode ;
setScopeId (
el ,
parentVNode ,
parentVNode . scopeId ,
parentVNode . slotScopeIds ,
parentComponent . parent
) ;
}
}
} ;
const mountChildren = ( children , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized , start = 0 ) => {
for ( let i = start ; i < children . length ; i ++ ) {
const child = children [ i ] = optimized ? cloneIfMounted ( children [ i ] ) : normalizeVNode$1 ( children [ i ] ) ;
patch (
null ,
child ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
}
} ;
const patchElement = ( n1 , n2 , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
const el = n2 . el = n1 . el ;
2026-02-11 16:20:26 +00:00
{
el . _ _vnode = n2 ;
}
2024-01-05 12:14:38 +00:00
let { patchFlag , dynamicChildren , dirs } = n2 ;
patchFlag |= n1 . patchFlag & 16 ;
const oldProps = n1 . props || EMPTY _OBJ ;
const newProps = n2 . props || EMPTY _OBJ ;
let vnodeHook ;
parentComponent && toggleRecurse ( parentComponent , false ) ;
if ( vnodeHook = newProps . onVnodeBeforeUpdate ) {
invokeVNodeHook ( vnodeHook , parentComponent , n2 , n1 ) ;
}
if ( dirs ) {
invokeDirectiveHook ( n2 , n1 , parentComponent , "beforeUpdate" ) ;
}
parentComponent && toggleRecurse ( parentComponent , true ) ;
if ( isHmrUpdating ) {
patchFlag = 0 ;
optimized = false ;
dynamicChildren = null ;
}
2026-02-11 16:20:26 +00:00
if ( oldProps . innerHTML && newProps . innerHTML == null || oldProps . textContent && newProps . textContent == null ) {
hostSetElementText ( el , "" ) ;
}
2024-01-05 12:14:38 +00:00
if ( dynamicChildren ) {
patchBlockChildren (
n1 . dynamicChildren ,
dynamicChildren ,
el ,
parentComponent ,
parentSuspense ,
resolveChildrenNamespace ( n2 , namespace ) ,
slotScopeIds
) ;
{
traverseStaticChildren ( n1 , n2 ) ;
}
} else if ( ! optimized ) {
patchChildren (
n1 ,
n2 ,
el ,
null ,
parentComponent ,
parentSuspense ,
resolveChildrenNamespace ( n2 , namespace ) ,
slotScopeIds ,
false
2026-02-11 16:20:26 +00:00
) ;
}
if ( patchFlag > 0 ) {
if ( patchFlag & 16 ) {
patchProps ( el , oldProps , newProps , parentComponent , namespace ) ;
2024-01-05 12:14:38 +00:00
} else {
if ( patchFlag & 2 ) {
if ( oldProps . class !== newProps . class ) {
hostPatchProp ( el , "class" , null , newProps . class , namespace ) ;
}
}
if ( patchFlag & 4 ) {
hostPatchProp ( el , "style" , oldProps . style , newProps . style , namespace ) ;
}
if ( patchFlag & 8 ) {
const propsToUpdate = n2 . dynamicProps ;
for ( let i = 0 ; i < propsToUpdate . length ; i ++ ) {
const key = propsToUpdate [ i ] ;
const prev = oldProps [ key ] ;
const next = newProps [ key ] ;
if ( next !== prev || key === "value" ) {
2026-02-11 16:20:26 +00:00
hostPatchProp ( el , key , prev , next , namespace , parentComponent ) ;
2024-01-05 12:14:38 +00:00
}
}
}
}
if ( patchFlag & 1 ) {
if ( n1 . children !== n2 . children ) {
hostSetElementText ( el , n2 . children ) ;
}
}
} else if ( ! optimized && dynamicChildren == null ) {
2026-02-11 16:20:26 +00:00
patchProps ( el , oldProps , newProps , parentComponent , namespace ) ;
2024-01-05 12:14:38 +00:00
}
if ( ( vnodeHook = newProps . onVnodeUpdated ) || dirs ) {
queuePostRenderEffect ( ( ) => {
vnodeHook && invokeVNodeHook ( vnodeHook , parentComponent , n2 , n1 ) ;
dirs && invokeDirectiveHook ( n2 , n1 , parentComponent , "updated" ) ;
} , parentSuspense ) ;
}
} ;
const patchBlockChildren = ( oldChildren , newChildren , fallbackContainer , parentComponent , parentSuspense , namespace , slotScopeIds ) => {
for ( let i = 0 ; i < newChildren . length ; i ++ ) {
const oldVNode = oldChildren [ i ] ;
const newVNode = newChildren [ i ] ;
const container = (
// oldVNode may be an errored async setup() component inside Suspense
// which will not have a mounted element
oldVNode . el && // - In the case of a Fragment, we need to provide the actual parent
// of the Fragment itself so it can move its children.
( oldVNode . type === Fragment || // - In the case of different nodes, there is going to be a replacement
// which also requires the correct parent container
! isSameVNodeType ( oldVNode , newVNode ) || // - In the case of a component, it could contain anything.
2026-02-11 16:20:26 +00:00
oldVNode . shapeFlag & ( 6 | 64 | 128 ) ) ? hostParentNode ( oldVNode . el ) : (
2024-01-05 12:14:38 +00:00
// In other cases, the parent container is not actually used so we
// just pass the block element here to avoid a DOM parentNode call.
fallbackContainer
)
) ;
patch (
oldVNode ,
newVNode ,
container ,
null ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
true
) ;
}
} ;
2026-02-11 16:20:26 +00:00
const patchProps = ( el , oldProps , newProps , parentComponent , namespace ) => {
2024-01-05 12:14:38 +00:00
if ( oldProps !== newProps ) {
if ( oldProps !== EMPTY _OBJ ) {
for ( const key in oldProps ) {
if ( ! isReservedProp ( key ) && ! ( key in newProps ) ) {
hostPatchProp (
el ,
key ,
oldProps [ key ] ,
null ,
namespace ,
2026-02-11 16:20:26 +00:00
parentComponent
2024-01-05 12:14:38 +00:00
) ;
}
}
}
for ( const key in newProps ) {
2026-02-11 16:20:26 +00:00
if ( isReservedProp ( key ) ) continue ;
2024-01-05 12:14:38 +00:00
const next = newProps [ key ] ;
const prev = oldProps [ key ] ;
if ( next !== prev && key !== "value" ) {
2026-02-11 16:20:26 +00:00
hostPatchProp ( el , key , prev , next , namespace , parentComponent ) ;
2024-01-05 12:14:38 +00:00
}
}
if ( "value" in newProps ) {
hostPatchProp ( el , "value" , oldProps . value , newProps . value , namespace ) ;
}
}
} ;
const processFragment = ( n1 , n2 , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
const fragmentStartAnchor = n2 . el = n1 ? n1 . el : hostCreateText ( "" ) ;
const fragmentEndAnchor = n2 . anchor = n1 ? n1 . anchor : hostCreateText ( "" ) ;
let { patchFlag , dynamicChildren , slotScopeIds : fragmentSlotScopeIds } = n2 ;
if (
// #5523 dev root fragment may inherit directives
isHmrUpdating || patchFlag & 2048
) {
patchFlag = 0 ;
optimized = false ;
dynamicChildren = null ;
}
if ( fragmentSlotScopeIds ) {
slotScopeIds = slotScopeIds ? slotScopeIds . concat ( fragmentSlotScopeIds ) : fragmentSlotScopeIds ;
}
if ( n1 == null ) {
hostInsert ( fragmentStartAnchor , container , anchor ) ;
hostInsert ( fragmentEndAnchor , container , anchor ) ;
mountChildren (
2024-01-31 06:33:19 +00:00
// #10007
// such fragment like `<></>` will be compiled into
// a fragment which doesn't have a children.
// In this case fallback to an empty array
n2 . children || [ ] ,
2024-01-05 12:14:38 +00:00
container ,
fragmentEndAnchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else {
if ( patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result
// of renderSlot() with no valid children
2026-02-11 16:20:26 +00:00
n1 . dynamicChildren && n1 . dynamicChildren . length === dynamicChildren . length ) {
2024-01-05 12:14:38 +00:00
patchBlockChildren (
n1 . dynamicChildren ,
dynamicChildren ,
container ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds
) ;
{
traverseStaticChildren ( n1 , n2 ) ;
}
} else {
patchChildren (
n1 ,
n2 ,
container ,
fragmentEndAnchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
}
}
} ;
const processComponent = ( n1 , n2 , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
n2 . slotScopeIds = slotScopeIds ;
if ( n1 == null ) {
if ( n2 . shapeFlag & 512 ) {
parentComponent . ctx . activate (
n2 ,
container ,
anchor ,
namespace ,
optimized
) ;
} else {
mountComponent (
n2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
optimized
) ;
}
} else {
updateComponent ( n1 , n2 , optimized ) ;
}
} ;
const mountComponent = ( initialVNode , container , anchor , parentComponent , parentSuspense , namespace , optimized ) => {
const instance = ( initialVNode . component = createComponentInstance$1 (
initialVNode ,
parentComponent ,
parentSuspense
) ) ;
if ( instance . type . _ _hmrId ) {
registerHMR ( instance ) ;
}
{
2026-02-11 16:20:26 +00:00
pushWarningContext$1 ( initialVNode ) ;
2024-01-05 12:14:38 +00:00
startMeasure ( instance , ` mount ` ) ;
}
if ( isKeepAlive ( initialVNode ) ) {
instance . ctx . renderer = internals ;
}
{
{
startMeasure ( instance , ` init ` ) ;
}
2026-02-11 16:20:26 +00:00
setupComponent$1 ( instance , false , optimized ) ;
2024-01-05 12:14:38 +00:00
{
endMeasure ( instance , ` init ` ) ;
}
}
2026-02-11 16:20:26 +00:00
if ( isHmrUpdating ) initialVNode . el = null ;
2024-01-05 12:14:38 +00:00
if ( instance . asyncDep ) {
2026-02-11 16:20:26 +00:00
parentSuspense && parentSuspense . registerDep ( instance , setupRenderEffect , optimized ) ;
2024-01-05 12:14:38 +00:00
if ( ! initialVNode . el ) {
const placeholder = instance . subTree = createVNode ( Comment ) ;
processCommentNode ( null , placeholder , container , anchor ) ;
2026-02-11 16:20:26 +00:00
initialVNode . placeholder = placeholder . el ;
2024-01-05 12:14:38 +00:00
}
} else {
setupRenderEffect (
instance ,
initialVNode ,
container ,
anchor ,
parentSuspense ,
namespace ,
optimized
) ;
}
{
2026-02-11 16:20:26 +00:00
popWarningContext$1 ( ) ;
2024-01-05 12:14:38 +00:00
endMeasure ( instance , ` mount ` ) ;
}
} ;
const updateComponent = ( n1 , n2 , optimized ) => {
const instance = n2 . component = n1 . component ;
if ( shouldUpdateComponent ( n1 , n2 , optimized ) ) {
if ( instance . asyncDep && ! instance . asyncResolved ) {
{
2026-02-11 16:20:26 +00:00
pushWarningContext$1 ( n2 ) ;
2024-01-05 12:14:38 +00:00
}
updateComponentPreRender ( instance , n2 , optimized ) ;
{
2026-02-11 16:20:26 +00:00
popWarningContext$1 ( ) ;
2024-01-05 12:14:38 +00:00
}
return ;
} else {
instance . next = n2 ;
instance . update ( ) ;
}
} else {
n2 . el = n1 . el ;
instance . vnode = n2 ;
}
} ;
const setupRenderEffect = ( instance , initialVNode , container , anchor , parentSuspense , namespace , optimized ) => {
const componentUpdateFn = ( ) => {
if ( ! instance . isMounted ) {
let vnodeHook ;
const { el , props } = initialVNode ;
2026-02-11 16:20:26 +00:00
const { bm , m , parent , root , type } = instance ;
2024-01-05 12:14:38 +00:00
const isAsyncWrapperVNode = isAsyncWrapper ( initialVNode ) ;
toggleRecurse ( instance , false ) ;
if ( bm ) {
invokeArrayFns ( bm ) ;
}
if ( ! isAsyncWrapperVNode && ( vnodeHook = props && props . onVnodeBeforeMount ) ) {
invokeVNodeHook ( vnodeHook , parent , initialVNode ) ;
}
toggleRecurse ( instance , true ) ;
2026-02-11 16:20:26 +00:00
{
if ( root . ce && root . ce . _hasShadowRoot ( ) ) {
root . ce . _injectChildStyle ( type ) ;
2024-01-05 12:14:38 +00:00
}
{
startMeasure ( instance , ` render ` ) ;
}
const subTree = instance . subTree = renderComponentRoot$1 ( instance ) ;
{
endMeasure ( instance , ` render ` ) ;
}
{
startMeasure ( instance , ` patch ` ) ;
}
patch (
null ,
subTree ,
container ,
anchor ,
instance ,
parentSuspense ,
namespace
) ;
{
endMeasure ( instance , ` patch ` ) ;
}
initialVNode . el = subTree . el ;
}
if ( m ) {
queuePostRenderEffect ( m , parentSuspense ) ;
}
if ( ! isAsyncWrapperVNode && ( vnodeHook = props && props . onVnodeMounted ) ) {
const scopedInitialVNode = initialVNode ;
queuePostRenderEffect (
( ) => invokeVNodeHook ( vnodeHook , parent , scopedInitialVNode ) ,
parentSuspense
) ;
}
if ( initialVNode . shapeFlag & 256 || parent && isAsyncWrapper ( parent . vnode ) && parent . vnode . shapeFlag & 256 ) {
instance . a && queuePostRenderEffect ( instance . a , parentSuspense ) ;
}
instance . isMounted = true ;
{
devtoolsComponentAdded ( instance ) ;
}
initialVNode = container = anchor = null ;
} else {
let { next , bu , u , parent , vnode } = instance ;
{
const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot ( instance ) ;
if ( nonHydratedAsyncRoot ) {
if ( next ) {
next . el = vnode . el ;
updateComponentPreRender ( instance , next , optimized ) ;
}
nonHydratedAsyncRoot . asyncDep . then ( ( ) => {
2026-02-11 16:20:26 +00:00
queuePostRenderEffect ( ( ) => {
if ( ! instance . isUnmounted ) update ( ) ;
} , parentSuspense ) ;
2024-01-05 12:14:38 +00:00
} ) ;
return ;
}
}
let originNext = next ;
let vnodeHook ;
{
2026-02-11 16:20:26 +00:00
pushWarningContext$1 ( next || instance . vnode ) ;
2024-01-05 12:14:38 +00:00
}
toggleRecurse ( instance , false ) ;
if ( next ) {
next . el = vnode . el ;
updateComponentPreRender ( instance , next , optimized ) ;
} else {
next = vnode ;
}
if ( bu ) {
invokeArrayFns ( bu ) ;
}
if ( vnodeHook = next . props && next . props . onVnodeBeforeUpdate ) {
invokeVNodeHook ( vnodeHook , parent , next , vnode ) ;
}
toggleRecurse ( instance , true ) ;
{
startMeasure ( instance , ` render ` ) ;
}
const nextTree = renderComponentRoot$1 ( instance ) ;
{
endMeasure ( instance , ` render ` ) ;
}
const prevTree = instance . subTree ;
instance . subTree = nextTree ;
{
startMeasure ( instance , ` patch ` ) ;
}
patch (
prevTree ,
nextTree ,
// parent may have changed if it's in a teleport
hostParentNode ( prevTree . el ) ,
// anchor may have changed if it's in a fragment
getNextHostNode ( prevTree ) ,
instance ,
parentSuspense ,
namespace
) ;
{
endMeasure ( instance , ` patch ` ) ;
}
next . el = nextTree . el ;
if ( originNext === null ) {
updateHOCHostEl ( instance , nextTree . el ) ;
}
if ( u ) {
queuePostRenderEffect ( u , parentSuspense ) ;
}
if ( vnodeHook = next . props && next . props . onVnodeUpdated ) {
queuePostRenderEffect (
( ) => invokeVNodeHook ( vnodeHook , parent , next , vnode ) ,
parentSuspense
) ;
}
{
devtoolsComponentUpdated ( instance ) ;
}
{
2026-02-11 16:20:26 +00:00
popWarningContext$1 ( ) ;
2024-01-05 12:14:38 +00:00
}
}
} ;
2026-02-11 16:20:26 +00:00
instance . scope . on ( ) ;
const effect = instance . effect = new ReactiveEffect ( componentUpdateFn ) ;
instance . scope . off ( ) ;
const update = instance . update = effect . run . bind ( effect ) ;
const job = instance . job = effect . runIfDirty . bind ( effect ) ;
job . i = instance ;
job . id = instance . uid ;
effect . scheduler = ( ) => queueJob ( job ) ;
2024-01-05 12:14:38 +00:00
toggleRecurse ( instance , true ) ;
{
effect . onTrack = instance . rtc ? ( e ) => invokeArrayFns ( instance . rtc , e ) : void 0 ;
effect . onTrigger = instance . rtg ? ( e ) => invokeArrayFns ( instance . rtg , e ) : void 0 ;
}
update ( ) ;
} ;
const updateComponentPreRender = ( instance , nextVNode , optimized ) => {
nextVNode . component = instance ;
const prevProps = instance . vnode . props ;
instance . vnode = nextVNode ;
instance . next = null ;
updateProps ( instance , nextVNode . props , prevProps , optimized ) ;
updateSlots ( instance , nextVNode . children , optimized ) ;
pauseTracking ( ) ;
flushPreFlushCbs ( instance ) ;
resetTracking ( ) ;
} ;
const patchChildren = ( n1 , n2 , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized = false ) => {
const c1 = n1 && n1 . children ;
const prevShapeFlag = n1 ? n1 . shapeFlag : 0 ;
const c2 = n2 . children ;
const { patchFlag , shapeFlag } = n2 ;
if ( patchFlag > 0 ) {
if ( patchFlag & 128 ) {
patchKeyedChildren (
c1 ,
c2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
return ;
} else if ( patchFlag & 256 ) {
patchUnkeyedChildren (
c1 ,
c2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
return ;
}
}
if ( shapeFlag & 8 ) {
if ( prevShapeFlag & 16 ) {
unmountChildren ( c1 , parentComponent , parentSuspense ) ;
}
if ( c2 !== c1 ) {
hostSetElementText ( container , c2 ) ;
}
} else {
if ( prevShapeFlag & 16 ) {
if ( shapeFlag & 16 ) {
patchKeyedChildren (
c1 ,
c2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else {
unmountChildren ( c1 , parentComponent , parentSuspense , true ) ;
}
} else {
if ( prevShapeFlag & 8 ) {
hostSetElementText ( container , "" ) ;
}
if ( shapeFlag & 16 ) {
mountChildren (
c2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
}
}
}
} ;
const patchUnkeyedChildren = ( c1 , c2 , container , anchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
c1 = c1 || EMPTY _ARR ;
c2 = c2 || EMPTY _ARR ;
const oldLength = c1 . length ;
const newLength = c2 . length ;
const commonLength = Math . min ( oldLength , newLength ) ;
let i ;
for ( i = 0 ; i < commonLength ; i ++ ) {
const nextChild = c2 [ i ] = optimized ? cloneIfMounted ( c2 [ i ] ) : normalizeVNode$1 ( c2 [ i ] ) ;
patch (
c1 [ i ] ,
nextChild ,
container ,
null ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
}
if ( oldLength > newLength ) {
unmountChildren (
c1 ,
parentComponent ,
parentSuspense ,
true ,
false ,
commonLength
) ;
} else {
mountChildren (
c2 ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized ,
commonLength
) ;
}
} ;
const patchKeyedChildren = ( c1 , c2 , container , parentAnchor , parentComponent , parentSuspense , namespace , slotScopeIds , optimized ) => {
let i = 0 ;
const l2 = c2 . length ;
let e1 = c1 . length - 1 ;
let e2 = l2 - 1 ;
while ( i <= e1 && i <= e2 ) {
const n1 = c1 [ i ] ;
const n2 = c2 [ i ] = optimized ? cloneIfMounted ( c2 [ i ] ) : normalizeVNode$1 ( c2 [ i ] ) ;
if ( isSameVNodeType ( n1 , n2 ) ) {
patch (
n1 ,
n2 ,
container ,
null ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else {
break ;
}
i ++ ;
}
while ( i <= e1 && i <= e2 ) {
const n1 = c1 [ e1 ] ;
const n2 = c2 [ e2 ] = optimized ? cloneIfMounted ( c2 [ e2 ] ) : normalizeVNode$1 ( c2 [ e2 ] ) ;
if ( isSameVNodeType ( n1 , n2 ) ) {
patch (
n1 ,
n2 ,
container ,
null ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else {
break ;
}
e1 -- ;
e2 -- ;
}
if ( i > e1 ) {
if ( i <= e2 ) {
const nextPos = e2 + 1 ;
const anchor = nextPos < l2 ? c2 [ nextPos ] . el : parentAnchor ;
while ( i <= e2 ) {
patch (
null ,
c2 [ i ] = optimized ? cloneIfMounted ( c2 [ i ] ) : normalizeVNode$1 ( c2 [ i ] ) ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
i ++ ;
}
}
} else if ( i > e2 ) {
while ( i <= e1 ) {
unmount ( c1 [ i ] , parentComponent , parentSuspense , true ) ;
i ++ ;
}
} else {
const s1 = i ;
const s2 = i ;
const keyToNewIndexMap = /* @__PURE__ */ new Map ( ) ;
for ( i = s2 ; i <= e2 ; i ++ ) {
const nextChild = c2 [ i ] = optimized ? cloneIfMounted ( c2 [ i ] ) : normalizeVNode$1 ( c2 [ i ] ) ;
if ( nextChild . key != null ) {
if ( keyToNewIndexMap . has ( nextChild . key ) ) {
warn$1 (
` Duplicate keys found during update: ` ,
JSON . stringify ( nextChild . key ) ,
` Make sure keys are unique. `
) ;
}
keyToNewIndexMap . set ( nextChild . key , i ) ;
}
}
let j ;
let patched = 0 ;
const toBePatched = e2 - s2 + 1 ;
let moved = false ;
let maxNewIndexSoFar = 0 ;
const newIndexToOldIndexMap = new Array ( toBePatched ) ;
2026-02-11 16:20:26 +00:00
for ( i = 0 ; i < toBePatched ; i ++ ) newIndexToOldIndexMap [ i ] = 0 ;
2024-01-05 12:14:38 +00:00
for ( i = s1 ; i <= e1 ; i ++ ) {
const prevChild = c1 [ i ] ;
if ( patched >= toBePatched ) {
unmount ( prevChild , parentComponent , parentSuspense , true ) ;
continue ;
}
let newIndex ;
if ( prevChild . key != null ) {
newIndex = keyToNewIndexMap . get ( prevChild . key ) ;
} else {
for ( j = s2 ; j <= e2 ; j ++ ) {
if ( newIndexToOldIndexMap [ j - s2 ] === 0 && isSameVNodeType ( prevChild , c2 [ j ] ) ) {
newIndex = j ;
break ;
}
}
}
if ( newIndex === void 0 ) {
unmount ( prevChild , parentComponent , parentSuspense , true ) ;
} else {
newIndexToOldIndexMap [ newIndex - s2 ] = i + 1 ;
if ( newIndex >= maxNewIndexSoFar ) {
maxNewIndexSoFar = newIndex ;
} else {
moved = true ;
}
patch (
prevChild ,
c2 [ newIndex ] ,
container ,
null ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
patched ++ ;
}
}
const increasingNewIndexSequence = moved ? getSequence ( newIndexToOldIndexMap ) : EMPTY _ARR ;
j = increasingNewIndexSequence . length - 1 ;
for ( i = toBePatched - 1 ; i >= 0 ; i -- ) {
const nextIndex = s2 + i ;
const nextChild = c2 [ nextIndex ] ;
2026-02-11 16:20:26 +00:00
const anchorVNode = c2 [ nextIndex + 1 ] ;
const anchor = nextIndex + 1 < l2 ? (
// #13559, #14173 fallback to el placeholder for unresolved async component
anchorVNode . el || resolveAsyncComponentPlaceholder ( anchorVNode )
) : parentAnchor ;
2024-01-05 12:14:38 +00:00
if ( newIndexToOldIndexMap [ i ] === 0 ) {
patch (
null ,
nextChild ,
container ,
anchor ,
parentComponent ,
parentSuspense ,
namespace ,
slotScopeIds ,
optimized
) ;
} else if ( moved ) {
if ( j < 0 || i !== increasingNewIndexSequence [ j ] ) {
move ( nextChild , container , anchor , 2 ) ;
} else {
j -- ;
}
}
}
}
} ;
const move = ( vnode , container , anchor , moveType , parentSuspense = null ) => {
const { el , type , transition , children , shapeFlag } = vnode ;
if ( shapeFlag & 6 ) {
move ( vnode . component . subTree , container , anchor , moveType ) ;
return ;
}
if ( shapeFlag & 128 ) {
vnode . suspense . move ( container , anchor , moveType ) ;
return ;
}
if ( shapeFlag & 64 ) {
type . move ( vnode , container , anchor , internals ) ;
return ;
}
if ( type === Fragment ) {
hostInsert ( el , container , anchor ) ;
for ( let i = 0 ; i < children . length ; i ++ ) {
move ( children [ i ] , container , anchor , moveType ) ;
}
hostInsert ( vnode . anchor , container , anchor ) ;
return ;
}
if ( type === Static ) {
moveStaticNode ( vnode , container , anchor ) ;
return ;
}
const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition ;
if ( needTransition2 ) {
if ( moveType === 0 ) {
transition . beforeEnter ( el ) ;
hostInsert ( el , container , anchor ) ;
queuePostRenderEffect ( ( ) => transition . enter ( el ) , parentSuspense ) ;
} else {
const { leave , delayLeave , afterLeave } = transition ;
2026-02-11 16:20:26 +00:00
const remove2 = ( ) => {
if ( vnode . ctx . isUnmounted ) {
hostRemove ( el ) ;
} else {
hostInsert ( el , container , anchor ) ;
}
} ;
2024-01-05 12:14:38 +00:00
const performLeave = ( ) => {
2026-02-11 16:20:26 +00:00
if ( el . _isLeaving ) {
el [ leaveCbKey ] (
true
/* cancelled */
) ;
}
2024-01-05 12:14:38 +00:00
leave ( el , ( ) => {
remove2 ( ) ;
afterLeave && afterLeave ( ) ;
} ) ;
} ;
if ( delayLeave ) {
delayLeave ( el , remove2 , performLeave ) ;
} else {
performLeave ( ) ;
}
}
} else {
hostInsert ( el , container , anchor ) ;
}
} ;
const unmount = ( vnode , parentComponent , parentSuspense , doRemove = false , optimized = false ) => {
const {
type ,
props ,
ref ,
children ,
dynamicChildren ,
shapeFlag ,
patchFlag ,
2026-02-11 16:20:26 +00:00
dirs ,
cacheIndex
2024-01-05 12:14:38 +00:00
} = vnode ;
2026-02-11 16:20:26 +00:00
if ( patchFlag === - 2 ) {
optimized = false ;
}
2024-01-05 12:14:38 +00:00
if ( ref != null ) {
2026-02-11 16:20:26 +00:00
pauseTracking ( ) ;
2024-01-05 12:14:38 +00:00
setRef ( ref , null , parentSuspense , vnode , true ) ;
2026-02-11 16:20:26 +00:00
resetTracking ( ) ;
}
if ( cacheIndex != null ) {
parentComponent . renderCache [ cacheIndex ] = void 0 ;
2024-01-05 12:14:38 +00:00
}
if ( shapeFlag & 256 ) {
parentComponent . ctx . deactivate ( vnode ) ;
return ;
}
const shouldInvokeDirs = shapeFlag & 1 && dirs ;
const shouldInvokeVnodeHook = ! isAsyncWrapper ( vnode ) ;
let vnodeHook ;
if ( shouldInvokeVnodeHook && ( vnodeHook = props && props . onVnodeBeforeUnmount ) ) {
invokeVNodeHook ( vnodeHook , parentComponent , vnode ) ;
}
if ( shapeFlag & 6 ) {
unmountComponent ( vnode . component , parentSuspense , doRemove ) ;
} else {
if ( shapeFlag & 128 ) {
vnode . suspense . unmount ( parentSuspense , doRemove ) ;
return ;
}
if ( shouldInvokeDirs ) {
invokeDirectiveHook ( vnode , null , parentComponent , "beforeUnmount" ) ;
}
if ( shapeFlag & 64 ) {
vnode . type . remove (
vnode ,
parentComponent ,
parentSuspense ,
internals ,
doRemove
) ;
2026-02-11 16:20:26 +00:00
} else if ( dynamicChildren && // #5154
// when v-once is used inside a block, setBlockTracking(-1) marks the
// parent block with hasOnce: true
// so that it doesn't take the fast path during unmount - otherwise
// components nested in v-once are never unmounted.
! dynamicChildren . hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments
2024-01-05 12:14:38 +00:00
( type !== Fragment || patchFlag > 0 && patchFlag & 64 ) ) {
unmountChildren (
dynamicChildren ,
parentComponent ,
parentSuspense ,
false ,
true
) ;
} else if ( type === Fragment && patchFlag & ( 128 | 256 ) || ! optimized && shapeFlag & 16 ) {
unmountChildren ( children , parentComponent , parentSuspense ) ;
}
if ( doRemove ) {
remove ( vnode ) ;
}
}
if ( shouldInvokeVnodeHook && ( vnodeHook = props && props . onVnodeUnmounted ) || shouldInvokeDirs ) {
queuePostRenderEffect ( ( ) => {
vnodeHook && invokeVNodeHook ( vnodeHook , parentComponent , vnode ) ;
shouldInvokeDirs && invokeDirectiveHook ( vnode , null , parentComponent , "unmounted" ) ;
} , parentSuspense ) ;
}
} ;
const remove = ( vnode ) => {
const { type , el , anchor , transition } = vnode ;
if ( type === Fragment ) {
if ( vnode . patchFlag > 0 && vnode . patchFlag & 2048 && transition && ! transition . persisted ) {
vnode . children . forEach ( ( child ) => {
if ( child . type === Comment ) {
hostRemove ( child . el ) ;
} else {
remove ( child ) ;
}
} ) ;
} else {
removeFragment ( el , anchor ) ;
}
return ;
}
if ( type === Static ) {
removeStaticNode ( vnode ) ;
return ;
}
const performRemove = ( ) => {
hostRemove ( el ) ;
if ( transition && ! transition . persisted && transition . afterLeave ) {
transition . afterLeave ( ) ;
}
} ;
if ( vnode . shapeFlag & 1 && transition && ! transition . persisted ) {
const { leave , delayLeave } = transition ;
const performLeave = ( ) => leave ( el , performRemove ) ;
if ( delayLeave ) {
delayLeave ( vnode . el , performRemove , performLeave ) ;
} else {
performLeave ( ) ;
}
} else {
performRemove ( ) ;
}
} ;
const removeFragment = ( cur , end ) => {
let next ;
while ( cur !== end ) {
next = hostNextSibling ( cur ) ;
hostRemove ( cur ) ;
cur = next ;
}
hostRemove ( end ) ;
} ;
const unmountComponent = ( instance , parentSuspense , doRemove ) => {
if ( instance . type . _ _hmrId ) {
unregisterHMR ( instance ) ;
}
2026-02-11 16:20:26 +00:00
const { bum , scope , job , subTree , um , m , a } = instance ;
invalidateMount ( m ) ;
invalidateMount ( a ) ;
2024-01-05 12:14:38 +00:00
if ( bum ) {
invokeArrayFns ( bum ) ;
}
scope . stop ( ) ;
2026-02-11 16:20:26 +00:00
if ( job ) {
job . flags |= 8 ;
2024-01-05 12:14:38 +00:00
unmount ( subTree , instance , parentSuspense , doRemove ) ;
}
if ( um ) {
queuePostRenderEffect ( um , parentSuspense ) ;
}
queuePostRenderEffect ( ( ) => {
instance . isUnmounted = true ;
} , parentSuspense ) ;
{
devtoolsComponentRemoved ( instance ) ;
}
} ;
const unmountChildren = ( children , parentComponent , parentSuspense , doRemove = false , optimized = false , start = 0 ) => {
for ( let i = start ; i < children . length ; i ++ ) {
unmount ( children [ i ] , parentComponent , parentSuspense , doRemove , optimized ) ;
}
} ;
const getNextHostNode = ( vnode ) => {
if ( vnode . shapeFlag & 6 ) {
return getNextHostNode ( vnode . component . subTree ) ;
}
if ( vnode . shapeFlag & 128 ) {
return vnode . suspense . next ( ) ;
}
2026-02-11 16:20:26 +00:00
const el = hostNextSibling ( vnode . anchor || vnode . el ) ;
const teleportEnd = el && el [ TeleportEndKey ] ;
return teleportEnd ? hostNextSibling ( teleportEnd ) : el ;
2024-01-05 12:14:38 +00:00
} ;
2024-01-31 06:33:19 +00:00
let isFlushing = false ;
2024-01-05 12:14:38 +00:00
const render = ( vnode , container , namespace ) => {
2026-02-11 16:20:26 +00:00
let instance ;
2024-01-05 12:14:38 +00:00
if ( vnode == null ) {
if ( container . _vnode ) {
unmount ( container . _vnode , null , null , true ) ;
2026-02-11 16:20:26 +00:00
instance = container . _vnode . component ;
2024-01-05 12:14:38 +00:00
}
} else {
patch (
container . _vnode || null ,
vnode ,
container ,
null ,
null ,
null ,
namespace
) ;
}
2026-02-11 16:20:26 +00:00
container . _vnode = vnode ;
2024-01-31 06:33:19 +00:00
if ( ! isFlushing ) {
isFlushing = true ;
2026-02-11 16:20:26 +00:00
flushPreFlushCbs ( instance ) ;
2024-01-31 06:33:19 +00:00
flushPostFlushCbs ( ) ;
isFlushing = false ;
}
2024-01-05 12:14:38 +00:00
} ;
const internals = {
p : patch ,
um : unmount ,
m : move ,
r : remove ,
mt : mountComponent ,
mc : mountChildren ,
pc : patchChildren ,
pbc : patchBlockChildren ,
n : getNextHostNode ,
o : options
} ;
let hydrate ;
return {
render ,
hydrate ,
2026-02-11 16:20:26 +00:00
createApp : createAppAPI ( render )
2024-01-05 12:14:38 +00:00
} ;
}
function resolveChildrenNamespace ( { type , props } , currentNamespace ) {
return currentNamespace === "svg" && type === "foreignObject" || currentNamespace === "mathml" && type === "annotation-xml" && props && props . encoding && props . encoding . includes ( "html" ) ? void 0 : currentNamespace ;
}
2026-02-11 16:20:26 +00:00
function toggleRecurse ( { effect , job } , allowed ) {
if ( allowed ) {
effect . flags |= 32 ;
job . flags |= 4 ;
} else {
effect . flags &= - 33 ;
job . flags &= - 5 ;
}
2024-01-05 12:14:38 +00:00
}
function needTransition ( parentSuspense , transition ) {
return ( ! parentSuspense || parentSuspense && ! parentSuspense . pendingBranch ) && transition && ! transition . persisted ;
}
function traverseStaticChildren ( n1 , n2 , shallow = false ) {
const ch1 = n1 . children ;
const ch2 = n2 . children ;
if ( isArray ( ch1 ) && isArray ( ch2 ) ) {
for ( let i = 0 ; i < ch1 . length ; i ++ ) {
const c1 = ch1 [ i ] ;
let c2 = ch2 [ i ] ;
if ( c2 . shapeFlag & 1 && ! c2 . dynamicChildren ) {
if ( c2 . patchFlag <= 0 || c2 . patchFlag === 32 ) {
c2 = ch2 [ i ] = cloneIfMounted ( ch2 [ i ] ) ;
c2 . el = c1 . el ;
}
2026-02-11 16:20:26 +00:00
if ( ! shallow && c2 . patchFlag !== - 2 )
2024-01-05 12:14:38 +00:00
traverseStaticChildren ( c1 , c2 ) ;
}
if ( c2 . type === Text ) {
2026-02-11 16:20:26 +00:00
if ( c2 . patchFlag === - 1 ) {
c2 = ch2 [ i ] = cloneIfMounted ( c2 ) ;
}
2024-01-05 12:14:38 +00:00
c2 . el = c1 . el ;
}
if ( c2 . type === Comment && ! c2 . el ) {
c2 . el = c1 . el ;
}
2026-02-11 16:20:26 +00:00
{
c2 . el && ( c2 . el . _ _vnode = c2 ) ;
}
2024-01-05 12:14:38 +00:00
}
}
}
function getSequence ( arr ) {
const p = arr . slice ( ) ;
const result = [ 0 ] ;
let i , j , u , v , c ;
const len = arr . length ;
for ( i = 0 ; i < len ; i ++ ) {
const arrI = arr [ i ] ;
if ( arrI !== 0 ) {
j = result [ result . length - 1 ] ;
if ( arr [ j ] < arrI ) {
p [ i ] = j ;
result . push ( i ) ;
continue ;
}
u = 0 ;
v = result . length - 1 ;
while ( u < v ) {
c = u + v >> 1 ;
if ( arr [ result [ c ] ] < arrI ) {
u = c + 1 ;
} else {
v = c ;
}
}
if ( arrI < arr [ result [ u ] ] ) {
if ( u > 0 ) {
p [ i ] = result [ u - 1 ] ;
}
result [ u ] = i ;
}
}
}
u = result . length ;
v = result [ u - 1 ] ;
while ( u -- > 0 ) {
result [ u ] = v ;
v = p [ v ] ;
}
return result ;
}
function locateNonHydratedAsyncRoot ( instance ) {
const subComponent = instance . subTree . component ;
if ( subComponent ) {
if ( subComponent . asyncDep && ! subComponent . asyncResolved ) {
return subComponent ;
} else {
return locateNonHydratedAsyncRoot ( subComponent ) ;
}
}
}
2026-02-11 16:20:26 +00:00
function invalidateMount ( hooks ) {
if ( hooks ) {
for ( let i = 0 ; i < hooks . length ; i ++ )
hooks [ i ] . flags |= 8 ;
}
}
function resolveAsyncComponentPlaceholder ( anchorVnode ) {
if ( anchorVnode . placeholder ) {
return anchorVnode . placeholder ;
}
const instance = anchorVnode . component ;
if ( instance ) {
return resolveAsyncComponentPlaceholder ( instance . subTree ) ;
}
return null ;
}
2024-01-05 12:14:38 +00:00
2026-02-11 16:20:26 +00:00
const isSuspense = ( type ) => type . _ _isSuspense ;
function queueEffectWithSuspense ( fn , suspense ) {
if ( suspense && suspense . pendingBranch ) {
if ( isArray ( fn ) ) {
suspense . effects . push ( ... fn ) ;
} else {
suspense . effects . push ( fn ) ;
}
} else {
queuePostFlushCb ( fn ) ;
}
}
2024-01-05 12:14:38 +00:00
2026-02-11 16:20:26 +00:00
const Fragment = /* @__PURE__ */ Symbol . for ( "v-fgt" ) ;
const Text = /* @__PURE__ */ Symbol . for ( "v-txt" ) ;
const Comment = /* @__PURE__ */ Symbol . for ( "v-cmt" ) ;
const Static = /* @__PURE__ */ Symbol . for ( "v-stc" ) ;
2024-01-05 12:14:38 +00:00
let currentBlock = null ;
let isBlockTreeEnabled = 1 ;
2026-02-11 16:20:26 +00:00
function setBlockTracking ( value , inVOnce = false ) {
2024-01-05 12:14:38 +00:00
isBlockTreeEnabled += value ;
2026-02-11 16:20:26 +00:00
if ( value < 0 && currentBlock && inVOnce ) {
currentBlock . hasOnce = true ;
}
2024-01-05 12:14:38 +00:00
}
function isVNode$2 ( value ) {
return value ? value . _ _v _isVNode === true : false ;
}
function isSameVNodeType ( n1 , n2 ) {
2026-02-11 16:20:26 +00:00
if ( n2 . shapeFlag & 6 && n1 . component ) {
const dirtyInstances = hmrDirtyComponents . get ( n2 . type ) ;
if ( dirtyInstances && dirtyInstances . has ( n1 . component ) ) {
n1 . shapeFlag &= - 257 ;
n2 . shapeFlag &= - 513 ;
return false ;
}
2024-01-05 12:14:38 +00:00
}
return n1 . type === n2 . type && n1 . key === n2 . key ;
}
const createVNodeWithArgsTransform = ( ... args ) => {
return _createVNode (
... args
) ;
} ;
const normalizeKey = ( { key } ) => key != null ? key : null ;
const normalizeRef = ( {
ref ,
ref _key ,
ref _for
} ) => {
if ( typeof ref === "number" ) {
ref = "" + ref ;
}
return ref != null ? isString ( ref ) || isRef ( ref ) || isFunction ( ref ) ? { i : currentRenderingInstance , r : ref , k : ref _key , f : ! ! ref _for } : ref : null ;
} ;
function createBaseVNode ( type , props = null , children = null , patchFlag = 0 , dynamicProps = null , shapeFlag = type === Fragment ? 0 : 1 , isBlockNode = false , needFullChildrenNormalization = false ) {
const vnode = {
_ _v _isVNode : true ,
_ _v _skip : true ,
type ,
props ,
key : props && normalizeKey ( props ) ,
ref : props && normalizeRef ( props ) ,
scopeId : currentScopeId ,
slotScopeIds : null ,
children ,
component : null ,
suspense : null ,
ssContent : null ,
ssFallback : null ,
dirs : null ,
transition : null ,
el : null ,
anchor : null ,
target : null ,
2026-02-11 16:20:26 +00:00
targetStart : null ,
2024-01-05 12:14:38 +00:00
targetAnchor : null ,
staticCount : 0 ,
shapeFlag ,
patchFlag ,
dynamicProps ,
dynamicChildren : null ,
appContext : null ,
ctx : currentRenderingInstance
} ;
if ( needFullChildrenNormalization ) {
normalizeChildren ( vnode , children ) ;
if ( shapeFlag & 128 ) {
type . normalize ( vnode ) ;
}
} else if ( children ) {
vnode . shapeFlag |= isString ( children ) ? 8 : 16 ;
}
if ( vnode . key !== vnode . key ) {
warn$1 ( ` VNode created with invalid key (NaN). VNode type: ` , vnode . type ) ;
}
if ( isBlockTreeEnabled > 0 && // avoid a block node from tracking itself
! isBlockNode && // has current parent block
currentBlock && // presence of a patch flag indicates this node needs patching on updates.
// component nodes also should always be patched, because even if the
// component doesn't need to update, it needs to persist the instance on to
// the next vnode so that it can be properly unmounted later.
( vnode . patchFlag > 0 || shapeFlag & 6 ) && // the EVENTS flag is only for hydration and if it is the only flag, the
// vnode should not be considered dynamic due to handler caching.
vnode . patchFlag !== 32 ) {
currentBlock . push ( vnode ) ;
}
return vnode ;
}
const createVNode = createVNodeWithArgsTransform ;
function _createVNode ( type , props = null , children = null , patchFlag = 0 , dynamicProps = null , isBlockNode = false ) {
if ( ! type || type === NULL _DYNAMIC _COMPONENT ) {
if ( ! type ) {
warn$1 ( ` Invalid vnode type when creating vnode: ${ type } . ` ) ;
}
type = Comment ;
}
if ( isVNode$2 ( type ) ) {
const cloned = cloneVNode (
type ,
props ,
true
/* mergeRef: true */
) ;
if ( children ) {
normalizeChildren ( cloned , children ) ;
}
if ( isBlockTreeEnabled > 0 && ! isBlockNode && currentBlock ) {
if ( cloned . shapeFlag & 6 ) {
currentBlock [ currentBlock . indexOf ( type ) ] = cloned ;
} else {
currentBlock . push ( cloned ) ;
}
}
2026-02-11 16:20:26 +00:00
cloned . patchFlag = - 2 ;
2024-01-05 12:14:38 +00:00
return cloned ;
}
if ( isClassComponent ( type ) ) {
type = type . _ _vccOpts ;
}
if ( props ) {
props = guardReactiveProps ( props ) ;
let { class : klass , style } = props ;
if ( klass && ! isString ( klass ) ) {
props . class = normalizeClass ( klass ) ;
}
if ( isObject ( style ) ) {
if ( isProxy ( style ) && ! isArray ( style ) ) {
style = extend ( { } , style ) ;
}
props . style = normalizeStyle ( style ) ;
}
}
const shapeFlag = isString ( type ) ? 1 : isSuspense ( type ) ? 128 : isTeleport ( type ) ? 64 : isObject ( type ) ? 4 : isFunction ( type ) ? 2 : 0 ;
if ( shapeFlag & 4 && isProxy ( type ) ) {
type = toRaw ( type ) ;
warn$1 (
` Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with \` markRaw \` or using \` shallowRef \` instead of \` ref \` . ` ,
`
Component that was made reactive : ` ,
type
) ;
}
return createBaseVNode (
type ,
props ,
children ,
patchFlag ,
dynamicProps ,
shapeFlag ,
isBlockNode ,
true
) ;
}
function guardReactiveProps ( props ) {
2026-02-11 16:20:26 +00:00
if ( ! props ) return null ;
return isProxy ( props ) || isInternalObject ( props ) ? extend ( { } , props ) : props ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
function cloneVNode ( vnode , extraProps , mergeRef = false , cloneTransition = false ) {
const { props , ref , patchFlag , children , transition } = vnode ;
2024-01-05 12:14:38 +00:00
const mergedProps = extraProps ? mergeProps ( props || { } , extraProps ) : props ;
const cloned = {
_ _v _isVNode : true ,
_ _v _skip : true ,
type : vnode . type ,
props : mergedProps ,
key : mergedProps && normalizeKey ( mergedProps ) ,
ref : extraProps && extraProps . ref ? (
// #2078 in the case of <component :is="vnode" ref="extra"/>
// if the vnode itself already has a ref, cloneVNode will need to merge
// the refs so the single vnode can be set on multiple refs
mergeRef && ref ? isArray ( ref ) ? ref . concat ( normalizeRef ( extraProps ) ) : [ ref , normalizeRef ( extraProps ) ] : normalizeRef ( extraProps )
) : ref ,
scopeId : vnode . scopeId ,
slotScopeIds : vnode . slotScopeIds ,
children : patchFlag === - 1 && isArray ( children ) ? children . map ( deepCloneVNode ) : children ,
target : vnode . target ,
2026-02-11 16:20:26 +00:00
targetStart : vnode . targetStart ,
2024-01-05 12:14:38 +00:00
targetAnchor : vnode . targetAnchor ,
staticCount : vnode . staticCount ,
shapeFlag : vnode . shapeFlag ,
// if the vnode is cloned with extra props, we can no longer assume its
// existing patch flag to be reliable and need to add the FULL_PROPS flag.
// note: preserve flag for fragments since they use the flag for children
// fast paths only.
patchFlag : extraProps && vnode . type !== Fragment ? patchFlag === - 1 ? 16 : patchFlag | 16 : patchFlag ,
dynamicProps : vnode . dynamicProps ,
dynamicChildren : vnode . dynamicChildren ,
appContext : vnode . appContext ,
dirs : vnode . dirs ,
2026-02-11 16:20:26 +00:00
transition ,
2024-01-05 12:14:38 +00:00
// These should technically only be non-null on mounted VNodes. However,
// they *should* be copied for kept-alive vnodes. So we just always copy
// them since them being non-null during a mount doesn't affect the logic as
// they will simply be overwritten.
component : vnode . component ,
suspense : vnode . suspense ,
ssContent : vnode . ssContent && cloneVNode ( vnode . ssContent ) ,
ssFallback : vnode . ssFallback && cloneVNode ( vnode . ssFallback ) ,
2026-02-11 16:20:26 +00:00
placeholder : vnode . placeholder ,
2024-01-05 12:14:38 +00:00
el : vnode . el ,
anchor : vnode . anchor ,
ctx : vnode . ctx ,
ce : vnode . ce
} ;
2026-02-11 16:20:26 +00:00
if ( transition && cloneTransition ) {
setTransitionHooks (
cloned ,
transition . clone ( cloned )
) ;
}
2024-01-05 12:14:38 +00:00
return cloned ;
}
function deepCloneVNode ( vnode ) {
const cloned = cloneVNode ( vnode ) ;
if ( isArray ( vnode . children ) ) {
cloned . children = vnode . children . map ( deepCloneVNode ) ;
}
return cloned ;
}
function createTextVNode ( text = " " , flag = 0 ) {
return createVNode ( Text , null , text , flag ) ;
}
function normalizeVNode$1 ( child ) {
if ( child == null || typeof child === "boolean" ) {
return createVNode ( Comment ) ;
} else if ( isArray ( child ) ) {
return createVNode (
Fragment ,
null ,
// #3666, avoid reference pollution when reusing vnode
child . slice ( )
) ;
2026-02-11 16:20:26 +00:00
} else if ( isVNode$2 ( child ) ) {
2024-01-05 12:14:38 +00:00
return cloneIfMounted ( child ) ;
} else {
return createVNode ( Text , null , String ( child ) ) ;
}
}
function cloneIfMounted ( child ) {
return child . el === null && child . patchFlag !== - 1 || child . memo ? child : cloneVNode ( child ) ;
}
function normalizeChildren ( vnode , children ) {
let type = 0 ;
const { shapeFlag } = vnode ;
if ( children == null ) {
children = null ;
} else if ( isArray ( children ) ) {
type = 16 ;
} else if ( typeof children === "object" ) {
if ( shapeFlag & ( 1 | 64 ) ) {
const slot = children . default ;
if ( slot ) {
slot . _c && ( slot . _d = false ) ;
normalizeChildren ( vnode , slot ( ) ) ;
slot . _c && ( slot . _d = true ) ;
}
return ;
} else {
type = 32 ;
const slotFlag = children . _ ;
2026-02-11 16:20:26 +00:00
if ( ! slotFlag && ! isInternalObject ( children ) ) {
2024-01-05 12:14:38 +00:00
children . _ctx = currentRenderingInstance ;
} else if ( slotFlag === 3 && currentRenderingInstance ) {
if ( currentRenderingInstance . slots . _ === 1 ) {
children . _ = 1 ;
} else {
children . _ = 2 ;
vnode . patchFlag |= 1024 ;
}
}
}
} else if ( isFunction ( children ) ) {
children = { default : children , _ctx : currentRenderingInstance } ;
type = 32 ;
} else {
children = String ( children ) ;
if ( shapeFlag & 64 ) {
type = 16 ;
children = [ createTextVNode ( children ) ] ;
} else {
type = 8 ;
}
}
vnode . children = children ;
vnode . shapeFlag |= type ;
}
function mergeProps ( ... args ) {
const ret = { } ;
for ( let i = 0 ; i < args . length ; i ++ ) {
const toMerge = args [ i ] ;
for ( const key in toMerge ) {
if ( key === "class" ) {
if ( ret . class !== toMerge . class ) {
ret . class = normalizeClass ( [ ret . class , toMerge . class ] ) ;
}
} else if ( key === "style" ) {
ret . style = normalizeStyle ( [ ret . style , toMerge . style ] ) ;
} else if ( isOn ( key ) ) {
const existing = ret [ key ] ;
const incoming = toMerge [ key ] ;
if ( incoming && existing !== incoming && ! ( isArray ( existing ) && existing . includes ( incoming ) ) ) {
ret [ key ] = existing ? [ ] . concat ( existing , incoming ) : incoming ;
}
} else if ( key !== "" ) {
ret [ key ] = toMerge [ key ] ;
}
}
}
return ret ;
}
function invokeVNodeHook ( hook , instance , vnode , prevVNode = null ) {
callWithAsyncErrorHandling ( hook , instance , 7 , [
vnode ,
prevVNode
] ) ;
}
const emptyAppContext = createAppContext ( ) ;
let uid = 0 ;
function createComponentInstance$1 ( vnode , parent , suspense ) {
const type = vnode . type ;
const appContext = ( parent ? parent . appContext : vnode . appContext ) || emptyAppContext ;
const instance = {
uid : uid ++ ,
vnode ,
type ,
parent ,
appContext ,
root : null ,
// to be immediately set
next : null ,
subTree : null ,
// will be set synchronously right after creation
effect : null ,
update : null ,
// will be set synchronously right after creation
2026-02-11 16:20:26 +00:00
job : null ,
2024-01-05 12:14:38 +00:00
scope : new EffectScope (
true
/* detached */
) ,
render : null ,
proxy : null ,
exposed : null ,
exposeProxy : null ,
withProxy : null ,
provides : parent ? parent . provides : Object . create ( appContext . provides ) ,
2026-02-11 16:20:26 +00:00
ids : parent ? parent . ids : [ "" , 0 , 0 ] ,
2024-01-05 12:14:38 +00:00
accessCache : null ,
renderCache : [ ] ,
// local resolved assets
components : null ,
directives : null ,
// resolved props and emits options
propsOptions : normalizePropsOptions ( type , appContext ) ,
emitsOptions : normalizeEmitsOptions ( type , appContext ) ,
// emit
emit : null ,
// to be set immediately
emitted : null ,
// props default value
propsDefaults : EMPTY _OBJ ,
// inheritAttrs
inheritAttrs : type . inheritAttrs ,
// state
ctx : EMPTY _OBJ ,
data : EMPTY _OBJ ,
props : EMPTY _OBJ ,
attrs : EMPTY _OBJ ,
slots : EMPTY _OBJ ,
refs : EMPTY _OBJ ,
setupState : EMPTY _OBJ ,
setupContext : null ,
// suspense related
suspense ,
suspenseId : suspense ? suspense . pendingId : 0 ,
asyncDep : null ,
asyncResolved : false ,
// lifecycle hooks
// not using enums here because it results in computed properties
isMounted : false ,
isUnmounted : false ,
isDeactivated : false ,
bc : null ,
c : null ,
bm : null ,
m : null ,
bu : null ,
u : null ,
um : null ,
bum : null ,
da : null ,
a : null ,
rtg : null ,
rtc : null ,
ec : null ,
sp : null
} ;
{
instance . ctx = createDevRenderContext ( instance ) ;
}
instance . root = parent ? parent . root : instance ;
instance . emit = emit . bind ( null , instance ) ;
if ( vnode . ce ) {
vnode . ce ( instance ) ;
}
return instance ;
}
let currentInstance = null ;
2026-02-11 16:20:26 +00:00
const getCurrentInstance = ( ) => currentInstance || currentRenderingInstance ;
2024-01-05 12:14:38 +00:00
let internalSetCurrentInstance ;
let setInSSRSetupState ;
{
const g = getGlobalThis ( ) ;
const registerGlobalSetter = ( key , setter ) => {
let setters ;
2026-02-11 16:20:26 +00:00
if ( ! ( setters = g [ key ] ) ) setters = g [ key ] = [ ] ;
2024-01-05 12:14:38 +00:00
setters . push ( setter ) ;
return ( v ) => {
2026-02-11 16:20:26 +00:00
if ( setters . length > 1 ) setters . forEach ( ( set ) => set ( v ) ) ;
else setters [ 0 ] ( v ) ;
2024-01-05 12:14:38 +00:00
} ;
} ;
internalSetCurrentInstance = registerGlobalSetter (
` __VUE_INSTANCE_SETTERS__ ` ,
( v ) => currentInstance = v
) ;
setInSSRSetupState = registerGlobalSetter (
` __VUE_SSR_SETTERS__ ` ,
( v ) => isInSSRComponentSetup = v
) ;
}
const setCurrentInstance = ( instance ) => {
2024-01-31 06:33:19 +00:00
const prev = currentInstance ;
2024-01-05 12:14:38 +00:00
internalSetCurrentInstance ( instance ) ;
instance . scope . on ( ) ;
2024-01-31 06:33:19 +00:00
return ( ) => {
instance . scope . off ( ) ;
internalSetCurrentInstance ( prev ) ;
} ;
2024-01-05 12:14:38 +00:00
} ;
const unsetCurrentInstance = ( ) => {
currentInstance && currentInstance . scope . off ( ) ;
internalSetCurrentInstance ( null ) ;
} ;
const isBuiltInTag = /* @__PURE__ */ makeMap ( "slot,component" ) ;
2026-02-11 16:20:26 +00:00
function validateComponentName ( name , { isNativeTag } ) {
if ( isBuiltInTag ( name ) || isNativeTag ( name ) ) {
2024-01-05 12:14:38 +00:00
warn$1 (
"Do not use built-in or reserved HTML elements as component id: " + name
) ;
}
}
function isStatefulComponent ( instance ) {
return instance . vnode . shapeFlag & 4 ;
}
let isInSSRComponentSetup = false ;
2026-02-11 16:20:26 +00:00
function setupComponent$1 ( instance , isSSR = false , optimized = false ) {
2024-01-05 12:14:38 +00:00
isSSR && setInSSRSetupState ( isSSR ) ;
const { props , children } = instance . vnode ;
const isStateful = isStatefulComponent ( instance ) ;
initProps ( instance , props , isStateful , isSSR ) ;
2026-02-11 16:20:26 +00:00
initSlots ( instance , children , optimized || isSSR ) ;
2024-01-05 12:14:38 +00:00
const setupResult = isStateful ? setupStatefulComponent ( instance , isSSR ) : void 0 ;
isSSR && setInSSRSetupState ( false ) ;
return setupResult ;
}
function setupStatefulComponent ( instance , isSSR ) {
const Component = instance . type ;
{
if ( Component . name ) {
validateComponentName ( Component . name , instance . appContext . config ) ;
}
if ( Component . components ) {
const names = Object . keys ( Component . components ) ;
for ( let i = 0 ; i < names . length ; i ++ ) {
validateComponentName ( names [ i ] , instance . appContext . config ) ;
}
}
if ( Component . directives ) {
const names = Object . keys ( Component . directives ) ;
for ( let i = 0 ; i < names . length ; i ++ ) {
validateDirectiveName ( names [ i ] ) ;
}
}
if ( Component . compilerOptions && isRuntimeOnly ( ) ) {
warn$1 (
` "compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead. `
) ;
}
}
instance . accessCache = /* @__PURE__ */ Object . create ( null ) ;
2026-02-11 16:20:26 +00:00
instance . proxy = new Proxy ( instance . ctx , PublicInstanceProxyHandlers ) ;
2024-01-05 12:14:38 +00:00
{
exposePropsOnRenderContext ( instance ) ;
}
const { setup } = Component ;
if ( setup ) {
2026-02-11 16:20:26 +00:00
pauseTracking ( ) ;
2024-01-05 12:14:38 +00:00
const setupContext = instance . setupContext = setup . length > 1 ? createSetupContext ( instance ) : null ;
2024-01-31 06:33:19 +00:00
const reset = setCurrentInstance ( instance ) ;
2024-01-05 12:14:38 +00:00
const setupResult = callWithErrorHandling (
setup ,
instance ,
0 ,
[
shallowReadonly ( instance . props ) ,
setupContext
]
) ;
2026-02-11 16:20:26 +00:00
const isAsyncSetup = isPromise ( setupResult ) ;
2024-01-05 12:14:38 +00:00
resetTracking ( ) ;
2024-01-31 06:33:19 +00:00
reset ( ) ;
2026-02-11 16:20:26 +00:00
if ( ( isAsyncSetup || instance . sp ) && ! isAsyncWrapper ( instance ) ) {
markAsyncBoundary ( instance ) ;
}
if ( isAsyncSetup ) {
2024-01-05 12:14:38 +00:00
setupResult . then ( unsetCurrentInstance , unsetCurrentInstance ) ;
if ( isSSR ) {
return setupResult . then ( ( resolvedResult ) => {
handleSetupResult ( instance , resolvedResult , isSSR ) ;
} ) . catch ( ( e ) => {
handleError ( e , instance , 0 ) ;
} ) ;
} else {
instance . asyncDep = setupResult ;
if ( ! instance . suspense ) {
2026-02-11 16:20:26 +00:00
const name = formatComponentName ( instance , Component ) ;
2024-01-05 12:14:38 +00:00
warn$1 (
` Component < ${ name } >: setup function returned a promise, but no <Suspense> boundary was found in the parent component tree. A component with async setup() must be nested in a <Suspense> in order to be rendered. `
) ;
}
}
} else {
handleSetupResult ( instance , setupResult , isSSR ) ;
}
} else {
finishComponentSetup ( instance , isSSR ) ;
}
}
function handleSetupResult ( instance , setupResult , isSSR ) {
if ( isFunction ( setupResult ) ) {
if ( instance . type . _ _ssrInlineRender ) {
instance . ssrRender = setupResult ;
} else {
instance . render = setupResult ;
}
} else if ( isObject ( setupResult ) ) {
if ( isVNode$2 ( setupResult ) ) {
warn$1 (
` setup() should not return VNodes directly - return a render function instead. `
) ;
}
{
instance . devtoolsRawSetupState = setupResult ;
}
instance . setupState = proxyRefs ( setupResult ) ;
{
exposeSetupStateOnRenderContext ( instance ) ;
}
} else if ( setupResult !== void 0 ) {
warn$1 (
` setup() should return an object. Received: ${ setupResult === null ? "null" : typeof setupResult } `
) ;
}
finishComponentSetup ( instance , isSSR ) ;
}
2026-02-11 16:20:26 +00:00
const isRuntimeOnly = ( ) => true ;
2024-01-05 12:14:38 +00:00
function finishComponentSetup ( instance , isSSR , skipOptions ) {
const Component = instance . type ;
if ( ! instance . render ) {
instance . render = Component . render || NOOP ;
}
{
2024-01-31 06:33:19 +00:00
const reset = setCurrentInstance ( instance ) ;
2024-01-05 12:14:38 +00:00
pauseTracking ( ) ;
try {
applyOptions ( instance ) ;
} finally {
resetTracking ( ) ;
2024-01-31 06:33:19 +00:00
reset ( ) ;
2024-01-05 12:14:38 +00:00
}
}
if ( ! Component . render && instance . render === NOOP && ! isSSR ) {
if ( Component . template ) {
warn$1 (
` Component provided template option but runtime compilation is not supported in this build of Vue. ` + ( ` Use "vue.esm-browser.js" instead. ` )
) ;
} else {
2026-02-11 16:20:26 +00:00
warn$1 ( ` Component is missing template or render function: ` , Component ) ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
const attrsProxyHandlers = {
get ( target , key ) {
markAttrsAccessed ( ) ;
track ( target , "get" , "" ) ;
return target [ key ] ;
} ,
set ( ) {
warn$1 ( ` setupContext.attrs is readonly. ` ) ;
return false ;
} ,
deleteProperty ( ) {
warn$1 ( ` setupContext.attrs is readonly. ` ) ;
return false ;
}
} ;
2024-01-05 12:14:38 +00:00
function getSlotsProxy ( instance ) {
2026-02-11 16:20:26 +00:00
return new Proxy ( instance . slots , {
2024-01-05 12:14:38 +00:00
get ( target , key ) {
track ( instance , "get" , "$slots" ) ;
return target [ key ] ;
}
2026-02-11 16:20:26 +00:00
} ) ;
2024-01-05 12:14:38 +00:00
}
function createSetupContext ( instance ) {
const expose = ( exposed ) => {
{
if ( instance . exposed ) {
warn$1 ( ` expose() should be called only once per setup(). ` ) ;
}
if ( exposed != null ) {
let exposedType = typeof exposed ;
if ( exposedType === "object" ) {
if ( isArray ( exposed ) ) {
exposedType = "array" ;
} else if ( isRef ( exposed ) ) {
exposedType = "ref" ;
}
}
if ( exposedType !== "object" ) {
warn$1 (
` expose() should be passed a plain object, received ${ exposedType } . `
) ;
}
}
}
instance . exposed = exposed || { } ;
} ;
{
2026-02-11 16:20:26 +00:00
let attrsProxy ;
let slotsProxy ;
2024-01-05 12:14:38 +00:00
return Object . freeze ( {
get attrs ( ) {
2026-02-11 16:20:26 +00:00
return attrsProxy || ( attrsProxy = new Proxy ( instance . attrs , attrsProxyHandlers ) ) ;
2024-01-05 12:14:38 +00:00
} ,
get slots ( ) {
2026-02-11 16:20:26 +00:00
return slotsProxy || ( slotsProxy = getSlotsProxy ( instance ) ) ;
2024-01-05 12:14:38 +00:00
} ,
get emit ( ) {
return ( event , ... args ) => instance . emit ( event , ... args ) ;
} ,
expose
} ) ;
}
}
2026-02-11 16:20:26 +00:00
function getComponentPublicInstance ( instance ) {
2024-01-05 12:14:38 +00:00
if ( instance . exposed ) {
return instance . exposeProxy || ( instance . exposeProxy = new Proxy ( proxyRefs ( markRaw ( instance . exposed ) ) , {
get ( target , key ) {
if ( key in target ) {
return target [ key ] ;
} else if ( key in publicPropertiesMap ) {
return publicPropertiesMap [ key ] ( instance ) ;
}
} ,
has ( target , key ) {
return key in target || key in publicPropertiesMap ;
}
} ) ) ;
2026-02-11 16:20:26 +00:00
} else {
return instance . proxy ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
const classifyRE = /(?:^|[-_])\w/g ;
2024-01-05 12:14:38 +00:00
const classify = ( str ) => str . replace ( classifyRE , ( c ) => c . toUpperCase ( ) ) . replace ( /[-_]/g , "" ) ;
function getComponentName ( Component , includeInferred = true ) {
return isFunction ( Component ) ? Component . displayName || Component . name : Component . name || includeInferred && Component . _ _name ;
}
function formatComponentName ( instance , Component , isRoot = false ) {
let name = getComponentName ( Component ) ;
if ( ! name && Component . _ _file ) {
const match = Component . _ _file . match ( /([^/\\]+)\.\w+$/ ) ;
if ( match ) {
name = match [ 1 ] ;
}
}
2026-02-11 16:20:26 +00:00
if ( ! name && instance ) {
2024-01-05 12:14:38 +00:00
const inferFromRegistry = ( registry ) => {
for ( const key in registry ) {
if ( registry [ key ] === Component ) {
return key ;
}
}
} ;
2026-02-11 16:20:26 +00:00
name = inferFromRegistry ( instance . components ) || instance . parent && inferFromRegistry (
instance . parent . type . components
2024-01-05 12:14:38 +00:00
) || inferFromRegistry ( instance . appContext . components ) ;
}
return name ? classify ( name ) : isRoot ? ` App ` : ` Anonymous ` ;
}
function isClassComponent ( value ) {
return isFunction ( value ) && "__vccOpts" in value ;
}
const computed = ( getterOrOptions , debugOptions ) => {
2026-02-11 16:20:26 +00:00
const c = computed$1 ( getterOrOptions , debugOptions , isInSSRComponentSetup ) ;
{
const i = getCurrentInstance ( ) ;
if ( i && i . appContext . config . warnRecursiveComputed ) {
c . _warnRecursive = true ;
}
}
return c ;
2024-01-05 12:14:38 +00:00
} ;
2026-02-11 16:20:26 +00:00
const version = "3.5.28" ;
2024-01-05 12:14:38 +00:00
const warn = warn$1 ;
const _ssrUtils = {
createComponentInstance : createComponentInstance$1 ,
setupComponent : setupComponent$1 ,
renderComponentRoot : renderComponentRoot$1 ,
setCurrentRenderingInstance : setCurrentRenderingInstance$1 ,
isVNode : isVNode$2 ,
2026-02-11 16:20:26 +00:00
normalizeVNode : normalizeVNode$1 ,
getComponentPublicInstance ,
ensureValidVNode : ensureValidVNode$1 ,
pushWarningContext : pushWarningContext$1 ,
popWarningContext : popWarningContext$1
2024-01-05 12:14:38 +00:00
} ;
const ssrUtils = _ssrUtils ;
2026-02-11 16:20:26 +00:00
let policy = void 0 ;
const tt = typeof window !== "undefined" && window . trustedTypes ;
if ( tt ) {
try {
policy = /* @__PURE__ */ tt . createPolicy ( "vue" , {
createHTML : ( val ) => val
} ) ;
} catch ( e ) {
warn ( ` Error creating trusted types policy: ${ e } ` ) ;
}
}
const unsafeToTrustedHTML = policy ? ( val ) => policy . createHTML ( val ) : ( val ) => val ;
2024-01-05 12:14:38 +00:00
const svgNS = "http://www.w3.org/2000/svg" ;
const mathmlNS = "http://www.w3.org/1998/Math/MathML" ;
const doc = typeof document !== "undefined" ? document : null ;
const templateContainer = doc && /* @__PURE__ */ doc . createElement ( "template" ) ;
const nodeOps = {
insert : ( child , parent , anchor ) => {
parent . insertBefore ( child , anchor || null ) ;
} ,
remove : ( child ) => {
const parent = child . parentNode ;
if ( parent ) {
parent . removeChild ( child ) ;
}
} ,
createElement : ( tag , namespace , is , props ) => {
2026-02-11 16:20:26 +00:00
const el = namespace === "svg" ? doc . createElementNS ( svgNS , tag ) : namespace === "mathml" ? doc . createElementNS ( mathmlNS , tag ) : is ? doc . createElement ( tag , { is } ) : doc . createElement ( tag ) ;
2024-01-05 12:14:38 +00:00
if ( tag === "select" && props && props . multiple != null ) {
el . setAttribute ( "multiple" , props . multiple ) ;
}
return el ;
} ,
createText : ( text ) => doc . createTextNode ( text ) ,
createComment : ( text ) => doc . createComment ( text ) ,
setText : ( node , text ) => {
node . nodeValue = text ;
} ,
setElementText : ( el , text ) => {
el . textContent = text ;
} ,
parentNode : ( node ) => node . parentNode ,
nextSibling : ( node ) => node . nextSibling ,
querySelector : ( selector ) => doc . querySelector ( selector ) ,
setScopeId ( el , id ) {
el . setAttribute ( id , "" ) ;
} ,
// __UNSAFE__
// Reason: innerHTML.
// Static content here can only come from compiled templates.
// As long as the user only uses trusted templates, this is safe.
insertStaticContent ( content , parent , anchor , namespace , start , end ) {
const before = anchor ? anchor . previousSibling : parent . lastChild ;
if ( start && ( start === end || start . nextSibling ) ) {
while ( true ) {
parent . insertBefore ( start . cloneNode ( true ) , anchor ) ;
2026-02-11 16:20:26 +00:00
if ( start === end || ! ( start = start . nextSibling ) ) break ;
2024-01-05 12:14:38 +00:00
}
} else {
2026-02-11 16:20:26 +00:00
templateContainer . innerHTML = unsafeToTrustedHTML (
namespace === "svg" ? ` <svg> ${ content } </svg> ` : namespace === "mathml" ? ` <math> ${ content } </math> ` : content
) ;
2024-01-05 12:14:38 +00:00
const template = templateContainer . content ;
if ( namespace === "svg" || namespace === "mathml" ) {
const wrapper = template . firstChild ;
while ( wrapper . firstChild ) {
template . appendChild ( wrapper . firstChild ) ;
}
template . removeChild ( wrapper ) ;
}
parent . insertBefore ( template , anchor ) ;
}
return [
// first
before ? before . nextSibling : parent . firstChild ,
// last
anchor ? anchor . previousSibling : parent . lastChild
] ;
}
} ;
2026-02-11 16:20:26 +00:00
const vtcKey = /* @__PURE__ */ Symbol ( "_vtc" ) ;
2024-01-05 12:14:38 +00:00
function patchClass ( el , value , isSVG ) {
const transitionClasses = el [ vtcKey ] ;
if ( transitionClasses ) {
value = ( value ? [ value , ... transitionClasses ] : [ ... transitionClasses ] ) . join ( " " ) ;
}
if ( value == null ) {
el . removeAttribute ( "class" ) ;
} else if ( isSVG ) {
el . setAttribute ( "class" , value ) ;
} else {
el . className = value ;
}
}
2026-02-11 16:20:26 +00:00
const vShowOriginalDisplay = /* @__PURE__ */ Symbol ( "_vod" ) ;
const vShowHidden = /* @__PURE__ */ Symbol ( "_vsh" ) ;
2024-01-05 12:14:38 +00:00
2026-02-11 16:20:26 +00:00
const CSS _VAR _TEXT = /* @__PURE__ */ Symbol ( "CSS_VAR_TEXT" ) ;
2024-01-05 12:14:38 +00:00
2026-02-11 16:20:26 +00:00
const displayRE = /(?:^|;)\s*display\s*:/ ;
2024-01-05 12:14:38 +00:00
function patchStyle ( el , prev , next ) {
const style = el . style ;
const isCssString = isString ( next ) ;
2026-02-11 16:20:26 +00:00
let hasControlledDisplay = false ;
2024-01-05 12:14:38 +00:00
if ( next && ! isCssString ) {
2026-02-11 16:20:26 +00:00
if ( prev ) {
if ( ! isString ( prev ) ) {
for ( const key in prev ) {
if ( next [ key ] == null ) {
setStyle ( style , key , "" ) ;
}
}
} else {
for ( const prevStyle of prev . split ( ";" ) ) {
const key = prevStyle . slice ( 0 , prevStyle . indexOf ( ":" ) ) . trim ( ) ;
if ( next [ key ] == null ) {
setStyle ( style , key , "" ) ;
}
2024-01-05 12:14:38 +00:00
}
}
}
for ( const key in next ) {
2026-02-11 16:20:26 +00:00
if ( key === "display" ) {
hasControlledDisplay = true ;
}
2024-01-05 12:14:38 +00:00
setStyle ( style , key , next [ key ] ) ;
}
} else {
if ( isCssString ) {
if ( prev !== next ) {
const cssVarText = style [ CSS _VAR _TEXT ] ;
if ( cssVarText ) {
next += ";" + cssVarText ;
}
style . cssText = next ;
2026-02-11 16:20:26 +00:00
hasControlledDisplay = displayRE . test ( next ) ;
2024-01-05 12:14:38 +00:00
}
} else if ( prev ) {
el . removeAttribute ( "style" ) ;
}
2024-01-31 06:33:19 +00:00
}
2026-02-11 16:20:26 +00:00
if ( vShowOriginalDisplay in el ) {
el [ vShowOriginalDisplay ] = hasControlledDisplay ? style . display : "" ;
if ( el [ vShowHidden ] ) {
style . display = "none" ;
}
2024-01-05 12:14:38 +00:00
}
}
const semicolonRE = /[^\\];\s*$/ ;
const importantRE = /\s*!important$/ ;
function setStyle ( style , name , val ) {
if ( isArray ( val ) ) {
val . forEach ( ( v ) => setStyle ( style , name , v ) ) ;
} else {
2026-02-11 16:20:26 +00:00
if ( val == null ) val = "" ;
2024-01-05 12:14:38 +00:00
{
if ( semicolonRE . test ( val ) ) {
warn (
` Unexpected semicolon at the end of ' ${ name } ' style value: ' ${ val } ' `
) ;
}
}
if ( name . startsWith ( "--" ) ) {
style . setProperty ( name , val ) ;
} else {
const prefixed = autoPrefix ( style , name ) ;
if ( importantRE . test ( val ) ) {
style . setProperty (
hyphenate ( prefixed ) ,
val . replace ( importantRE , "" ) ,
"important"
) ;
} else {
style [ prefixed ] = val ;
}
}
}
}
const prefixes = [ "Webkit" , "Moz" , "ms" ] ;
const prefixCache = { } ;
function autoPrefix ( style , rawName ) {
const cached = prefixCache [ rawName ] ;
if ( cached ) {
return cached ;
}
let name = camelize ( rawName ) ;
if ( name !== "filter" && name in style ) {
return prefixCache [ rawName ] = name ;
}
name = capitalize ( name ) ;
for ( let i = 0 ; i < prefixes . length ; i ++ ) {
const prefixed = prefixes [ i ] + name ;
if ( prefixed in style ) {
return prefixCache [ rawName ] = prefixed ;
}
}
return rawName ;
}
const xlinkNS = "http://www.w3.org/1999/xlink" ;
2026-02-11 16:20:26 +00:00
function patchAttr ( el , key , value , isSVG , instance , isBoolean = isSpecialBooleanAttr ( key ) ) {
2024-01-05 12:14:38 +00:00
if ( isSVG && key . startsWith ( "xlink:" ) ) {
if ( value == null ) {
el . removeAttributeNS ( xlinkNS , key . slice ( 6 , key . length ) ) ;
} else {
el . setAttributeNS ( xlinkNS , key , value ) ;
}
} else {
if ( value == null || isBoolean && ! includeBooleanAttr ( value ) ) {
el . removeAttribute ( key ) ;
} else {
2026-02-11 16:20:26 +00:00
el . setAttribute (
key ,
isBoolean ? "" : isSymbol ( value ) ? String ( value ) : value
) ;
2024-01-05 12:14:38 +00:00
}
}
}
2026-02-11 16:20:26 +00:00
function patchDOMProp ( el , key , value , parentComponent , attrName ) {
2024-01-05 12:14:38 +00:00
if ( key === "innerHTML" || key === "textContent" ) {
2026-02-11 16:20:26 +00:00
if ( value != null ) {
el [ key ] = key === "innerHTML" ? unsafeToTrustedHTML ( value ) : value ;
2024-01-05 12:14:38 +00:00
}
return ;
}
const tag = el . tagName ;
if ( key === "value" && tag !== "PROGRESS" && // custom elements may use _value internally
! tag . includes ( "-" ) ) {
2026-02-11 16:20:26 +00:00
const oldValue = tag === "OPTION" ? el . getAttribute ( "value" ) || "" : el . value ;
const newValue = value == null ? (
// #11647: value should be set as empty string for null and undefined,
// but <input type="checkbox"> should be set as 'on'.
el . type === "checkbox" ? "on" : ""
) : String ( value ) ;
if ( oldValue !== newValue || ! ( "_value" in el ) ) {
2024-01-05 12:14:38 +00:00
el . value = newValue ;
}
if ( value == null ) {
el . removeAttribute ( key ) ;
}
2026-02-11 16:20:26 +00:00
el . _value = value ;
2024-01-05 12:14:38 +00:00
return ;
}
let needRemove = false ;
if ( value === "" || value == null ) {
const type = typeof el [ key ] ;
if ( type === "boolean" ) {
value = includeBooleanAttr ( value ) ;
} else if ( value == null && type === "string" ) {
value = "" ;
needRemove = true ;
} else if ( type === "number" ) {
value = 0 ;
needRemove = true ;
}
}
try {
el [ key ] = value ;
} catch ( e ) {
if ( ! needRemove ) {
warn (
` Failed setting prop " ${ key } " on < ${ tag . toLowerCase ( ) } >: value ${ value } is invalid. ` ,
e
) ;
}
}
2026-02-11 16:20:26 +00:00
needRemove && el . removeAttribute ( attrName || key ) ;
2024-01-05 12:14:38 +00:00
}
function addEventListener ( el , event , handler , options ) {
el . addEventListener ( event , handler , options ) ;
}
function removeEventListener ( el , event , handler , options ) {
el . removeEventListener ( event , handler , options ) ;
}
2026-02-11 16:20:26 +00:00
const veiKey = /* @__PURE__ */ Symbol ( "_vei" ) ;
2024-01-05 12:14:38 +00:00
function patchEvent ( el , rawName , prevValue , nextValue , instance = null ) {
const invokers = el [ veiKey ] || ( el [ veiKey ] = { } ) ;
const existingInvoker = invokers [ rawName ] ;
if ( nextValue && existingInvoker ) {
2026-02-11 16:20:26 +00:00
existingInvoker . value = sanitizeEventValue ( nextValue , rawName ) ;
2024-01-05 12:14:38 +00:00
} else {
const [ name , options ] = parseName ( rawName ) ;
if ( nextValue ) {
2026-02-11 16:20:26 +00:00
const invoker = invokers [ rawName ] = createInvoker (
sanitizeEventValue ( nextValue , rawName ) ,
instance
) ;
2024-01-05 12:14:38 +00:00
addEventListener ( el , name , invoker , options ) ;
} else if ( existingInvoker ) {
removeEventListener ( el , name , existingInvoker , options ) ;
invokers [ rawName ] = void 0 ;
}
}
}
const optionsModifierRE = /(?:Once|Passive|Capture)$/ ;
function parseName ( name ) {
let options ;
if ( optionsModifierRE . test ( name ) ) {
options = { } ;
let m ;
while ( m = name . match ( optionsModifierRE ) ) {
name = name . slice ( 0 , name . length - m [ 0 ] . length ) ;
options [ m [ 0 ] . toLowerCase ( ) ] = true ;
}
}
const event = name [ 2 ] === ":" ? name . slice ( 3 ) : hyphenate ( name . slice ( 2 ) ) ;
return [ event , options ] ;
}
let cachedNow = 0 ;
const p = /* @__PURE__ */ Promise . resolve ( ) ;
const getNow = ( ) => cachedNow || ( p . then ( ( ) => cachedNow = 0 ) , cachedNow = Date . now ( ) ) ;
function createInvoker ( initialValue , instance ) {
const invoker = ( e ) => {
if ( ! e . _vts ) {
e . _vts = Date . now ( ) ;
} else if ( e . _vts <= invoker . attached ) {
return ;
}
callWithAsyncErrorHandling (
patchStopImmediatePropagation ( e , invoker . value ) ,
instance ,
5 ,
[ e ]
) ;
} ;
invoker . value = initialValue ;
invoker . attached = getNow ( ) ;
return invoker ;
}
2026-02-11 16:20:26 +00:00
function sanitizeEventValue ( value , propName ) {
if ( isFunction ( value ) || isArray ( value ) ) {
return value ;
}
warn (
` Wrong type passed as event handler to ${ propName } - did you forget @ or : in front of your prop?
Expected function or array of functions , received type $ { typeof value } . `
) ;
return NOOP ;
}
2024-01-05 12:14:38 +00:00
function patchStopImmediatePropagation ( e , value ) {
if ( isArray ( value ) ) {
const originalStop = e . stopImmediatePropagation ;
e . stopImmediatePropagation = ( ) => {
originalStop . call ( e ) ;
e . _stopped = true ;
} ;
2026-02-11 16:20:26 +00:00
return value . map (
( fn ) => ( e2 ) => ! e2 . _stopped && fn && fn ( e2 )
) ;
2024-01-05 12:14:38 +00:00
} else {
return value ;
}
}
const isNativeOn = ( key ) => key . charCodeAt ( 0 ) === 111 && key . charCodeAt ( 1 ) === 110 && // lowercase letter
key . charCodeAt ( 2 ) > 96 && key . charCodeAt ( 2 ) < 123 ;
2026-02-11 16:20:26 +00:00
const patchProp = ( el , key , prevValue , nextValue , namespace , parentComponent ) => {
2024-01-05 12:14:38 +00:00
const isSVG = namespace === "svg" ;
if ( key === "class" ) {
patchClass ( el , nextValue , isSVG ) ;
} else if ( key === "style" ) {
patchStyle ( el , prevValue , nextValue ) ;
} else if ( isOn ( key ) ) {
if ( ! isModelListener ( key ) ) {
patchEvent ( el , key , prevValue , nextValue , parentComponent ) ;
}
} else if ( key [ 0 ] === "." ? ( key = key . slice ( 1 ) , true ) : key [ 0 ] === "^" ? ( key = key . slice ( 1 ) , false ) : shouldSetAsProp ( el , key , nextValue , isSVG ) ) {
2026-02-11 16:20:26 +00:00
patchDOMProp ( el , key , nextValue ) ;
if ( ! el . tagName . includes ( "-" ) && ( key === "value" || key === "checked" || key === "selected" ) ) {
patchAttr ( el , key , nextValue , isSVG , parentComponent , key !== "value" ) ;
}
} else if (
// #11081 force set props for possible async custom element
el . _isVueCE && ( /[A-Z]/ . test ( key ) || ! isString ( nextValue ) )
) {
patchDOMProp ( el , camelize ( key ) , nextValue , parentComponent , key ) ;
2024-01-05 12:14:38 +00:00
} else {
if ( key === "true-value" ) {
el . _trueValue = nextValue ;
} else if ( key === "false-value" ) {
el . _falseValue = nextValue ;
}
patchAttr ( el , key , nextValue , isSVG ) ;
}
} ;
function shouldSetAsProp ( el , key , value , isSVG ) {
if ( isSVG ) {
if ( key === "innerHTML" || key === "textContent" ) {
return true ;
}
if ( key in el && isNativeOn ( key ) && isFunction ( value ) ) {
return true ;
}
return false ;
}
2026-02-11 16:20:26 +00:00
if ( key === "spellcheck" || key === "draggable" || key === "translate" || key === "autocorrect" ) {
return false ;
}
if ( key === "sandbox" && el . tagName === "IFRAME" ) {
2024-01-05 12:14:38 +00:00
return false ;
}
if ( key === "form" ) {
return false ;
}
if ( key === "list" && el . tagName === "INPUT" ) {
return false ;
}
if ( key === "type" && el . tagName === "TEXTAREA" ) {
return false ;
}
if ( key === "width" || key === "height" ) {
const tag = el . tagName ;
if ( tag === "IMG" || tag === "VIDEO" || tag === "CANVAS" || tag === "SOURCE" ) {
return false ;
}
}
if ( isNativeOn ( key ) && isString ( value ) ) {
return false ;
}
return key in el ;
}
const vModelText = {
2026-02-11 16:20:26 +00:00
} ;
const vModelCheckbox = {
} ;
const vModelRadio = {
} ;
function initVModelForSSR ( ) {
vModelText . getSSRProps = ( { value } ) => ( { value } ) ;
vModelRadio . getSSRProps = ( { value } , vnode ) => {
if ( vnode . props && looseEqual ( vnode . props . value , value ) ) {
return { checked : true } ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
vModelCheckbox . getSSRProps = ( { value } , vnode ) => {
if ( isArray ( value ) ) {
if ( vnode . props && looseIndexOf ( value , vnode . props . value ) > - 1 ) {
return { checked : true } ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( isSet ( value ) ) {
if ( vnode . props && value . has ( vnode . props . value ) ) {
return { checked : true } ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} else if ( value ) {
return { checked : true } ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
} ;
2024-01-05 12:14:38 +00:00
}
const rendererOptions = /* @__PURE__ */ extend ( { patchProp } , nodeOps ) ;
let renderer ;
function ensureRenderer ( ) {
return renderer || ( renderer = createRenderer ( rendererOptions ) ) ;
}
2026-02-11 16:20:26 +00:00
const createApp = ( ( ... args ) => {
2024-01-05 12:14:38 +00:00
const app = ensureRenderer ( ) . createApp ( ... args ) ;
{
injectNativeTagCheck ( app ) ;
injectCompilerOptionsCheck ( app ) ;
}
const { mount } = app ;
app . mount = ( containerOrSelector ) => {
const container = normalizeContainer ( containerOrSelector ) ;
2026-02-11 16:20:26 +00:00
if ( ! container ) return ;
2024-01-05 12:14:38 +00:00
const component = app . _component ;
if ( ! isFunction ( component ) && ! component . render && ! component . template ) {
component . template = container . innerHTML ;
}
2026-02-11 16:20:26 +00:00
if ( container . nodeType === 1 ) {
container . textContent = "" ;
}
2024-01-05 12:14:38 +00:00
const proxy = mount ( container , false , resolveRootNamespace ( container ) ) ;
if ( container instanceof Element ) {
container . removeAttribute ( "v-cloak" ) ;
container . setAttribute ( "data-v-app" , "" ) ;
}
return proxy ;
} ;
return app ;
2026-02-11 16:20:26 +00:00
} ) ;
2024-01-05 12:14:38 +00:00
function resolveRootNamespace ( container ) {
if ( container instanceof SVGElement ) {
return "svg" ;
}
if ( typeof MathMLElement === "function" && container instanceof MathMLElement ) {
return "mathml" ;
}
}
function injectNativeTagCheck ( app ) {
Object . defineProperty ( app . config , "isNativeTag" , {
value : ( tag ) => isHTMLTag ( tag ) || isSVGTag ( tag ) || isMathMLTag ( tag ) ,
writable : false
} ) ;
}
function injectCompilerOptionsCheck ( app ) {
2026-02-11 16:20:26 +00:00
{
2024-01-05 12:14:38 +00:00
const isCustomElement = app . config . isCustomElement ;
Object . defineProperty ( app . config , "isCustomElement" , {
get ( ) {
return isCustomElement ;
} ,
set ( ) {
warn (
` The \` isCustomElement \` config option is deprecated. Use \` compilerOptions.isCustomElement \` instead. `
) ;
}
} ) ;
const compilerOptions = app . config . compilerOptions ;
const msg = ` The \` compilerOptions \` config option is only respected when using a build of Vue.js that includes the runtime compiler (aka "full build"). Since you are using the runtime-only build, \` compilerOptions \` must be passed to \` @vue/compiler-dom \` in the build setup instead.
- For vue - loader : pass it via vue - loader ' s \ ` compilerOptions \` loader option.
- For vue - cli : see https : //cli.vuejs.org/guide/webpack.html#modifying-options-of-a-loader
- For vite : pass it via @ vitejs / plugin - vue options . See https : //github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue#example-for-passing-options-to-vuecompiler-sfc`;
Object . defineProperty ( app . config , "compilerOptions" , {
get ( ) {
warn ( msg ) ;
return compilerOptions ;
} ,
set ( ) {
warn ( msg ) ;
}
} ) ;
}
}
function normalizeContainer ( container ) {
if ( isString ( container ) ) {
const res = document . querySelector ( container ) ;
if ( ! res ) {
warn (
` Failed to mount app: mount target selector " ${ container } " returned null. `
) ;
}
return res ;
}
if ( window . ShadowRoot && container instanceof window . ShadowRoot && container . mode === "closed" ) {
warn (
` mounting on a ShadowRoot with \` {mode: "closed"} \` may lead to unpredictable bugs `
) ;
}
return container ;
}
let ssrDirectiveInitialized = false ;
const initDirectivesForSSR = ( ) => {
if ( ! ssrDirectiveInitialized ) {
ssrDirectiveInitialized = true ;
initVModelForSSR ( ) ;
}
} ;
2026-02-11 16:20:26 +00:00
const shouldIgnoreProp = /* @__PURE__ */ makeMap (
2024-01-05 12:14:38 +00:00
` ,key,ref,innerHTML,textContent,ref_key,ref_for `
) ;
function ssrRenderAttrs ( props , tag ) {
let ret = "" ;
2026-02-11 16:20:26 +00:00
for ( let key in props ) {
if ( shouldIgnoreProp ( key ) || isOn ( key ) || tag === "textarea" && key === "value" || // force as property (not rendered in SSR)
key . startsWith ( "." ) ) {
2024-01-05 12:14:38 +00:00
continue ;
}
const value = props [ key ] ;
2026-02-11 16:20:26 +00:00
if ( key . startsWith ( "^" ) ) key = key . slice ( 1 ) ;
if ( key === "class" || key === "className" ) {
2024-01-05 12:14:38 +00:00
ret += ` class=" ${ ssrRenderClass ( value ) } " ` ;
} else if ( key === "style" ) {
ret += ` style=" ${ ssrRenderStyle ( value ) } " ` ;
} else {
ret += ssrRenderDynamicAttr ( key , value , tag ) ;
}
}
return ret ;
}
function ssrRenderDynamicAttr ( key , value , tag ) {
2024-01-31 06:33:19 +00:00
if ( ! isRenderableAttrValue ( value ) ) {
2024-01-05 12:14:38 +00:00
return ` ` ;
}
const attrKey = tag && ( tag . indexOf ( "-" ) > 0 || isSVGTag ( tag ) ) ? key : propsToAttrMap [ key ] || key . toLowerCase ( ) ;
if ( isBooleanAttr ( attrKey ) ) {
return includeBooleanAttr ( value ) ? ` ${ attrKey } ` : ` ` ;
} else if ( isSSRSafeAttrName ( attrKey ) ) {
return value === "" ? ` ${ attrKey } ` : ` ${ attrKey } =" ${ escapeHtml ( value ) } " ` ;
} else {
console . warn (
` [@vue/server-renderer] Skipped rendering unsafe attribute name: ${ attrKey } `
) ;
return ` ` ;
}
}
function ssrRenderAttr ( key , value ) {
2024-01-31 06:33:19 +00:00
if ( ! isRenderableAttrValue ( value ) ) {
2024-01-05 12:14:38 +00:00
return ` ` ;
}
return ` ${ key } =" ${ escapeHtml ( value ) } " ` ;
}
function ssrRenderClass ( raw ) {
return escapeHtml ( normalizeClass ( raw ) ) ;
}
function ssrRenderStyle ( raw ) {
if ( ! raw ) {
return "" ;
}
if ( isString ( raw ) ) {
return escapeHtml ( raw ) ;
}
2026-02-11 16:20:26 +00:00
const styles = normalizeStyle ( ssrResetCssVars ( raw ) ) ;
2024-01-05 12:14:38 +00:00
return escapeHtml ( stringifyStyle ( styles ) ) ;
}
2026-02-11 16:20:26 +00:00
function ssrResetCssVars ( raw ) {
if ( ! isArray ( raw ) && isObject ( raw ) ) {
const res = { } ;
for ( const key in raw ) {
if ( key . startsWith ( ":--" ) ) {
res [ key . slice ( 1 ) ] = normalizeCssVarValue ( raw [ key ] ) ;
} else {
res [ key ] = raw [ key ] ;
}
}
return res ;
}
return raw ;
}
2024-01-05 12:14:38 +00:00
function ssrRenderComponent ( comp , props = null , children = null , parentComponent = null , slotScopeId ) {
return renderComponentVNode (
createVNode ( comp , props , children ) ,
parentComponent ,
slotScopeId
) ;
}
2026-02-11 16:20:26 +00:00
const { ensureValidVNode } = ssrUtils ;
2024-01-05 12:14:38 +00:00
function ssrRenderSlot ( slots , slotName , slotProps , fallbackRenderFn , push , parentComponent , slotScopeId ) {
push ( ` <!--[--> ` ) ;
ssrRenderSlotInner (
slots ,
slotName ,
slotProps ,
fallbackRenderFn ,
push ,
parentComponent ,
slotScopeId
) ;
push ( ` <!--]--> ` ) ;
}
function ssrRenderSlotInner ( slots , slotName , slotProps , fallbackRenderFn , push , parentComponent , slotScopeId , transition ) {
const slotFn = slots [ slotName ] ;
if ( slotFn ) {
const slotBuffer = [ ] ;
const bufferedPush = ( item ) => {
slotBuffer . push ( item ) ;
} ;
const ret = slotFn (
slotProps ,
bufferedPush ,
parentComponent ,
slotScopeId ? " " + slotScopeId : ""
) ;
if ( isArray ( ret ) ) {
2026-02-11 16:20:26 +00:00
const validSlotContent = ensureValidVNode ( ret ) ;
if ( validSlotContent ) {
renderVNodeChildren (
push ,
validSlotContent ,
parentComponent ,
slotScopeId
) ;
} else if ( fallbackRenderFn ) {
fallbackRenderFn ( ) ;
} else if ( transition ) {
push ( ` <!----> ` ) ;
}
2024-01-05 12:14:38 +00:00
} else {
let isEmptySlot = true ;
if ( transition ) {
isEmptySlot = false ;
} else {
for ( let i = 0 ; i < slotBuffer . length ; i ++ ) {
if ( ! isComment ( slotBuffer [ i ] ) ) {
isEmptySlot = false ;
break ;
}
}
}
if ( isEmptySlot ) {
if ( fallbackRenderFn ) {
fallbackRenderFn ( ) ;
}
} else {
let start = 0 ;
let end = slotBuffer . length ;
if ( transition && slotBuffer [ 0 ] === "<!--[-->" && slotBuffer [ end - 1 ] === "<!--]-->" ) {
start ++ ;
end -- ;
}
2026-02-11 16:20:26 +00:00
if ( start < end ) {
for ( let i = start ; i < end ; i ++ ) {
push ( slotBuffer [ i ] ) ;
}
} else if ( transition ) {
push ( ` <!----> ` ) ;
2024-01-05 12:14:38 +00:00
}
}
}
} else if ( fallbackRenderFn ) {
fallbackRenderFn ( ) ;
2026-02-11 16:20:26 +00:00
} else if ( transition ) {
push ( ` <!----> ` ) ;
2024-01-05 12:14:38 +00:00
}
}
2026-02-11 16:20:26 +00:00
const commentTestRE = /^<!--[\s\S]*-->$/ ;
2024-01-05 12:14:38 +00:00
const commentRE = /<!--[^]*?-->/gm ;
function isComment ( item ) {
2026-02-11 16:20:26 +00:00
if ( typeof item !== "string" || ! commentTestRE . test ( item ) ) return false ;
if ( item . length <= 8 ) return true ;
2024-01-05 12:14:38 +00:00
return ! item . replace ( commentRE , "" ) . trim ( ) ;
}
function ssrRenderTeleport ( parentPush , contentRenderFn , target , disabled , parentComponent ) {
parentPush ( "<!--teleport start-->" ) ;
const context = parentComponent . appContext . provides [ ssrContextKey ] ;
const teleportBuffers = context . _ _teleportBuffers || ( context . _ _teleportBuffers = { } ) ;
const targetBuffer = teleportBuffers [ target ] || ( teleportBuffers [ target ] = [ ] ) ;
const bufferIndex = targetBuffer . length ;
let teleportContent ;
if ( disabled ) {
contentRenderFn ( parentPush ) ;
2026-02-11 16:20:26 +00:00
teleportContent = ` <!--teleport start anchor--><!--teleport anchor--> ` ;
2024-01-05 12:14:38 +00:00
} else {
const { getBuffer , push } = createBuffer ( ) ;
2026-02-11 16:20:26 +00:00
push ( ` <!--teleport start anchor--> ` ) ;
2024-01-05 12:14:38 +00:00
contentRenderFn ( push ) ;
push ( ` <!--teleport anchor--> ` ) ;
teleportContent = getBuffer ( ) ;
}
targetBuffer . splice ( bufferIndex , 0 , teleportContent ) ;
parentPush ( "<!--teleport end-->" ) ;
}
function ssrInterpolate ( value ) {
return escapeHtml ( toDisplayString ( value ) ) ;
}
function ssrRenderList ( source , renderItem ) {
if ( isArray ( source ) || isString ( source ) ) {
for ( let i = 0 , l = source . length ; i < l ; i ++ ) {
renderItem ( source [ i ] , i ) ;
}
} else if ( typeof source === "number" ) {
if ( ! Number . isInteger ( source ) ) {
warn ( ` The v-for range expect an integer value but got ${ source } . ` ) ;
return ;
}
for ( let i = 0 ; i < source ; i ++ ) {
renderItem ( i + 1 , i ) ;
}
} else if ( isObject ( source ) ) {
if ( source [ Symbol . iterator ] ) {
const arr = Array . from ( source ) ;
for ( let i = 0 , l = arr . length ; i < l ; i ++ ) {
renderItem ( arr [ i ] , i ) ;
}
} else {
const keys = Object . keys ( source ) ;
for ( let i = 0 , l = keys . length ; i < l ; i ++ ) {
const key = keys [ i ] ;
renderItem ( source [ key ] , key , i ) ;
}
}
}
}
async function ssrRenderSuspense ( push , { default : renderContent } ) {
if ( renderContent ) {
renderContent ( ) ;
} else {
push ( ` <!----> ` ) ;
}
}
function ssrGetDirectiveProps ( instance , dir , value , arg , modifiers = { } ) {
if ( typeof dir !== "function" && dir . getSSRProps ) {
return dir . getSSRProps (
{
dir ,
2026-02-11 16:20:26 +00:00
instance : ssrUtils . getComponentPublicInstance ( instance . $ ) ,
2024-01-05 12:14:38 +00:00
value ,
oldValue : void 0 ,
arg ,
modifiers
} ,
null
) || { } ;
}
return { } ;
}
const ssrLooseEqual = looseEqual ;
function ssrLooseContain ( arr , value ) {
return looseIndexOf ( arr , value ) > - 1 ;
}
function ssrRenderDynamicModel ( type , model , value ) {
switch ( type ) {
case "radio" :
return looseEqual ( model , value ) ? " checked" : "" ;
case "checkbox" :
return ( isArray ( model ) ? ssrLooseContain ( model , value ) : model ) ? " checked" : "" ;
default :
return ssrRenderAttr ( "value" , model ) ;
}
}
function ssrGetDynamicModelProps ( existingProps = { } , model ) {
const { type , value } = existingProps ;
switch ( type ) {
case "radio" :
return looseEqual ( model , value ) ? { checked : true } : null ;
case "checkbox" :
return ( isArray ( model ) ? ssrLooseContain ( model , value ) : model ) ? { checked : true } : null ;
default :
return { value : model } ;
}
}
function ssrCompile ( template , instance ) {
{
throw new Error (
` On-the-fly template compilation is not supported in the ESM build of @vue/server-renderer. All templates must be pre-compiled into render functions. `
) ;
}
}
const {
createComponentInstance ,
setCurrentRenderingInstance ,
setupComponent ,
renderComponentRoot ,
2026-02-11 16:20:26 +00:00
normalizeVNode ,
pushWarningContext ,
popWarningContext
2024-01-05 12:14:38 +00:00
} = ssrUtils ;
function createBuffer ( ) {
let appendable = false ;
const buffer = [ ] ;
return {
getBuffer ( ) {
return buffer ;
} ,
push ( item ) {
const isStringItem = isString ( item ) ;
if ( appendable && isStringItem ) {
buffer [ buffer . length - 1 ] += item ;
2026-02-11 16:20:26 +00:00
return ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
buffer . push ( item ) ;
2024-01-05 12:14:38 +00:00
appendable = isStringItem ;
if ( isPromise ( item ) || isArray ( item ) && item . hasAsync ) {
buffer . hasAsync = true ;
}
}
} ;
}
function renderComponentVNode ( vnode , parentComponent = null , slotScopeId ) {
2026-02-11 16:20:26 +00:00
const instance = vnode . component = createComponentInstance (
vnode ,
parentComponent ,
null
) ;
pushWarningContext ( vnode ) ;
2024-01-05 12:14:38 +00:00
const res = setupComponent (
instance ,
true
/* isSSR */
) ;
2026-02-11 16:20:26 +00:00
popWarningContext ( ) ;
2024-01-05 12:14:38 +00:00
const hasAsyncSetup = isPromise ( res ) ;
2026-02-11 16:20:26 +00:00
let prefetches = instance . sp ;
2024-01-05 12:14:38 +00:00
if ( hasAsyncSetup || prefetches ) {
2026-02-11 16:20:26 +00:00
const p = Promise . resolve ( res ) . then ( ( ) => {
if ( hasAsyncSetup ) prefetches = instance . sp ;
if ( prefetches ) {
return Promise . all (
2024-01-05 12:14:38 +00:00
prefetches . map ( ( prefetch ) => prefetch . call ( instance . proxy ) )
2026-02-11 16:20:26 +00:00
) ;
}
} ) . catch ( NOOP ) ;
2024-01-05 12:14:38 +00:00
return p . then ( ( ) => renderComponentSubTree ( instance , slotScopeId ) ) ;
} else {
return renderComponentSubTree ( instance , slotScopeId ) ;
}
}
function renderComponentSubTree ( instance , slotScopeId ) {
2026-02-11 16:20:26 +00:00
pushWarningContext ( instance . vnode ) ;
2024-01-05 12:14:38 +00:00
const comp = instance . type ;
const { getBuffer , push } = createBuffer ( ) ;
if ( isFunction ( comp ) ) {
let root = renderComponentRoot ( instance ) ;
if ( ! comp . props ) {
for ( const key in instance . attrs ) {
if ( key . startsWith ( ` data-v- ` ) ) {
( root . props || ( root . props = { } ) ) [ key ] = ` ` ;
}
}
}
renderVNode ( push , instance . subTree = root , instance , slotScopeId ) ;
} else {
if ( ( ! instance . render || instance . render === NOOP ) && ! instance . ssrRender && ! comp . ssrRender && isString ( comp . template ) ) {
comp . ssrRender = ssrCompile ( comp . template ) ;
}
const ssrRender = instance . ssrRender || comp . ssrRender ;
if ( ssrRender ) {
let attrs = instance . inheritAttrs !== false ? instance . attrs : void 0 ;
let hasCloned = false ;
let cur = instance ;
while ( true ) {
const scopeId = cur . vnode . scopeId ;
if ( scopeId ) {
if ( ! hasCloned ) {
attrs = { ... attrs } ;
hasCloned = true ;
}
attrs [ scopeId ] = "" ;
}
const parent = cur . parent ;
if ( parent && parent . subTree && parent . subTree === cur . vnode ) {
cur = parent ;
} else {
break ;
}
}
if ( slotScopeId ) {
2026-02-11 16:20:26 +00:00
if ( ! hasCloned ) attrs = { ... attrs } ;
const slotScopeIdList = slotScopeId . trim ( ) . split ( " " ) ;
for ( let i = 0 ; i < slotScopeIdList . length ; i ++ ) {
attrs [ slotScopeIdList [ i ] ] = "" ;
}
2024-01-05 12:14:38 +00:00
}
const prev = setCurrentRenderingInstance ( instance ) ;
try {
ssrRender (
instance . proxy ,
push ,
instance ,
attrs ,
// compiler-optimized bindings
instance . props ,
instance . setupState ,
instance . data ,
instance . ctx
) ;
} finally {
setCurrentRenderingInstance ( prev ) ;
}
} else if ( instance . render && instance . render !== NOOP ) {
renderVNode (
push ,
instance . subTree = renderComponentRoot ( instance ) ,
instance ,
slotScopeId
) ;
} else {
const componentName = comp . name || comp . _ _file || ` <Anonymous> ` ;
warn ( ` Component ${ componentName } is missing template or render function. ` ) ;
push ( ` <!----> ` ) ;
}
}
2026-02-11 16:20:26 +00:00
popWarningContext ( ) ;
2024-01-05 12:14:38 +00:00
return getBuffer ( ) ;
}
function renderVNode ( push , vnode , parentComponent , slotScopeId ) {
2026-02-11 16:20:26 +00:00
const { type , shapeFlag , children , dirs , props } = vnode ;
if ( dirs ) {
vnode . props = applySSRDirectives ( vnode , props , dirs ) ;
}
2024-01-05 12:14:38 +00:00
switch ( type ) {
case Text :
push ( escapeHtml ( children ) ) ;
break ;
case Comment :
push (
children ? ` <!-- ${ escapeHtmlComment ( children ) } --> ` : ` <!----> `
) ;
break ;
case Static :
push ( children ) ;
break ;
case Fragment :
if ( vnode . slotScopeIds ) {
slotScopeId = ( slotScopeId ? slotScopeId + " " : "" ) + vnode . slotScopeIds . join ( " " ) ;
}
push ( ` <!--[--> ` ) ;
renderVNodeChildren (
push ,
children ,
parentComponent ,
slotScopeId
) ;
push ( ` <!--]--> ` ) ;
break ;
default :
if ( shapeFlag & 1 ) {
renderElementVNode ( push , vnode , parentComponent , slotScopeId ) ;
} else if ( shapeFlag & 6 ) {
push ( renderComponentVNode ( vnode , parentComponent , slotScopeId ) ) ;
} else if ( shapeFlag & 64 ) {
renderTeleportVNode ( push , vnode , parentComponent , slotScopeId ) ;
} else if ( shapeFlag & 128 ) {
renderVNode ( push , vnode . ssContent , parentComponent , slotScopeId ) ;
} else {
warn (
"[@vue/server-renderer] Invalid VNode type:" ,
type ,
` ( ${ typeof type } ) `
) ;
}
}
}
function renderVNodeChildren ( push , children , parentComponent , slotScopeId ) {
for ( let i = 0 ; i < children . length ; i ++ ) {
renderVNode ( push , normalizeVNode ( children [ i ] ) , parentComponent , slotScopeId ) ;
}
}
function renderElementVNode ( push , vnode , parentComponent , slotScopeId ) {
const tag = vnode . type ;
2026-02-11 16:20:26 +00:00
let { props , children , shapeFlag , scopeId } = vnode ;
2024-01-05 12:14:38 +00:00
let openTag = ` < ${ tag } ` ;
if ( props ) {
openTag += ssrRenderAttrs ( props , tag ) ;
}
if ( scopeId ) {
openTag += ` ${ scopeId } ` ;
}
let curParent = parentComponent ;
let curVnode = vnode ;
while ( curParent && curVnode === curParent . subTree ) {
curVnode = curParent . vnode ;
if ( curVnode . scopeId ) {
openTag += ` ${ curVnode . scopeId } ` ;
}
curParent = curParent . parent ;
}
if ( slotScopeId ) {
openTag += ` ${ slotScopeId } ` ;
}
push ( openTag + ` > ` ) ;
if ( ! isVoidTag ( tag ) ) {
let hasChildrenOverride = false ;
if ( props ) {
if ( props . innerHTML ) {
hasChildrenOverride = true ;
push ( props . innerHTML ) ;
} else if ( props . textContent ) {
hasChildrenOverride = true ;
push ( escapeHtml ( props . textContent ) ) ;
} else if ( tag === "textarea" && props . value ) {
hasChildrenOverride = true ;
push ( escapeHtml ( props . value ) ) ;
}
}
if ( ! hasChildrenOverride ) {
if ( shapeFlag & 8 ) {
push ( escapeHtml ( children ) ) ;
} else if ( shapeFlag & 16 ) {
renderVNodeChildren (
push ,
children ,
parentComponent ,
slotScopeId
) ;
}
}
push ( ` </ ${ tag } > ` ) ;
}
}
function applySSRDirectives ( vnode , rawProps , dirs ) {
const toMerge = [ ] ;
for ( let i = 0 ; i < dirs . length ; i ++ ) {
const binding = dirs [ i ] ;
const {
dir : { getSSRProps }
} = binding ;
if ( getSSRProps ) {
const props = getSSRProps ( binding , vnode ) ;
2026-02-11 16:20:26 +00:00
if ( props ) toMerge . push ( props ) ;
2024-01-05 12:14:38 +00:00
}
}
return mergeProps ( rawProps || { } , ... toMerge ) ;
}
function renderTeleportVNode ( push , vnode , parentComponent , slotScopeId ) {
const target = vnode . props && vnode . props . to ;
const disabled = vnode . props && vnode . props . disabled ;
if ( ! target ) {
if ( ! disabled ) {
warn ( ` [@vue/server-renderer] Teleport is missing target prop. ` ) ;
}
return [ ] ;
}
if ( ! isString ( target ) ) {
warn (
` [@vue/server-renderer] Teleport target must be a query selector string. `
) ;
return [ ] ;
}
ssrRenderTeleport (
push ,
( push2 ) => {
renderVNodeChildren (
push2 ,
vnode . children ,
parentComponent ,
slotScopeId
) ;
} ,
target ,
disabled || disabled === "" ,
parentComponent
) ;
}
const { isVNode : isVNode$1 } = ssrUtils ;
2026-02-11 16:20:26 +00:00
function nestedUnrollBuffer ( buffer , parentRet , startIndex ) {
if ( ! buffer . hasAsync ) {
return parentRet + unrollBufferSync$1 ( buffer ) ;
}
let ret = parentRet ;
for ( let i = startIndex ; i < buffer . length ; i += 1 ) {
const item = buffer [ i ] ;
if ( isString ( item ) ) {
ret += item ;
continue ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
if ( isPromise ( item ) ) {
return item . then ( ( nestedItem ) => {
buffer [ i ] = nestedItem ;
return nestedUnrollBuffer ( buffer , ret , i ) ;
} ) ;
}
const result = nestedUnrollBuffer ( item , ret , 0 ) ;
if ( isPromise ( result ) ) {
return result . then ( ( nestedItem ) => {
buffer [ i ] = nestedItem ;
return nestedUnrollBuffer ( buffer , "" , i ) ;
} ) ;
}
ret = result ;
2024-01-05 12:14:38 +00:00
}
2026-02-11 16:20:26 +00:00
return ret ;
}
function unrollBuffer$1 ( buffer ) {
return nestedUnrollBuffer ( buffer , "" , 0 ) ;
2024-01-05 12:14:38 +00:00
}
function unrollBufferSync$1 ( buffer ) {
let ret = "" ;
for ( let i = 0 ; i < buffer . length ; i ++ ) {
let item = buffer [ i ] ;
if ( isString ( item ) ) {
ret += item ;
} else {
ret += unrollBufferSync$1 ( item ) ;
}
}
return ret ;
}
async function renderToString ( input , context = { } ) {
if ( isVNode$1 ( input ) ) {
return renderToString ( createApp ( { render : ( ) => input } ) , context ) ;
}
const vnode = createVNode ( input . _component , input . _props ) ;
vnode . appContext = input . _context ;
input . provide ( ssrContextKey , context ) ;
const buffer = await renderComponentVNode ( vnode ) ;
const result = await unrollBuffer$1 ( buffer ) ;
await resolveTeleports ( context ) ;
if ( context . _ _watcherHandles ) {
for ( const unwatch of context . _ _watcherHandles ) {
unwatch ( ) ;
}
}
return result ;
}
async function resolveTeleports ( context ) {
if ( context . _ _teleportBuffers ) {
context . teleports = context . teleports || { } ;
for ( const key in context . _ _teleportBuffers ) {
context . teleports [ key ] = await unrollBuffer$1 (
await Promise . all ( [ context . _ _teleportBuffers [ key ] ] )
) ;
}
}
}
const { isVNode } = ssrUtils ;
async function unrollBuffer ( buffer , stream ) {
if ( buffer . hasAsync ) {
for ( let i = 0 ; i < buffer . length ; i ++ ) {
let item = buffer [ i ] ;
if ( isPromise ( item ) ) {
item = await item ;
}
if ( isString ( item ) ) {
stream . push ( item ) ;
} else {
await unrollBuffer ( item , stream ) ;
}
}
} else {
unrollBufferSync ( buffer , stream ) ;
}
}
function unrollBufferSync ( buffer , stream ) {
for ( let i = 0 ; i < buffer . length ; i ++ ) {
let item = buffer [ i ] ;
if ( isString ( item ) ) {
stream . push ( item ) ;
} else {
unrollBufferSync ( item , stream ) ;
}
}
}
function renderToSimpleStream ( input , context , stream ) {
if ( isVNode ( input ) ) {
return renderToSimpleStream (
createApp ( { render : ( ) => input } ) ,
context ,
stream
) ;
}
const vnode = createVNode ( input . _component , input . _props ) ;
vnode . appContext = input . _context ;
input . provide ( ssrContextKey , context ) ;
Promise . resolve ( renderComponentVNode ( vnode ) ) . then ( ( buffer ) => unrollBuffer ( buffer , stream ) ) . then ( ( ) => resolveTeleports ( context ) ) . then ( ( ) => {
if ( context . _ _watcherHandles ) {
for ( const unwatch of context . _ _watcherHandles ) {
unwatch ( ) ;
}
}
} ) . then ( ( ) => stream . push ( null ) ) . catch ( ( error ) => {
stream . destroy ( error ) ;
} ) ;
return stream ;
}
function renderToStream ( input , context = { } ) {
console . warn (
` [@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead. `
) ;
return renderToNodeStream ( input , context ) ;
}
function renderToNodeStream ( input , context = { } ) {
{
throw new Error (
` ESM build of renderToStream() does not support renderToNodeStream(). Use pipeToNodeWritable() with an existing Node.js Writable stream instance instead. `
) ;
}
}
function pipeToNodeWritable ( input , context = { } , writable ) {
renderToSimpleStream ( input , context , {
push ( content ) {
if ( content != null ) {
writable . write ( content ) ;
} else {
writable . end ( ) ;
}
} ,
destroy ( err ) {
writable . destroy ( err ) ;
}
} ) ;
}
function renderToWebStream ( input , context = { } ) {
if ( typeof ReadableStream !== "function" ) {
throw new Error (
` ReadableStream constructor is not available in the global scope. If the target environment does support web streams, consider using pipeToWebWritable() with an existing WritableStream instance instead. `
) ;
}
const encoder = new TextEncoder ( ) ;
let cancelled = false ;
return new ReadableStream ( {
start ( controller ) {
renderToSimpleStream ( input , context , {
push ( content ) {
2026-02-11 16:20:26 +00:00
if ( cancelled ) return ;
2024-01-05 12:14:38 +00:00
if ( content != null ) {
controller . enqueue ( encoder . encode ( content ) ) ;
} else {
controller . close ( ) ;
}
} ,
destroy ( err ) {
controller . error ( err ) ;
}
} ) ;
} ,
cancel ( ) {
cancelled = true ;
}
} ) ;
}
function pipeToWebWritable ( input , context = { } , writable ) {
const writer = writable . getWriter ( ) ;
const encoder = new TextEncoder ( ) ;
let hasReady = false ;
try {
hasReady = isPromise ( writer . ready ) ;
} catch ( e ) {
}
renderToSimpleStream ( input , context , {
async push ( content ) {
if ( hasReady ) {
await writer . ready ;
}
if ( content != null ) {
return writer . write ( encoder . encode ( content ) ) ;
} else {
return writer . close ( ) ;
}
} ,
destroy ( err ) {
console . log ( err ) ;
writer . close ( ) ;
}
} ) ;
}
initDirectivesForSSR ( ) ;
export { pipeToNodeWritable , pipeToWebWritable , renderToNodeStream , renderToSimpleStream , renderToStream , renderToString , renderToWebStream , ssrGetDirectiveProps , ssrGetDynamicModelProps , includeBooleanAttr as ssrIncludeBooleanAttr , ssrInterpolate , ssrLooseContain , ssrLooseEqual , ssrRenderAttr , ssrRenderAttrs , ssrRenderClass , ssrRenderComponent , ssrRenderDynamicAttr , ssrRenderDynamicModel , ssrRenderList , ssrRenderSlot , ssrRenderSlotInner , ssrRenderStyle , ssrRenderSuspense , ssrRenderTeleport , renderVNode as ssrRenderVNode } ;