Skip to content

Commit

Permalink
feat: support for emit transform only in setup functions
Browse files Browse the repository at this point in the history
  • Loading branch information
a145789 committed Dec 23, 2022
1 parent 8742ea4 commit f273601
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 34 deletions.
49 changes: 24 additions & 25 deletions src/transform/emits.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { Visitor } from "@swc/core/Visitor.js";
import type MagicString from "magic-string";

function transformEmits(
emitsAst: ArrayExpression | ObjectExpression | Identifier,
emitsAst: ArrayExpression | ObjectExpression | Identifier | null,
setupAst: SetupAst,
config: Config,
) {
Expand Down Expand Up @@ -78,23 +78,31 @@ function transformEmits(
}
}

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

return MyVisitor;
}
return MyVisitor;
}

if (emitsAst.type === "Identifier") {
if (name !== emitsAst.value) {
str = `${preCode}defineEmits(${emitsAst.value});\n`;
} else {
str = `${preCode}defineEmits($${emitsAst.value});\n`;
isSameEmitsName = true;
}

if (emitsAst.type === "Identifier") {
if (name !== emitsAst.value) {
str = `${preCode}defineEmits(${emitsAst.value});\n`;
} else {
str = `${preCode}defineEmits($${emitsAst.value});\n`;
isSameEmitsName = true;
return MyVisitor;
}
console.log(str);

return MyVisitor;
keys = emitsAst.elements.map((ast) => {
const { span } = ast!.expression as Identifier;
const { start, end } = getRealSpan(span, offset);
return script.slice(start, end);
});
}

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

const setupOffset = setupAst.span.start;

emitNames = (visitor.firstArgAst as Identifier[]).map((ast) => {
const {
span: { start, end },
} = ast;
return setupScript.slice(start - setupOffset, end - setupOffset);
const { start, end } = getRealSpan(ast.span, setupOffset);
return setupScript.slice(start, end);
});
}

const keys = emitsAst.elements.map((ast) => {
const { span } = ast!.expression as Identifier;
const { start, end } = getRealSpan(span, offset);
return script.slice(start, end);
});

str = `${preCode}defineEmits([${[...new Set([...keys, ...emitNames])].join(
", ",
)}]);\n`;
Expand Down
9 changes: 2 additions & 7 deletions src/transform/expose.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,9 @@ function transformExpose(setupAst: SetupAst, config: Config) {
return "";
}

const {
span: { start, end },
} = ast;
const { start, end } = getRealSpan(ast.span, setupOffset);

return setupScript
.slice(start - setupOffset, end - setupOffset)
.replace(/{|}/g, "")
.split(",");
return setupScript.slice(start, end).replace(/{|}/g, "").split(",");
})
.filter((s) => Boolean(s.trim()));
}
Expand Down
8 changes: 6 additions & 2 deletions src/transform/script.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,10 @@ function transformScript(config: Config) {
? setupAst
: (setupAst.value as ArrowFunctionExpression);

const setupFnAstSpan = getRealSpan(setupFnAst.span, config.offset);
config.setupScript = config.script.slice(
setupFnAst.span.start - config.offset,
setupFnAst.span.end - config.offset,
setupFnAstSpan.start,
setupFnAstSpan.end,
);

const transformOption: TransformOption = {};
Expand Down Expand Up @@ -216,6 +217,9 @@ function transformScript(config: Config) {
}

try {
if (!transformOption.emits) {
transformOption.emits = transformEmits(null, setupFnAst, config);
}
transformOption.expose = transformExpose(setupFnAst, config);
transformOption.attrsAndSlots = transformAttrsAndSlots(setupFnAst, config);
} catch (error) {
Expand Down

0 comments on commit f273601

Please sign in to comment.