@feng3d/reactivity 1.0.7 → 1.0.8
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.
- package/LICENSE +21 -21
- package/README.md +158 -158
- package/dist/index.js +89 -0
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +91 -2
- package/dist/index.umd.cjs.map +1 -1
- package/lib/ReactiveObject.d.ts +101 -0
- package/lib/ReactiveObject.d.ts.map +1 -0
- package/lib/batch.d.ts.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/package.json +69 -69
- package/src/ReactiveObject.ts +131 -0
- package/src/Reactivity.ts +168 -168
- package/src/arrayInstrumentations.ts +801 -801
- package/src/baseHandlers.ts +312 -312
- package/src/batch.ts +134 -118
- package/src/collectionHandlers.ts +486 -486
- package/src/computed.ts +253 -253
- package/src/effect.ts +146 -146
- package/src/effectScope.ts +294 -294
- package/src/index.ts +10 -9
- package/src/property.ts +231 -231
- package/src/reactive.ts +186 -186
- package/src/ref.ts +150 -150
- package/src/shared/constants.ts +41 -41
- package/src/shared/general.ts +109 -109
- package/tsconfig.json +19 -19
- package/dist/assets/RobotoMono-Medium-DVgDz_OO.woff2 +0 -0
- package/dist/assets/RobotoMono-Regular-BPoF81uy.woff2 +0 -0
- package/dist/assets/index-a2qCSG5V.css +0 -629
- package/dist/assets/index.html-Dyp3udP2.js +0 -200
- package/dist/assets/modulepreload-polyfill-DaKOjhqt.js +0 -37
- package/dist/assets/package-DuJynByc.js +0 -2539
- package/dist/assets/src//345/244/215/346/235/202/346/203/205/345/206/265/345/217/226/345/200/274/index.html-C3hbV3IR.js +0 -59
- package/dist/assets/src//346/225/260/347/273/204/index.html-CHK6WEhd.js +0 -43
- package/dist/docs/.nojekyll +0 -1
- package/dist/docs/assets/hierarchy.js +0 -1
- package/dist/docs/assets/highlight.css +0 -92
- package/dist/docs/assets/icons.js +0 -18
- package/dist/docs/assets/icons.svg +0 -1
- package/dist/docs/assets/main.js +0 -60
- package/dist/docs/assets/navigation.js +0 -1
- package/dist/docs/assets/search.js +0 -1
- package/dist/docs/assets/style.css +0 -1640
- package/dist/docs/classes/EffectScope.html +0 -40
- package/dist/docs/functions/batchRun.html +0 -15
- package/dist/docs/functions/computed.html +0 -5
- package/dist/docs/functions/effect.html +0 -11
- package/dist/docs/functions/effectScope.html +0 -5
- package/dist/docs/functions/forceTrack.html +0 -6
- package/dist/docs/functions/getCurrentScope.html +0 -4
- package/dist/docs/functions/isProxy.html +0 -5
- package/dist/docs/functions/isReactive.html +0 -5
- package/dist/docs/functions/isRef.html +0 -5
- package/dist/docs/functions/noTrack.html +0 -6
- package/dist/docs/functions/onScopeDispose.html +0 -6
- package/dist/docs/functions/reactive.html +0 -19
- package/dist/docs/functions/ref.html +0 -13
- package/dist/docs/functions/toRaw.html +0 -4
- package/dist/docs/hierarchy.html +0 -1
- package/dist/docs/index.html +0 -129
- package/dist/docs/interfaces/Computed.html +0 -9
- package/dist/docs/interfaces/Effect.html +0 -8
- package/dist/docs/interfaces/Ref.html +0 -9
- package/dist/docs/modules.html +0 -1
- package/dist/docs/types/Reactive.html +0 -3
- package/dist/docs/types/UnReadonly.html +0 -3
- package/dist/files/RobotoMono-Medium.woff2 +0 -0
- package/dist/files/RobotoMono-Regular.woff2 +0 -0
- package/dist/files/ic_code_black_24dp.svg +0 -4
- package/dist/files/ic_search_black_24dp.svg +0 -4
- package/dist/files/main.css +0 -629
- package/dist/files/thumbnails.svg +0 -7
- package/dist/files.json +0 -7
- package/dist/index.html +0 -84
- package/dist/screenshots//345/244/215/346/235/202/346/203/205/345/206/265/345/217/226/345/200/274.jpg +0 -0
- package/dist/screenshots//346/225/260/347/273/204.jpg +0 -0
- package/dist/src//345/244/215/346/235/202/346/203/205/345/206/265/345/217/226/345/200/274/index.html +0 -70
- package/dist/src//346/225/260/347/273/204/index.html +0 -65
- package/dist/tags.json +0 -2
package/src/property.ts
CHANGED
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
import { batchRun } from './batch';
|
|
2
|
-
import { Reactivity } from './Reactivity';
|
|
3
|
-
import { ARRAY_ITERATE_KEY, ITERATE_KEY, MAP_KEY_ITERATE_KEY, TrackOpTypes, TriggerOpTypes } from './shared/constants';
|
|
4
|
-
import { isArray, isIntegerKey, isMap, isSymbol } from './shared/general';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* 反应式属性。
|
|
8
|
-
*
|
|
9
|
-
* @param target 对象。
|
|
10
|
-
* @param key 属性
|
|
11
|
-
* @returns 反应式属性。
|
|
12
|
-
*/
|
|
13
|
-
function property<T, K extends keyof T>(target: T, key: K)
|
|
14
|
-
{
|
|
15
|
-
let depsMap = PropertyReactivity._targetMap.get(target);
|
|
16
|
-
|
|
17
|
-
if (!depsMap)
|
|
18
|
-
{
|
|
19
|
-
depsMap = new Map();
|
|
20
|
-
PropertyReactivity._targetMap.set(target, depsMap);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
let dep = depsMap.get(key);
|
|
25
|
-
|
|
26
|
-
if (!dep)
|
|
27
|
-
{
|
|
28
|
-
dep = new PropertyReactivity(target, key);
|
|
29
|
-
depsMap.set(key, dep);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return dep;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* 属性反应式节点。
|
|
37
|
-
*/
|
|
38
|
-
export class PropertyReactivity<T, K extends keyof T> extends Reactivity<T>
|
|
39
|
-
{
|
|
40
|
-
/**
|
|
41
|
-
* 获取当前节点值。
|
|
42
|
-
*
|
|
43
|
-
* 取值时将会建立与父节点的依赖关系。
|
|
44
|
-
*/
|
|
45
|
-
get value(): T
|
|
46
|
-
{
|
|
47
|
-
this.track();
|
|
48
|
-
|
|
49
|
-
return this._value;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
set value(v)
|
|
53
|
-
{
|
|
54
|
-
// 处理特殊字段,这些字段
|
|
55
|
-
if (this._key === 'length')
|
|
56
|
-
{
|
|
57
|
-
v = this._target['length'];
|
|
58
|
-
}
|
|
59
|
-
else if (isSymbol(this._key))
|
|
60
|
-
{
|
|
61
|
-
v = ~~this._value + 1 as any;
|
|
62
|
-
}
|
|
63
|
-
if (v === this._value) return;
|
|
64
|
-
// 触发属性的变化。
|
|
65
|
-
this.trigger();
|
|
66
|
-
this._value = v;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
private _target: T;
|
|
70
|
-
private _key: K;
|
|
71
|
-
|
|
72
|
-
constructor(target: T, key: K)
|
|
73
|
-
{
|
|
74
|
-
super();
|
|
75
|
-
this._target = target;
|
|
76
|
-
this._key = key;
|
|
77
|
-
if (target instanceof Map
|
|
78
|
-
|| target instanceof WeakMap
|
|
79
|
-
)
|
|
80
|
-
{
|
|
81
|
-
this._value = (target as any as WeakMap<any, any>).get(key);
|
|
82
|
-
}
|
|
83
|
-
else if (target instanceof Set
|
|
84
|
-
|| target instanceof WeakSet
|
|
85
|
-
)
|
|
86
|
-
{
|
|
87
|
-
this._value = (target as any as WeakSet<any>).has(key) as any;
|
|
88
|
-
}
|
|
89
|
-
else
|
|
90
|
-
{
|
|
91
|
-
this._value = (target as any)[key as any];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
triggerIfChanged()
|
|
96
|
-
{
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* 追踪属性的变化。
|
|
102
|
-
*
|
|
103
|
-
* 当属性被访问时,将会追踪属性的变化。
|
|
104
|
-
*
|
|
105
|
-
* @param target 目标对象。
|
|
106
|
-
* @param key 属性名。
|
|
107
|
-
* @returns
|
|
108
|
-
*/
|
|
109
|
-
static track(target: object, type: TrackOpTypes, key: unknown): void
|
|
110
|
-
{
|
|
111
|
-
if (!Reactivity.activeReactivity) return;
|
|
112
|
-
|
|
113
|
-
const dep = property(target as any, key as any);
|
|
114
|
-
|
|
115
|
-
// 取值,建立依赖关系。
|
|
116
|
-
dep.track();
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @private
|
|
121
|
-
*/
|
|
122
|
-
static _targetMap: WeakMap<any, Map<any, PropertyReactivity<any, any>>> = new WeakMap();
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* 触发属性的变化。
|
|
126
|
-
*
|
|
127
|
-
* @param target 目标对象。
|
|
128
|
-
* @param type 操作类型。
|
|
129
|
-
* @param key 属性名。
|
|
130
|
-
* @param newValue 新值。
|
|
131
|
-
* @param oldValue 旧值。
|
|
132
|
-
* @returns
|
|
133
|
-
*/
|
|
134
|
-
static trigger(target: object, type: TriggerOpTypes, key?: unknown, newValue?: unknown, oldValue?: unknown): void
|
|
135
|
-
{
|
|
136
|
-
const depsMap = this._targetMap.get(target);
|
|
137
|
-
|
|
138
|
-
if (!depsMap) return;
|
|
139
|
-
|
|
140
|
-
const run = (dep: PropertyReactivity<any, any> | undefined) =>
|
|
141
|
-
{
|
|
142
|
-
if (dep)
|
|
143
|
-
{
|
|
144
|
-
// 触发属性的变化。
|
|
145
|
-
dep.value = newValue;
|
|
146
|
-
}
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
batchRun(() =>
|
|
150
|
-
{
|
|
151
|
-
if (type === TriggerOpTypes.CLEAR)
|
|
152
|
-
{
|
|
153
|
-
// collection being cleared
|
|
154
|
-
// trigger all effects for target
|
|
155
|
-
depsMap.forEach(run);
|
|
156
|
-
}
|
|
157
|
-
else
|
|
158
|
-
{
|
|
159
|
-
const targetIsArray = isArray(target);
|
|
160
|
-
const isArrayIndex = targetIsArray && isIntegerKey(key);
|
|
161
|
-
|
|
162
|
-
if (targetIsArray && key === 'length')
|
|
163
|
-
{
|
|
164
|
-
const newLength = Number(newValue);
|
|
165
|
-
|
|
166
|
-
depsMap.forEach((dep, key) =>
|
|
167
|
-
{
|
|
168
|
-
if (
|
|
169
|
-
key === 'length'
|
|
170
|
-
|| key === ARRAY_ITERATE_KEY
|
|
171
|
-
|| (!isSymbol(key) && key >= newLength)
|
|
172
|
-
)
|
|
173
|
-
{
|
|
174
|
-
run(dep);
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
else
|
|
179
|
-
{
|
|
180
|
-
// schedule runs for SET | ADD | DELETE
|
|
181
|
-
if (key !== undefined || depsMap.has(undefined))
|
|
182
|
-
{
|
|
183
|
-
run(depsMap.get(key));
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// schedule ARRAY_ITERATE for any numeric key change (length is handled above)
|
|
187
|
-
if (isArrayIndex)
|
|
188
|
-
{
|
|
189
|
-
run(depsMap.get(ARRAY_ITERATE_KEY));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// also run for iteration key on ADD | DELETE | Map.SET
|
|
193
|
-
switch (type)
|
|
194
|
-
{
|
|
195
|
-
case TriggerOpTypes.ADD:
|
|
196
|
-
if (!targetIsArray)
|
|
197
|
-
{
|
|
198
|
-
run(depsMap.get(ITERATE_KEY));
|
|
199
|
-
if (isMap(target))
|
|
200
|
-
{
|
|
201
|
-
run(depsMap.get(MAP_KEY_ITERATE_KEY));
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
else if (isArrayIndex)
|
|
205
|
-
{
|
|
206
|
-
// new index added to array -> length changes
|
|
207
|
-
run(depsMap.get('length'));
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
case TriggerOpTypes.DELETE:
|
|
211
|
-
if (!targetIsArray)
|
|
212
|
-
{
|
|
213
|
-
run(depsMap.get(ITERATE_KEY));
|
|
214
|
-
if (isMap(target))
|
|
215
|
-
{
|
|
216
|
-
run(depsMap.get(MAP_KEY_ITERATE_KEY));
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
break;
|
|
220
|
-
case TriggerOpTypes.SET:
|
|
221
|
-
if (isMap(target))
|
|
222
|
-
{
|
|
223
|
-
run(depsMap.get(ITERATE_KEY));
|
|
224
|
-
}
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
}
|
|
1
|
+
import { batchRun } from './batch';
|
|
2
|
+
import { Reactivity } from './Reactivity';
|
|
3
|
+
import { ARRAY_ITERATE_KEY, ITERATE_KEY, MAP_KEY_ITERATE_KEY, TrackOpTypes, TriggerOpTypes } from './shared/constants';
|
|
4
|
+
import { isArray, isIntegerKey, isMap, isSymbol } from './shared/general';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 反应式属性。
|
|
8
|
+
*
|
|
9
|
+
* @param target 对象。
|
|
10
|
+
* @param key 属性
|
|
11
|
+
* @returns 反应式属性。
|
|
12
|
+
*/
|
|
13
|
+
function property<T, K extends keyof T>(target: T, key: K)
|
|
14
|
+
{
|
|
15
|
+
let depsMap = PropertyReactivity._targetMap.get(target);
|
|
16
|
+
|
|
17
|
+
if (!depsMap)
|
|
18
|
+
{
|
|
19
|
+
depsMap = new Map();
|
|
20
|
+
PropertyReactivity._targetMap.set(target, depsMap);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//
|
|
24
|
+
let dep = depsMap.get(key);
|
|
25
|
+
|
|
26
|
+
if (!dep)
|
|
27
|
+
{
|
|
28
|
+
dep = new PropertyReactivity(target, key);
|
|
29
|
+
depsMap.set(key, dep);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return dep;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 属性反应式节点。
|
|
37
|
+
*/
|
|
38
|
+
export class PropertyReactivity<T, K extends keyof T> extends Reactivity<T>
|
|
39
|
+
{
|
|
40
|
+
/**
|
|
41
|
+
* 获取当前节点值。
|
|
42
|
+
*
|
|
43
|
+
* 取值时将会建立与父节点的依赖关系。
|
|
44
|
+
*/
|
|
45
|
+
get value(): T
|
|
46
|
+
{
|
|
47
|
+
this.track();
|
|
48
|
+
|
|
49
|
+
return this._value;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
set value(v)
|
|
53
|
+
{
|
|
54
|
+
// 处理特殊字段,这些字段
|
|
55
|
+
if (this._key === 'length')
|
|
56
|
+
{
|
|
57
|
+
v = this._target['length'];
|
|
58
|
+
}
|
|
59
|
+
else if (isSymbol(this._key))
|
|
60
|
+
{
|
|
61
|
+
v = ~~this._value + 1 as any;
|
|
62
|
+
}
|
|
63
|
+
if (v === this._value) return;
|
|
64
|
+
// 触发属性的变化。
|
|
65
|
+
this.trigger();
|
|
66
|
+
this._value = v;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private _target: T;
|
|
70
|
+
private _key: K;
|
|
71
|
+
|
|
72
|
+
constructor(target: T, key: K)
|
|
73
|
+
{
|
|
74
|
+
super();
|
|
75
|
+
this._target = target;
|
|
76
|
+
this._key = key;
|
|
77
|
+
if (target instanceof Map
|
|
78
|
+
|| target instanceof WeakMap
|
|
79
|
+
)
|
|
80
|
+
{
|
|
81
|
+
this._value = (target as any as WeakMap<any, any>).get(key);
|
|
82
|
+
}
|
|
83
|
+
else if (target instanceof Set
|
|
84
|
+
|| target instanceof WeakSet
|
|
85
|
+
)
|
|
86
|
+
{
|
|
87
|
+
this._value = (target as any as WeakSet<any>).has(key) as any;
|
|
88
|
+
}
|
|
89
|
+
else
|
|
90
|
+
{
|
|
91
|
+
this._value = (target as any)[key as any];
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
triggerIfChanged()
|
|
96
|
+
{
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* 追踪属性的变化。
|
|
102
|
+
*
|
|
103
|
+
* 当属性被访问时,将会追踪属性的变化。
|
|
104
|
+
*
|
|
105
|
+
* @param target 目标对象。
|
|
106
|
+
* @param key 属性名。
|
|
107
|
+
* @returns
|
|
108
|
+
*/
|
|
109
|
+
static track(target: object, type: TrackOpTypes, key: unknown): void
|
|
110
|
+
{
|
|
111
|
+
if (!Reactivity.activeReactivity) return;
|
|
112
|
+
|
|
113
|
+
const dep = property(target as any, key as any);
|
|
114
|
+
|
|
115
|
+
// 取值,建立依赖关系。
|
|
116
|
+
dep.track();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @private
|
|
121
|
+
*/
|
|
122
|
+
static _targetMap: WeakMap<any, Map<any, PropertyReactivity<any, any>>> = new WeakMap();
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* 触发属性的变化。
|
|
126
|
+
*
|
|
127
|
+
* @param target 目标对象。
|
|
128
|
+
* @param type 操作类型。
|
|
129
|
+
* @param key 属性名。
|
|
130
|
+
* @param newValue 新值。
|
|
131
|
+
* @param oldValue 旧值。
|
|
132
|
+
* @returns
|
|
133
|
+
*/
|
|
134
|
+
static trigger(target: object, type: TriggerOpTypes, key?: unknown, newValue?: unknown, oldValue?: unknown): void
|
|
135
|
+
{
|
|
136
|
+
const depsMap = this._targetMap.get(target);
|
|
137
|
+
|
|
138
|
+
if (!depsMap) return;
|
|
139
|
+
|
|
140
|
+
const run = (dep: PropertyReactivity<any, any> | undefined) =>
|
|
141
|
+
{
|
|
142
|
+
if (dep)
|
|
143
|
+
{
|
|
144
|
+
// 触发属性的变化。
|
|
145
|
+
dep.value = newValue;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
batchRun(() =>
|
|
150
|
+
{
|
|
151
|
+
if (type === TriggerOpTypes.CLEAR)
|
|
152
|
+
{
|
|
153
|
+
// collection being cleared
|
|
154
|
+
// trigger all effects for target
|
|
155
|
+
depsMap.forEach(run);
|
|
156
|
+
}
|
|
157
|
+
else
|
|
158
|
+
{
|
|
159
|
+
const targetIsArray = isArray(target);
|
|
160
|
+
const isArrayIndex = targetIsArray && isIntegerKey(key);
|
|
161
|
+
|
|
162
|
+
if (targetIsArray && key === 'length')
|
|
163
|
+
{
|
|
164
|
+
const newLength = Number(newValue);
|
|
165
|
+
|
|
166
|
+
depsMap.forEach((dep, key) =>
|
|
167
|
+
{
|
|
168
|
+
if (
|
|
169
|
+
key === 'length'
|
|
170
|
+
|| key === ARRAY_ITERATE_KEY
|
|
171
|
+
|| (!isSymbol(key) && key >= newLength)
|
|
172
|
+
)
|
|
173
|
+
{
|
|
174
|
+
run(dep);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
else
|
|
179
|
+
{
|
|
180
|
+
// schedule runs for SET | ADD | DELETE
|
|
181
|
+
if (key !== undefined || depsMap.has(undefined))
|
|
182
|
+
{
|
|
183
|
+
run(depsMap.get(key));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// schedule ARRAY_ITERATE for any numeric key change (length is handled above)
|
|
187
|
+
if (isArrayIndex)
|
|
188
|
+
{
|
|
189
|
+
run(depsMap.get(ARRAY_ITERATE_KEY));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// also run for iteration key on ADD | DELETE | Map.SET
|
|
193
|
+
switch (type)
|
|
194
|
+
{
|
|
195
|
+
case TriggerOpTypes.ADD:
|
|
196
|
+
if (!targetIsArray)
|
|
197
|
+
{
|
|
198
|
+
run(depsMap.get(ITERATE_KEY));
|
|
199
|
+
if (isMap(target))
|
|
200
|
+
{
|
|
201
|
+
run(depsMap.get(MAP_KEY_ITERATE_KEY));
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
else if (isArrayIndex)
|
|
205
|
+
{
|
|
206
|
+
// new index added to array -> length changes
|
|
207
|
+
run(depsMap.get('length'));
|
|
208
|
+
}
|
|
209
|
+
break;
|
|
210
|
+
case TriggerOpTypes.DELETE:
|
|
211
|
+
if (!targetIsArray)
|
|
212
|
+
{
|
|
213
|
+
run(depsMap.get(ITERATE_KEY));
|
|
214
|
+
if (isMap(target))
|
|
215
|
+
{
|
|
216
|
+
run(depsMap.get(MAP_KEY_ITERATE_KEY));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
case TriggerOpTypes.SET:
|
|
221
|
+
if (isMap(target))
|
|
222
|
+
{
|
|
223
|
+
run(depsMap.get(ITERATE_KEY));
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|