* Set on an object from a path * * @param {Object} obj * @param {String | Array} path * @param {*} val
(obj, path, val)
| 2761 | */ |
| 2762 | |
| 2763 | function setPath(obj, path, val) { |
| 2764 | var original = obj; |
| 2765 | if (typeof path === 'string') { |
| 2766 | path = parse(path); |
| 2767 | } |
| 2768 | if (!path || !isObject(obj)) { |
| 2769 | return false; |
| 2770 | } |
| 2771 | var last, key; |
| 2772 | for (var i = 0, l = path.length; i < l; i++) { |
| 2773 | last = obj; |
| 2774 | key = path[i]; |
| 2775 | if (key.charAt(0) === '*') { |
| 2776 | key = parseExpression(key.slice(1)).get.call(original, original); |
| 2777 | } |
| 2778 | if (i < l - 1) { |
| 2779 | obj = obj[key]; |
| 2780 | if (!isObject(obj)) { |
| 2781 | obj = {}; |
| 2782 | if ('development' !== 'production' && last._isVue) { |
| 2783 | warnNonExistent(path, last); |
| 2784 | } |
| 2785 | set(last, key, obj); |
| 2786 | } |
| 2787 | } else { |
| 2788 | if (isArray(obj)) { |
| 2789 | obj.$set(key, val); |
| 2790 | } else if (key in obj) { |
| 2791 | obj[key] = val; |
| 2792 | } else { |
| 2793 | if ('development' !== 'production' && obj._isVue) { |
| 2794 | warnNonExistent(path, obj); |
| 2795 | } |
| 2796 | set(obj, key, val); |
| 2797 | } |
| 2798 | } |
| 2799 | } |
| 2800 | return true; |
| 2801 | } |
| 2802 | |
| 2803 | var path = Object.freeze({ |
| 2804 | parsePath: parsePath, |
no test coverage detected