diff --git a/packages/compiler-core/src/compat/compatConfig.ts b/packages/compiler-core/src/compat/compatConfig.ts index 92e2c63d..3c69e00c 100644 --- a/packages/compiler-core/src/compat/compatConfig.ts +++ b/packages/compiler-core/src/compat/compatConfig.ts @@ -124,13 +124,8 @@ export function warnDeprecation( typeof message === 'function' ? message(...args) : message }${link ? `\n Details: ${link}` : ``}` - if (loc) { - const err = new SyntaxError(msg) as CompilerError - err.code = key - err.loc = loc - context.onWarn(err) - return - } - - context.onWarn(msg) + const err = new SyntaxError(msg) as CompilerError + err.code = key + if (loc) err.loc = loc + context.onWarn(err) } diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 62fd2f1c..08cb12d8 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -10,7 +10,7 @@ import { CompilerCompatOptions } from './compat/compatConfig' import { ParserPlugin } from '@babel/parser' export interface ErrorHandlingOptions { - onWarn?: (msg: string | CompilerError) => void + onWarn?: (warning: CompilerError) => void onError?: (error: CompilerError) => void } diff --git a/packages/vue-compat/src/index.ts b/packages/vue-compat/src/index.ts index 09036c5d..abd669d0 100644 --- a/packages/vue-compat/src/index.ts +++ b/packages/vue-compat/src/index.ts @@ -1,7 +1,7 @@ // This entry is the "full-build" that includes both the runtime // and the compiler, and supports on-the-fly compilation of the template option. import { initDev } from './dev' -import { compile, CompilerOptions, CompilerError } from '@vue/compiler-dom' +import { compile, CompilerError, CompilerOptions } from '@vue/compiler-dom' import { registerRuntimeCompiler, RenderFunction, @@ -55,27 +55,32 @@ function compileToFunction( extend( { hoistStatic: true, - onError(err: CompilerError) { + onError(err) { if (__DEV__) { - const message = `Template compilation error: ${err.message}` - const codeFrame = - err.loc && - generateCodeFrame( - template as string, - err.loc.start.offset, - err.loc.end.offset - ) - warn(codeFrame ? `${message}\n${codeFrame}` : message) + onError(err) } else { /* istanbul ignore next */ throw err } - } - }, + }, + onWarn: __DEV__ ? onError : NOOP + } as CompilerOptions, options ) ) + function onError(err: CompilerError) { + const message = `Template compilation error: ${err.message}` + const codeFrame = + err.loc && + generateCodeFrame( + template as string, + err.loc.start.offset, + err.loc.end.offset + ) + warn(codeFrame ? `${message}\n${codeFrame}` : message) + } + // The wildcard import results in a huge object with every export // with keys that cannot be mangled, and can be quite heavy size-wise. // In the global build we know `Vue` is available globally so we can avoid diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 4874bb0d..ced879a9 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -49,27 +49,32 @@ function compileToFunction( extend( { hoistStatic: true, - onError(err: CompilerError) { + onError(err) { if (__DEV__) { - const message = `Template compilation error: ${err.message}` - const codeFrame = - err.loc && - generateCodeFrame( - template as string, - err.loc.start.offset, - err.loc.end.offset - ) - warn(codeFrame ? `${message}\n${codeFrame}` : message) + onError(err) } else { /* istanbul ignore next */ throw err } - } - }, + }, + onWarn: __DEV__ ? onError : NOOP + } as CompilerOptions, options ) ) + function onError(err: CompilerError) { + const message = `Template compilation error: ${err.message}` + const codeFrame = + err.loc && + generateCodeFrame( + template as string, + err.loc.start.offset, + err.loc.end.offset + ) + warn(codeFrame ? `${message}\n${codeFrame}` : message) + } + // The wildcard import results in a huge object with every export // with keys that cannot be mangled, and can be quite heavy size-wise. // In the global build we know `Vue` is available globally so we can avoid