UNPKG

@vue-jsx-vapor/babel

Version:
73 lines (71 loc) 2.94 kB
Object.defineProperty(exports, '__esModule', { value: true }); const require_transform = require('./transform-BYgccSN8.cjs'); const require_utils = require('./utils-B3bAMlp-.cjs'); const __babel_parser = require_transform.__toESM(require("@babel/parser")); const __babel_plugin_syntax_jsx = require_transform.__toESM(require("@babel/plugin-syntax-jsx")); //#region src/index.ts const SyntaxJSX = __babel_plugin_syntax_jsx.default.default || __babel_plugin_syntax_jsx.default; var src_default = () => { return { name: "Vue JSX Vapor", inherits: SyntaxJSX, visitor: { JSXElement: require_transform.transformJSX, JSXFragment: require_transform.transformJSX, Program: { enter: (path, state) => { state.importSet = /* @__PURE__ */ new Set(); state.delegateEventSet = /* @__PURE__ */ new Set(); state.templates = []; state.roots = []; const collectRoot = (path$1) => { if (!require_utils.isJSXElement(path$1.parent) && !require_utils.isConditionalExpression(path$1.parentPath)) state.roots.push({ node: path$1.node, source: path$1.getSource(), inVaporComponent: !state.opts.interop ? true : path$1.findParent(({ node }) => node.type === "CallExpression" && node.callee.type === "Identifier" && ["defineVaporComponent", "defineComponent"].includes(node.callee.name))?.node.callee.name === "defineVaporComponent" }); }; path.traverse({ JSXElement: collectRoot, JSXFragment: collectRoot }); }, exit: (path, state) => { const { delegateEventSet, importSet, templates } = state; const statements = []; if (delegateEventSet.size) statements.unshift(`_delegateEvents("${Array.from(delegateEventSet).join("\", \"")}");`); if (templates.length) { let preambleResult = "const "; const definedTemplates = {}; templates.forEach((template, index) => { preambleResult += `t${index} = ${definedTemplates[template] || template}${templates.length - 1 === index ? ";" : ","}\n`; definedTemplates[template] = `t${index}`; }); statements.unshift(preambleResult); } const helpers = [ "setNodes", "createNodes", "createComponent", "createComponentWithFallback" ].filter((helper) => { const result = importSet.has(helper); result && importSet.delete(helper); return result; }); if (helpers.length) statements.unshift(`import { ${helpers.map((i) => `${i} as _${i}`).join(", ")} } from 'vue-jsx-vapor';\n`); if (importSet.size) { const importResult = Array.from(importSet).map((i) => `${i} as _${i}`).join(", "); statements.unshift(`import { ${importResult} } from 'vue';\n`); } path.node.body.unshift(...(0, __babel_parser.parse)(statements.join("\n"), { sourceType: "module", plugins: ["typescript"] }).program.body); } } } }; }; //#endregion exports.default = src_default;