Skip to content

Commit f273601

Browse files
authored
feat: support for emit transform only in setup functions
1 parent 8742ea4 commit f273601

File tree

3 files changed

+32
-34
lines changed

3 files changed

+32
-34
lines changed

src/transform/emits.ts

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { Visitor } from "@swc/core/Visitor.js";
1818
import type MagicString from "magic-string";
1919

2020
function transformEmits(
21-
emitsAst: ArrayExpression | ObjectExpression | Identifier,
21+
emitsAst: ArrayExpression | ObjectExpression | Identifier | null,
2222
setupAst: SetupAst,
2323
config: Config,
2424
) {
@@ -78,23 +78,31 @@ function transformEmits(
7878
}
7979
}
8080

81-
if (emitsAst.type === "ObjectExpression") {
82-
const { start, end } = getRealSpan(emitsAst.span, offset);
83-
str = `${preCode}defineEmits(${script.slice(start, end)});\n`;
81+
let keys: string[] = [];
82+
if (emitsAst) {
83+
if (emitsAst.type === "ObjectExpression") {
84+
const { start, end } = getRealSpan(emitsAst.span, offset);
85+
str = `${preCode}defineEmits(${script.slice(start, end)});\n`;
8486

85-
return MyVisitor;
86-
}
87+
return MyVisitor;
88+
}
89+
90+
if (emitsAst.type === "Identifier") {
91+
if (name !== emitsAst.value) {
92+
str = `${preCode}defineEmits(${emitsAst.value});\n`;
93+
} else {
94+
str = `${preCode}defineEmits($${emitsAst.value});\n`;
95+
isSameEmitsName = true;
96+
}
8797

88-
if (emitsAst.type === "Identifier") {
89-
if (name !== emitsAst.value) {
90-
str = `${preCode}defineEmits(${emitsAst.value});\n`;
91-
} else {
92-
str = `${preCode}defineEmits($${emitsAst.value});\n`;
93-
isSameEmitsName = true;
98+
return MyVisitor;
9499
}
95-
console.log(str);
96100

97-
return MyVisitor;
101+
keys = emitsAst.elements.map((ast) => {
102+
const { span } = ast!.expression as Identifier;
103+
const { start, end } = getRealSpan(span, offset);
104+
return script.slice(start, end);
105+
});
98106
}
99107

100108
let emitNames: string[] = [];
@@ -103,21 +111,12 @@ function transformEmits(
103111
visitor.visitFn(setupAst);
104112

105113
const setupOffset = setupAst.span.start;
106-
107114
emitNames = (visitor.firstArgAst as Identifier[]).map((ast) => {
108-
const {
109-
span: { start, end },
110-
} = ast;
111-
return setupScript.slice(start - setupOffset, end - setupOffset);
115+
const { start, end } = getRealSpan(ast.span, setupOffset);
116+
return setupScript.slice(start, end);
112117
});
113118
}
114119

115-
const keys = emitsAst.elements.map((ast) => {
116-
const { span } = ast!.expression as Identifier;
117-
const { start, end } = getRealSpan(span, offset);
118-
return script.slice(start, end);
119-
});
120-
121120
str = `${preCode}defineEmits([${[...new Set([...keys, ...emitNames])].join(
122121
", ",
123122
)}]);\n`;

src/transform/expose.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,9 @@ function transformExpose(setupAst: SetupAst, config: Config) {
3232
return "";
3333
}
3434

35-
const {
36-
span: { start, end },
37-
} = ast;
35+
const { start, end } = getRealSpan(ast.span, setupOffset);
3836

39-
return setupScript
40-
.slice(start - setupOffset, end - setupOffset)
41-
.replace(/{|}/g, "")
42-
.split(",");
37+
return setupScript.slice(start, end).replace(/{|}/g, "").split(",");
4338
})
4439
.filter((s) => Boolean(s.trim()));
4540
}

src/transform/script.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,10 @@ function transformScript(config: Config) {
138138
? setupAst
139139
: (setupAst.value as ArrowFunctionExpression);
140140

141+
const setupFnAstSpan = getRealSpan(setupFnAst.span, config.offset);
141142
config.setupScript = config.script.slice(
142-
setupFnAst.span.start - config.offset,
143-
setupFnAst.span.end - config.offset,
143+
setupFnAstSpan.start,
144+
setupFnAstSpan.end,
144145
);
145146

146147
const transformOption: TransformOption = {};
@@ -216,6 +217,9 @@ function transformScript(config: Config) {
216217
}
217218

218219
try {
220+
if (!transformOption.emits) {
221+
transformOption.emits = transformEmits(null, setupFnAst, config);
222+
}
219223
transformOption.expose = transformExpose(setupFnAst, config);
220224
transformOption.attrsAndSlots = transformAttrsAndSlots(setupFnAst, config);
221225
} catch (error) {

0 commit comments

Comments
 (0)