vue-component-register
Version:
Allow components to register their subComponents.
78 lines (64 loc) • 2.34 kB
JavaScript
/*!
* vue-component-register v1.1.0
* (c) 2018-present fjc0k <fjc0kb@gmail.com> (https://github.com/fjc0k)
* Released under the MIT License.
*/
var extractSubComponents = function extractSubComponents(componentTag, component, extractedSubComponents) {
if (extractedSubComponents === void 0) {
extractedSubComponents = [];
}
var subComponents = component.subComponents;
if (subComponents && typeof subComponents === 'object') {
Object.keys(subComponents).forEach(function (subComponentName) {
var subComponentTag = "" + componentTag + subComponentName;
var subComponent = subComponents[subComponentName];
extractedSubComponents.push([subComponentTag, subComponent]);
extractSubComponents(subComponentTag, subComponent, extractedSubComponents);
});
}
return extractedSubComponents;
};
var normalizeComponents = function normalizeComponents(components, normalizedComponents) {
if (normalizedComponents === void 0) {
normalizedComponents = [];
}
Object.keys(components).forEach(function (componentTag) {
var component = components[componentTag];
normalizedComponents.push([componentTag, component]);
extractSubComponents(componentTag, component, normalizedComponents);
});
return normalizedComponents;
};
var componentRegister = {
install: function install(Vue) {
// Global register
var registerComponent = Vue.component;
Vue.component = function () {
if (arguments[1]) {
extractSubComponents(arguments[0], arguments[1]).forEach(function (_ref) {
var componentTag = _ref[0],
component = _ref[1];
registerComponent.apply(Vue, [componentTag, component]);
});
}
return registerComponent.apply(Vue, arguments);
}; // Component-level register
Vue.mixin({
beforeCreate: function beforeCreate() {
var opts = this.$options;
if (opts.components) {
normalizeComponents(opts.components).forEach(function (_ref2) {
var componentTag = _ref2[0],
component = _ref2[1];
opts.components[componentTag] = component;
});
}
}
});
}
};
/* istanbul ignore if */
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(componentRegister);
}
export default componentRegister;