index.iife.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. var VueDemi = (function (VueDemi, Vue, VueCompositionAPI) {
  2. if (VueDemi.install) {
  3. return VueDemi
  4. }
  5. if (!Vue) {
  6. console.error('[vue-demi] no Vue instance found, please be sure to import `vue` before `vue-demi`.')
  7. return VueDemi
  8. }
  9. // Vue 2.7
  10. if (Vue.version.slice(0, 4) === '2.7.') {
  11. for (var key in Vue) {
  12. VueDemi[key] = Vue[key]
  13. }
  14. VueDemi.isVue2 = true
  15. VueDemi.isVue3 = false
  16. VueDemi.install = function () {}
  17. VueDemi.Vue = Vue
  18. VueDemi.Vue2 = Vue
  19. VueDemi.version = Vue.version
  20. VueDemi.warn = Vue.util.warn
  21. VueDemi.hasInjectionContext = () => !!VueDemi.getCurrentInstance()
  22. function createApp(rootComponent, rootProps) {
  23. var vm
  24. var provide = {}
  25. var app = {
  26. config: Vue.config,
  27. use: Vue.use.bind(Vue),
  28. mixin: Vue.mixin.bind(Vue),
  29. component: Vue.component.bind(Vue),
  30. provide: function (key, value) {
  31. provide[key] = value
  32. return this
  33. },
  34. directive: function (name, dir) {
  35. if (dir) {
  36. Vue.directive(name, dir)
  37. return app
  38. } else {
  39. return Vue.directive(name)
  40. }
  41. },
  42. mount: function (el, hydrating) {
  43. if (!vm) {
  44. vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))
  45. vm.$mount(el, hydrating)
  46. return vm
  47. } else {
  48. return vm
  49. }
  50. },
  51. unmount: function () {
  52. if (vm) {
  53. vm.$destroy()
  54. vm = undefined
  55. }
  56. },
  57. }
  58. return app
  59. }
  60. VueDemi.createApp = createApp
  61. }
  62. // Vue 2.6.x
  63. else if (Vue.version.slice(0, 2) === '2.') {
  64. if (VueCompositionAPI) {
  65. for (var key in VueCompositionAPI) {
  66. VueDemi[key] = VueCompositionAPI[key]
  67. }
  68. VueDemi.isVue2 = true
  69. VueDemi.isVue3 = false
  70. VueDemi.install = function () {}
  71. VueDemi.Vue = Vue
  72. VueDemi.Vue2 = Vue
  73. VueDemi.version = Vue.version
  74. VueDemi.hasInjectionContext = () => !!VueDemi.getCurrentInstance()
  75. } else {
  76. console.error('[vue-demi] no VueCompositionAPI instance found, please be sure to import `@vue/composition-api` before `vue-demi`.')
  77. }
  78. }
  79. // Vue 3
  80. else if (Vue.version.slice(0, 2) === '3.') {
  81. for (var key in Vue) {
  82. VueDemi[key] = Vue[key]
  83. }
  84. VueDemi.isVue2 = false
  85. VueDemi.isVue3 = true
  86. VueDemi.install = function () {}
  87. VueDemi.Vue = Vue
  88. VueDemi.Vue2 = undefined
  89. VueDemi.version = Vue.version
  90. VueDemi.set = function (target, key, val) {
  91. if (Array.isArray(target)) {
  92. target.length = Math.max(target.length, key)
  93. target.splice(key, 1, val)
  94. return val
  95. }
  96. target[key] = val
  97. return val
  98. }
  99. VueDemi.del = function (target, key) {
  100. if (Array.isArray(target)) {
  101. target.splice(key, 1)
  102. return
  103. }
  104. delete target[key]
  105. }
  106. } else {
  107. console.error('[vue-demi] Vue version ' + Vue.version + ' is unsupported.')
  108. }
  109. return VueDemi
  110. })(
  111. (this.VueDemi = this.VueDemi || (typeof VueDemi !== 'undefined' ? VueDemi : {})),
  112. this.Vue || (typeof Vue !== 'undefined' ? Vue : undefined),
  113. this.VueCompositionAPI || (typeof VueCompositionAPI !== 'undefined' ? VueCompositionAPI : undefined)
  114. );