wip: more compat tweaks

This commit is contained in:
Evan You
2021-04-22 09:49:25 -04:00
parent 12abd4af85
commit 98bc9a26e9
5 changed files with 62 additions and 13 deletions

View File

@@ -109,6 +109,8 @@ export function createCompatVue(
} as any
const singletonApp = createApp({})
// @ts-ignore
singletonApp.prototype = singletonApp.config.globalProperties
function createCompatApp(options: ComponentOptions = {}, Ctor: any) {
assertCompatEnabled(DeprecationTypes.GLOBAL_MOUNT, null)
@@ -145,7 +147,10 @@ export function createCompatVue(
// copy prototype augmentations as config.globalProperties
if (isCompatEnabled(DeprecationTypes.GLOBAL_PROTOTYPE, null)) {
app.config.globalProperties = Ctor.prototype
app.config.globalProperties = extend(
Object.create(Ctor.prototype),
singletonApp.config.globalProperties
)
}
let hasPrototypeAugmentations = false
for (const key in Ctor.prototype) {

View File

@@ -1,4 +1,11 @@
import { extend, NOOP, toDisplayString, toNumber } from '@vue/shared'
import {
extend,
looseEqual,
looseIndexOf,
NOOP,
toDisplayString,
toNumber
} from '@vue/shared'
import { PublicPropertiesMap } from '../componentPublicInstance'
import { getCompatChildren } from './instanceChildren'
import {
@@ -14,13 +21,17 @@ import { compatH } from './renderFn'
import { createCommentVNode, createTextVNode } from '../vnode'
import { renderList } from '../helpers/renderList'
import {
legacyBindDynamicKeys,
legacyBindObjectListeners,
legacyBindObjectProps,
legacyCheckKeyCodes,
legacyMarkOnce,
legacyPrependModifier,
legacyRenderSlot,
legacyRenderStatic,
legacyresolveScopedSlots
} from './renderHelpers'
import { resolveFilter } from '../helpers/resolveAssets'
export function installCompatInstanceProperties(map: PublicPropertiesMap) {
const set = (target: any, key: any, val: any) => {
@@ -85,16 +96,22 @@ export function installCompatInstanceProperties(map: PublicPropertiesMap) {
$createElement: () => compatH,
_self: i => i.proxy,
_c: () => compatH,
_o: () => legacyMarkOnce,
_n: () => toNumber,
_s: () => toDisplayString,
_l: () => renderList,
_t: i => legacyRenderSlot.bind(null, i),
_b: () => legacyBindObjectProps,
_e: () => createCommentVNode,
_v: () => createTextVNode,
_q: () => looseEqual,
_i: () => looseIndexOf,
_m: i => legacyRenderStatic.bind(null, i),
_g: () => legacyBindObjectListeners,
_f: () => resolveFilter,
_k: i => legacyCheckKeyCodes.bind(null, i),
_b: () => legacyBindObjectProps,
_v: () => createTextVNode,
_e: () => createCommentVNode,
_u: () => legacyresolveScopedSlots,
_k: i => legacyCheckKeyCodes.bind(null, i)
_g: () => legacyBindObjectListeners,
_d: () => legacyBindDynamicKeys,
_p: () => legacyPrependModifier
} as PublicPropertiesMap)
}

View File

@@ -162,3 +162,21 @@ function isKeyNotMatch<T>(expect: T | T[], actual: T): boolean {
return expect !== actual
}
}
export function legacyMarkOnce(tree: VNode) {
return tree
}
export function legacyBindDynamicKeys(props: any, values: any[]) {
for (let i = 0; i < values.length; i += 2) {
const key = values[i]
if (typeof key === 'string' && key) {
props[values[i]] = values[i + 1]
}
}
return props
}
export function legacyPrependModifier(value: any, symbol: string) {
return typeof value === 'string' ? symbol + value : value
}