|
- // 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
- };
|