From 6b5f5d6ca3cf1423d40c86af466b37ee80ed229f Mon Sep 17 00:00:00 2001
From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com>
Date: Thu, 25 Mar 2021 22:40:02 +0300
Subject: [PATCH 01/17] added no-invalid-model-keys rule
---
lib/rules/no-invalid-model-keys.js | 56 ++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
create mode 100644 lib/rules/no-invalid-model-keys.js
diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js
new file mode 100644
index 000000000..85681039b
--- /dev/null
+++ b/lib/rules/no-invalid-model-keys.js
@@ -0,0 +1,56 @@
+/**
+ * @fileoverview Requires valid keys in model property.
+ * @author Alex Sokolov
+ */
+'use strict'
+
+const utils = require('../utils')
+
+/**
+ * @typedef {import('../utils').GroupName} GroupName
+ */
+
+// ------------------------------------------------------------------------------
+// Rule Definition
+// ------------------------------------------------------------------------------
+/** @type {GroupName[]} */
+const GROUP_NAMES = ['model']
+
+const VALID_MODEL_KEYS = ['prop', 'event']
+
+module.exports = {
+ meta: {
+ type: 'problem',
+ docs: {
+ description: 'require valid keys in model prop',
+ categories: ['vue3-recommended', 'recommended'],
+ url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html'
+ },
+ fixable: null,
+ schema: []
+ },
+ /** @param {RuleContext} context */
+ create(context) {
+ const groups = new Set(GROUP_NAMES)
+
+ // ----------------------------------------------------------------------
+ // Public
+ // ----------------------------------------------------------------------
+
+ return utils.executeOnVue(context, (obj) => {
+ const properties = utils.iterateProperties(obj, groups)
+
+ for (const o of properties) {
+ if (VALID_MODEL_KEYS.indexOf(o.name) === -1) {
+ context.report({
+ node: o.node,
+ message: "Invalid key '{{name}}' in model prop.",
+ data: {
+ name: o.name
+ }
+ })
+ }
+ }
+ })
+ }
+}
From 22a2db6b75ba941f0acc2e020e48a6cf153764b1 Mon Sep 17 00:00:00 2001
From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com>
Date: Thu, 25 Mar 2021 22:40:17 +0300
Subject: [PATCH 02/17] added no-invalid-model-keys to rules list
---
lib/index.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/index.js b/lib/index.js
index cc18e3055..a5f632314 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -81,6 +81,7 @@ module.exports = {
'no-empty-component-block': require('./rules/no-empty-component-block'),
'no-empty-pattern': require('./rules/no-empty-pattern'),
'no-extra-parens': require('./rules/no-extra-parens'),
+ 'no-invalid-model-keys': require('./rules/no-invalid-model-keys'),
'no-irregular-whitespace': require('./rules/no-irregular-whitespace'),
'no-lifecycle-after-await': require('./rules/no-lifecycle-after-await'),
'no-lone-template': require('./rules/no-lone-template'),
From 23b2b4e0c4137830f4683f195dccd66663f1717a Mon Sep 17 00:00:00 2001
From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com>
Date: Thu, 25 Mar 2021 22:40:22 +0300
Subject: [PATCH 03/17] added no-invalid-model-keys tests
---
tests/lib/rules/no-invalid-model-keys.js | 156 +++++++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 tests/lib/rules/no-invalid-model-keys.js
diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js
new file mode 100644
index 000000000..237329df8
--- /dev/null
+++ b/tests/lib/rules/no-invalid-model-keys.js
@@ -0,0 +1,156 @@
+/**
+ * @fileoverview Prevents invalid keys in model property.
+ * @author Alex Sokolov
+ */
+'use strict'
+
+// ------------------------------------------------------------------------------
+// Requirements
+// ------------------------------------------------------------------------------
+
+const rule = require('../../../lib/rules/no-invalid-model-keys')
+const RuleTester = require('eslint').RuleTester
+
+// ------------------------------------------------------------------------------
+// Tests
+// ------------------------------------------------------------------------------
+
+const ruleTester = new RuleTester({
+ parserOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module'
+ }
+})
+ruleTester.run('no-invalid-model-keys', rule, {
+ valid: [
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ prop: 'list'
+ }
+ }
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ event: 'update'
+ }
+ }
+ `
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ prop: 'list',
+ event: 'update'
+ }
+ }
+ `
+ }
+ ],
+
+ invalid: [
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ props: 'list'
+ }
+ }
+ `,
+ errors: ["Invalid key 'props' in model prop."]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ events: 'update'
+ }
+ }
+ `,
+ errors: ["Invalid key 'events' in model prop."]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ props: 'list',
+ event: 'update'
+ }
+ }
+ `,
+ errors: ["Invalid key 'props' in model prop."]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ prop: 'list',
+ events: 'update'
+ }
+ }
+ `,
+ errors: ["Invalid key 'events' in model prop."]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ props: 'list',
+ events: 'update'
+ }
+ }
+ `,
+ errors: [
+ "Invalid key 'props' in model prop.",
+ "Invalid key 'events' in model prop."
+ ]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ prop: 'checked',
+ props: 'list',
+ event: 'update'
+ },
+ data () {
+ return {
+ dat: null
+ }
+ }
+ }
+ `,
+ errors: ["Invalid key 'props' in model prop."]
+ },
+ {
+ filename: 'test.vue',
+ code: `
+ export default {
+ model: {
+ name: 'checked',
+ props: 'list',
+ event: 'update'
+ }
+ }
+ `,
+ errors: [
+ "Invalid key 'name' in model prop.",
+ "Invalid key 'props' in model prop."
+ ]
+ }
+ ]
+})
From 20b117d28a2295a52c4b8d08888cdb99ff2d9d19 Mon Sep 17 00:00:00 2001
From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com>
Date: Thu, 25 Mar 2021 22:50:58 +0300
Subject: [PATCH 04/17] removed unused
---
tests/lib/rules/no-invalid-model-keys.js | 5 -----
1 file changed, 5 deletions(-)
diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js
index 237329df8..25ba4d94c 100644
--- a/tests/lib/rules/no-invalid-model-keys.js
+++ b/tests/lib/rules/no-invalid-model-keys.js
@@ -126,11 +126,6 @@ ruleTester.run('no-invalid-model-keys', rule, {
prop: 'checked',
props: 'list',
event: 'update'
- },
- data () {
- return {
- dat: null
- }
}
}
`,
From a1bb186f245be2af4ed3d26afba74181573c9506 Mon Sep 17 00:00:00 2001
From: Alex Sokolov <4497128+Alex-Sokolov@users.noreply.github.com>
Date: Thu, 25 Mar 2021 22:51:09 +0300
Subject: [PATCH 05/17] added docs for no-invalid-model-keys
---
docs/rules/no-invalid-model-keys.md | 108 ++++++++++++++++++++++++++++
1 file changed, 108 insertions(+)
create mode 100644 docs/rules/no-invalid-model-keys.md
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
new file mode 100644
index 000000000..ff39896da
--- /dev/null
+++ b/docs/rules/no-invalid-model-keys.md
@@ -0,0 +1,108 @@
+---
+pageClass: rule-details
+sidebarDepth: 0
+title: vue/no-invalid-model-keys
+description: require valid keys in model prop
+since: v3.9.0
+---
+# vue/no-invalid-model-keys
+
+> require valid keys in model prop
+
+- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`.
+
+## :book: Rule Details
+
+This rule is aimed at preventing invalid keys in model property.
+
+
+```vue
+
+```
+
+
+
+```vue
+
+```
+
+
+
+```vue
+
+```
+
+
+
+```vue
+
+```
+
+
+
+```vue
+
+```
+
+
+
+```vue
+
+```
+
+
+## :rocket: Version
+
+This rule was introduced in eslint-plugin-vue v7.9.0
+
+## :mag: Implementation
+
+- [Rule source](https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/rules/no-invalid-model-keys.js)
+- [Test source](https://github.com/vuejs/eslint-plugin-vue/blob/master/tests/lib/rules/no-invalid-model-keys.js)
From 694308416fa6e09b8c1f51f01229bdd43d06617b Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:41:40 +0300
Subject: [PATCH 06/17] Update docs/rules/no-invalid-model-keys.md
Co-authored-by: Yosuke Ota
---
docs/rules/no-invalid-model-keys.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index ff39896da..be03625df 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -3,7 +3,6 @@ pageClass: rule-details
sidebarDepth: 0
title: vue/no-invalid-model-keys
description: require valid keys in model prop
-since: v3.9.0
---
# vue/no-invalid-model-keys
From 0d9b002dbecb3f5cad7fb2626f9937c1d640f62a Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:41:52 +0300
Subject: [PATCH 07/17] Update docs/rules/no-invalid-model-keys.md
Co-authored-by: Yosuke Ota
---
docs/rules/no-invalid-model-keys.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index be03625df..023d2c06a 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -8,7 +8,6 @@ description: require valid keys in model prop
> require valid keys in model prop
-- :gear: This rule is included in all of `"plugin:vue/vue3-essential"`, `"plugin:vue/essential"`, `"plugin:vue/vue3-strongly-recommended"`, `"plugin:vue/strongly-recommended"`, `"plugin:vue/vue3-recommended"` and `"plugin:vue/recommended"`.
## :book: Rule Details
From ad8ed87e57401e85972629a08a325b1cce981aa8 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:41:57 +0300
Subject: [PATCH 08/17] Update docs/rules/no-invalid-model-keys.md
Co-authored-by: Yosuke Ota
---
docs/rules/no-invalid-model-keys.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index 023d2c06a..c2cc55bbf 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -6,7 +6,7 @@ description: require valid keys in model prop
---
# vue/no-invalid-model-keys
-> require valid keys in model prop
+> require valid keys in model option
## :book: Rule Details
From 6af82fdc6d6a28738692ccfd4139699049738b6a Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:42:04 +0300
Subject: [PATCH 09/17] Update docs/rules/no-invalid-model-keys.md
Co-authored-by: Yosuke Ota
---
docs/rules/no-invalid-model-keys.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index c2cc55bbf..269d3af33 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -11,7 +11,7 @@ description: require valid keys in model prop
## :book: Rule Details
-This rule is aimed at preventing invalid keys in model property.
+This rule is aimed at preventing invalid keys in model option.
```vue
From 518b26a21a1b8c51d8e9afd9b5f475f25bbf6536 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:42:09 +0300
Subject: [PATCH 10/17] Update lib/rules/no-invalid-model-keys.js
Co-authored-by: Yosuke Ota
---
lib/rules/no-invalid-model-keys.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js
index 85681039b..9bd60cce0 100644
--- a/lib/rules/no-invalid-model-keys.js
+++ b/lib/rules/no-invalid-model-keys.js
@@ -22,7 +22,7 @@ module.exports = {
meta: {
type: 'problem',
docs: {
- description: 'require valid keys in model prop',
+ description: 'require valid keys in model option',
categories: ['vue3-recommended', 'recommended'],
url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html'
},
From b52f4ac2f55aaf4ac45d3bb41e52e1c60db78dcd Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:42:15 +0300
Subject: [PATCH 11/17] Update lib/rules/no-invalid-model-keys.js
Co-authored-by: Yosuke Ota
---
lib/rules/no-invalid-model-keys.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js
index 9bd60cce0..51e0d72f1 100644
--- a/lib/rules/no-invalid-model-keys.js
+++ b/lib/rules/no-invalid-model-keys.js
@@ -23,7 +23,7 @@ module.exports = {
type: 'problem',
docs: {
description: 'require valid keys in model option',
- categories: ['vue3-recommended', 'recommended'],
+ categories: undefined,
url: 'https://eslint.vuejs.org/rules/no-invalid-model-keys.html'
},
fixable: null,
From 358f9d24c8546226aab110dd895c0052d2ef275d Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:42:22 +0300
Subject: [PATCH 12/17] Update docs/rules/no-invalid-model-keys.md
Co-authored-by: Yosuke Ota
---
docs/rules/no-invalid-model-keys.md | 3 ---
1 file changed, 3 deletions(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index 269d3af33..559b3f4bb 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -96,9 +96,6 @@ export default {
```
-## :rocket: Version
-
-This rule was introduced in eslint-plugin-vue v7.9.0
## :mag: Implementation
From d3e55c606dade216de20a82065651f1d422c32d9 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:50:28 +0300
Subject: [PATCH 13/17] Update no-invalid-model-keys.md
---
docs/rules/no-invalid-model-keys.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/rules/no-invalid-model-keys.md b/docs/rules/no-invalid-model-keys.md
index 559b3f4bb..b69cbf952 100644
--- a/docs/rules/no-invalid-model-keys.md
+++ b/docs/rules/no-invalid-model-keys.md
@@ -2,7 +2,7 @@
pageClass: rule-details
sidebarDepth: 0
title: vue/no-invalid-model-keys
-description: require valid keys in model prop
+description: require valid keys in model option
---
# vue/no-invalid-model-keys
From 15f84f9bcd4535a7a46fbadd4e2b282b423c0001 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:51:35 +0300
Subject: [PATCH 14/17] Update no-invalid-model-keys.js
---
lib/rules/no-invalid-model-keys.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js
index 51e0d72f1..376da9094 100644
--- a/lib/rules/no-invalid-model-keys.js
+++ b/lib/rules/no-invalid-model-keys.js
@@ -1,5 +1,5 @@
/**
- * @fileoverview Requires valid keys in model property.
+ * @fileoverview Requires valid keys in model option.
* @author Alex Sokolov
*/
'use strict'
From cf209ed2fa61eaf4dfdfdcbcb2dc74b2d5ea14f1 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:52:02 +0300
Subject: [PATCH 15/17] Update no-invalid-model-keys.js
---
lib/rules/no-invalid-model-keys.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/rules/no-invalid-model-keys.js b/lib/rules/no-invalid-model-keys.js
index 376da9094..3a4b7ccf6 100644
--- a/lib/rules/no-invalid-model-keys.js
+++ b/lib/rules/no-invalid-model-keys.js
@@ -44,7 +44,7 @@ module.exports = {
if (VALID_MODEL_KEYS.indexOf(o.name) === -1) {
context.report({
node: o.node,
- message: "Invalid key '{{name}}' in model prop.",
+ message: "Invalid key '{{name}}' in model option.",
data: {
name: o.name
}
From 2105efdd20734a2c363420719da9a5a35b76d605 Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:52:42 +0300
Subject: [PATCH 16/17] Update no-invalid-model-keys.js
---
tests/lib/rules/no-invalid-model-keys.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js
index 25ba4d94c..78d017002 100644
--- a/tests/lib/rules/no-invalid-model-keys.js
+++ b/tests/lib/rules/no-invalid-model-keys.js
@@ -1,5 +1,5 @@
/**
- * @fileoverview Prevents invalid keys in model property.
+ * @fileoverview Prevents invalid keys in model option.
* @author Alex Sokolov
*/
'use strict'
From 6b4cdfe6ba74b36f22f9bc7bf458ab19c1f3e93d Mon Sep 17 00:00:00 2001
From: Alexander Sokolov
Date: Wed, 31 Mar 2021 10:53:21 +0300
Subject: [PATCH 17/17] Update no-invalid-model-keys.js
---
tests/lib/rules/no-invalid-model-keys.js | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/tests/lib/rules/no-invalid-model-keys.js b/tests/lib/rules/no-invalid-model-keys.js
index 78d017002..ebe4de973 100644
--- a/tests/lib/rules/no-invalid-model-keys.js
+++ b/tests/lib/rules/no-invalid-model-keys.js
@@ -66,7 +66,7 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
}
`,
- errors: ["Invalid key 'props' in model prop."]
+ errors: ["Invalid key 'props' in model option."]
},
{
filename: 'test.vue',
@@ -77,7 +77,7 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
}
`,
- errors: ["Invalid key 'events' in model prop."]
+ errors: ["Invalid key 'events' in model option."]
},
{
filename: 'test.vue',
@@ -89,7 +89,7 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
}
`,
- errors: ["Invalid key 'props' in model prop."]
+ errors: ["Invalid key 'props' in model option."]
},
{
filename: 'test.vue',
@@ -101,7 +101,7 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
}
`,
- errors: ["Invalid key 'events' in model prop."]
+ errors: ["Invalid key 'events' in model option."]
},
{
filename: 'test.vue',
@@ -114,8 +114,8 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
`,
errors: [
- "Invalid key 'props' in model prop.",
- "Invalid key 'events' in model prop."
+ "Invalid key 'props' in model option.",
+ "Invalid key 'events' in model option."
]
},
{
@@ -129,7 +129,7 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
}
`,
- errors: ["Invalid key 'props' in model prop."]
+ errors: ["Invalid key 'props' in model option."]
},
{
filename: 'test.vue',
@@ -143,8 +143,8 @@ ruleTester.run('no-invalid-model-keys', rule, {
}
`,
errors: [
- "Invalid key 'name' in model prop.",
- "Invalid key 'props' in model prop."
+ "Invalid key 'name' in model option.",
+ "Invalid key 'props' in model option."
]
}
]