"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapperVOn = exports.transformOn = void 0; const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const compiler_core_1 = require("@vue/compiler-core"); const shared_1 = require("@vue/shared"); const __1 = require(".."); const runtimeHelpers_1 = require("../runtimeHelpers"); const transformExpression_1 = require("./transformExpression"); const vFor_1 = require("./vFor"); const fnExpRE = /^\s*([\w$_]+|(async\s*)?\([^)]*?\))\s*=>|^\s*(async\s+)?function(?:\s+[\w$]+)?\s*\(/; const transformOn = (dir, node, _context, augmentor) => { const context = _context; const { loc, modifiers, arg } = dir; if (!dir.exp && !modifiers.length) { context.onError((0, compiler_core_1.createCompilerError)(35 /* ErrorCodes.X_V_ON_NO_EXPRESSION */, loc)); } let eventName; if (arg.type === 4 /* NodeTypes.SIMPLE_EXPRESSION */) { if (arg.isStatic) { const rawName = arg.content; // for all event listeners, auto convert it to camelCase. See issue #2249 eventName = (0, compiler_core_1.createSimpleExpression)((0, shared_1.toHandlerKey)((0, shared_1.camelize)(rawName)), true, arg.loc); } else { // #2388 eventName = (0, compiler_core_1.createCompoundExpression)([ // `${context.helperString(TO_HANDLER_KEY)}(`, arg, // `)`, ]); } } else { // already a compound expression. eventName = arg; eventName.children.unshift(`${context.helperString(compiler_core_1.TO_HANDLER_KEY)}(`); eventName.children.push(`)`); } // handler processing let exp = dir.exp; if (exp && !exp.content.trim()) { exp = undefined; } let shouldCache = context.cacheHandlers && !exp && !context.inVOnce; if (exp) { const isMemberExp = (0, compiler_core_1.isMemberExpression)(exp.content, context); const isInlineStatement = !(isMemberExp || fnExpRE.test(exp.content)); const hasMultipleStatements = exp.content.includes(`;`); // process the expression since it's been skipped if (context.prefixIdentifiers) { isInlineStatement && context.addIdentifiers(`$event`); exp = dir.exp = (0, transformExpression_1.processExpression)(exp, context, false, hasMultipleStatements); isInlineStatement && context.removeIdentifiers(`$event`); // with scope analysis, the function is hoistable if it has no reference // to scope variables. shouldCache = context.cacheHandlers && // unnecessary to cache inside v-once !context.inVOnce && // runtime constants don't need to be cached // (this is analyzed by compileScript in SFC