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.
98 lines
2.7 KiB
98 lines
2.7 KiB
/* 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 |
|
} |
|
}
|
|
|