vModel.js 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.transformModel = void 0;
  4. const compiler_core_1 = require("@vue/compiler-core");
  5. const shared_1 = require("@vue/shared");
  6. const tags = ['u-input', 'u-textarea'];
  7. const transformModel = (dir, node, context) => {
  8. const result = (0, compiler_core_1.transformModel)(dir, node, context);
  9. // 将 u-input,u-textarea 的 onUpdate:modelValue 事件转换为 onInput
  10. if (tags.includes(node.tag) && result.props.length >= 2) {
  11. const key = result.props[1].key;
  12. let value = result.props[1].value;
  13. if (value.type === 20 /* NodeTypes.JS_CACHE_EXPRESSION */) {
  14. value = value.value;
  15. }
  16. if ((0, compiler_core_1.isStaticExp)(key) &&
  17. key.content === 'onUpdate:modelValue' &&
  18. value.type === 8 /* NodeTypes.COMPOUND_EXPRESSION */) {
  19. key.content = 'onInput';
  20. // 替换 $event 为 $event.detail.value
  21. value.children = value.children.map((child) => {
  22. if ((0, shared_1.isString)(child)) {
  23. return child.replace(/=\s\$event/g, `= $event.detail.value`);
  24. }
  25. return child;
  26. });
  27. }
  28. }
  29. return result;
  30. };
  31. exports.transformModel = transformModel;