"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const CompilerDOM = require("@vue/compiler-dom"); const elementEvents_1 = require("../codegen/template/elementEvents"); const templateChild_1 = require("../codegen/template/templateChild"); const vFor_1 = require("../codegen/template/vFor"); const utils_1 = require("../codegen/utils"); const codeFeatures = { format: true, }; const formatBrackets = { normal: ['`${', '}`;'], if: ['if (', ') { }'], for: ['for (', ') { }'], // fix https://github.com/vuejs/language-tools/issues/3572 params: ['(', ') => {};'], // fix https://github.com/vuejs/language-tools/issues/1210 // fix https://github.com/vuejs/language-tools/issues/2305 curly: ['0 +', '+ 0;'], event: ['() => ', ';'], generic: ['<', '>() => {};'], }; const plugin = ctx => { const parseds = new WeakMap(); return { version: 2.1, getEmbeddedCodes(_fileName, sfc) { if (!sfc.template?.ast) { return []; } const parsed = parse(sfc); parseds.set(sfc, parsed); const result = []; for (const [id] of parsed) { result.push({ id, lang: 'ts' }); } return result; }, resolveEmbeddedCode(_fileName, sfc, embeddedFile) { // access template content to watch change (() => sfc.template?.content)(); const parsed = parseds.get(sfc); if (parsed) { const codes = parsed.get(embeddedFile.id); if (codes) { embeddedFile.content.push(...codes); embeddedFile.parentCodeId = 'template'; } } }, }; function parse(sfc) { const data = new Map(); if (!sfc.template?.ast) { return data; } const templateContent = sfc.template.content; let i = 0; sfc.template.ast.children.forEach(visit); return data; function visit(node) { if (node.type === CompilerDOM.NodeTypes.COMMENT) { const match = node.loc.source.match(/^