]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: test for global filter registration
authorEvan You <yyx990803@gmail.com>
Fri, 30 Apr 2021 21:15:36 +0000 (17:15 -0400)
committerEvan You <yyx990803@gmail.com>
Fri, 30 Apr 2021 21:16:47 +0000 (17:16 -0400)
packages/runtime-core/src/compat/global.ts
packages/vue-compat/__tests__/filters.spec.ts

index dbb5217328405d914bda3bca3df33f96a5cc1994..4cf57743a7c9b5ef82b0829373c3962a9ddaca1e 100644 (file)
@@ -96,7 +96,7 @@ export type CompatVue = Pick<App, 'version' | 'component' | 'directive'> & {
   /**
    * @deprecated filters have been removed from Vue 3.
    */
-  filter(name: string, arg: any): null
+  filter(name: string, arg?: any): null
   /**
    * @internal
    */
@@ -138,7 +138,7 @@ export function createCompatVue(
     const app = createApp(options)
 
     // copy over asset registries and deopt flag
-    ;['mixins', 'components', 'directives', 'deopt'].forEach(key => {
+    ;['mixins', 'components', 'directives', 'filters', 'deopt'].forEach(key => {
       // @ts-ignore
       app._context[key] = singletonApp._context[key]
     })
@@ -312,9 +312,13 @@ export function createCompatVue(
     }
   }) as any
 
-  Vue.filter = ((name: string, filter: any) => {
-    // TODO deprecation warning
-    // TODO compiler warning for filters (maybe behavior compat?)
+  Vue.filter = ((name: string, filter?: any) => {
+    if (filter) {
+      singletonApp.filter!(name, filter)
+      return Vue
+    } else {
+      return singletonApp.filter!(name)
+    }
   }) as any
 
   // internal utils - these are technically internal but some plugins use it.
index 6730db141dc16791ae66917ba1677713198b8206..350e1aeb1dc33b6f21380bd67bb1949aebc2716b 100644 (file)
@@ -1,10 +1,14 @@
 import Vue from '@vue/compat'
 import { CompilerDeprecationTypes } from '../../compiler-core/src'
-import { toggleDeprecationWarning } from '../../runtime-core/src/compat/compatConfig'
+import {
+  deprecationData,
+  DeprecationTypes,
+  toggleDeprecationWarning
+} from '../../runtime-core/src/compat/compatConfig'
 
 beforeEach(() => {
   toggleDeprecationWarning(false)
-  Vue.configureCompat({ MODE: 2 })
+  Vue.configureCompat({ MODE: 2, GLOBAL_MOUNT: 'suppress-warning' })
 })
 
 afterEach(() => {
@@ -32,6 +36,22 @@ describe('FILTERS', () => {
     return v * 2
   }
 
+  it('global registration', () => {
+    toggleDeprecationWarning(true)
+    Vue.filter('globalUpper', upper)
+    expect(Vue.filter('globalUpper')).toBe(upper)
+    const vm = new Vue({
+      template: '<div>{{ msg | globalUpper }}</div>',
+      data: () => ({
+        msg: 'hi'
+      })
+    }).$mount()
+    expect(vm.$el.textContent).toBe('HI')
+    expect(deprecationData[DeprecationTypes.FILTERS].message).toHaveBeenWarned()
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+    Vue.filter('globalUpper', undefined)
+  })
+
   it('basic usage', () => {
     const vm = new Vue({
       template: '<div>{{ msg | upper }}</div>',