}"
`;
+
+exports[`sfc reactive props destructure > rest spread non-inline 1`] = `
+"import { createPropsRestProxy as _createPropsRestProxy } from 'vue'
+
+export default {
+ props: ['foo', 'bar'],
+ setup(__props, { expose: __expose }) {
+ __expose();
+
+ const rest = _createPropsRestProxy(__props, ["foo"])
+
+return { rest }
+}
+
+}"
+`;
})
})
+ test('rest spread non-inline', () => {
+ const { content, bindings } = compile(
+ `
+ <script setup>
+ const { foo, ...rest } = defineProps(['foo', 'bar'])
+ </script>
+ <template>{{ rest.bar }}</template>
+ `,
+ { inlineTemplate: false },
+ )
+ expect(content).toMatch(
+ `const rest = _createPropsRestProxy(__props, ["foo"])`,
+ )
+ assertCode(content)
+ expect(bindings).toStrictEqual({
+ foo: BindingTypes.PROPS,
+ bar: BindingTypes.PROPS,
+ rest: BindingTypes.SETUP_REACTIVE_CONST,
+ })
+ })
+
// #6960
test('computed static key', () => {
const { content, bindings } = compile(`
)
}
- // defineProps / defineEmits
+ // defineProps
const isDefineProps = processDefineProps(ctx, init, decl.id)
+ if (ctx.propsDestructureRestId) {
+ setupBindings[ctx.propsDestructureRestId] =
+ BindingTypes.SETUP_REACTIVE_CONST
+ }
+
+ // defineEmits
const isDefineEmits =
!isDefineProps && processDefineEmits(ctx, init, decl.id)
!isDefineEmits &&