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 } } }) }