/**
* @deprecated filters have been removed from Vue 3.
*/
- filter(name: string, arg: any): null
+ filter(name: string, arg?: any): null
/**
* @internal
*/
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]
})
}
}) 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.
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(() => {
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>',