import { ASSET_TYPES } from 'shared/constants'
|
import type { GlobalAPI } from 'types/global-api'
|
import { isFunction, isPlainObject, validateComponentName } from '../util/index'
|
|
export function initAssetRegisters(Vue: GlobalAPI) {
|
/**
|
* Create asset registration methods.
|
*/
|
ASSET_TYPES.forEach(type => {
|
// @ts-expect-error function is not exact same type
|
Vue[type] = function (
|
id: string,
|
definition?: Function | Object
|
): Function | Object | void {
|
if (!definition) {
|
return this.options[type + 's'][id]
|
} else {
|
/* istanbul ignore if */
|
if (__DEV__ && type === 'component') {
|
validateComponentName(id)
|
}
|
if (type === 'component' && isPlainObject(definition)) {
|
// @ts-expect-error
|
definition.name = definition.name || id
|
definition = this.options._base.extend(definition)
|
}
|
if (type === 'directive' && isFunction(definition)) {
|
definition = { bind: definition, update: definition }
|
}
|
this.options[type + 's'][id] = definition
|
return definition
|
}
|
}
|
})
|
}
|