/
index.ts
29 lines (22 loc) · 783 Bytes
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { MagicStringAST, generateTransform, parseSFC } from '@vue-macros/common'
export function transformExportRender(code: string, id: string) {
const { scriptSetup, getSetupAst } = parseSFC(code, id)
if (!scriptSetup) return
const s = new MagicStringAST(code)
const nodes = getSetupAst()!.body
const offset = scriptSetup.loc.start.offset
let codegen = ''
for (const stmt of nodes) {
if (
stmt.type === 'ExportDefaultDeclaration' &&
stmt.exportKind === 'value'
) {
codegen = s.sliceNode(stmt.declaration, { offset })
s.removeNode(stmt, { offset })
}
}
if (codegen.length === 0) return
codegen = `defineRender(${codegen})`
s.prependLeft(scriptSetup.loc.end.offset, `${codegen}\n`)
return generateTransform(s, id)
}