Skip to content

Commit 0e204ca

Browse files
committed
feat: support compile option
1 parent 212a44c commit 0e204ca

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

src/core/compiler/compile.ts

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import {
55
defaultOnError,
66
} from '@vue-vapor/compiler-dom'
77
import { extend, isString } from '@vue-vapor/shared'
8-
import { babelParse } from '@vue-macros/common'
98
import {
109
type VaporCodegenResult as BaseVaporCodegenResult,
1110
generate,
1211
} from '@vue-vapor/compiler-vapor'
12+
import { parse } from '@babel/parser'
1313
import {
1414
type DirectiveTransform,
1515
type NodeTransform,
@@ -62,11 +62,26 @@ export function compile(
6262

6363
const resolvedOptions = extend({}, options, {
6464
prefixIdentifiers,
65+
expressionPlugins: options.expressionPlugins || ['jsx'],
6566
})
67+
if (!__BROWSER__ && options.isTS) {
68+
const { expressionPlugins } = resolvedOptions
69+
if (!expressionPlugins.includes('typescript')) {
70+
resolvedOptions.expressionPlugins = [
71+
...(expressionPlugins || []),
72+
'typescript',
73+
]
74+
}
75+
}
6676

6777
const {
6878
body: [statement],
69-
} = isString(source) ? babelParse(source) : source
79+
} = isString(source)
80+
? parse(source, {
81+
sourceType: 'module',
82+
plugins: resolvedOptions.expressionPlugins,
83+
}).program
84+
: source
7085
let children!: JSXElement[] | JSXFragment['children']
7186
if (statement.type === 'ExpressionStatement') {
7287
children =
@@ -88,17 +103,6 @@ export function compile(
88103
const [nodeTransforms, directiveTransforms] =
89104
getBaseTransformPreset(prefixIdentifiers)
90105

91-
if (!__BROWSER__ && options.isTS) {
92-
const { expressionPlugins } = options
93-
if (!expressionPlugins || !expressionPlugins.includes('typescript')) {
94-
resolvedOptions.expressionPlugins = [
95-
...(expressionPlugins || []),
96-
'typescript',
97-
'jsx',
98-
]
99-
}
100-
}
101-
102106
const ir = transform(
103107
ast,
104108
extend({}, resolvedOptions, {

src/core/compiler/index.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
export { generate } from '@vue-vapor/compiler-vapor'
22

3-
export {
4-
// wrapTemplate,
5-
compile,
6-
type CompilerOptions,
7-
type TransformPreset,
8-
} from './compile'
3+
export { compile, type CompilerOptions, type TransformPreset } from './compile'
94
export * from './transform'
105

6+
export { resolveDirectiveNode, resolveNode } from './utils'
7+
118
export * from './ir'
129

1310
export { transformText } from './transforms/transformText'

src/core/transform.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export type RootNodes = {
1717
export function transformVueJsxVapor(
1818
code: string,
1919
id: string,
20-
_options?: Options,
20+
options?: Options,
2121
) {
2222
const s = new MagicStringAST(code)
2323
const rootNodes: RootNodes = []
@@ -41,8 +41,10 @@ export function transformVueJsxVapor(
4141
if (isJSXElement(node)) {
4242
let { code, vaporHelpers, preamble } = compile(s.sliceNode(node), {
4343
mode: 'module',
44-
prefixIdentifiers: false,
4544
inline: true,
45+
isTS: id.endsWith('tsx'),
46+
filename: id,
47+
...options?.compile,
4648
})
4749
vaporHelpers.forEach((helper) => importSet.add(helper))
4850
preamble = preamble.replace(/^[^\n]*;\n?/, '')

src/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import type { CompilerOptions } from './core/compiler'
12
import type { FilterPattern } from 'vite'
2-
import type { compile } from '@vue-vapor/compiler-dom'
33

44
export interface Options {
55
// define your plugin options here
66
include?: FilterPattern
77
exclude?: FilterPattern
8-
compile?: typeof compile
8+
compile?: CompilerOptions
99
}

test/transforms/_utils.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { babelParse } from '@vue-macros/common'
1+
import { parse } from '@babel/parser'
22
import {
33
type CompilerOptions,
44
generate,
@@ -11,7 +11,10 @@ export function makeCompile(options: CompilerOptions = {}) {
1111
return (source: string, overrideOptions: CompilerOptions = {}) => {
1212
const {
1313
body: [statement],
14-
} = babelParse(source)
14+
} = parse(source, {
15+
sourceType: 'module',
16+
plugins: ['jsx', 'typescript'],
17+
}).program
1518
let children!: JSXElement[] | JSXFragment['children']
1619
if (statement.type === 'ExpressionStatement') {
1720
children =

0 commit comments

Comments
 (0)