@vue-jsx-vapor/babel
Version:
Vue JSX Vapor Babel Plugin
73 lines (71 loc) • 2.94 kB
JavaScript
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;