(msg: string, ...args: any[])
| 33 | let isWarning = false |
| 34 | |
| 35 | export function warn(msg: string, ...args: any[]): void { |
| 36 | if (isWarning) return |
| 37 | isWarning = true |
| 38 | |
| 39 | // avoid props formatting or warn handler tracking deps that might be mutated |
| 40 | // during patch, leading to infinite recursion. |
| 41 | pauseTracking() |
| 42 | |
| 43 | const instance = stack.length ? stack[stack.length - 1].component : null |
| 44 | const appWarnHandler = instance && instance.appContext.config.warnHandler |
| 45 | const trace = getComponentTrace() |
| 46 | |
| 47 | if (appWarnHandler) { |
| 48 | callWithErrorHandling( |
| 49 | appWarnHandler, |
| 50 | instance, |
| 51 | ErrorCodes.APP_WARN_HANDLER, |
| 52 | [ |
| 53 | // eslint-disable-next-line no-restricted-syntax |
| 54 | msg + args.map(a => a.toString?.() ?? JSON.stringify(a)).join(''), |
| 55 | instance && instance.proxy, |
| 56 | trace |
| 57 | .map( |
| 58 | ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`, |
| 59 | ) |
| 60 | .join('\n'), |
| 61 | trace, |
| 62 | ], |
| 63 | ) |
| 64 | } else { |
| 65 | const warnArgs = [`[Vue warn]: ${msg}`, ...args] |
| 66 | if ( |
| 67 | trace.length && |
| 68 | // avoid spamming console during tests |
| 69 | !__TEST__ |
| 70 | ) { |
| 71 | /* v8 ignore next 2 */ |
| 72 | warnArgs.push(`\n`, ...formatTrace(trace)) |
| 73 | } |
| 74 | console.warn(...warnArgs) |
| 75 | } |
| 76 | |
| 77 | resetTracking() |
| 78 | isWarning = false |
| 79 | } |
| 80 | |
| 81 | export function getComponentTrace(): ComponentTraceStack { |
| 82 | let currentVNode: VNode | null = stack[stack.length - 1] |
no test coverage detected