diff --git a/packages/vue-script-setup-converter/src/lib/convertSrc.ts b/packages/vue-script-setup-converter/src/lib/convertSrc.ts index b328c77..5c76f93 100644 --- a/packages/vue-script-setup-converter/src/lib/convertSrc.ts +++ b/packages/vue-script-setup-converter/src/lib/convertSrc.ts @@ -14,6 +14,7 @@ import { convertPageMeta } from "./converter/pageMetaConverter"; import { convertProps } from "./converter/propsConverter"; import { convertSetup } from "./converter/setupConverter"; import { convertEmits } from "./converter/emitsConverter"; +import { convertComponents } from "./converter/componentsConverter"; export const convertSrc = (input: string) => { const { @@ -48,6 +49,7 @@ export const convertSrc = (input: string) => { const props = convertProps(callexpression, lang) ?? ""; const emits = convertEmits(callexpression, lang) ?? ""; const statement = convertSetup(callexpression) ?? ""; + const components = convertComponents(callexpression) ?? ""; const statements = project.createSourceFile("new.tsx"); @@ -76,6 +78,8 @@ export const convertSrc = (input: string) => { statements.addStatements(pageMeta); } + statements.addStatements(components); + statements.addStatements(props); statements.addStatements(emits); statements.addStatements(statement); diff --git a/packages/vue-script-setup-converter/src/lib/converter/componentsConverter.spec.ts b/packages/vue-script-setup-converter/src/lib/converter/componentsConverter.spec.ts new file mode 100644 index 0000000..dd1810e --- /dev/null +++ b/packages/vue-script-setup-converter/src/lib/converter/componentsConverter.spec.ts @@ -0,0 +1,50 @@ +import { expect, test } from "vitest"; +import type { CallExpression } from "ts-morph"; +import { ScriptTarget, SyntaxKind, Project } from "ts-morph"; +import { parse } from "@vue/compiler-sfc"; +import { getNodeByKind } from "../helpers/node"; +import { convertComponents } from "./componentsConverter"; + +const parseScript = (input: string, lang: "js" | "ts" = "js") => { + const { + descriptor: { script }, + } = parse(input); + + const project = new Project({ + tsConfigFilePath: "tsconfig.json", + compilerOptions: { + target: ScriptTarget.Latest, + }, + }); + + const sourceFile = project.createSourceFile("s.tsx", script?.content ?? ""); + + const callexpression = getNodeByKind(sourceFile, SyntaxKind.CallExpression); + + const components = convertComponents(callexpression as CallExpression); + + return components; +}; + +test("should be converted to defineAsyncComponent", () => { + const source = `