vue3-yuanma/packages/runtime-core/src/compat/instance.ts

101 lines
2.9 KiB
TypeScript
Raw Normal View History

2021-04-20 13:25:12 +00:00
import { extend, NOOP, toDisplayString, toNumber } from '@vue/shared'
2021-04-05 22:13:29 +00:00
import { PublicPropertiesMap } from '../componentPublicInstance'
2021-04-08 14:06:12 +00:00
import { getCompatChildren } from './instanceChildren'
2021-04-10 03:51:50 +00:00
import {
DeprecationTypes,
2021-04-10 03:51:50 +00:00
assertCompatEnabled,
isCompatEnabled
} from './compatConfig'
2021-04-08 14:06:12 +00:00
import { off, on, once } from './instanceEventEmitter'
import { getCompatListeners } from './instanceListeners'
2021-04-08 14:41:25 +00:00
import { shallowReadonly } from '@vue/reactivity'
2021-04-09 22:52:14 +00:00
import { legacySlotProxyHandlers } from './component'
2021-04-20 13:25:12 +00:00
import { compatH } from './renderFn'
2021-04-21 19:09:18 +00:00
import { createCommentVNode, createTextVNode } from '../vnode'
import { renderList } from '../helpers/renderList'
2021-04-20 13:25:12 +00:00
import {
2021-04-21 19:09:18 +00:00
legacyBindObjectListeners,
2021-04-20 13:25:12 +00:00
legacyBindObjectProps,
2021-04-21 19:09:18 +00:00
legacyCheckKeyCodes,
2021-04-20 13:25:12 +00:00
legacyRenderSlot,
2021-04-21 19:09:18 +00:00
legacyRenderStatic,
legacyresolveScopedSlots
2021-04-20 13:25:12 +00:00
} from './renderHelpers'
2021-04-05 22:13:29 +00:00
export function installCompatInstanceProperties(map: PublicPropertiesMap) {
const set = (target: any, key: any, val: any) => {
target[key] = val
}
const del = (target: any, key: any) => {
delete target[key]
}
extend(map, {
2021-04-09 22:52:14 +00:00
$set: i => {
assertCompatEnabled(DeprecationTypes.INSTANCE_SET, i)
2021-04-05 22:13:29 +00:00
return set
},
2021-04-08 14:21:14 +00:00
2021-04-09 22:52:14 +00:00
$delete: i => {
assertCompatEnabled(DeprecationTypes.INSTANCE_DELETE, i)
2021-04-05 22:13:29 +00:00
return del
},
2021-04-08 14:21:14 +00:00
2021-04-05 22:13:29 +00:00
$mount: i => {
2021-04-09 22:52:14 +00:00
assertCompatEnabled(
DeprecationTypes.GLOBAL_MOUNT,
null /* this warning is global */
)
2021-04-05 22:13:29 +00:00
// root mount override from ./global.ts in installCompatMount
return i.ctx._compat_mount || NOOP
},
2021-04-08 14:21:14 +00:00
2021-04-05 22:13:29 +00:00
$destroy: i => {
2021-04-09 22:52:14 +00:00
assertCompatEnabled(DeprecationTypes.INSTANCE_DESTROY, i)
2021-04-05 22:13:29 +00:00
// root destroy override from ./global.ts in installCompatMount
return i.ctx._compat_destroy || NOOP
2021-04-06 19:58:12 +00:00
},
2021-04-08 14:21:14 +00:00
2021-04-09 22:52:14 +00:00
// overrides existing accessor
$slots: i => {
2021-04-11 15:15:40 +00:00
if (
isCompatEnabled(DeprecationTypes.RENDER_FUNCTION, i) &&
i.render &&
i.render._compatWrapped
) {
2021-04-09 22:52:14 +00:00
return new Proxy(i.slots, legacySlotProxyHandlers)
}
2021-04-10 03:51:50 +00:00
return __DEV__ ? shallowReadonly(i.slots) : i.slots
2021-04-09 22:52:14 +00:00
},
2021-04-08 14:21:14 +00:00
$scopedSlots: i => {
2021-04-09 22:52:14 +00:00
assertCompatEnabled(DeprecationTypes.INSTANCE_SCOPED_SLOTS, i)
2021-04-08 14:41:25 +00:00
return __DEV__ ? shallowReadonly(i.slots) : i.slots
},
2021-04-06 19:58:12 +00:00
$on: i => on.bind(null, i),
$once: i => once.bind(null, i),
2021-04-06 20:51:11 +00:00
$off: i => off.bind(null, i),
2021-04-08 14:21:14 +00:00
2021-04-08 14:06:12 +00:00
$children: getCompatChildren,
2021-04-20 13:25:12 +00:00
$listeners: getCompatListeners,
// v2 render helpers
$createElement: () => compatH,
_self: i => i.proxy,
_c: () => compatH,
_n: () => toNumber,
_s: () => toDisplayString,
_l: () => renderList,
_t: i => legacyRenderSlot.bind(null, i),
_b: () => legacyBindObjectProps,
_e: () => createCommentVNode,
_v: () => createTextVNode,
2021-04-21 19:09:18 +00:00
_m: i => legacyRenderStatic.bind(null, i),
_g: () => legacyBindObjectListeners,
_u: () => legacyresolveScopedSlots,
_k: i => legacyCheckKeyCodes.bind(null, i)
2021-04-05 22:13:29 +00:00
} as PublicPropertiesMap)
}