valid-model-definition.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /**
  2. * @fileoverview Requires valid keys in model option.
  3. * @author Alex Sokolov
  4. */
  5. 'use strict'
  6. const utils = require('../utils')
  7. const VALID_MODEL_KEYS = new Set(['prop', 'event'])
  8. module.exports = {
  9. meta: {
  10. type: 'problem',
  11. docs: {
  12. description: 'require valid keys in model option',
  13. categories: ['essential'],
  14. url: 'https://eslint.vuejs.org/rules/valid-model-definition.html'
  15. },
  16. fixable: null,
  17. schema: []
  18. },
  19. /** @param {RuleContext} context */
  20. create(context) {
  21. return utils.executeOnVue(context, (obj) => {
  22. const modelProperty = utils.findProperty(obj, 'model')
  23. if (!modelProperty || modelProperty.value.type !== 'ObjectExpression') {
  24. return
  25. }
  26. for (const p of modelProperty.value.properties) {
  27. if (p.type !== 'Property') {
  28. continue
  29. }
  30. const name = utils.getStaticPropertyName(p)
  31. if (!name) {
  32. continue
  33. }
  34. if (!VALID_MODEL_KEYS.has(name)) {
  35. context.report({
  36. node: p,
  37. message: "Invalid key '{{name}}' in model option.",
  38. data: {
  39. name
  40. }
  41. })
  42. }
  43. }
  44. })
  45. }
  46. }