// 使用白名单过滤（前期有一批自定义组件使用了 uni-）
import tags from 'uni-helpers/tags'

import {
  hasLifecycleHook
} from 'uni-helpers/index'

export default function initVue (Vue) {
  Vue.config.errorHandler = function (err, vm, info) {
    Vue.util.warn(`Error in ${info}: "${err.toString()}"`, vm)
    const app = typeof getApp === 'function' && getApp()
    if (app && hasLifecycleHook(app.$options, 'onError')) {
      app.__call_hook('onError', err)
    } else {
      if (__PLATFORM__ === 'app-plus' && process.env.NODE_ENV !== 'production') {
        console.error(`
  ${err.message}
  ${err.stack}
  `)
      } else {
        console.error(err)
      }
    }
  }

  const oldIsReservedTag = Vue.config.isReservedTag

  Vue.config.isReservedTag = function (tag) {
    return tags.indexOf(tag) !== -1 || oldIsReservedTag(tag)
  }

  Vue.config.ignoredElements = tags

  const oldGetTagNamespace = Vue.config.getTagNamespace

  const conflictTags = ['switch', 'image', 'text', 'view']

  Vue.config.getTagNamespace = function (tag) {
    if (~conflictTags.indexOf(tag)) { // svg 部分标签名称与 uni 标签冲突
      return false
    }
    return oldGetTagNamespace(tag)
  }
}

@@ -124,16 +124,62 @@
 dex'%0D%0A%0D%0A
+import %7B%0D%0A  toRawType%0D%0A%7D from 'uni-shared'%0D%0A%0D%0A
 export d
@@ -263,24 +263,60 @@
 m, info) %7B%0D%0A
+    const errType = toRawType(err)%0D%0A
     Vue.util
@@ -343,16 +343,38 @@
 fo%7D: %22$%7B
+errType === 'Error' ? 
 err.toSt
@@ -379,16 +379,22 @@
 String()
+ : err
 %7D%22%60, vm)
@@ -563,24 +563,24 @@
   %7D else %7B%0D%0A
-
       if (__
@@ -645,16 +645,39 @@
 duction'
+ && errType === 'Error'
 ) %7B%0D%0A   
@@ -1317,9 +1317,10 @@
 %0D%0A  %7D%0D%0A%7D
+%0D
 %0A

throw undefined 或者 reject undefined 时报错的Bug