import Vue, { VueConstructor, PluginObject } from 'vue'; import { capitalize } from 'lodash'; import { PREFIX } from '../config'; export function withInstall(comp: T, dep?: PluginObject) { const c = comp as any; const name = c?.options?.name || c.name; c.install = (Vue: VueConstructor, config?: object) => { const installConfig = { prefix: PREFIX, ...config, }; // const defaultPrefix = capitalize(prefix) let componentName = name.replace('-mapprops', ''); componentName = capitalize(installConfig.prefix) + componentName; Vue.component(componentName, comp); }; if (dep && (Vue as any)?._installedPlugins?.indexOf(dep) === -1) { Vue.use(dep); } return comp as T & PluginObject; } export default withInstall;