1e484b35bSopenharmony_ci/* eslint-disable */
2e484b35bSopenharmony_ci
3e484b35bSopenharmony_ciimport {
4e484b35bSopenharmony_ci  Log,
5e484b35bSopenharmony_ci  hasOwn
6e484b35bSopenharmony_ci} from '../../utils/index.ts';
7e484b35bSopenharmony_ciimport * as _ from '../../utils/index.ts';
8e484b35bSopenharmony_ci
9e484b35bSopenharmony_civar objProto = Object.prototype;
10e484b35bSopenharmony_ci
11e484b35bSopenharmony_ci/**
12e484b35bSopenharmony_ci * Add a new property to an observed object and emits corresponding event.
13e484b35bSopenharmony_ci * @param {String} key
14e484b35bSopenharmony_ci * @param {*} val
15e484b35bSopenharmony_ci * @public
16e484b35bSopenharmony_ci */
17e484b35bSopenharmony_ci_.define(
18e484b35bSopenharmony_ci  objProto,
19e484b35bSopenharmony_ci  '$add',
20e484b35bSopenharmony_ci  function $add (key, val) {
21e484b35bSopenharmony_ci    Log.warn(`'Object.prototype.$add' is not a standard API,`
22e484b35bSopenharmony_ci      + ` it will be removed in the next version.`);
23e484b35bSopenharmony_ci    if (hasOwn(this, key)) {
24e484b35bSopenharmony_ci      return;
25e484b35bSopenharmony_ci    }
26e484b35bSopenharmony_ci    var ob = this.__ob__;
27e484b35bSopenharmony_ci    if (!ob || _.isReserved(key)) {
28e484b35bSopenharmony_ci      this[key] = val;
29e484b35bSopenharmony_ci      return;
30e484b35bSopenharmony_ci    }
31e484b35bSopenharmony_ci    ob.convert(key, val);
32e484b35bSopenharmony_ci    ob.notify();
33e484b35bSopenharmony_ci    if (ob.vms) {
34e484b35bSopenharmony_ci      var i = ob.vms.length;
35e484b35bSopenharmony_ci      while (i--) {
36e484b35bSopenharmony_ci        var vm = ob.vms[i];
37e484b35bSopenharmony_ci        vm._proxy(key);
38e484b35bSopenharmony_ci        // vm._digest() // todo
39e484b35bSopenharmony_ci      }
40e484b35bSopenharmony_ci    }
41e484b35bSopenharmony_ci  }
42e484b35bSopenharmony_ci)
43e484b35bSopenharmony_ci
44e484b35bSopenharmony_ci/**
45e484b35bSopenharmony_ci * Set a property on an observed object, calling add to ensure the property is observed.
46e484b35bSopenharmony_ci * @param {String} key
47e484b35bSopenharmony_ci * @param {*} val
48e484b35bSopenharmony_ci * @public
49e484b35bSopenharmony_ci */
50e484b35bSopenharmony_ci_.define(
51e484b35bSopenharmony_ci  objProto,
52e484b35bSopenharmony_ci  '$set',
53e484b35bSopenharmony_ci  function $set (key, val) {
54e484b35bSopenharmony_ci    Log.warn(`"Object.prototype.$set" is not a standard API,`
55e484b35bSopenharmony_ci      + ` it will be removed in the next version.`);
56e484b35bSopenharmony_ci    this.$add(key, val);
57e484b35bSopenharmony_ci    this[key] = val;
58e484b35bSopenharmony_ci  }
59e484b35bSopenharmony_ci)
60e484b35bSopenharmony_ci
61e484b35bSopenharmony_ci/**
62e484b35bSopenharmony_ci * Deletes a property from an observed object and emits corresponding event.
63e484b35bSopenharmony_ci * @param {String} key
64e484b35bSopenharmony_ci * @public
65e484b35bSopenharmony_ci */
66e484b35bSopenharmony_ci_.define(
67e484b35bSopenharmony_ci  objProto,
68e484b35bSopenharmony_ci  '$delete',
69e484b35bSopenharmony_ci  function $delete (key) {
70e484b35bSopenharmony_ci    Log.warn(`"Object.prototype.$delete" is not a standard API,`
71e484b35bSopenharmony_ci      + ` it will be removed in the next version.`);
72e484b35bSopenharmony_ci    if (!this.hasOwnProperty(key)) {
73e484b35bSopenharmony_ci      return;
74e484b35bSopenharmony_ci    }
75e484b35bSopenharmony_ci    delete this[key];
76e484b35bSopenharmony_ci    var ob = this.__ob__;
77e484b35bSopenharmony_ci    if (!ob || _.isReserved(key)) {
78e484b35bSopenharmony_ci      return;
79e484b35bSopenharmony_ci    }
80e484b35bSopenharmony_ci    ob.notify();
81e484b35bSopenharmony_ci    if (ob.vms) {
82e484b35bSopenharmony_ci      var i = ob.vms.length;
83e484b35bSopenharmony_ci      while (i--) {
84e484b35bSopenharmony_ci        var vm = ob.vms[i];
85e484b35bSopenharmony_ci        vm._unproxy(key);
86e484b35bSopenharmony_ci        // vm._digest() // todo
87e484b35bSopenharmony_ci      }
88e484b35bSopenharmony_ci    }
89e484b35bSopenharmony_ci  }
90e484b35bSopenharmony_ci)
91