@@ -972,25 +972,23 @@ export const internalOptionMergeStrats: Record<string, Function> = {
972
972
methods : mergeObjectOptions ,
973
973
computed : mergeObjectOptions ,
974
974
// lifecycle
975
- beforeCreate : mergeHook ,
976
- created : mergeHook ,
977
- beforeMount : mergeHook ,
978
- mounted : mergeHook ,
979
- beforeUpdate : mergeHook ,
980
- updated : mergeHook ,
981
- beforeDestroy : mergeHook ,
982
- destroyed : mergeHook ,
983
- activated : mergeHook ,
984
- deactivated : mergeHook ,
985
- errorCaptured : mergeHook ,
986
- serverPrefetch : mergeHook ,
975
+ beforeCreate : mergeAsArray ,
976
+ created : mergeAsArray ,
977
+ beforeMount : mergeAsArray ,
978
+ mounted : mergeAsArray ,
979
+ beforeUpdate : mergeAsArray ,
980
+ updated : mergeAsArray ,
981
+ beforeDestroy : mergeAsArray ,
982
+ destroyed : mergeAsArray ,
983
+ activated : mergeAsArray ,
984
+ deactivated : mergeAsArray ,
985
+ errorCaptured : mergeAsArray ,
986
+ serverPrefetch : mergeAsArray ,
987
987
// assets
988
988
components : mergeObjectOptions ,
989
989
directives : mergeObjectOptions ,
990
- // watch has special merge behavior in v2, but isn't actually needed in v3.
991
- // since we are only exposing these for compat and nobody should be relying
992
- // on the watch-specific behavior, just expose the object merge strat.
993
- watch : mergeObjectOptions ,
990
+ // watch
991
+ watch : mergeWatchOptions ,
994
992
// provide / inject
995
993
provide : mergeDataFn ,
996
994
inject : mergeInject
@@ -1038,13 +1036,23 @@ function normalizeInject(
1038
1036
return raw
1039
1037
}
1040
1038
1041
- function mergeHook (
1042
- to : Function [ ] | Function | undefined ,
1043
- from : Function | Function [ ]
1044
- ) {
1039
+ function mergeAsArray < T = Function > ( to : T [ ] | T | undefined , from : T | T [ ] ) {
1045
1040
return to ? [ ...new Set ( [ ] . concat ( to as any , from as any ) ) ] : from
1046
1041
}
1047
1042
1048
1043
function mergeObjectOptions ( to : Object | undefined , from : Object | undefined ) {
1049
1044
return to ? extend ( extend ( Object . create ( null ) , to ) , from ) : from
1050
1045
}
1046
+
1047
+ function mergeWatchOptions (
1048
+ to : ComponentWatchOptions | undefined ,
1049
+ from : ComponentWatchOptions | undefined
1050
+ ) {
1051
+ if ( ! to ) return from
1052
+ if ( ! from ) return to
1053
+ const merged = extend ( Object . create ( null ) , to )
1054
+ for ( const key in from ) {
1055
+ merged [ key ] = mergeAsArray ( to [ key ] , from [ key ] )
1056
+ }
1057
+ return merged
1058
+ }
0 commit comments