import { type CompilerError, ErrorCodes, type SourceLocation, createCompilerError, } from '@vue/compiler-core' export interface DOMCompilerError extends CompilerError { code: DOMErrorCodes } export function createDOMCompilerError( code: DOMErrorCodes, loc?: SourceLocation, ) { return createCompilerError( code, loc, __DEV__ || !__BROWSER__ ? DOMErrorMessages : undefined, ) as DOMCompilerError } export enum DOMErrorCodes { X_V_HTML_NO_EXPRESSION = 54 /* ErrorCodes.__EXTEND_POINT__ */, X_V_HTML_WITH_CHILDREN, X_V_TEXT_NO_EXPRESSION, X_V_TEXT_WITH_CHILDREN, X_V_MODEL_ON_INVALID_ELEMENT, X_V_MODEL_ARG_ON_ELEMENT, X_V_MODEL_ON_FILE_INPUT_ELEMENT, X_V_MODEL_UNNECESSARY_VALUE, X_V_SHOW_NO_EXPRESSION, X_TRANSITION_INVALID_CHILDREN, X_IGNORED_SIDE_EFFECT_TAG, __EXTEND_POINT__, } if (__TEST__) { // esbuild cannot infer enum increments if first value is from another // file, so we have to manually keep them in sync. this check ensures it // errors out if there are collisions. if (DOMErrorCodes.X_V_HTML_NO_EXPRESSION < ErrorCodes.__EXTEND_POINT__) { throw new Error( `DOMErrorCodes need to be updated to ${ ErrorCodes.__EXTEND_POINT__ + 1 } to match extension point from core ErrorCodes.`, ) } } export const DOMErrorMessages: { [code: number]: string } = { [DOMErrorCodes.X_V_HTML_NO_EXPRESSION]: `v-html is missing expression.`, [DOMErrorCodes.X_V_HTML_WITH_CHILDREN]: `v-html will override element children.`, [DOMErrorCodes.X_V_TEXT_NO_EXPRESSION]: `v-text is missing expression.`, [DOMErrorCodes.X_V_TEXT_WITH_CHILDREN]: `v-text will override element children.`, [DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT]: `v-model can only be used on ,