123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /* @flow */
- import config from '../config'
- import { noop } from 'shared/util'
- export let warn = noop
- export let tip = noop
- export let generateComponentTrace = (noop: any) // work around flow check
- export let formatComponentName = (noop: any)
- if (process.env.NODE_ENV !== 'production') {
- const hasConsole = typeof console !== 'undefined'
- const classifyRE = /(?:^|[-_])(\w)/g
- const classify = str => str
- .replace(classifyRE, c => c.toUpperCase())
- .replace(/[-_]/g, '')
- warn = (msg, vm) => {
- const trace = vm ? generateComponentTrace(vm) : ''
- if (config.warnHandler) {
- config.warnHandler.call(null, msg, vm, trace)
- } else if (hasConsole && (!config.silent)) {
- console.error(`[Vue warn]: ${msg}${trace}`)
- }
- }
- tip = (msg, vm) => {
- if (hasConsole && (!config.silent)) {
- console.warn(`[Vue tip]: ${msg}` + (
- vm ? generateComponentTrace(vm) : ''
- ))
- }
- }
- formatComponentName = (vm, includeFile) => {
- if (vm.$root === vm) {
- return '<Root>'
- }
- const options = typeof vm === 'function' && vm.cid != null
- ? vm.options
- : vm._isVue
- ? vm.$options || vm.constructor.options
- : vm
- let name = options.name || options._componentTag
- const file = options.__file
- if (!name && file) {
- const match = file.match(/([^/\\]+)\.vue$/)
- name = match && match[1]
- }
- return (
- (name ? `<${classify(name)}>` : `<Anonymous>`) +
- (file && includeFile !== false ? ` at ${file}` : '')
- )
- }
- const repeat = (str, n) => {
- let res = ''
- while (n) {
- if (n % 2 === 1) res += str
- if (n > 1) str += str
- n >>= 1
- }
- return res
- }
- generateComponentTrace = vm => {
- if (vm._isVue && vm.$parent) {
- const tree = []
- let currentRecursiveSequence = 0
- while (vm) {
- if (tree.length > 0) {
- const last = tree[tree.length - 1]
- if (last.constructor === vm.constructor) {
- currentRecursiveSequence++
- vm = vm.$parent
- continue
- } else if (currentRecursiveSequence > 0) {
- tree[tree.length - 1] = [last, currentRecursiveSequence]
- currentRecursiveSequence = 0
- }
- }
- tree.push(vm)
- vm = vm.$parent
- }
- return '\n\nfound in\n\n' + tree
- .map((vm, i) => `${
- i === 0 ? '---> ' : repeat(' ', 5 + i * 2)
- }${
- Array.isArray(vm)
- ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
- : formatComponentName(vm)
- }`)
- .join('\n')
- } else {
- return `\n\n(found in ${formatComponentName(vm)})`
- }
- }
- }
|