// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-exports[`sfc props transform > aliasing 1`] = `
+exports[`sfc reactive props destructure > aliasing 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
}"
`;
-exports[`sfc props transform > basic usage 1`] = `
+exports[`sfc reactive props destructure > basic usage 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
}"
`;
-exports[`sfc props transform > computed static key 1`] = `
+exports[`sfc reactive props destructure > computed static key 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
}"
`;
-exports[`sfc props transform > default values w/ array runtime declaration 1`] = `
+exports[`sfc reactive props destructure > default values w/ array runtime declaration 1`] = `
"import { mergeDefaults as _mergeDefaults } from 'vue'
export default {
}"
`;
-exports[`sfc props transform > default values w/ object runtime declaration 1`] = `
+exports[`sfc reactive props destructure > default values w/ object runtime declaration 1`] = `
"import { mergeDefaults as _mergeDefaults } from 'vue'
export default {
}"
`;
-exports[`sfc props transform > default values w/ type declaration 1`] = `
+exports[`sfc reactive props destructure > default values w/ type declaration 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export default /*#__PURE__*/_defineComponent({
})"
`;
-exports[`sfc props transform > default values w/ type declaration, prod mode 1`] = `
+exports[`sfc reactive props destructure > default values w/ type declaration, prod mode 1`] = `
"import { defineComponent as _defineComponent } from 'vue'
export default /*#__PURE__*/_defineComponent({
})"
`;
-exports[`sfc props transform > multiple variable declarations 1`] = `
+exports[`sfc reactive props destructure > multiple variable declarations 1`] = `
"import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \\"vue\\"
}"
`;
-exports[`sfc props transform > nested scope 1`] = `
+exports[`sfc reactive props destructure > nested scope 1`] = `
"export default {
props: ['foo', 'bar'],
setup(__props) {
}"
`;
-exports[`sfc props transform > non-identifier prop names 1`] = `
+exports[`sfc reactive props destructure > non-identifier prop names 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
}"
`;
-exports[`sfc props transform > rest spread 1`] = `
+exports[`sfc reactive props destructure > rest spread 1`] = `
"import { createPropsRestProxy as _createPropsRestProxy } from 'vue'
export default {
import { SFCScriptCompileOptions } from '../../src'
import { compileSFCScript, assertCode } from '../utils'
-describe('sfc props transform', () => {
+describe('sfc reactive props destructure', () => {
function compile(src: string, options?: Partial<SFCScriptCompileOptions>) {
return compileSFCScript(src, {
inlineTemplate: true,
+ propsDestructure: true,
...options
})
}
* https://babeljs.io/docs/en/babel-parser#plugins
*/
babelParserPlugins?: ParserPlugin[]
- /**
- * (Experimental) Enable syntax transform for using refs without `.value` and
- * using destructured props with reactivity
- * @deprecated the Reactivity Transform proposal has been dropped. This
- * feature will be removed from Vue core in 3.4. If you intend to continue
- * using it, disable this and switch to the [Vue Macros implementation](https://vue-macros.sxzz.moe/features/reactivity-transform.html).
- */
- reactivityTransform?: boolean
/**
* Compile the template and inline the resulting render function
* directly inside setup().
hoistStatic?: boolean
/**
* (**Experimental**) Enable macro `defineModel`
+ * @default false
*/
defineModel?: boolean
+ /**
+ * (**Experimental**) Enable reactive destructure for `defineProps`
+ * @default false
+ */
+ propsDestructure?: boolean
/**
* File system access methods to be used when resolving types
* imported in SFC macros. Defaults to ts.sys in Node.js, can be overwritten
fileExists(file: string): boolean
readFile(file: string): string | undefined
}
+ /**
+ * (Experimental) Enable syntax transform for using refs without `.value` and
+ * using destructured props with reactivity
+ * @deprecated the Reactivity Transform proposal has been dropped. This
+ * feature will be removed from Vue core in 3.4. If you intend to continue
+ * using it, disable this and switch to the [Vue Macros implementation](https://vue-macros.sxzz.moe/features/reactivity-transform.html).
+ */
+ reactivityTransform?: boolean
}
export interface ImportBinding {
ctx: ScriptCompileContext,
declId: ObjectPattern
) {
+ if (!ctx.options.propsDestructure) {
+ return
+ }
+
ctx.propsDestructureDecl = declId
const registerBinding = (
ctx: ScriptCompileContext,
vueImportAliases: Record<string, string>
) {
+ if (!ctx.options.propsDestructure) {
+ return
+ }
+
const rootScope: Scope = {}
const scopeStack: Scope[] = [rootScope]
let currentScope: Scope = rootScope