You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.7 KiB
97 lines
2.7 KiB
1 month ago
|
/* globals __VUE_SSR_CONTEXT__ */
|
||
|
|
||
|
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
|
||
|
// This module is a runtime utility for cleaner component module output and will
|
||
|
// be included in the final webpack user bundle.
|
||
|
|
||
|
export default function normalizeComponent(
|
||
|
scriptExports,
|
||
|
render,
|
||
|
staticRenderFns,
|
||
|
functionalTemplate,
|
||
|
injectStyles,
|
||
|
scopeId,
|
||
|
moduleIdentifier /* server only */,
|
||
|
shadowMode /* vue-cli only */
|
||
|
) {
|
||
|
// Vue.extend constructor export interop
|
||
|
var options =
|
||
|
typeof scriptExports === 'function' ? scriptExports.options : scriptExports
|
||
|
|
||
|
// render functions
|
||
|
if (render) {
|
||
|
options.render = render
|
||
|
options.staticRenderFns = staticRenderFns
|
||
|
options._compiled = true
|
||
|
}
|
||
|
|
||
|
// functional template
|
||
|
if (functionalTemplate) {
|
||
|
options.functional = true
|
||
|
}
|
||
|
|
||
|
// scopedId
|
||
|
if (scopeId) {
|
||
|
options._scopeId = 'data-v-' + scopeId
|
||
|
}
|
||
|
|
||
|
var hook
|
||
|
if (moduleIdentifier) {
|
||
|
// server build
|
||
|
hook = function (context) {
|
||
|
// 2.3 injection
|
||
|
context =
|
||
|
context || // cached call
|
||
|
(this.$vnode && this.$vnode.ssrContext) || // stateful
|
||
|
(this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
|
||
|
// 2.2 with runInNewContext: true
|
||
|
if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
|
||
|
context = __VUE_SSR_CONTEXT__
|
||
|
}
|
||
|
// inject component styles
|
||
|
if (injectStyles) {
|
||
|
injectStyles.call(this, context)
|
||
|
}
|
||
|
// register component module identifier for async chunk inferrence
|
||
|
if (context && context._registeredComponents) {
|
||
|
context._registeredComponents.add(moduleIdentifier)
|
||
|
}
|
||
|
}
|
||
|
// used by ssr in case component is cached and beforeCreate
|
||
|
// never gets called
|
||
|
options._ssrRegister = hook
|
||
|
} else if (injectStyles) {
|
||
|
hook = shadowMode
|
||
|
? function () {
|
||
|
injectStyles.call(
|
||
|
this,
|
||
|
(options.functional ? this.parent : this).$root.$options.shadowRoot
|
||
|
)
|
||
|
}
|
||
|
: injectStyles
|
||
|
}
|
||
|
|
||
|
if (hook) {
|
||
|
if (options.functional) {
|
||
|
// for template-only hot-reload because in that case the render fn doesn't
|
||
|
// go through the normalizer
|
||
|
options._injectStyles = hook
|
||
|
// register for functional component in vue file
|
||
|
var originalRender = options.render
|
||
|
options.render = function renderWithStyleInjection(h, context) {
|
||
|
hook.call(context)
|
||
|
return originalRender(h, context)
|
||
|
}
|
||
|
} else {
|
||
|
// inject component registration as beforeCreate hook
|
||
|
var existing = options.beforeCreate
|
||
|
options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
exports: scriptExports,
|
||
|
options: options
|
||
|
}
|
||
|
}
|