import { no, noop, identity } from 'shared/util' import { LIFECYCLE_HOOKS } from 'shared/constants' import type { Component } from 'types/component' /** * @internal */ export interface Config { // user optionMergeStrategies: { [key: string]: Function } silent: boolean productionTip: boolean performance: boolean devtools: boolean errorHandler?: (err: Error, vm: Component | null, info: string) => void warnHandler?: (msg: string, vm: Component | null, trace: string) => void ignoredElements: Array keyCodes: { [key: string]: number | Array } // platform isReservedTag: (x: string) => boolean | undefined isReservedAttr: (x: string) => true | undefined parsePlatformTagName: (x: string) => string isUnknownElement: (x: string) => boolean getTagNamespace: (x: string) => string | undefined mustUseProp: (tag: string, type?: string | null, name?: string) => boolean // private async: boolean // legacy _lifecycleHooks: Array } export default { /** * Option merge strategies (used in core/util/options) */ // $flow-disable-line optionMergeStrategies: Object.create(null), /** * Whether to suppress warnings. */ silent: false, /** * Show production mode tip message on boot? */ productionTip: __DEV__, /** * Whether to enable devtools */ devtools: __DEV__, /** * Whether to record perf */ performance: false, /** * Error handler for watcher errors */ errorHandler: null, /** * Warn handler for watcher warns */ warnHandler: null, /** * Ignore certain custom elements */ ignoredElements: [], /** * Custom user key aliases for v-on */ // $flow-disable-line keyCodes: Object.create(null), /** * Check if a tag is reserved so that it cannot be registered as a * component. This is platform-dependent and may be overwritten. */ isReservedTag: no, /** * Check if an attribute is reserved so that it cannot be used as a component * prop. This is platform-dependent and may be overwritten. */ isReservedAttr: no, /** * Check if a tag is an unknown element. * Platform-dependent. */ isUnknownElement: no, /** * Get the namespace of an element */ getTagNamespace: noop, /** * Parse the real tag name for the specific platform. */ parsePlatformTagName: identity, /** * Check if an attribute must be bound using property, e.g. value * Platform-dependent. */ mustUseProp: no, /** * Perform updates asynchronously. Intended to be used by Vue Test Utils * This will significantly reduce performance if set to false. */ async: true, /** * Exposed for legacy reasons */ _lifecycleHooks: LIFECYCLE_HOOKS } as unknown as Config