Skip to content

Commit

Permalink
feat(compiler-sfc): mark props destructure as experimental and requir…
Browse files Browse the repository at this point in the history
…e explicit opt-in
  • Loading branch information
yyx990803 committed Apr 15, 2023
1 parent 760755f commit 6b13e04
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// 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\\"
Expand All @@ -20,7 +20,7 @@ return (_ctx, _cache) => {
}"
`;

exports[`sfc props transform > basic usage 1`] = `
exports[`sfc reactive props destructure > basic usage 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
Expand All @@ -39,7 +39,7 @@ return (_ctx, _cache) => {
}"
`;

exports[`sfc props transform > computed static key 1`] = `
exports[`sfc reactive props destructure > computed static key 1`] = `
"import { toDisplayString as _toDisplayString } from \\"vue\\"
Expand All @@ -58,7 +58,7 @@ return (_ctx, _cache) => {
}"
`;

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 {
Expand All @@ -77,7 +77,7 @@ return () => {}
}"
`;

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 {
Expand All @@ -97,7 +97,7 @@ return () => {}
}"
`;

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({
Expand All @@ -116,7 +116,7 @@ return () => {}
})"
`;

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({
Expand All @@ -138,7 +138,7 @@ return () => {}
})"
`;

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\\"
Expand All @@ -156,7 +156,7 @@ return (_ctx, _cache) => {
}"
`;

exports[`sfc props transform > nested scope 1`] = `
exports[`sfc reactive props destructure > nested scope 1`] = `
"export default {
props: ['foo', 'bar'],
setup(__props) {
Expand All @@ -173,7 +173,7 @@ return () => {}
}"
`;

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\\"
Expand All @@ -192,7 +192,7 @@ return (_ctx, _cache) => {
}"
`;

exports[`sfc props transform > rest spread 1`] = `
exports[`sfc reactive props destructure > rest spread 1`] = `
"import { createPropsRestProxy as _createPropsRestProxy } from 'vue'
export default {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { BindingTypes } from '@vue/compiler-core'
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
})
}
Expand Down
22 changes: 14 additions & 8 deletions packages/compiler-sfc/src/compileScript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,6 @@ export interface SFCScriptCompileOptions {
* 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().
Expand Down Expand Up @@ -108,8 +100,14 @@ export interface SFCScriptCompileOptions {
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
Expand All @@ -119,6 +117,14 @@ export interface SFCScriptCompileOptions {
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 {
Expand Down
8 changes: 8 additions & 0 deletions packages/compiler-sfc/src/script/definePropsDestructure.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ export function processPropsDestructure(
ctx: ScriptCompileContext,
declId: ObjectPattern
) {
if (!ctx.options.propsDestructure) {
return
}

ctx.propsDestructureDecl = declId

const registerBinding = (
Expand Down Expand Up @@ -91,6 +95,10 @@ export function transformDestructuredProps(
ctx: ScriptCompileContext,
vueImportAliases: Record<string, string>
) {
if (!ctx.options.propsDestructure) {
return
}

const rootScope: Scope = {}
const scopeStack: Scope[] = [rootScope]
let currentScope: Scope = rootScope
Expand Down

0 comments on commit 6b13e04

Please sign in to comment.