@webqit/observer 1.7.6 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.gitignore +3 -3
  2. package/LICENSE +20 -20
  3. package/README.md +202 -199
  4. package/dist/main.js +2 -2
  5. package/dist/main.js.map +7 -1
  6. package/package.json +68 -68
  7. package/src/actors.js +175 -0
  8. package/src/core/Descriptor.js +23 -0
  9. package/src/core/ListenerRegistration.js +54 -0
  10. package/src/core/ListenerRegistry.js +41 -0
  11. package/src/core/Registration.js +35 -0
  12. package/src/core/Registry.js +96 -0
  13. package/src/core/TrapsRegistration.js +35 -0
  14. package/src/core/TrapsRegistry.js +51 -0
  15. package/src/index.js +10 -74
  16. package/src/main.js +547 -0
  17. package/src/targets.browser.js +9 -0
  18. package/test/reactions.test.js +326 -337
  19. package/webpack.config.cjs +5 -5
  20. package/src/actions/_exec.js +0 -33
  21. package/src/actions/_setOrDefine.js +0 -136
  22. package/src/actions/apply.js +0 -19
  23. package/src/actions/construct.js +0 -19
  24. package/src/actions/defineProperty.js +0 -20
  25. package/src/actions/deleteProperty.js +0 -80
  26. package/src/actions/get.js +0 -53
  27. package/src/actions/getOwnPropertyDescriptor.js +0 -18
  28. package/src/actions/getPrototypeOf.js +0 -17
  29. package/src/actions/has.js +0 -18
  30. package/src/actions/isExtensible.js +0 -17
  31. package/src/actions/ownKeys.js +0 -17
  32. package/src/actions/preventExtensions.js +0 -17
  33. package/src/actions/set.js +0 -21
  34. package/src/actions/setPrototypeOf.js +0 -18
  35. package/src/actors/accessorize.js +0 -162
  36. package/src/actors/proxy.js +0 -59
  37. package/src/actors/unaccessorize.js +0 -26
  38. package/src/actors/unproxy.js +0 -17
  39. package/src/browser-entry.js +0 -11
  40. package/src/connectors/build.js +0 -64
  41. package/src/connectors/link.js +0 -76
  42. package/src/connectors/unlink.js +0 -35
  43. package/src/core/Action.js +0 -33
  44. package/src/core/Delta.js +0 -46
  45. package/src/core/Event.js +0 -141
  46. package/src/core/Fireable.js +0 -34
  47. package/src/core/Firebase.js +0 -136
  48. package/src/core/Interceptor.js +0 -33
  49. package/src/core/Interceptors.js +0 -61
  50. package/src/core/Mutation.js +0 -46
  51. package/src/core/Observer.js +0 -99
  52. package/src/core/Observers.js +0 -75
  53. package/src/core/utils.js +0 -51
  54. package/src/reactions/closure.js +0 -88
  55. package/src/reactions/intercept.js +0 -53
  56. package/src/reactions/observe.js +0 -45
  57. package/src/reactions/unintercept.js +0 -43
  58. package/src/reactions/unobserve.js +0 -36
@@ -1,6 +1,6 @@
1
-
2
- module.exports = {
3
- mode: process.argv.includes('--dev') ? 'development' : 'production',
4
- entry: './src/browser-entry.js',
5
- devtool: 'source-map',
1
+
2
+ module.exports = {
3
+ mode: process.argv.includes('--dev') ? 'development' : 'production',
4
+ entry: './src/browser-entry.js',
5
+ devtool: 'source-map',
6
6
  };
@@ -1,33 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import { _isTypeObject } from '@webqit/util/js/index.js';
6
- import Interceptors from '../core/Interceptors.js';
7
- import _unproxy from '../actors/unproxy.js';
8
-
9
- /**
10
- * Runs a Reflect operation of the specified type.
11
- *
12
- * @param string type
13
- * @param array|object target
14
- * @param object payload
15
- * @param object params
16
- *
17
- * @return array
18
- */
19
- export default function(type, target, payload = {}, params = {}) {
20
- if (!target || !_isTypeObject(target)) {
21
- throw new Error('Target must be of type object!');
22
- }
23
- target = _unproxy(target);
24
- // ---------------------------------
25
- // Execute any "keys" traps, otherwise "test" the default way
26
- var interceptors, defaultHandler = function(_val) {
27
- return arguments.length ? _val : Reflect[type](target, ...Object.values(payload));
28
- };
29
- if (interceptors = Interceptors.getFirebase(target, false, params.namespace)) {
30
- return interceptors.fire({ type, ...payload }, defaultHandler);
31
- }
32
- return defaultHandler();
33
- }
@@ -1,136 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import {
6
- _isObject, _isTypeObject, _internals,
7
- _isNumber, _isArray, _isString
8
- } from '@webqit/util/js/index.js';
9
- import { _from as _arrFrom } from '@webqit/util/arr/index.js';
10
- import build, { isUserObject } from '../connectors/build.js';
11
- import Interceptors from '../core/Interceptors.js';
12
- import Observers from '../core/Observers.js';
13
- import Event from '../core/Event.js';
14
- import unlink from '../connectors/unlink.js';
15
- import link from '../connectors/link.js';
16
- import _unproxy from '../actors/unproxy.js';
17
- import _has from './has.js';
18
- import _get from './get.js';
19
-
20
- /**
21
- * Executes a "_setProp" type of operation on a target.
22
- * Fires any observers for the specific type that may be bound to target.
23
- *
24
- * @param bool define
25
- * @param array|object target
26
- * @param object payload
27
- * @param Object params
28
- *
29
- * @return Event
30
- */
31
- export default function(define, target, payload, params = {}) {
32
- target = payload.receiver || target;
33
- var keysOrPayload = payload.keysOrPayload;
34
- var value = payload.value;
35
- if (!target || !_isTypeObject(target)) {
36
- throw new Error('Target must be of type object!');
37
- }
38
- if (_isObject(keysOrPayload)) {
39
- params = value || {};
40
- value = null;
41
- }
42
- // ----------
43
- target = _unproxy(target);
44
- var interceptors = Interceptors.getFirebase(target, false, params.namespace),
45
- observers = Observers.getFirebase(target, false, params.namespace);
46
- // ----------
47
- const handleSet = (key, value, related, detail) => {
48
- var type = 'set', descriptor;
49
- if (define) {
50
- type = 'defineProperty';
51
- descriptor = value || {};
52
- value = descriptor.value;
53
- }
54
- // ---------------------------------
55
- // The event object
56
- var isUpdate = false, oldValue;
57
- if (_has(target, key, params)) {
58
- isUpdate = true;
59
- oldValue = _get(target, key, payload.receiver, params);
60
- }
61
- var e = {
62
- name: key,
63
- type,
64
- value,
65
- receiver: payload.receiver,
66
- related,
67
- detail,
68
- isUpdate,
69
- oldValue,
70
- };
71
- // ---------------------------------
72
- // The set operation
73
- var defaultSet = function(_success) {
74
- if (arguments.length) {
75
- if (descriptor) {
76
- descriptor = _success;
77
- } else {
78
- value = _success;
79
- }
80
- }
81
- if (descriptor) {
82
- if (_internals(target, 'accessorizedProps', false).has(key)
83
- && !_internals(target, 'accessorizedProps').get(key).restore()) {
84
- return false;
85
- }
86
- Object.defineProperty(target, key, descriptor);
87
- return true;
88
- }
89
- if (_internals(target, 'accessorizedProps', false).has(key)) {
90
- return _internals(target, 'accessorizedProps').get(key).set(value);
91
- }
92
- target[key] = value;
93
- return true;
94
- };
95
- if (interceptors) {
96
- var eventObject = descriptor
97
- ? {type: 'defineProperty', name: key, descriptor, receiver: payload.receiver, related, detail, isUpdate, oldValue}
98
- : {type: 'set', name: key, value, receiver: payload.receiver, related, detail, isUpdate, oldValue};
99
- e.success = interceptors.fire(eventObject, defaultSet);
100
- } else {
101
- e.success = defaultSet();
102
- }
103
- // ---------------------------------
104
- if (e.success && e.value !== e.oldValue) {
105
- // Unobserve outgoing value for bubbling
106
- if (_isTypeObject(e.oldValue)) {
107
- unlink(target, key, e.oldValue, null, params);
108
- }
109
- // Observe incoming value for bubbling
110
- if (_isTypeObject(e.value)) {
111
- link(target, key, e.value, null, params);
112
- if (observers && (observers.subBuild || (observers.build && isUserObject(e.value)))) {
113
- build(e.value, observers.subBuild, observers.build, params.namespace);
114
- }
115
- }
116
- }
117
- return e;
118
- };
119
- // ---------------------------------
120
- var keys, events = [];
121
- if (_isArray(keysOrPayload) || ((_isString(keysOrPayload) || _isNumber(keysOrPayload)) && (keys = _arrFrom(keysOrPayload)))) {
122
- events = keys.map(key => handleSet(key, value, keys, params.detail));
123
- } else if (_isObject(keysOrPayload) && (keys = Object.keys(keysOrPayload))) {
124
- events = keys.map(key => handleSet(key, keysOrPayload[key], keys, params.detail));
125
- }
126
- var successfulEvents = events.filter(e => e.success !== false);
127
- // ---------------------------------
128
- var evt;
129
- if (observers) {
130
- evt = observers.fire(successfulEvents, params.cancellable);
131
- evt.successCount = successfulEvents.length;
132
- } else if (params.eventTypeReturn) {
133
- evt = new Event(target);
134
- }
135
- return params.eventTypeReturn ? evt : successfulEvents.length > 0;
136
- }
@@ -1,19 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs an "apply" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object thisArgument
12
- * @param array argumentsList
13
- * @param object params
14
- *
15
- * @return array
16
- */
17
- export default function(target, thisArgument, argumentsList, params = {}) {
18
- return _exec('apply', target, { thisArgument, argumentsList }, params);
19
- }
@@ -1,19 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "construct" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param array argumentsList
12
- * @param object newTarget
13
- * @param object params
14
- *
15
- * @return array
16
- */
17
- export default function(target, argumentsList, newTarget = null, params = {}) {
18
- return _exec('construct', target, arguments.length > 2 ? { argumentsList, newTarget } : { argumentsList }, params);
19
- }
@@ -1,20 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _setOrDefine from './_setOrDefine.js';
6
-
7
- /**
8
- * Executes a "defineProperty" operation on a target.
9
- * Fires any observers that may be bound to target.
10
- *
11
- * @param array|object target
12
- * @param string|array keysOrPayload
13
- * @param mixed value
14
- * @param object params
15
- *
16
- * @return bool
17
- */
18
- export default function(target, keysOrPayload, value = null, params = {}) {
19
- return _setOrDefine(true/*define*/, target, { keysOrPayload, value }, params);
20
- }
@@ -1,80 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import { _from as _arrFrom } from '@webqit/util/arr/index.js';
6
- import { _isTypeObject, _internals } from '@webqit/util/js/index.js';
7
- import Interceptors from '../core/Interceptors.js';
8
- import Observers from '../core/Observers.js';
9
- import Event from '../core/Event.js';
10
- import unlink from '../connectors/unlink.js';
11
- import _unproxy from '../actors/unproxy.js';
12
- import _has from './has.js';
13
- import _get from './get.js';
14
-
15
- /**
16
- * Executes a "deleteProperty" operation on a target.
17
- * Fires any observers that may be bound to target.
18
- *
19
- * @param array|object target
20
- * @param string|array keys
21
- * @param object params
22
- *
23
- * @return Event
24
- */
25
- export default function(target, keys, params = {}) {
26
- if (!target || !_isTypeObject(target)) {
27
- throw new Error('Target must be of type object!');
28
- }
29
- target = _unproxy(target);
30
- var _keys = _arrFrom(keys);
31
- var events = _keys.map(key => {
32
- // ---------------------------------
33
- // The event object
34
- var oldValue;
35
- if (_has(target, key, params)) {
36
- oldValue = _get(target, key, null, params);
37
- }
38
- var e = {
39
- name: key,
40
- type: 'deleteProperty',
41
- related: _keys,
42
- detail: params.detail,
43
- oldValue,
44
- };
45
- // ---------------------------------
46
- // Execute any "del" traps, otherwise "del" the default way
47
- var interceptors, defaultDel = function(_success) {
48
- if (arguments.length) {
49
- return _success;
50
- }
51
- if (_internals(target, 'accessorizedProps', false).has(key)
52
- && !_internals(target, 'accessorizedProps').get(key).restore()) {
53
- return false;
54
- }
55
- delete target[key];
56
- return true;
57
- };
58
- if (interceptors = Interceptors.getFirebase(target, false, params.namespace)) {
59
- e.success = interceptors.fire({type: 'deleteProperty', name:key, oldValue, related: _keys}, defaultDel);
60
- } else {
61
- e.success = defaultDel();
62
- }
63
- // ---------------------------------
64
- // Unobserve outgoing value for bubbling
65
- if (e.success && _isTypeObject(e.oldValue)) {
66
- unlink(target, key, e.oldValue, null, params);
67
- }
68
- return e;
69
- });
70
- var successfulEvents = events.filter(e => e.success !== false);
71
- // ---------------------------------
72
- var observers, evt;
73
- if (observers = Observers.getFirebase(target, false, params.namespace)) {
74
- evt = observers.fire(successfulEvents, params.cancellable);
75
- evt.successCount = successfulEvents.length;
76
- } else if (params.eventTypeReturn) {
77
- evt = new Event(target);
78
- }
79
- return params.eventTypeReturn ? evt : successfulEvents.length > 0;
80
- }
@@ -1,53 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import {
6
- _isArray, _isNumeric, _isClass,
7
- _isFunction, _isTypeObject, _internals
8
- } from '@webqit/util/js/index.js';
9
- import { _from as _objFrom } from '@webqit/util/obj/index.js';
10
- import { _from as _arrFrom } from '@webqit/util/arr/index.js';
11
- import Interceptors from '../core/Interceptors.js';
12
- import _unproxy from '../actors/unproxy.js';
13
-
14
- /**
15
- * Runs a "get" operation on a target.
16
- * Fires any such query observers that may be bound to target.
17
- *
18
- * @param array|object target
19
- * @param string|array keys
20
- * @param object receiver
21
- * @param object params
22
- *
23
- * @return mixed
24
- */
25
- export default function(target, keys, receiver = null, params = {}) {
26
- target = receiver || target;
27
- if (!target || !_isTypeObject(target)) {
28
- throw new Error('Target must be of type object!');
29
- }
30
- target = _unproxy(target);
31
- // ---------------------------------
32
- var _keys = _arrFrom(keys);
33
- var values = _keys.map(key => {
34
- // Execute any "get" traps, otherwise "get" the default way
35
- var interceptors, defaultGet = function(_value) {
36
- if (arguments.length) {
37
- return _value;
38
- }
39
- if (_internals(target, 'accessorizedProps').has(key) && _internals(target, 'accessorizedProps').get(key).touch(true)) {
40
- return _internals(target, 'accessorizedProps').get(key).get();
41
- }
42
- return receiver
43
- ? Reflect.get(target, key, receiver)
44
- : Reflect.get(target, key);
45
- };
46
- if (interceptors = Interceptors.getFirebase(target, true, params.namespace)) {
47
- return interceptors.fire({type:'get', name: key, related: _keys, receiver}, defaultGet);
48
- }
49
- return defaultGet();
50
- });
51
- // ---------------------------------
52
- return _isArray(keys) ? values : values[0];
53
- }
@@ -1,18 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "getOwnPropertyDescriptor" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param string|number name
12
- * @param object params
13
- *
14
- * @return array
15
- */
16
- export default function(target, name, params = {}) {
17
- return _exec('getOwnPropertyDescriptor', target, { name }, params);
18
- }
@@ -1,17 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "getPrototypeOf" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object params
12
- *
13
- * @return array
14
- */
15
- export default function(target, params = {}) {
16
- return _exec('getPrototypeOf', target, {}, params);
17
- }
@@ -1,18 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "has" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param string name
12
- * @param object params
13
- *
14
- * @return array
15
- */
16
- export default function(target, name, params = {}) {
17
- return _exec('has', target, { name }, params);
18
- }
@@ -1,17 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "isExtensible" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object params
12
- *
13
- * @return array
14
- */
15
- export default function(target, params = {}) {
16
- return _exec('isExtensible', target, {}, params);
17
- }
@@ -1,17 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "ownKeys" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object params
12
- *
13
- * @return array
14
- */
15
- export default function(target, params = {}) {
16
- return _exec('ownKeys', target, {}, params);
17
- }
@@ -1,17 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "preventExtensions" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object params
12
- *
13
- * @return array
14
- */
15
- export default function(target, params = {}) {
16
- return _exec('preventExtensions', target, {}, params);
17
- }
@@ -1,21 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _setOrDefine from './_setOrDefine.js';
6
-
7
- /**
8
- * Executes a "set" operation on a target.
9
- * Fires any observers that may be bound to target.
10
- *
11
- * @param array|object target
12
- * @param string|array keysOrPayload
13
- * @param mixed value
14
- * @param object receiver
15
- * @param object params
16
- *
17
- * @return bool
18
- */
19
- export default function(target, keysOrPayload, value = null, receiver = null, params = {}) {
20
- return _setOrDefine(false/*define*/, target, arguments.length > 3 ? { keysOrPayload, value, receiver } : { keysOrPayload, value }, params);
21
- }
@@ -1,18 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import _exec from './_exec.js';
6
-
7
- /**
8
- * Runs a "setPrototypeOf" operation on a target.
9
- *
10
- * @param array|object target
11
- * @param object prototype
12
- * @param object params
13
- *
14
- * @return array
15
- */
16
- export default function(target, prototype, params = {}) {
17
- return _exec('setPrototypeOf', target, { prototype }, params);
18
- }
@@ -1,162 +0,0 @@
1
-
2
- /**
3
- * @imports
4
- */
5
- import { _isArray, _internals } from '@webqit/util/js/index.js';
6
- import { _isObject } from '@webqit/util/js/index.js';
7
- import { _from as _arrFrom } from '@webqit/util/arr/index.js';
8
- import _get from '../actions/get.js';
9
- import _set from '../actions/set.js';
10
-
11
- /**
12
- * Initializes "Reflxive getter/setter" traps on the target.
13
- *
14
- * @param array|object target
15
- * @param string|array keys
16
- * @param object params
17
- *
18
- * @return bool|array
19
- */
20
- export default function(target, keys = [], params = {}) {
21
- params = _isObject(keys) ? keys : params;
22
- var successFlags = (arguments.length === 1 ? Object.keys(target) : _arrFrom(keys)).map(key => {
23
- if (_internals(target, 'accessorizedProps').has(key) && _internals(target, 'accessorizedProps').get(key).touch(true)) {
24
- return false;
25
- }
26
- // ----------
27
- const getDescriptorDeep = () => {
28
- var descriptor, proto = target;
29
- while (!descriptor && (proto = Object.getPrototypeOf(proto))) {
30
- descriptor = Object.getOwnPropertyDescriptor(proto, key);
31
- }
32
- return descriptor;
33
- };
34
- // ----------
35
- var originalOwnDescriptor = Object.getOwnPropertyDescriptor(target, key),
36
- altOriginalOwnDescriptor,
37
- activeIsAltOriginalOwnDescriptor;
38
- if (!originalOwnDescriptor) {
39
- // Not an own property
40
- // and maybe not even defined at all in the prototype chain
41
- altOriginalOwnDescriptor = {
42
- writable: true,
43
- enumerable: key in target ? false/* existing but inherited*/ : true,
44
- configurable: params.configurable !== false,
45
- };
46
- }
47
- // ----------
48
- var reactiveOwnDescriptor = { ...(originalOwnDescriptor || altOriginalOwnDescriptor) };
49
- if ('value' in reactiveOwnDescriptor) {
50
- delete reactiveOwnDescriptor.value;
51
- }
52
- if ('writable' in reactiveOwnDescriptor) {
53
- delete reactiveOwnDescriptor.writable;
54
- }
55
- // ----------
56
- reactiveOwnDescriptor.get = () => {
57
- if (controlObject.ongoingGets.length) {
58
- // .touch(true)
59
- return controlObject.get();
60
- }
61
- // _get() will return here
62
- // but to call controlObject.get();
63
- controlObject.ongoingGets.push(1);
64
- var value = _get(target, key, null, params);
65
- controlObject.ongoingGets.pop();
66
- return value;
67
- };
68
- var setting;
69
- reactiveOwnDescriptor.set = newValue => {
70
- if (controlObject.ongoingSets.length) {
71
- return controlObject.set(newValue);
72
- }
73
- // _set() will return here
74
- // but to call controlObject.set();
75
- controlObject.ongoingSets.push(1);
76
- var operation = _set(target, key, newValue, null, params);
77
- controlObject.ongoingSets.pop();
78
- return operation;
79
- };
80
- // ----------
81
- var controlObject = {
82
- ongoingGets: [],
83
- ongoingSets: [],
84
- get: function() {
85
- // ---------------------
86
- var descriptor = originalOwnDescriptor;
87
- if (!descriptor) {
88
- if (activeIsAltOriginalOwnDescriptor) {
89
- // Already switched to altOriginalOwnDescriptor
90
- descriptor = altOriginalOwnDescriptor;
91
- } else {
92
- // getDescriptorDeep() or altOriginalOwnDescriptor
93
- descriptor = getDescriptorDeep() || altOriginalOwnDescriptor;
94
- }
95
- }
96
- // ---------------------
97
- return descriptor.get ? descriptor.get.call(target) : descriptor.value;
98
- },
99
- set: function(value) {
100
- // ---------------------
101
- var descriptor = originalOwnDescriptor;
102
- if (!descriptor) {
103
- if (activeIsAltOriginalOwnDescriptor) {
104
- // Already switched to altOriginalOwnDescriptor
105
- descriptor = altOriginalOwnDescriptor;
106
- } else if (descriptor = getDescriptorDeep()) {
107
- if (('value' in descriptor)) {
108
- // Deep is data property.
109
- // We should rather switch to altOriginalOwnDescriptor
110
- descriptor = altOriginalOwnDescriptor;
111
- activeIsAltOriginalOwnDescriptor = true;
112
- }
113
- } else {
114
- // Not yet switched to altOriginalOwnDescriptor
115
- // and no getDescriptorDeep()
116
- descriptor = altOriginalOwnDescriptor;
117
- activeIsAltOriginalOwnDescriptor = true;
118
- }
119
- }
120
- // ---------------------
121
- if (descriptor.set || descriptor.get) {
122
- if (!descriptor.set) {
123
- return false;
124
- }
125
- // Can sometimes return undefined
126
- return descriptor.set.call(target, value);
127
- }
128
- descriptor.value = value;
129
- return true;
130
- },
131
- restore: function() {
132
- try {
133
- if (this.intact()) {
134
- if (originalOwnDescriptor || activeIsAltOriginalOwnDescriptor /* switched */) {
135
- Object.defineProperty(target, key, originalOwnDescriptor || altOriginalOwnDescriptor /* switch target */);
136
- } else {
137
- delete target[key];
138
- }
139
- _internals(target, 'accessorizedProps').delete(key);
140
- }
141
- return true;
142
- } catch(e) {}
143
- return false;
144
- },
145
- intact: function() {
146
- return (Object.getOwnPropertyDescriptor(target, key) || {}).get === reactiveOwnDescriptor.get;
147
- },
148
- touch: function(attemptRestore = false) {
149
- // If intact, or not intact but not restorable, return true - "valid"
150
- return this.intact() || (attemptRestore ? !this.restore() : false);
151
- },
152
- }
153
- // ----------
154
- try {
155
- Object.defineProperty(target, key, reactiveOwnDescriptor);
156
- _internals(target, 'accessorizedProps').set(key, controlObject);
157
- return true;
158
- } catch(e) {}
159
- return false;
160
- });
161
- return _isArray(keys) ? successFlags : successFlags[0];
162
- }