2019-11-01 23:32:53 +08:00
|
|
|
import {
|
|
|
|
createRenderer,
|
|
|
|
warn,
|
2020-01-24 04:05:38 +08:00
|
|
|
RootRenderFunction,
|
|
|
|
CreateAppFunction
|
2019-11-01 23:32:53 +08:00
|
|
|
} from '@vue/runtime-core'
|
2019-06-20 21:28:37 +08:00
|
|
|
import { nodeOps } from './nodeOps'
|
|
|
|
import { patchProp } from './patchProp'
|
2019-10-22 04:25:16 +08:00
|
|
|
// Importing from the compiler, will be tree-shaken in prod
|
2019-11-07 04:22:46 +08:00
|
|
|
import { isFunction, isString, isHTMLTag, isSVGTag } from '@vue/shared'
|
2018-09-19 23:35:38 +08:00
|
|
|
|
2019-11-01 23:32:53 +08:00
|
|
|
const { render: baseRender, createApp: baseCreateApp } = createRenderer({
|
2019-06-20 21:28:37 +08:00
|
|
|
patchProp,
|
|
|
|
...nodeOps
|
2019-09-07 04:58:32 +08:00
|
|
|
})
|
2019-09-03 04:09:34 +08:00
|
|
|
|
2019-11-01 23:32:53 +08:00
|
|
|
// use explicit type casts here to avoid import() calls in rolled-up d.ts
|
|
|
|
export const render = baseRender as RootRenderFunction<Node, Element>
|
|
|
|
|
2020-01-24 04:05:38 +08:00
|
|
|
export const createApp: CreateAppFunction<Element> = (...args) => {
|
|
|
|
const app = baseCreateApp(...args)
|
2019-10-25 09:58:34 +08:00
|
|
|
|
|
|
|
if (__DEV__) {
|
|
|
|
// Inject `isNativeTag`
|
|
|
|
// this is used for component name validation (dev only)
|
|
|
|
Object.defineProperty(app.config, 'isNativeTag', {
|
|
|
|
value: (tag: string) => isHTMLTag(tag) || isSVGTag(tag),
|
|
|
|
writable: false
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2020-01-24 04:05:38 +08:00
|
|
|
const { mount } = app
|
|
|
|
app.mount = (container): any => {
|
2019-10-25 09:58:34 +08:00
|
|
|
if (isString(container)) {
|
|
|
|
container = document.querySelector(container)!
|
|
|
|
if (!container) {
|
|
|
|
__DEV__ &&
|
|
|
|
warn(`Failed to mount app: mount target selector returned null.`)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
2020-01-24 10:01:56 +08:00
|
|
|
const component = app._component
|
2019-10-25 09:58:34 +08:00
|
|
|
if (
|
|
|
|
__RUNTIME_COMPILE__ &&
|
|
|
|
!isFunction(component) &&
|
|
|
|
!component.render &&
|
|
|
|
!component.template
|
|
|
|
) {
|
|
|
|
component.template = container.innerHTML
|
|
|
|
}
|
|
|
|
// clear content before mounting
|
|
|
|
container.innerHTML = ''
|
2020-01-24 04:05:38 +08:00
|
|
|
return mount(container)
|
2020-01-17 01:23:47 +08:00
|
|
|
}
|
|
|
|
|
2019-10-15 03:36:30 +08:00
|
|
|
return app
|
|
|
|
}
|
|
|
|
|
2019-11-29 07:41:01 +08:00
|
|
|
// DOM-only runtime directive helpers
|
2019-10-11 06:02:51 +08:00
|
|
|
export {
|
|
|
|
vModelText,
|
|
|
|
vModelCheckbox,
|
|
|
|
vModelRadio,
|
|
|
|
vModelSelect,
|
|
|
|
vModelDynamic
|
|
|
|
} from './directives/vModel'
|
2019-10-19 04:20:45 +08:00
|
|
|
export { withModifiers, withKeys } from './directives/vOn'
|
2019-11-29 07:41:01 +08:00
|
|
|
export { vShow } from './directives/vShow'
|
2019-10-14 12:33:23 +08:00
|
|
|
|
2019-11-23 02:15:59 +08:00
|
|
|
// DOM-only components
|
2019-11-25 05:00:46 +08:00
|
|
|
export { Transition, TransitionProps } from './components/Transition'
|
2019-11-29 07:41:01 +08:00
|
|
|
export {
|
|
|
|
TransitionGroup,
|
|
|
|
TransitionGroupProps
|
|
|
|
} from './components/TransitionGroup'
|
2019-11-25 11:04:26 +08:00
|
|
|
|
2018-09-20 09:51:21 +08:00
|
|
|
// re-export everything from core
|
2019-08-20 21:58:10 +08:00
|
|
|
// h, Component, reactivity API, nextTick, flags & types
|
2018-10-27 03:44:50 +08:00
|
|
|
export * from '@vue/runtime-core'
|