]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
feat(compiler-sfc): promote defineModel stable (#9598)
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Tue, 12 Dec 2023 09:28:40 +0000 (17:28 +0800)
committerGitHub <noreply@github.com>
Tue, 12 Dec 2023 09:28:40 +0000 (17:28 +0800)
packages/compiler-sfc/__tests__/compileScript/defineModel.spec.ts
packages/compiler-sfc/src/compileScript.ts
packages/compiler-sfc/src/script/defineModel.ts
packages/runtime-core/src/apiSetupHelpers.ts
packages/sfc-playground/src/App.vue
packages/sfc-playground/vite.config.ts

index 46890109cd1a07e27c5b715b169e1d711dcd79ba..45e5be895dd22768e09a278a6a099bba3ef6b9cf 100644 (file)
@@ -10,8 +10,7 @@ describe('defineModel()', () => {
       const c = defineModel('count')
       const toString = defineModel('toString', { type: Function })
       </script>
-      `,
-      { defineModel: true }
+      `
     )
     assertCode(content)
     expect(content).toMatch('props: {')
@@ -44,8 +43,7 @@ describe('defineModel()', () => {
       defineEmits(['change'])
       const count = defineModel({ default: 0 })
       </script>
-    `,
-      { defineModel: true }
+    `
     )
     assertCode(content)
     expect(content).toMatch(`props: /*#__PURE__*/_mergeModels({ foo: String }`)
@@ -66,8 +64,7 @@ describe('defineModel()', () => {
       defineProps(['foo', 'bar'])
       const count = defineModel('count')
       </script>
-    `,
-      { defineModel: true }
+    `
     )
     assertCode(content)
     expect(content).toMatch(`props: /*#__PURE__*/_mergeModels(['foo', 'bar'], {
@@ -94,8 +91,7 @@ describe('defineModel()', () => {
 
       const local = true
       const hoist = defineModel('hoist', { local })
-      </script>`,
-      { defineModel: true }
+      </script>`
     )
     assertCode(content)
     expect(content).toMatch(`_useModel(__props, "modelValue", { local: true })`)
@@ -115,8 +111,7 @@ describe('defineModel()', () => {
       const disabled = defineModel<number>('disabled', { required: false })
       const any = defineModel<any | boolean>('any')
       </script>
-      `,
-      { defineModel: true }
+      `
     )
     assertCode(content)
     expect(content).toMatch('"modelValue": { type: [Boolean, String] }')
@@ -155,7 +150,7 @@ describe('defineModel()', () => {
       const optional = defineModel<string>('optional', { required: false })
       </script>
       `,
-      { defineModel: true, isProd: true }
+      { isProd: true }
     )
     assertCode(content)
     expect(content).toMatch('"modelValue": { type: Boolean }')
index 3a375a05d20cf4dd9de1a883c3f61cde6baadebd..2f71e6f0aa9d33cc0f763b5c6b1a7d7a323b2209 100644 (file)
@@ -98,11 +98,6 @@ export interface SFCScriptCompileOptions {
    * @default true
    */
   hoistStatic?: boolean
-  /**
-   * (**Experimental**) Enable macro `defineModel`
-   * @default false
-   */
-  defineModel?: boolean
   /**
    * (**Experimental**) Enable reactive destructure for `defineProps`
    * @default false
index c104eb306ae86cb540fe3404f20598af21f285f9..2d1eb523217559ccb61b3df89cc0868988ebd34e 100644 (file)
@@ -8,7 +8,6 @@ import {
   toRuntimeTypeString
 } from './utils'
 import { BindingTypes, unwrapTSNode } from '@vue/compiler-dom'
-import { warnOnce } from '../warn'
 
 export const DEFINE_MODEL = 'defineModel'
 
@@ -27,21 +26,6 @@ export function processDefineModel(
     return false
   }
 
-  if (!ctx.options.defineModel) {
-    warnOnce(
-      `defineModel() is an experimental feature and disabled by default.\n` +
-        `To enable it, follow the RFC at https://github.com/vuejs/rfcs/discussions/503.`
-    )
-    return false
-  }
-
-  warnOnce(
-    `This project is using defineModel(), which is an experimental ` +
-      `feature. It may receive breaking changes or be removed in the future, so ` +
-      `use at your own risk.\n` +
-      `To stay updated, follow the RFC at https://github.com/vuejs/rfcs/discussions/503.`
-  )
-
   ctx.hasDefineModelCall = true
 
   const type =
index 7d056bfdb48276d64eca1b8a62ab49f46bfe66aa..34fdcaee2e82137a36dbcfcbc24d828623891f58 100644 (file)
@@ -219,7 +219,7 @@ export function defineSlots<
 }
 
 /**
- * (**Experimental**) Vue `<script setup>` compiler macro for declaring a
+ * Vue `<script setup>` compiler macro for declaring a
  * two-way binding prop that can be consumed via `v-model` from the parent
  * component. This will declare a prop with the same name and a corresponding
  * `update:propName` event.
index e61ef90583da162deec189cc004b8e396d8a00de..360560c4ebcbdb15f42a8337a2122057807cd2d6 100644 (file)
@@ -56,8 +56,7 @@ const sfcOptions: SFCOptions = {
   script: {
     inlineTemplate: !useDevMode.value,
     isProd: !useDevMode.value,
-    propsDestructure: true,
-    defineModel: true
+    propsDestructure: true
   },
   style: {
     isProd: !useDevMode.value
index 8df331baf39617752bf6882480d751e355b560d5..54db67b9818b511fbe3caba6ae627f6733ae9e9d 100644 (file)
@@ -10,7 +10,6 @@ export default defineConfig({
   plugins: [
     vue({
       script: {
-        defineModel: true,
         fs: {
           fileExists: fs.existsSync,
           readFile: file => fs.readFileSync(file, 'utf-8')