@vue-jsx-vapor/macros
Version:
Macros for Vue JSX Vapor
83 lines (80 loc) • 2.48 kB
JavaScript
import { c as with_defaults_default, i as getRequire, l as use_model_default, n as transformJsxMacros, o as useModelHelperId, s as withDefaultsHelperId } from "./core-YJzDc6vy.js";
import { t as resolveOptions } from "./options-zNb9gT8s.js";
//#region src/core/style.ts
let compileStyleAsync;
async function getCompileStyleAsync() {
if (compileStyleAsync) return compileStyleAsync;
const require = getRequire();
try {
return compileStyleAsync = require ? require("vue/compiler-sfc").compileStyleAsync : (await import("https://esm.sh/@vue/compiler-sfc")).compileStyleAsync;
} catch {}
}
async function transformStyle(code, id, options) {
const query = new URLSearchParams(id.split("?")[1]);
const compileStyleAsync$1 = await getCompileStyleAsync();
if (!compileStyleAsync$1) {
console.warn(`Cannot require vue/compiler-sfc, please install Vue first.`);
return "";
}
return (await compileStyleAsync$1({
filename: id,
id: `data-v-${query.get("scopeId")}`,
isProd: options.isProduction,
source: code,
scoped: query.get("scoped") === "true"
})).code;
}
//#endregion
//#region src/raw.ts
const plugin = (userOptions = {}) => {
const options = resolveOptions(userOptions);
const importMap = /* @__PURE__ */ new Map();
const defineStyleRegex = /^\/vue-jsx-vapor\/macros\/define-style/;
return [{
name: "@vue-jsx-vapor/macros",
enforce: "pre",
resolveId: {
filter: { id: { include: [useModelHelperId, withDefaultsHelperId] } },
handler(id) {
return id;
}
},
load: {
filter: { id: { include: [useModelHelperId, withDefaultsHelperId] } },
handler(id) {
if (id === useModelHelperId) return use_model_default;
if (id === withDefaultsHelperId) return with_defaults_default;
}
},
transform: {
filter: { id: { include: options.include || /\.[cm]?[jt]sx$/ } },
handler(code, id, opt) {
if (opt?.ssr) options.defineComponent.autoReturnFunction = true;
return transformJsxMacros(code, id, importMap, options);
}
}
}, {
name: "@vue-jsx-vapor/macros/define-style",
resolveId: {
filter: { id: { include: defineStyleRegex } },
handler(id) {
return id;
}
},
load: {
filter: { id: { include: defineStyleRegex } },
handler(id) {
return importMap.get(id);
}
},
transform: {
filter: { id: { include: defineStyleRegex } },
handler(code, id) {
return transformStyle(code, id, options);
}
}
}];
};
var raw_default = plugin;
//#endregion
export { raw_default as t };