diff --git a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
index b83f0dea6..b469ea52d 100644
--- a/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
+++ b/packages/compiler-vapor/__tests__/__snapshots__/compile.test.ts.snap
@@ -13,9 +13,101 @@ return root
}"
`;
+exports[`comile > directives > v-bind > simple expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, setAttr } from 'vue/vapor'
+const t0 = template(\`
\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+setAttr(n0, \\"id\\", undefined, id.value)
+})
+return root
+}"
+`;
+
+exports[`comile > directives > v-html > no expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, setHtml } from 'vue/vapor'
+const t0 = template(\`\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+setHtml(n0, undefined, \\"\\")
+})
+return root
+}"
+`;
+
+exports[`comile > directives > v-html > simple expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, setHtml } from 'vue/vapor'
+const t0 = template(\`\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+setHtml(n0, undefined, code.value)
+})
+return root
+}"
+`;
+
+exports[`comile > directives > v-on > simple expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, on } from 'vue/vapor'
+const t0 = template(\`\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+on(n0, \\"click\\", handleClick)
+})
+return root
+}"
+`;
+
+exports[`comile > directives > v-once 1`] = `
+"import { template, children, insert, setText, setAttr } from 'vue/vapor'
+const t0 = template(\`
\`)
+export function render() {
+const root = t0()
+const { 1: [n2],} = children(root)
+const n1 = document.createTextNode(msg.value)
+insert(n1, n0, 0 /* InsertPosition.FIRST */)
+setText(n1, undefined, msg.value)
+setAttr(n2, \\"class\\", undefined, clz.value)
+return root
+}"
+`;
+
+exports[`comile > directives > v-text > no expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, setText } from 'vue/vapor'
+const t0 = template(\`\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+setText(n0, undefined, \\"\\")
+})
+return root
+}"
+`;
+
+exports[`comile > directives > v-text > simple expression 1`] = `
+"import { watchEffect } from 'vue'
+import { template, setText } from 'vue/vapor'
+const t0 = template(\`\`)
+export function render() {
+const root = t0()
+watchEffect(() => {
+setText(n0, undefined, str.value)
+})
+return root
+}"
+`;
+
exports[`comile > static template 1`] = `
"import { template } from 'vue/vapor'
-const t0 = template(\`\`)
+const t0 = template(\`\`)
export function render() {
const root = t0()
return root
diff --git a/packages/compiler-vapor/__tests__/compile.test.ts b/packages/compiler-vapor/__tests__/compile.test.ts
index 2e02f28de..3092f731b 100644
--- a/packages/compiler-vapor/__tests__/compile.test.ts
+++ b/packages/compiler-vapor/__tests__/compile.test.ts
@@ -2,18 +2,18 @@ import { BindingTypes } from '@vue/compiler-dom'
import { compile } from '../src'
describe('comile', () => {
- it('static template', () => {
+ test('static template', () => {
const { code } = compile(
``,
- {},
)
expect(code).matchSnapshot()
})
- it('bindings', () => {
+ test('bindings', () => {
const { code } = compile(`{{ count }}
`, {
bindingMetadata: {
count: BindingTypes.SETUP_REF,
@@ -21,4 +21,76 @@ describe('comile', () => {
})
expect(code).matchSnapshot()
})
+
+ describe('directives', () => {
+ describe('v-bind', () => {
+ test('simple expression', () => {
+ const { code } = compile(``, {
+ bindingMetadata: {
+ id: BindingTypes.SETUP_REF,
+ },
+ })
+ expect(code).matchSnapshot()
+ })
+ })
+
+ describe('v-on', () => {
+ test('simple expression', () => {
+ const { code } = compile(``, {
+ bindingMetadata: {
+ handleClick: BindingTypes.SETUP_CONST,
+ },
+ })
+ expect(code).matchSnapshot()
+ })
+ })
+
+ describe('v-html', () => {
+ test('simple expression', () => {
+ const { code } = compile(``, {
+ bindingMetadata: {
+ code: BindingTypes.SETUP_REF,
+ },
+ })
+ expect(code).matchSnapshot()
+ })
+
+ test('no expression', () => {
+ const { code } = compile(``)
+ expect(code).matchSnapshot()
+ })
+ })
+
+ describe('v-text', () => {
+ test('simple expression', () => {
+ const { code } = compile(``, {
+ bindingMetadata: {
+ str: BindingTypes.SETUP_REF,
+ },
+ })
+ expect(code).matchSnapshot()
+ })
+
+ test('no expression', () => {
+ const { code } = compile(``)
+ expect(code).matchSnapshot()
+ })
+ })
+
+ test('v-once', () => {
+ const { code } = compile(
+ `
+ {{ msg }}
+
+
`,
+ {
+ bindingMetadata: {
+ msg: BindingTypes.SETUP_REF,
+ clz: BindingTypes.SETUP_REF,
+ },
+ },
+ )
+ expect(code).matchSnapshot()
+ })
+ })
})
diff --git a/packages/compiler-vapor/src/compile.ts b/packages/compiler-vapor/src/compile.ts
index d31dad374..3ad874e8a 100644
--- a/packages/compiler-vapor/src/compile.ts
+++ b/packages/compiler-vapor/src/compile.ts
@@ -11,7 +11,7 @@ import { generate } from './generate'
// code/AST -> IR -> JS codegen
export function compile(
template: string | RootNode,
- options: CompilerOptions,
+ options: CompilerOptions = {},
): CodegenResult {
const ast = isString(template) ? baseParse(template, options) : template
const ir = transform(ast, options)