| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818 |
- //#region rolldown:runtime
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __commonJS = (cb, mod) => function() {
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
- key = keys[i];
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
- get: ((k) => from[k]).bind(null, key),
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
- });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
- value: mod,
- enumerable: true
- }) : target, mod));
- //#endregion
- const __babel_types = __toESM(require("@babel/types"));
- const __babel_template = __toESM(require("@babel/template"));
- const __babel_plugin_syntax_jsx = __toESM(require("@babel/plugin-syntax-jsx"));
- const __babel_helper_module_imports = __toESM(require("@babel/helper-module-imports"));
- const __vue_babel_plugin_resolve_type = __toESM(require("@vue/babel-plugin-resolve-type"));
- const __babel_helper_plugin_utils = __toESM(require("@babel/helper-plugin-utils"));
- const __vue_shared = __toESM(require("@vue/shared"));
- //#region src/slotFlags.ts
- var SlotFlags = /* @__PURE__ */ function(SlotFlags$1) {
- /**
- * Stable slots that only reference slot props or context state. The slot
- * can fully capture its own dependencies so when passed down the parent won't
- * need to force the child to update.
- */
- SlotFlags$1[SlotFlags$1["STABLE"] = 1] = "STABLE";
- /**
- * Slots that reference scope variables (v-for or an outer slot prop), or
- * has conditional structure (v-if, v-for). The parent will need to force
- * the child to update because the slot does not fully capture its dependencies.
- */
- SlotFlags$1[SlotFlags$1["DYNAMIC"] = 2] = "DYNAMIC";
- /**
- * `<slot/>` being forwarded into a child component. Whether the parent needs
- * to update the child is dependent on what kind of slots the parent itself
- * received. This has to be refined at runtime, when the child's vnode
- * is being created (in `normalizeChildren`)
- */
- SlotFlags$1[SlotFlags$1["FORWARDED"] = 3] = "FORWARDED";
- return SlotFlags$1;
- }(SlotFlags || {});
- var slotFlags_default = SlotFlags;
- //#endregion
- //#region src/utils.ts
- const FRAGMENT = "Fragment";
- const KEEP_ALIVE = "KeepAlive";
- /**
- * create Identifier
- * @param path NodePath
- * @param state
- * @param name string
- * @returns MemberExpression
- */
- const createIdentifier = (state, name) => state.get(name)();
- /**
- * Checks if string is describing a directive
- * @param src string
- */
- const isDirective = (src) => src.startsWith("v-") || src.startsWith("v") && src.length >= 2 && src[1] >= "A" && src[1] <= "Z";
- /**
- * Should transformed to slots
- * @param tag string
- * @returns boolean
- */
- const shouldTransformedToSlots = (tag) => !(tag.match(RegExp(`^_?${FRAGMENT}\\d*$`)) || tag === KEEP_ALIVE);
- /**
- * Check if a Node is a component
- *
- * @param t
- * @param path JSXOpeningElement
- * @returns boolean
- */
- const checkIsComponent = (path, state) => {
- var _state$opts$isCustomE, _state$opts;
- const namePath = path.get("name");
- if (namePath.isJSXMemberExpression()) return shouldTransformedToSlots(namePath.node.property.name);
- const tag = namePath.node.name;
- return !((_state$opts$isCustomE = (_state$opts = state.opts).isCustomElement) === null || _state$opts$isCustomE === void 0 ? void 0 : _state$opts$isCustomE.call(_state$opts, tag)) && shouldTransformedToSlots(tag) && !(0, __vue_shared.isHTMLTag)(tag) && !(0, __vue_shared.isSVGTag)(tag);
- };
- /**
- * Transform JSXMemberExpression to MemberExpression
- * @param path JSXMemberExpression
- * @returns MemberExpression
- */
- const transformJSXMemberExpression = (path) => {
- const objectPath = path.node.object;
- const propertyPath = path.node.property;
- const transformedObject = __babel_types.isJSXMemberExpression(objectPath) ? transformJSXMemberExpression(path.get("object")) : __babel_types.isJSXIdentifier(objectPath) ? __babel_types.identifier(objectPath.name) : __babel_types.nullLiteral();
- const transformedProperty = __babel_types.identifier(propertyPath.name);
- return __babel_types.memberExpression(transformedObject, transformedProperty);
- };
- /**
- * Get tag (first attribute for h) from JSXOpeningElement
- * @param path JSXElement
- * @param state State
- * @returns Identifier | StringLiteral | MemberExpression | CallExpression
- */
- const getTag = (path, state) => {
- const namePath = path.get("openingElement").get("name");
- if (namePath.isJSXIdentifier()) {
- const { name } = namePath.node;
- if (!(0, __vue_shared.isHTMLTag)(name) && !(0, __vue_shared.isSVGTag)(name)) {
- var _state$opts$isCustomE2, _state$opts2;
- return name === FRAGMENT ? createIdentifier(state, FRAGMENT) : path.scope.hasBinding(name) ? __babel_types.identifier(name) : ((_state$opts$isCustomE2 = (_state$opts2 = state.opts).isCustomElement) === null || _state$opts$isCustomE2 === void 0 ? void 0 : _state$opts$isCustomE2.call(_state$opts2, name)) ? __babel_types.stringLiteral(name) : __babel_types.callExpression(createIdentifier(state, "resolveComponent"), [__babel_types.stringLiteral(name)]);
- }
- return __babel_types.stringLiteral(name);
- }
- if (namePath.isJSXMemberExpression()) return transformJSXMemberExpression(namePath);
- throw new Error(`getTag: ${namePath.type} is not supported`);
- };
- const getJSXAttributeName = (path) => {
- const nameNode = path.node.name;
- if (__babel_types.isJSXIdentifier(nameNode)) return nameNode.name;
- return `${nameNode.namespace.name}:${nameNode.name.name}`;
- };
- /**
- * Transform JSXText to StringLiteral
- * @param path JSXText
- * @returns StringLiteral | null
- */
- const transformJSXText = (path) => {
- const str = transformText(path.node.value);
- return str !== "" ? __babel_types.stringLiteral(str) : null;
- };
- const transformText = (text) => {
- const lines = text.split(/\r\n|\n|\r/);
- let lastNonEmptyLine = 0;
- for (let i = 0; i < lines.length; i++) if (lines[i].match(/[^ \t]/)) lastNonEmptyLine = i;
- let str = "";
- for (let i = 0; i < lines.length; i++) {
- const line = lines[i];
- const isFirstLine = i === 0;
- const isLastLine = i === lines.length - 1;
- const isLastNonEmptyLine = i === lastNonEmptyLine;
- let trimmedLine = line.replace(/\t/g, " ");
- if (!isFirstLine) trimmedLine = trimmedLine.replace(/^[ ]+/, "");
- if (!isLastLine) trimmedLine = trimmedLine.replace(/[ ]+$/, "");
- if (trimmedLine) {
- if (!isLastNonEmptyLine) trimmedLine += " ";
- str += trimmedLine;
- }
- }
- return str;
- };
- /**
- * Transform JSXExpressionContainer to Expression
- * @param path JSXExpressionContainer
- * @returns Expression
- */
- const transformJSXExpressionContainer = (path) => path.get("expression").node;
- /**
- * Transform JSXSpreadChild
- * @param path JSXSpreadChild
- * @returns SpreadElement
- */
- const transformJSXSpreadChild = (path) => __babel_types.spreadElement(path.get("expression").node);
- const walksScope = (path, name, slotFlag) => {
- if (path.scope.hasBinding(name) && path.parentPath) {
- if (__babel_types.isJSXElement(path.parentPath.node)) path.parentPath.setData("slotFlag", slotFlag);
- walksScope(path.parentPath, name, slotFlag);
- }
- };
- const buildIIFE = (path, children) => {
- const { parentPath } = path;
- if (parentPath.isAssignmentExpression()) {
- const { left } = parentPath.node;
- if (__babel_types.isIdentifier(left)) return children.map((child) => {
- if (__babel_types.isIdentifier(child) && child.name === left.name) {
- const insertName = path.scope.generateUidIdentifier(child.name);
- parentPath.insertBefore(__babel_types.variableDeclaration("const", [__babel_types.variableDeclarator(insertName, __babel_types.callExpression(__babel_types.functionExpression(null, [], __babel_types.blockStatement([__babel_types.returnStatement(child)])), []))]));
- return insertName;
- }
- return child;
- });
- }
- return children;
- };
- const onRE = /^on[^a-z]/;
- const isOn = (key) => onRE.test(key);
- const mergeAsArray = (existing, incoming) => {
- if (__babel_types.isArrayExpression(existing.value)) existing.value.elements.push(incoming.value);
- else existing.value = __babel_types.arrayExpression([existing.value, incoming.value]);
- };
- const dedupeProperties = (properties = [], mergeProps) => {
- if (!mergeProps) return properties;
- const knownProps = /* @__PURE__ */ new Map();
- const deduped = [];
- properties.forEach((prop) => {
- if (__babel_types.isStringLiteral(prop.key)) {
- const { value: name } = prop.key;
- const existing = knownProps.get(name);
- if (existing) {
- if (name === "style" || name === "class" || name.startsWith("on")) mergeAsArray(existing, prop);
- } else {
- knownProps.set(name, prop);
- deduped.push(prop);
- }
- } else deduped.push(prop);
- });
- return deduped;
- };
- /**
- * Check if an attribute value is constant
- * @param node
- * @returns boolean
- */
- const isConstant = (node) => {
- if (__babel_types.isIdentifier(node)) return node.name === "undefined";
- if (__babel_types.isArrayExpression(node)) {
- const { elements } = node;
- return elements.every((element) => element && isConstant(element));
- }
- if (__babel_types.isObjectExpression(node)) return node.properties.every((property) => isConstant(property.value));
- if (__babel_types.isTemplateLiteral(node) ? !node.expressions.length : __babel_types.isLiteral(node)) return true;
- return false;
- };
- const transformJSXSpreadAttribute = (nodePath, path, mergeProps, args) => {
- const argument = path.get("argument");
- const properties = __babel_types.isObjectExpression(argument.node) ? argument.node.properties : void 0;
- if (!properties) {
- if (argument.isIdentifier()) walksScope(nodePath, argument.node.name, slotFlags_default.DYNAMIC);
- args.push(mergeProps ? argument.node : __babel_types.spreadElement(argument.node));
- } else if (mergeProps) args.push(__babel_types.objectExpression(properties));
- else args.push(...properties);
- };
- //#endregion
- //#region src/patchFlags.ts
- let PatchFlags = /* @__PURE__ */ function(PatchFlags$1) {
- PatchFlags$1[PatchFlags$1["TEXT"] = 1] = "TEXT";
- PatchFlags$1[PatchFlags$1["CLASS"] = 2] = "CLASS";
- PatchFlags$1[PatchFlags$1["STYLE"] = 4] = "STYLE";
- PatchFlags$1[PatchFlags$1["PROPS"] = 8] = "PROPS";
- PatchFlags$1[PatchFlags$1["FULL_PROPS"] = 16] = "FULL_PROPS";
- PatchFlags$1[PatchFlags$1["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS";
- PatchFlags$1[PatchFlags$1["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT";
- PatchFlags$1[PatchFlags$1["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT";
- PatchFlags$1[PatchFlags$1["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT";
- PatchFlags$1[PatchFlags$1["NEED_PATCH"] = 512] = "NEED_PATCH";
- PatchFlags$1[PatchFlags$1["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS";
- PatchFlags$1[PatchFlags$1["HOISTED"] = -1] = "HOISTED";
- PatchFlags$1[PatchFlags$1["BAIL"] = -2] = "BAIL";
- return PatchFlags$1;
- }({});
- const PatchFlagNames = {
- [PatchFlags.TEXT]: "TEXT",
- [PatchFlags.CLASS]: "CLASS",
- [PatchFlags.STYLE]: "STYLE",
- [PatchFlags.PROPS]: "PROPS",
- [PatchFlags.FULL_PROPS]: "FULL_PROPS",
- [PatchFlags.HYDRATE_EVENTS]: "HYDRATE_EVENTS",
- [PatchFlags.STABLE_FRAGMENT]: "STABLE_FRAGMENT",
- [PatchFlags.KEYED_FRAGMENT]: "KEYED_FRAGMENT",
- [PatchFlags.UNKEYED_FRAGMENT]: "UNKEYED_FRAGMENT",
- [PatchFlags.DYNAMIC_SLOTS]: "DYNAMIC_SLOTS",
- [PatchFlags.NEED_PATCH]: "NEED_PATCH",
- [PatchFlags.HOISTED]: "HOISTED",
- [PatchFlags.BAIL]: "BAIL"
- };
- //#endregion
- //#region src/parseDirectives.ts
- /**
- * Get JSX element type
- *
- * @param path Path<JSXOpeningElement>
- */
- const getType = (path) => {
- const typePath = path.get("attributes").find((attribute) => {
- if (!attribute.isJSXAttribute()) return false;
- return attribute.get("name").isJSXIdentifier() && attribute.get("name").node.name === "type";
- });
- return typePath ? typePath.get("value").node : null;
- };
- const parseModifiers = (value) => __babel_types.isArrayExpression(value) ? value.elements.map((el) => __babel_types.isStringLiteral(el) ? el.value : "").filter(Boolean) : [];
- const parseDirectives = (params) => {
- var _modifiersSet$, _modifiersSet$2;
- const { path, value, state, tag, isComponent } = params;
- const args = [];
- const vals = [];
- const modifiersSet = [];
- let directiveName;
- let directiveArgument;
- let directiveModifiers;
- if ("namespace" in path.node.name) {
- [directiveName, directiveArgument] = params.name.split(":");
- directiveName = path.node.name.namespace.name;
- directiveArgument = path.node.name.name.name;
- directiveModifiers = directiveArgument.split("_").slice(1);
- } else {
- const underscoreModifiers = params.name.split("_");
- directiveName = underscoreModifiers.shift() || "";
- directiveModifiers = underscoreModifiers;
- }
- directiveName = directiveName.replace(/^v/, "").replace(/^-/, "").replace(/^\S/, (s) => s.toLowerCase());
- if (directiveArgument) args.push(__babel_types.stringLiteral(directiveArgument.split("_")[0]));
- const isVModels = directiveName === "models";
- const isVModel = directiveName === "model";
- if (isVModel && !path.get("value").isJSXExpressionContainer()) throw new Error("You have to use JSX Expression inside your v-model");
- if (isVModels && !isComponent) throw new Error("v-models can only use in custom components");
- const shouldResolve = ![
- "html",
- "text",
- "model",
- "slots",
- "models"
- ].includes(directiveName) || isVModel && !isComponent;
- let modifiers = directiveModifiers;
- if (__babel_types.isArrayExpression(value)) {
- const elementsList = isVModels ? value.elements : [value];
- elementsList.forEach((element) => {
- if (isVModels && !__babel_types.isArrayExpression(element)) throw new Error("You should pass a Two-dimensional Arrays to v-models");
- const { elements } = element;
- const [first, second, third] = elements;
- if (second && !__babel_types.isArrayExpression(second) && !__babel_types.isSpreadElement(second)) {
- args.push(second);
- modifiers = parseModifiers(third);
- } else if (__babel_types.isArrayExpression(second)) {
- if (!shouldResolve) args.push(__babel_types.nullLiteral());
- modifiers = parseModifiers(second);
- } else if (!shouldResolve) args.push(__babel_types.nullLiteral());
- modifiersSet.push(new Set(modifiers));
- vals.push(first);
- });
- } else if (isVModel && !shouldResolve) {
- args.push(__babel_types.nullLiteral());
- modifiersSet.push(new Set(directiveModifiers));
- } else modifiersSet.push(new Set(directiveModifiers));
- return {
- directiveName,
- modifiers: modifiersSet,
- values: vals.length ? vals : [value],
- args,
- directive: shouldResolve ? [
- resolveDirective(path, state, tag, directiveName),
- vals[0] || value,
- ((_modifiersSet$ = modifiersSet[0]) === null || _modifiersSet$ === void 0 ? void 0 : _modifiersSet$.size) ? args[0] || __babel_types.unaryExpression("void", __babel_types.numericLiteral(0), true) : args[0],
- !!((_modifiersSet$2 = modifiersSet[0]) === null || _modifiersSet$2 === void 0 ? void 0 : _modifiersSet$2.size) && __babel_types.objectExpression([...modifiersSet[0]].map((modifier) => __babel_types.objectProperty(__babel_types.identifier(modifier), __babel_types.booleanLiteral(true))))
- ].filter(Boolean) : void 0
- };
- };
- const resolveDirective = (path, state, tag, directiveName) => {
- if (directiveName === "show") return createIdentifier(state, "vShow");
- if (directiveName === "model") {
- let modelToUse;
- const type = getType(path.parentPath);
- switch (tag.value) {
- case "select":
- modelToUse = createIdentifier(state, "vModelSelect");
- break;
- case "textarea":
- modelToUse = createIdentifier(state, "vModelText");
- break;
- default: if (__babel_types.isStringLiteral(type) || !type) switch (type === null || type === void 0 ? void 0 : type.value) {
- case "checkbox":
- modelToUse = createIdentifier(state, "vModelCheckbox");
- break;
- case "radio":
- modelToUse = createIdentifier(state, "vModelRadio");
- break;
- default: modelToUse = createIdentifier(state, "vModelText");
- }
- else modelToUse = createIdentifier(state, "vModelDynamic");
- }
- return modelToUse;
- }
- const referenceName = "v" + directiveName[0].toUpperCase() + directiveName.slice(1);
- if (path.scope.references[referenceName]) return __babel_types.identifier(referenceName);
- return __babel_types.callExpression(createIdentifier(state, "resolveDirective"), [__babel_types.stringLiteral(directiveName)]);
- };
- var parseDirectives_default = parseDirectives;
- //#endregion
- //#region src/transform-vue-jsx.ts
- const xlinkRE = new RegExp("^xlink([A-Z])", "");
- const getJSXAttributeValue = (path, state) => {
- const valuePath = path.get("value");
- if (valuePath.isJSXElement()) return transformJSXElement(valuePath, state);
- if (valuePath.isStringLiteral()) return __babel_types.stringLiteral(transformText(valuePath.node.value));
- if (valuePath.isJSXExpressionContainer()) return transformJSXExpressionContainer(valuePath);
- return null;
- };
- const buildProps = (path, state) => {
- const tag = getTag(path, state);
- const isComponent = checkIsComponent(path.get("openingElement"), state);
- const props = path.get("openingElement").get("attributes");
- const directives = [];
- const dynamicPropNames = /* @__PURE__ */ new Set();
- let slots = null;
- let patchFlag = 0;
- if (props.length === 0) return {
- tag,
- isComponent,
- slots,
- props: __babel_types.nullLiteral(),
- directives,
- patchFlag,
- dynamicPropNames
- };
- let properties = [];
- let hasRef = false;
- let hasClassBinding = false;
- let hasStyleBinding = false;
- let hasHydrationEventBinding = false;
- let hasDynamicKeys = false;
- const mergeArgs = [];
- const { mergeProps = true } = state.opts;
- props.forEach((prop) => {
- if (prop.isJSXAttribute()) {
- let name = getJSXAttributeName(prop);
- const attributeValue = getJSXAttributeValue(prop, state);
- if (!isConstant(attributeValue) || name === "ref") {
- if (!isComponent && isOn(name) && name.toLowerCase() !== "onclick" && name !== "onUpdate:modelValue") hasHydrationEventBinding = true;
- if (name === "ref") hasRef = true;
- else if (name === "class" && !isComponent) hasClassBinding = true;
- else if (name === "style" && !isComponent) hasStyleBinding = true;
- else if (name !== "key" && !isDirective(name) && name !== "on") dynamicPropNames.add(name);
- }
- if (state.opts.transformOn && (name === "on" || name === "nativeOn")) {
- if (!state.get("transformOn")) state.set("transformOn", (0, __babel_helper_module_imports.addDefault)(path, "@vue/babel-helper-vue-transform-on", { nameHint: "_transformOn" }));
- mergeArgs.push(__babel_types.callExpression(state.get("transformOn"), [attributeValue || __babel_types.booleanLiteral(true)]));
- return;
- }
- if (isDirective(name)) {
- const { directive, modifiers, values, args, directiveName } = parseDirectives_default({
- tag,
- isComponent,
- name,
- path: prop,
- state,
- value: attributeValue
- });
- if (directiveName === "slots") {
- slots = attributeValue;
- return;
- }
- if (directive) directives.push(__babel_types.arrayExpression(directive));
- else if (directiveName === "html") {
- properties.push(__babel_types.objectProperty(__babel_types.stringLiteral("innerHTML"), values[0]));
- dynamicPropNames.add("innerHTML");
- } else if (directiveName === "text") {
- properties.push(__babel_types.objectProperty(__babel_types.stringLiteral("textContent"), values[0]));
- dynamicPropNames.add("textContent");
- }
- if (["models", "model"].includes(directiveName)) values.forEach((value, index) => {
- const propName = args[index];
- const isDynamic = propName && !__babel_types.isStringLiteral(propName) && !__babel_types.isNullLiteral(propName);
- if (!directive) {
- var _modifiers$index;
- properties.push(__babel_types.objectProperty(__babel_types.isNullLiteral(propName) ? __babel_types.stringLiteral("modelValue") : propName, value, isDynamic));
- if (!isDynamic) dynamicPropNames.add((propName === null || propName === void 0 ? void 0 : propName.value) || "modelValue");
- if ((_modifiers$index = modifiers[index]) === null || _modifiers$index === void 0 ? void 0 : _modifiers$index.size) properties.push(__babel_types.objectProperty(isDynamic ? __babel_types.binaryExpression("+", propName, __babel_types.stringLiteral("Modifiers")) : __babel_types.stringLiteral(`${(propName === null || propName === void 0 ? void 0 : propName.value) || "model"}Modifiers`), __babel_types.objectExpression([...modifiers[index]].map((modifier) => __babel_types.objectProperty(__babel_types.stringLiteral(modifier), __babel_types.booleanLiteral(true)))), isDynamic));
- }
- const updateName = isDynamic ? __babel_types.binaryExpression("+", __babel_types.stringLiteral("onUpdate:"), propName) : __babel_types.stringLiteral(`onUpdate:${(propName === null || propName === void 0 ? void 0 : propName.value) || "modelValue"}`);
- properties.push(__babel_types.objectProperty(updateName, __babel_types.arrowFunctionExpression([__babel_types.identifier("$event")], __babel_types.assignmentExpression("=", value, __babel_types.identifier("$event"))), isDynamic));
- if (!isDynamic) dynamicPropNames.add(updateName.value);
- else hasDynamicKeys = true;
- });
- } else {
- if (name.match(xlinkRE)) name = name.replace(xlinkRE, (_, firstCharacter) => `xlink:${firstCharacter.toLowerCase()}`);
- properties.push(__babel_types.objectProperty(__babel_types.stringLiteral(name), attributeValue || __babel_types.booleanLiteral(true)));
- }
- } else {
- if (properties.length && mergeProps) {
- mergeArgs.push(__babel_types.objectExpression(dedupeProperties(properties, mergeProps)));
- properties = [];
- }
- hasDynamicKeys = true;
- transformJSXSpreadAttribute(path, prop, mergeProps, mergeProps ? mergeArgs : properties);
- }
- });
- if (hasDynamicKeys) patchFlag |= PatchFlags.FULL_PROPS;
- else {
- if (hasClassBinding) patchFlag |= PatchFlags.CLASS;
- if (hasStyleBinding) patchFlag |= PatchFlags.STYLE;
- if (dynamicPropNames.size) patchFlag |= PatchFlags.PROPS;
- if (hasHydrationEventBinding) patchFlag |= PatchFlags.HYDRATE_EVENTS;
- }
- if ((patchFlag === 0 || patchFlag === PatchFlags.HYDRATE_EVENTS) && (hasRef || directives.length > 0)) patchFlag |= PatchFlags.NEED_PATCH;
- let propsExpression = __babel_types.nullLiteral();
- if (mergeArgs.length) {
- if (properties.length) mergeArgs.push(__babel_types.objectExpression(dedupeProperties(properties, mergeProps)));
- if (mergeArgs.length > 1) propsExpression = __babel_types.callExpression(createIdentifier(state, "mergeProps"), mergeArgs);
- else propsExpression = mergeArgs[0];
- } else if (properties.length) if (properties.length === 1 && __babel_types.isSpreadElement(properties[0])) propsExpression = properties[0].argument;
- else propsExpression = __babel_types.objectExpression(dedupeProperties(properties, mergeProps));
- return {
- tag,
- props: propsExpression,
- isComponent,
- slots,
- directives,
- patchFlag,
- dynamicPropNames
- };
- };
- /**
- * Get children from Array of JSX children
- * @param paths Array<JSXText | JSXExpressionContainer | JSXElement | JSXFragment>
- * @returns Array<Expression | SpreadElement>
- */
- const getChildren = (paths, state) => paths.map((path) => {
- if (path.isJSXText()) {
- const transformedText = transformJSXText(path);
- if (transformedText) return __babel_types.callExpression(createIdentifier(state, "createTextVNode"), [transformedText]);
- return transformedText;
- }
- if (path.isJSXExpressionContainer()) {
- const expression = transformJSXExpressionContainer(path);
- if (__babel_types.isIdentifier(expression)) {
- const { name } = expression;
- const { referencePaths = [] } = path.scope.getBinding(name) || {};
- referencePaths.forEach((referencePath) => {
- walksScope(referencePath, name, slotFlags_default.DYNAMIC);
- });
- }
- return expression;
- }
- if (path.isJSXSpreadChild()) return transformJSXSpreadChild(path);
- if (path.isCallExpression()) return path.node;
- if (path.isJSXElement()) return transformJSXElement(path, state);
- throw new Error(`getChildren: ${path.type} is not supported`);
- }).filter(((value) => value != null && !__babel_types.isJSXEmptyExpression(value)));
- const transformJSXElement = (path, state) => {
- var _path$getData;
- const children = getChildren(path.get("children"), state);
- const { tag, props, isComponent, directives, patchFlag, dynamicPropNames, slots } = buildProps(path, state);
- const { optimize = false } = state.opts;
- if (directives.length && directives.some((d) => {
- var _d$elements;
- return ((_d$elements = d.elements) === null || _d$elements === void 0 || (_d$elements = _d$elements[0]) === null || _d$elements === void 0 ? void 0 : _d$elements.type) === "CallExpression" && d.elements[0].callee.type === "Identifier" && d.elements[0].callee.name === "_resolveDirective";
- })) {
- var _currentPath$parentPa;
- let currentPath = path;
- while ((_currentPath$parentPa = currentPath.parentPath) === null || _currentPath$parentPa === void 0 ? void 0 : _currentPath$parentPa.isJSXElement()) {
- currentPath = currentPath.parentPath;
- currentPath.setData("slotFlag", 0);
- }
- }
- const slotFlag = (_path$getData = path.getData("slotFlag")) !== null && _path$getData !== void 0 ? _path$getData : slotFlags_default.STABLE;
- const optimizeSlots = optimize && slotFlag !== 0;
- let VNodeChild;
- if (children.length > 1 || slots) VNodeChild = isComponent ? children.length ? __babel_types.objectExpression([
- !!children.length && __babel_types.objectProperty(__babel_types.identifier("default"), __babel_types.arrowFunctionExpression([], __babel_types.arrayExpression(buildIIFE(path, children)))),
- ...slots ? __babel_types.isObjectExpression(slots) ? slots.properties : [__babel_types.spreadElement(slots)] : [],
- optimizeSlots && __babel_types.objectProperty(__babel_types.identifier("_"), __babel_types.numericLiteral(slotFlag))
- ].filter(Boolean)) : slots : __babel_types.arrayExpression(children);
- else if (children.length === 1) {
- const { enableObjectSlots = true } = state.opts;
- const child = children[0];
- const objectExpression = __babel_types.objectExpression([__babel_types.objectProperty(__babel_types.identifier("default"), __babel_types.arrowFunctionExpression([], __babel_types.arrayExpression(buildIIFE(path, [child])))), optimizeSlots && __babel_types.objectProperty(__babel_types.identifier("_"), __babel_types.numericLiteral(slotFlag))].filter(Boolean));
- if (__babel_types.isIdentifier(child) && isComponent) VNodeChild = enableObjectSlots ? __babel_types.conditionalExpression(__babel_types.callExpression(state.get("@vue/babel-plugin-jsx/runtimeIsSlot")(), [child]), child, objectExpression) : objectExpression;
- else if (__babel_types.isCallExpression(child) && child.loc && isComponent) if (enableObjectSlots) {
- const { scope } = path;
- const slotId = scope.generateUidIdentifier("slot");
- if (scope) scope.push({
- id: slotId,
- kind: "let"
- });
- const alternate = __babel_types.objectExpression([__babel_types.objectProperty(__babel_types.identifier("default"), __babel_types.arrowFunctionExpression([], __babel_types.arrayExpression(buildIIFE(path, [slotId])))), optimizeSlots && __babel_types.objectProperty(__babel_types.identifier("_"), __babel_types.numericLiteral(slotFlag))].filter(Boolean));
- const assignment = __babel_types.assignmentExpression("=", slotId, child);
- const condition = __babel_types.callExpression(state.get("@vue/babel-plugin-jsx/runtimeIsSlot")(), [assignment]);
- VNodeChild = __babel_types.conditionalExpression(condition, slotId, alternate);
- } else VNodeChild = objectExpression;
- else if (__babel_types.isFunctionExpression(child) || __babel_types.isArrowFunctionExpression(child)) VNodeChild = __babel_types.objectExpression([__babel_types.objectProperty(__babel_types.identifier("default"), child)]);
- else if (__babel_types.isObjectExpression(child)) VNodeChild = __babel_types.objectExpression([...child.properties, optimizeSlots && __babel_types.objectProperty(__babel_types.identifier("_"), __babel_types.numericLiteral(slotFlag))].filter(Boolean));
- else VNodeChild = isComponent ? __babel_types.objectExpression([__babel_types.objectProperty(__babel_types.identifier("default"), __babel_types.arrowFunctionExpression([], __babel_types.arrayExpression([child])))]) : __babel_types.arrayExpression([child]);
- }
- const createVNode = __babel_types.callExpression(createIdentifier(state, "createVNode"), [
- tag,
- props,
- VNodeChild || __babel_types.nullLiteral(),
- !!patchFlag && optimize && __babel_types.numericLiteral(patchFlag),
- !!dynamicPropNames.size && optimize && __babel_types.arrayExpression([...dynamicPropNames.keys()].map((name) => __babel_types.stringLiteral(name)))
- ].filter(Boolean));
- if (!directives.length) return createVNode;
- return __babel_types.callExpression(createIdentifier(state, "withDirectives"), [createVNode, __babel_types.arrayExpression(directives)]);
- };
- const visitor$1 = { JSXElement: { exit(path, state) {
- path.replaceWith(transformJSXElement(path, state));
- } } };
- var transform_vue_jsx_default = visitor$1;
- //#endregion
- //#region src/sugar-fragment.ts
- const transformFragment = (path, Fragment) => {
- const children = path.get("children") || [];
- return __babel_types.jsxElement(__babel_types.jsxOpeningElement(Fragment, []), __babel_types.jsxClosingElement(Fragment), children.map(({ node }) => node), false);
- };
- const visitor = { JSXFragment: { enter(path, state) {
- const fragmentCallee = createIdentifier(state, FRAGMENT);
- path.replaceWith(transformFragment(path, __babel_types.isIdentifier(fragmentCallee) ? __babel_types.jsxIdentifier(fragmentCallee.name) : __babel_types.jsxMemberExpression(__babel_types.jsxIdentifier(fragmentCallee.object.name), __babel_types.jsxIdentifier(fragmentCallee.property.name))));
- } } };
- var sugar_fragment_default = visitor;
- //#endregion
- //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js
- var require_typeof = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/typeof.js": ((exports, module) => {
- function _typeof$2(o) {
- "@babel/helpers - typeof";
- return module.exports = _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
- return typeof o$1;
- } : function(o$1) {
- return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
- }, module.exports.__esModule = true, module.exports["default"] = module.exports, _typeof$2(o);
- }
- module.exports = _typeof$2, module.exports.__esModule = true, module.exports["default"] = module.exports;
- }) });
- //#endregion
- //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js
- var require_toPrimitive = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/toPrimitive.js": ((exports, module) => {
- var _typeof$1 = require_typeof()["default"];
- function toPrimitive$1(t, r) {
- if ("object" != _typeof$1(t) || !t) return t;
- var e = t[Symbol.toPrimitive];
- if (void 0 !== e) {
- var i = e.call(t, r || "default");
- if ("object" != _typeof$1(i)) return i;
- throw new TypeError("@@toPrimitive must return a primitive value.");
- }
- return ("string" === r ? String : Number)(t);
- }
- module.exports = toPrimitive$1, module.exports.__esModule = true, module.exports["default"] = module.exports;
- }) });
- //#endregion
- //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js
- var require_toPropertyKey = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/toPropertyKey.js": ((exports, module) => {
- var _typeof = require_typeof()["default"];
- var toPrimitive = require_toPrimitive();
- function toPropertyKey$1(t) {
- var i = toPrimitive(t, "string");
- return "symbol" == _typeof(i) ? i : i + "";
- }
- module.exports = toPropertyKey$1, module.exports.__esModule = true, module.exports["default"] = module.exports;
- }) });
- //#endregion
- //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js
- var require_defineProperty = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/defineProperty.js": ((exports, module) => {
- var toPropertyKey = require_toPropertyKey();
- function _defineProperty(e, r, t) {
- return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
- value: t,
- enumerable: !0,
- configurable: !0,
- writable: !0
- }) : e[r] = t, e;
- }
- module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
- }) });
- //#endregion
- //#region ../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js
- var require_objectSpread2 = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/@oxc-project+runtime@0.80.0/node_modules/@oxc-project/runtime/src/helpers/objectSpread2.js": ((exports, module) => {
- var defineProperty = require_defineProperty();
- function ownKeys(e, r) {
- var t = Object.keys(e);
- if (Object.getOwnPropertySymbols) {
- var o = Object.getOwnPropertySymbols(e);
- r && (o = o.filter(function(r$1) {
- return Object.getOwnPropertyDescriptor(e, r$1).enumerable;
- })), t.push.apply(t, o);
- }
- return t;
- }
- function _objectSpread2(e) {
- for (var r = 1; r < arguments.length; r++) {
- var t = null != arguments[r] ? arguments[r] : {};
- r % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {
- defineProperty(e, r$1, t[r$1]);
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {
- Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));
- });
- }
- return e;
- }
- module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports;
- }) });
- //#endregion
- //#region src/index.ts
- var import_objectSpread2 = /* @__PURE__ */ __toESM(require_objectSpread2());
- const hasJSX = (parentPath) => {
- let fileHasJSX = false;
- parentPath.traverse({
- JSXElement(path) {
- fileHasJSX = true;
- path.stop();
- },
- JSXFragment(path) {
- fileHasJSX = true;
- path.stop();
- }
- });
- return fileHasJSX;
- };
- const JSX_ANNOTATION_REGEX = new RegExp("\\*?\\s*@jsx\\s+([^\\s]+)", "");
- /* @__NO_SIDE_EFFECTS__ */
- function interopDefault(m) {
- return m.default || m;
- }
- const syntaxJsx = /* @__PURE__ */ interopDefault(__babel_plugin_syntax_jsx.default);
- const template = /* @__PURE__ */ interopDefault(__babel_template.default);
- const plugin = (0, __babel_helper_plugin_utils.declare)((api, opt, dirname) => {
- const { types } = api;
- let resolveType;
- if (opt.resolveType) {
- if (typeof opt.resolveType === "boolean") opt.resolveType = {};
- resolveType = (0, __vue_babel_plugin_resolve_type.default)(api, opt.resolveType, dirname);
- }
- return (0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolveType || {}), {}, {
- name: "babel-plugin-jsx",
- inherits: /* @__PURE__ */ interopDefault(syntaxJsx),
- visitor: (0, import_objectSpread2.default)((0, import_objectSpread2.default)((0, import_objectSpread2.default)((0, import_objectSpread2.default)({}, resolveType === null || resolveType === void 0 ? void 0 : resolveType.visitor), transform_vue_jsx_default), sugar_fragment_default), {}, { Program: { enter(path, state) {
- if (hasJSX(path)) {
- const importNames = [
- "createVNode",
- "Fragment",
- "resolveComponent",
- "withDirectives",
- "vShow",
- "vModelSelect",
- "vModelText",
- "vModelCheckbox",
- "vModelRadio",
- "vModelText",
- "vModelDynamic",
- "resolveDirective",
- "mergeProps",
- "createTextVNode",
- "isVNode"
- ];
- if ((0, __babel_helper_module_imports.isModule)(path)) {
- const importMap = {};
- importNames.forEach((name) => {
- state.set(name, () => {
- if (importMap[name]) return types.cloneNode(importMap[name]);
- const identifier = (0, __babel_helper_module_imports.addNamed)(path, name, "vue", { ensureLiveReference: true });
- importMap[name] = identifier;
- return identifier;
- });
- });
- const { enableObjectSlots = true } = state.opts;
- if (enableObjectSlots) state.set("@vue/babel-plugin-jsx/runtimeIsSlot", () => {
- if (importMap.runtimeIsSlot) return importMap.runtimeIsSlot;
- const { name: isVNodeName } = state.get("isVNode")();
- const isSlot = path.scope.generateUidIdentifier("isSlot");
- const ast = template.ast`
- function ${isSlot.name}(s) {
- return typeof s === 'function' || (Object.prototype.toString.call(s) === '[object Object]' && !${isVNodeName}(s));
- }
- `;
- const lastImport = path.get("body").filter((p) => p.isImportDeclaration()).pop();
- if (lastImport) lastImport.insertAfter(ast);
- importMap.runtimeIsSlot = isSlot;
- return isSlot;
- });
- } else {
- let sourceName;
- importNames.forEach((name) => {
- state.set(name, () => {
- if (!sourceName) sourceName = (0, __babel_helper_module_imports.addNamespace)(path, "vue", { ensureLiveReference: true });
- return __babel_types.memberExpression(sourceName, __babel_types.identifier(name));
- });
- });
- const helpers = {};
- const { enableObjectSlots = true } = state.opts;
- if (enableObjectSlots) state.set("@vue/babel-plugin-jsx/runtimeIsSlot", () => {
- if (helpers.runtimeIsSlot) return helpers.runtimeIsSlot;
- const isSlot = path.scope.generateUidIdentifier("isSlot");
- const { object: objectName } = state.get("isVNode")();
- const ast = template.ast`
- function ${isSlot.name}(s) {
- return typeof s === 'function' || (Object.prototype.toString.call(s) === '[object Object]' && !${objectName.name}.isVNode(s));
- }
- `;
- const nodePaths = path.get("body");
- const lastImport = nodePaths.filter((p) => p.isVariableDeclaration() && p.node.declarations.some((d) => {
- var _d$id;
- return ((_d$id = d.id) === null || _d$id === void 0 ? void 0 : _d$id.name) === sourceName.name;
- })).pop();
- if (lastImport) lastImport.insertAfter(ast);
- return isSlot;
- });
- }
- const { opts: { pragma = "" }, file } = state;
- if (pragma) state.set("createVNode", () => __babel_types.identifier(pragma));
- if (file.ast.comments) for (const comment of file.ast.comments) {
- const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value);
- if (jsxMatches) state.set("createVNode", () => __babel_types.identifier(jsxMatches[1]));
- }
- }
- } } })
- });
- });
- var src_default = plugin;
- //#endregion
- module.exports = src_default;
|