// src/core/index.ts import { DEFINE_PROPS, DEFINE_PROPS_REFS, HELPER_PREFIX, MagicString, WITH_DEFAULTS, getTransformResult, importHelperFn, isCallOf, parseSFC, walkAST } from "@vue-macros/common"; function transformDefinePropsRefs(code, id) { if (!code.includes(DEFINE_PROPS_REFS)) return; const { scriptSetup, getSetupAst } = parseSFC(code, id); if (!scriptSetup) return; const offset = scriptSetup.loc.start.offset; const s = new MagicString(code); const setupAst = getSetupAst(); let changed = false; walkAST(setupAst, { enter(node) { if (isCallOf(node, WITH_DEFAULTS) && node.arguments) { processDefinePropsRefs(node.arguments[0], node); this.skip(); } else if (isCallOf(node, DEFINE_PROPS_REFS)) { processDefinePropsRefs(node); } } }); if (changed) { importHelperFn(s, offset, "toRefs", "vue"); } return getTransformResult(s, id); function processDefinePropsRefs(propsCall, defaultsCall) { let code2 = `${DEFINE_PROPS}${s.slice( offset + propsCall.callee.end, offset + propsCall.end )}`; if (defaultsCall) { code2 = `${WITH_DEFAULTS}(${code2}, ${s.sliceNode( defaultsCall.arguments[1], { offset } )})`; } s.prependLeft(offset, ` const ${HELPER_PREFIX}props = ${code2}`); s.overwriteNode( defaultsCall || propsCall, `${HELPER_PREFIX}toRefs(${HELPER_PREFIX}props)`, { offset } ); changed = true; } } export { transformDefinePropsRefs };