wip: more compat tweaks
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user