`;
exports[`SFC compile <script setup> inlineTemplate mode avoid unref() when necessary 1`] = `
-"import { createVNode as _createVNode, toDisplayString as _toDisplayString, unref as _unref, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
+"import { unref as _unref, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
import { ref } from 'vue'
- import Foo from './Foo.vue'
+ import Foo, { bar } from './Foo.vue'
import other from './util'
export default {
return (_ctx, _cache) => {
return (_openBlock(), _createBlock(_Fragment, null, [
- _createVNode(Foo),
+ _createVNode(Foo, null, {
+ default: _withCtx(() => [
+ _createTextVNode(_toDisplayString(_unref(bar)), 1 /* TEXT */)
+ ]),
+ _: 1 /* STABLE */
+ }),
_createVNode(\\"div\\", { onClick: fn }, _toDisplayString(count.value) + \\" \\" + _toDisplayString(constant) + \\" \\" + _toDisplayString(_unref(maybe)) + \\" \\" + _toDisplayString(_unref(lett)) + \\" \\" + _toDisplayString(_unref(other)), 1 /* TEXT */)
], 64 /* STABLE_FRAGMENT */))
}
const { content } = compile(
`<script setup>
import { ref } from 'vue'
- import Foo from './Foo.vue'
+ import Foo, { bar } from './Foo.vue'
import other from './util'
const count = ref(0)
const constant = {}
function fn() {}
</script>
<template>
- <Foo/>
+ <Foo>{{ bar }}</Foo>
<div @click="fn">{{ count }} {{ constant }} {{ maybe }} {{ lett }} {{ other }}</div>
</template>
`,
{ inlineTemplate: true }
)
// no need to unref vue component import
- expect(content).toMatch(`createVNode(Foo)`)
+ expect(content).toMatch(`createVNode(Foo,`)
+ // #2699 should unref named imports from .vue
+ expect(content).toMatch(`unref(bar)`)
// should unref other imports
expect(content).toMatch(`unref(other)`)
// no need to unref constant literals
string,
{
isType: boolean
- imported: string | null
+ imported: string
source: string
}
> = Object.create(null)
}
userImports[local] = {
isType,
- imported: imported || null,
+ imported: imported || 'default',
source
}
}
for (const key in typeDeclaredProps) {
bindingMetadata[key] = BindingTypes.PROPS
}
- for (const [key, { isType, source }] of Object.entries(userImports)) {
+ for (const [key, { isType, imported, source }] of Object.entries(
+ userImports
+ )) {
if (isType) continue
bindingMetadata[key] =
- source.endsWith('.vue') || source === 'vue'
+ (imported === 'default' && source.endsWith('.vue')) || source === 'vue'
? BindingTypes.SETUP_CONST
: BindingTypes.SETUP_MAYBE_REF
}