@expressive/mvc 0.53.6 → 0.54.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.
- package/dist/esm/context.js +130 -126
- package/dist/esm/control.js +165 -158
- package/dist/esm/index.js +22 -8
- package/dist/esm/instruction/get.js +84 -84
- package/dist/esm/instruction/has.js +73 -70
- package/dist/esm/instruction/ref.js +58 -55
- package/dist/esm/instruction/set.js +77 -80
- package/dist/esm/instruction/use.js +60 -55
- package/dist/esm/model.js +247 -251
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +4 -4
- package/dist/esm/context.test.js +0 -211
- package/dist/esm/control.test.js +0 -183
- package/dist/esm/instruction/get.test.js +0 -645
- package/dist/esm/instruction/has.test.js +0 -354
- package/dist/esm/instruction/ref.test.js +0 -281
- package/dist/esm/instruction/set.test.js +0 -527
- package/dist/esm/instruction/use.test.js +0 -305
- package/dist/esm/mocks.js +0 -20
- package/dist/esm/model.test.js +0 -1541
package/dist/esm/control.js
CHANGED
|
@@ -1,182 +1,189 @@
|
|
|
1
|
-
/** Placeholder event determines if model is initialized or not. */
|
|
2
1
|
const onReady = () => null;
|
|
3
|
-
const LISTENERS = new WeakMap();
|
|
4
|
-
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
/** Central event dispatch. Bunches all updates to occur at same time. */
|
|
9
|
-
const DISPATCH = new Set();
|
|
10
|
-
const OBSERVER = new WeakMap();
|
|
2
|
+
const LISTENERS = /* @__PURE__ */ new WeakMap();
|
|
3
|
+
const PENDING = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
const PENDING_KEYS = /* @__PURE__ */ new WeakMap();
|
|
5
|
+
const DISPATCH = /* @__PURE__ */ new Set();
|
|
6
|
+
const OBSERVER = /* @__PURE__ */ new WeakMap();
|
|
11
7
|
function addListener(subject, callback, select) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
let listeners = LISTENERS.get(subject);
|
|
9
|
+
if (!listeners)
|
|
10
|
+
LISTENERS.set(subject, listeners = /* @__PURE__ */ new Map([[onReady, void 0]]));
|
|
11
|
+
const filter = select === void 0 ? void 0 : /* @__PURE__ */ new Set([select]);
|
|
12
|
+
if (!listeners.has(onReady) && !filter)
|
|
13
|
+
callback.call(subject, true, subject);
|
|
14
|
+
listeners.set(callback, filter);
|
|
15
|
+
return () => listeners.delete(callback);
|
|
20
16
|
}
|
|
21
17
|
function emit(model, key) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
18
|
+
const listeners = LISTENERS.get(model);
|
|
19
|
+
const notReady = listeners.has(onReady);
|
|
20
|
+
if (key === true && !notReady)
|
|
21
|
+
return;
|
|
22
|
+
let pending2 = PENDING.get(model);
|
|
23
|
+
if (pending2) {
|
|
24
|
+
pending2.add(key);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
PENDING.set(model, pending2 = new Set(notReady ? [true, key] : [key]));
|
|
28
|
+
for (const key2 of pending2)
|
|
29
|
+
for (const [callback, filter] of listeners)
|
|
30
|
+
if (!filter || filter.has(key2)) {
|
|
31
|
+
const after = callback.call(model, key2, model);
|
|
32
|
+
if (after)
|
|
33
|
+
enqueue(after);
|
|
34
|
+
else if (after === null)
|
|
35
|
+
listeners.delete(callback);
|
|
36
|
+
}
|
|
37
|
+
if (key === null)
|
|
38
|
+
listeners.clear();
|
|
39
|
+
PENDING.delete(model);
|
|
44
40
|
}
|
|
45
41
|
function event(subject, key, silent) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!silent)
|
|
54
|
-
enqueue(() => {
|
|
55
|
-
emit(subject, false);
|
|
56
|
-
PENDING_KEYS.delete(subject);
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
pending.add(key);
|
|
42
|
+
if (key === null)
|
|
43
|
+
return emit(subject, key);
|
|
44
|
+
if (!key)
|
|
45
|
+
return emit(subject, true);
|
|
46
|
+
let pending2 = PENDING_KEYS.get(subject);
|
|
47
|
+
if (!pending2) {
|
|
48
|
+
PENDING_KEYS.set(subject, pending2 = /* @__PURE__ */ new Set());
|
|
60
49
|
if (!silent)
|
|
61
|
-
|
|
50
|
+
enqueue(() => {
|
|
51
|
+
emit(subject, false);
|
|
52
|
+
PENDING_KEYS.delete(subject);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
pending2.add(key);
|
|
56
|
+
if (!silent)
|
|
57
|
+
emit(subject, key);
|
|
62
58
|
}
|
|
63
59
|
function pending(subject) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
60
|
+
if (PENDING_KEYS.has(subject))
|
|
61
|
+
return {
|
|
62
|
+
then: (res) => new Promise((res2) => {
|
|
63
|
+
const remove = addListener(subject, (key) => {
|
|
64
|
+
if (key !== true) {
|
|
65
|
+
remove();
|
|
66
|
+
return res2.bind(null, Array.from(PENDING_KEYS.get(subject)));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}).then(res)
|
|
70
|
+
};
|
|
75
71
|
}
|
|
76
72
|
function enqueue(eventHandler) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
DISPATCH.add(eventHandler);
|
|
73
|
+
if (!DISPATCH.size)
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
DISPATCH.forEach((event2) => {
|
|
76
|
+
try {
|
|
77
|
+
event2();
|
|
78
|
+
} catch (err) {
|
|
79
|
+
console.error(err);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
DISPATCH.clear();
|
|
83
|
+
}, 0);
|
|
84
|
+
DISPATCH.add(eventHandler);
|
|
90
85
|
}
|
|
91
86
|
function createProxy(from, observer) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
const proxy = Object.create(from);
|
|
88
|
+
OBSERVER.set(proxy, observer);
|
|
89
|
+
return proxy;
|
|
95
90
|
}
|
|
96
91
|
function watch(from, key, value) {
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
const access = OBSERVER.get(from);
|
|
93
|
+
return access ? access(from, key, value) : value;
|
|
99
94
|
}
|
|
100
95
|
function createEffect(target, callback, argument) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const ret = callback.call(subscriber, subscriber);
|
|
134
|
-
const flush = ctx();
|
|
135
|
-
reset = ret === null ? null : invoke;
|
|
136
|
-
unset = key => {
|
|
137
|
-
if (typeof ret == "function")
|
|
138
|
-
ret(key);
|
|
139
|
-
flush();
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
catch (err) {
|
|
143
|
-
if (err instanceof Promise) {
|
|
144
|
-
reset = undefined;
|
|
145
|
-
err.then(invoke);
|
|
146
|
-
}
|
|
147
|
-
else
|
|
148
|
-
throw err;
|
|
149
|
-
}
|
|
96
|
+
const listeners = LISTENERS.get(target);
|
|
97
|
+
let unset;
|
|
98
|
+
let reset;
|
|
99
|
+
function invoke() {
|
|
100
|
+
let stale;
|
|
101
|
+
const subscriber = createProxy(target, access);
|
|
102
|
+
LISTENERS.set(subscriber, listeners);
|
|
103
|
+
function onUpdate() {
|
|
104
|
+
if (stale)
|
|
105
|
+
return null;
|
|
106
|
+
stale = true;
|
|
107
|
+
if (reset && unset) {
|
|
108
|
+
unset(true);
|
|
109
|
+
unset = void 0;
|
|
110
|
+
}
|
|
111
|
+
return reset;
|
|
112
|
+
}
|
|
113
|
+
function access(from, key, value) {
|
|
114
|
+
if (value === void 0 && argument)
|
|
115
|
+
throw new Error(`${from}.${key} is required in this context.`);
|
|
116
|
+
const listeners2 = LISTENERS.get(from);
|
|
117
|
+
let listener = listeners2.get(onUpdate);
|
|
118
|
+
if (!listener)
|
|
119
|
+
listeners2.set(onUpdate, listener = /* @__PURE__ */ new Set());
|
|
120
|
+
listener.add(key);
|
|
121
|
+
const nested = LISTENERS.get(value);
|
|
122
|
+
if (nested)
|
|
123
|
+
LISTENERS.set(
|
|
124
|
+
value = createProxy(value, access),
|
|
125
|
+
nested
|
|
126
|
+
);
|
|
127
|
+
return value;
|
|
150
128
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
129
|
+
try {
|
|
130
|
+
const ctx = context(argument === false);
|
|
131
|
+
const ret = callback.call(subscriber, subscriber);
|
|
132
|
+
const flush = ctx();
|
|
133
|
+
reset = ret === null ? null : invoke;
|
|
134
|
+
unset = (key) => {
|
|
135
|
+
if (typeof ret == "function")
|
|
136
|
+
ret(key);
|
|
137
|
+
flush();
|
|
138
|
+
};
|
|
139
|
+
} catch (err) {
|
|
140
|
+
if (err instanceof Promise) {
|
|
141
|
+
reset = void 0;
|
|
142
|
+
err.then(invoke);
|
|
143
|
+
} else
|
|
144
|
+
throw err;
|
|
155
145
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
146
|
+
}
|
|
147
|
+
function cleanup() {
|
|
148
|
+
if (unset)
|
|
149
|
+
unset(false);
|
|
150
|
+
reset = null;
|
|
151
|
+
}
|
|
152
|
+
;
|
|
153
|
+
if (EffectContext && argument !== false)
|
|
154
|
+
EffectContext.add(cleanup);
|
|
155
|
+
addListener(target, (key) => {
|
|
156
|
+
if (key === true)
|
|
157
|
+
invoke();
|
|
158
|
+
else if (!reset)
|
|
159
|
+
return reset;
|
|
160
|
+
if (key === null && unset)
|
|
161
|
+
unset(null);
|
|
162
|
+
});
|
|
163
|
+
return cleanup;
|
|
168
164
|
}
|
|
169
165
|
let EffectContext;
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
166
|
+
function context(ignore) {
|
|
167
|
+
if (ignore)
|
|
168
|
+
return () => () => {
|
|
169
|
+
};
|
|
170
|
+
const current = EffectContext;
|
|
171
|
+
const ctx = EffectContext = /* @__PURE__ */ new Set();
|
|
172
|
+
return () => {
|
|
173
|
+
EffectContext = current;
|
|
175
174
|
return () => {
|
|
176
|
-
|
|
177
|
-
return () => {
|
|
178
|
-
ctx.forEach(fn => fn());
|
|
179
|
-
};
|
|
175
|
+
ctx.forEach((fn) => fn());
|
|
180
176
|
};
|
|
177
|
+
};
|
|
181
178
|
}
|
|
182
|
-
export {
|
|
179
|
+
export {
|
|
180
|
+
PENDING_KEYS,
|
|
181
|
+
addListener,
|
|
182
|
+
context,
|
|
183
|
+
createEffect,
|
|
184
|
+
createProxy,
|
|
185
|
+
event,
|
|
186
|
+
pending,
|
|
187
|
+
watch
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbnRyb2wudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgTW9kZWwgfSBmcm9tIFwiLi9tb2RlbFwiO1xuXG4vKipcbiAqIFVwZGF0ZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIFxuICogQHBhcmFtIGtleSAtXG4gKiAgIC0gYHN0cmluZ2AgLSBwcm9wZXJ0eSB3aGljaCBoYXMgdXBkYXRlZC5cbiAqICAgLSBgZmFsc2VgIC0gYSBub3JtYWwgdXBkYXRlIGhhcyBjb21wbGV0ZWQuXG4gKiAgIC0gYHRydWVgIC0gaW5pdGlhbCBldmVudDsgaW5zdGFuY2UgaXMgcmVhZHkuXG4gKiAgIC0gYG51bGxgIC0gdGVybWluYWwgZXZlbnQ7IGluc3RhbmNlIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0gc291cmNlIC0gSW5zdGFuY2Ugb2YgTW9kZWwgZm9yIHdoaWNoIHVwZGF0ZSBoYXMgb2NjdXJlZC5cbiAqL1xudHlwZSBPblVwZGF0ZTxUIGV4dGVuZHMgTW9kZWwgPSBhbnk+ID0gXG4gICh0aGlzOiBULCBrZXk6IHVua25vd24sIHNvdXJjZTogVCkgPT4gKCgpID0+IHZvaWQpIHwgbnVsbCB8IHZvaWQ7XG5cbnR5cGUgT25BY2Nlc3M8VCBleHRlbmRzIE1vZGVsID0gYW55LCBSID0gdW5rbm93bj4gPVxuICAoZnJvbTogVCwga2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBSKSA9PiB1bmtub3duO1xuXG50eXBlIEVmZmVjdDxUIGV4dGVuZHMgTW9kZWw+ID0gKHRoaXM6IFQsIHByb3h5OiBUKSA9PlxuICAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IG51bGwgfCB2b2lkO1xuXG50eXBlIEV2ZW50ID0gbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW4gfCBzeW1ib2w7XG5cbi8qKiBQbGFjZWhvbGRlciBldmVudCBkZXRlcm1pbmVzIGlmIG1vZGVsIGlzIGluaXRpYWxpemVkIG9yIG5vdC4gKi9cbmNvbnN0IG9uUmVhZHkgPSAoKSA9PiBudWxsO1xuXG5jb25zdCBMSVNURU5FUlMgPSBuZXcgV2Vha01hcDxNb2RlbCwgTWFwPE9uVXBkYXRlLCBTZXQ8RXZlbnQ+IHwgdW5kZWZpbmVkPj4oKTtcblxuLyoqIEV2ZW50cyBwZW5kaW5nIGZvciBhIGdpdmVuIG9iamVjdC4gKi9cbmNvbnN0IFBFTkRJTkcgPSBuZXcgV2Vha01hcDxNb2RlbCwgU2V0PEV2ZW50Pj4oKTtcblxuLyoqIFVwZGF0ZSByZWdpc3Rlci4gKi9cbmNvbnN0IFBFTkRJTkdfS0VZUyA9IG5ldyBXZWFrTWFwPE1vZGVsLCBTZXQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPj4oKTtcblxuLyoqIENlbnRyYWwgZXZlbnQgZGlzcGF0Y2guIEJ1bmNoZXMgYWxsIHVwZGF0ZXMgdG8gb2NjdXIgYXQgc2FtZSB0aW1lLiAqL1xuY29uc3QgRElTUEFUQ0ggPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG5cbmNvbnN0IE9CU0VSVkVSID0gbmV3IFdlYWtNYXA8TW9kZWwsIE9uQWNjZXNzPigpO1xuXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcjxUIGV4dGVuZHMgTW9kZWw+KHN1YmplY3Q6IFQsIGNhbGxiYWNrOiBPblVwZGF0ZTxUPiwgc2VsZWN0PzogRXZlbnQpe1xuICBsZXQgbGlzdGVuZXJzID0gTElTVEVORVJTLmdldChzdWJqZWN0KSE7XG5cbiAgaWYoIWxpc3RlbmVycylcbiAgICBMSVNURU5FUlMuc2V0KHN1YmplY3QsIGxpc3RlbmVycyA9IG5ldyBNYXAoW1tvblJlYWR5LCB1bmRlZmluZWRdXSkpO1xuXG4gIGNvbnN0IGZpbHRlciA9IHNlbGVjdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbmV3IFNldChbc2VsZWN0XSk7XG5cbiAgaWYoIWxpc3RlbmVycy5oYXMob25SZWFkeSkgJiYgIWZpbHRlcilcbiAgICBjYWxsYmFjay5jYWxsKHN1YmplY3QsIHRydWUsIHN1YmplY3QpO1xuXG4gIGxpc3RlbmVycy5zZXQoY2FsbGJhY2ssIGZpbHRlcik7XG5cbiAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBlbWl0KG1vZGVsOiBNb2RlbCwga2V5OiBFdmVudCk6IHZvaWQge1xuICBjb25zdCBsaXN0ZW5lcnMgPSBMSVNURU5FUlMuZ2V0KG1vZGVsKSE7XG4gIGNvbnN0IG5vdFJlYWR5ID0gbGlzdGVuZXJzLmhhcyhvblJlYWR5KTtcblxuICBpZihrZXkgPT09IHRydWUgJiYgIW5vdFJlYWR5KVxuICAgIHJldHVybjtcblxuICBsZXQgcGVuZGluZyA9IFBFTkRJTkcuZ2V0KG1vZGVsKTtcblxuICBpZihwZW5kaW5nKXtcbiAgICBwZW5kaW5nLmFkZChrZXkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFBFTkRJTkcuc2V0KG1vZGVsLCBwZW5kaW5nID0gbmV3IFNldChub3RSZWFkeSA/IFt0cnVlLCBrZXldIDogW2tleV0pKTtcblxuICBmb3IoY29uc3Qga2V5IG9mIHBlbmRpbmcpXG4gICAgZm9yKGNvbnN0IFtjYWxsYmFjaywgZmlsdGVyXSBvZiBsaXN0ZW5lcnMpXG4gICAgICBpZighZmlsdGVyIHx8IGZpbHRlci5oYXMoa2V5KSl7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gY2FsbGJhY2suY2FsbChtb2RlbCwga2V5LCBtb2RlbCk7XG5cbiAgICAgICAgaWYoYWZ0ZXIpXG4gICAgICAgICAgZW5xdWV1ZShhZnRlcik7XG5cbiAgICAgICAgZWxzZSBpZihhZnRlciA9PT0gbnVsbClcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICBpZihrZXkgPT09IG51bGwpXG4gICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gIFxuICBQRU5ESU5HLmRlbGV0ZShtb2RlbCk7XG59XG5cbmZ1bmN0aW9uIGV2ZW50KFxuICBzdWJqZWN0OiBNb2RlbCxcbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sIHwgbnVsbCxcbiAgc2lsZW50PzogYm9vbGVhbil7XG5cbiAgaWYoa2V5ID09PSBudWxsKVxuICAgIHJldHVybiBlbWl0KHN1YmplY3QsIGtleSk7XG5cbiAgaWYoIWtleSlcbiAgICByZXR1cm4gZW1pdChzdWJqZWN0LCB0cnVlKTtcblxuICBsZXQgcGVuZGluZyA9IFBFTkRJTkdfS0VZUy5nZXQoc3ViamVjdCk7XG5cbiAgaWYoIXBlbmRpbmcpe1xuICAgIFBFTkRJTkdfS0VZUy5zZXQoc3ViamVjdCwgcGVuZGluZyA9IG5ldyBTZXQoKSk7XG5cbiAgICBpZighc2lsZW50KVxuICAgICAgZW5xdWV1ZSgoKSA9PiB7XG4gICAgICAgIGVtaXQoc3ViamVjdCwgZmFsc2UpO1xuICAgICAgICBQRU5ESU5HX0tFWVMuZGVsZXRlKHN1YmplY3QpXG4gICAgICB9KVxuICB9XG5cbiAgcGVuZGluZy5hZGQoa2V5KTtcblxuICBpZighc2lsZW50KVxuICAgIGVtaXQoc3ViamVjdCwga2V5KTtcbn1cblxuZnVuY3Rpb24gcGVuZGluZzxUIGV4dGVuZHMgTW9kZWw+KHN1YmplY3Q6IFQpe1xuICBpZihQRU5ESU5HX0tFWVMuaGFzKHN1YmplY3QpKVxuICAgIHJldHVybiA8UHJvbWlzZUxpa2U8TW9kZWwuRXZlbnQ8VD5bXT4+IHtcbiAgICAgIHRoZW46IChyZXMpID0+IG5ldyBQcm9taXNlPGFueT4ocmVzID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gYWRkTGlzdGVuZXIoc3ViamVjdCwga2V5ID0+IHtcbiAgICAgICAgICBpZihrZXkgIT09IHRydWUpe1xuICAgICAgICAgICAgcmVtb3ZlKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmJpbmQobnVsbCwgQXJyYXkuZnJvbShQRU5ESU5HX0tFWVMuZ2V0KHN1YmplY3QpISkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS50aGVuKHJlcylcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGVucXVldWUoZXZlbnRIYW5kbGVyOiAoKCkgPT4gdm9pZCkpe1xuICBpZighRElTUEFUQ0guc2l6ZSlcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIERJU1BBVENILmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGV2ZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZXJyKXtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRElTUEFUQ0guY2xlYXIoKTtcbiAgICB9LCAwKTtcblxuICBESVNQQVRDSC5hZGQoZXZlbnRIYW5kbGVyKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHJveHk8VCBleHRlbmRzIE1vZGVsPihmcm9tOiBULCBvYnNlcnZlcjogT25BY2Nlc3M8VD4pe1xuICBjb25zdCBwcm94eSA9IE9iamVjdC5jcmVhdGUoZnJvbSkgYXMgVDtcbiAgT0JTRVJWRVIuc2V0KHByb3h5LCBvYnNlcnZlcik7XG4gIHJldHVybiBwcm94eTtcbn1cblxuZnVuY3Rpb24gd2F0Y2goZnJvbTogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU/OiBhbnkpe1xuICBjb25zdCBhY2Nlc3MgPSBPQlNFUlZFUi5nZXQoZnJvbSk7XG4gIHJldHVybiBhY2Nlc3MgPyBhY2Nlc3MoZnJvbSwga2V5LCB2YWx1ZSkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzaWRlLWVmZmVjdCB3aGljaCB3aWxsIHVwZGF0ZSB3aGVuZXZlciB2YWx1ZXMgYWNjZXNzZWQgY2hhbmdlLlxuICogQ2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFuZCB3aGVuZXZlciB2YWx1ZXMgYXJlIHN0YWxlLlxuICogXG4gKiBAcGFyYW0gdGFyZ2V0IC0gSW5zdGFuY2Ugb2YgTW9kZWwgdG8gb2JzZXJ2ZS5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHZhbHVlcyBjaGFuZ2UuXG4gKiBAcGFyYW0gcmVxdWlyZVZhbHVlcyAtIElmIGB0cnVlYCB3aWxsIHRocm93IGlmIGFjY2Vzc2luZyBhIHZhbHVlIHdoaWNoIGlzIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFZmZlY3Q8VCBleHRlbmRzIE1vZGVsPih0YXJnZXQ6IFQsIGNhbGxiYWNrOiBFZmZlY3Q8UmVxdWlyZWQ8VD4+LCByZXF1aXJlVmFsdWVzOiB0cnVlKTogKCkgPT4gdm9pZDtcbmZ1bmN0aW9uIGNyZWF0ZUVmZmVjdDxUIGV4dGVuZHMgTW9kZWw+KHRhcmdldDogVCwgY2FsbGJhY2s6IEVmZmVjdDxUPiwgcmVjdXJzaXZlPzogYm9vbGVhbik6ICgpID0+IHZvaWQ7XG5mdW5jdGlvbiBjcmVhdGVFZmZlY3Q8VCBleHRlbmRzIE1vZGVsPih0YXJnZXQ6IFQsIGNhbGxiYWNrOiBFZmZlY3Q8VD4sIGFyZ3VtZW50PzogYm9vbGVhbil7XG4gIGNvbnN0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQodGFyZ2V0KSE7XG5cbiAgbGV0IHVuc2V0OiAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBsZXQgcmVzZXQ6ICgoKSA9PiB2b2lkKSB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgZnVuY3Rpb24gaW52b2tlKCl7XG4gICAgbGV0IHN0YWxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3Vic2NyaWJlciA9IGNyZWF0ZVByb3h5KHRhcmdldCwgYWNjZXNzKTtcblxuICAgIExJU1RFTkVSUy5zZXQoc3Vic2NyaWJlciwgbGlzdGVuZXJzKTtcblxuICAgIGZ1bmN0aW9uIG9uVXBkYXRlKCkge1xuICAgICAgaWYgKHN0YWxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcblxuICAgICAgc3RhbGUgPSB0cnVlO1xuXG4gICAgICBpZiAocmVzZXQgJiYgdW5zZXQpIHtcbiAgICAgICAgdW5zZXQodHJ1ZSk7XG4gICAgICAgIHVuc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWNjZXNzKGZyb206IE1vZGVsLCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSkge1xuICAgICAgaWYodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBhcmd1bWVudClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Zyb219LiR7a2V5fSBpcyByZXF1aXJlZCBpbiB0aGlzIGNvbnRleHQuYCk7XG5cbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQoZnJvbSkhO1xuICAgICAgbGV0IGxpc3RlbmVyID0gbGlzdGVuZXJzLmdldChvblVwZGF0ZSk7XG5cbiAgICAgIGlmKCFsaXN0ZW5lcilcbiAgICAgICAgbGlzdGVuZXJzLnNldChvblVwZGF0ZSwgbGlzdGVuZXIgPSBuZXcgU2V0KTtcblxuICAgICAgbGlzdGVuZXIuYWRkKGtleSk7XG5cbiAgICAgIGNvbnN0IG5lc3RlZCA9IExJU1RFTkVSUy5nZXQodmFsdWUpO1xuXG4gICAgICBpZihuZXN0ZWQpXG4gICAgICAgIExJU1RFTkVSUy5zZXQoXG4gICAgICAgICAgdmFsdWUgPSBjcmVhdGVQcm94eSh2YWx1ZSwgYWNjZXNzKSxcbiAgICAgICAgICBuZXN0ZWRcbiAgICAgICAgKTtcblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdHggPSBjb250ZXh0KGFyZ3VtZW50ID09PSBmYWxzZSlcbiAgICAgIGNvbnN0IHJldCA9IGNhbGxiYWNrLmNhbGwoc3Vic2NyaWJlciwgc3Vic2NyaWJlcik7XG4gICAgICBjb25zdCBmbHVzaCA9IGN0eCgpO1xuXG4gICAgICByZXNldCA9IHJldCA9PT0gbnVsbCA/IG51bGwgOiBpbnZva2U7XG4gICAgICB1bnNldCA9IGtleSA9PiB7XG4gICAgICAgIGlmKHR5cGVvZiByZXQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHJldChrZXkpO1xuXG4gICAgICAgIGZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGVycil7XG4gICAgICBpZihlcnIgaW5zdGFuY2VvZiBQcm9taXNlKXtcbiAgICAgICAgcmVzZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGVyci50aGVuKGludm9rZSk7XG4gICAgICB9XG4gICAgICBlbHNlXG4gICAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwKCl7XG4gICAgaWYodW5zZXQpXG4gICAgICB1bnNldChmYWxzZSk7XG5cbiAgICByZXNldCA9IG51bGw7XG4gIH07XG5cbiAgaWYoRWZmZWN0Q29udGV4dCAmJiBhcmd1bWVudCAhPT0gZmFsc2UpXG4gICAgRWZmZWN0Q29udGV4dC5hZGQoY2xlYW51cCk7XG5cbiAgYWRkTGlzdGVuZXIodGFyZ2V0LCBrZXkgPT4ge1xuICAgIGlmKGtleSA9PT0gdHJ1ZSlcbiAgICAgIGludm9rZSgpO1xuXG4gICAgZWxzZSBpZighcmVzZXQpXG4gICAgICByZXR1cm4gcmVzZXQ7XG5cbiAgICBpZihrZXkgPT09IG51bGwgJiYgdW5zZXQpXG4gICAgICB1bnNldChudWxsKTtcbiAgfSk7XG4gIFxuICByZXR1cm4gY2xlYW51cDtcbn1cblxubGV0IEVmZmVjdENvbnRleHQ6IFNldDwoKSA9PiB2b2lkPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRleHQoaWdub3JlPzogYm9vbGVhbil7XG4gIGlmKGlnbm9yZSlcbiAgICByZXR1cm4gKCkgPT4gKCkgPT4ge307XG5cbiAgY29uc3QgY3VycmVudCA9IEVmZmVjdENvbnRleHQ7XG4gIGNvbnN0IGN0eCA9IEVmZmVjdENvbnRleHQgPSBuZXcgU2V0O1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgRWZmZWN0Q29udGV4dCA9IGN1cnJlbnQ7XG4gICAgXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGN0eC5mb3JFYWNoKGZuID0+IGZuKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQge1xuICBhZGRMaXN0ZW5lcixcbiAgY3JlYXRlRWZmZWN0LFxuICBjcmVhdGVQcm94eSxcbiAgZXZlbnQsXG4gIE9uVXBkYXRlLFxuICBQRU5ESU5HX0tFWVMsXG4gIHBlbmRpbmcsXG4gIHdhdGNoXG59Il0sCiAgIm1hcHBpbmdzIjogIkFBd0JBLE1BQU0sVUFBVSxNQUFNO0FBRXRCLE1BQU0sWUFBWSxvQkFBSSxRQUFzRDtBQUc1RSxNQUFNLFVBQVUsb0JBQUksUUFBMkI7QUFHL0MsTUFBTSxlQUFlLG9CQUFJLFFBQThDO0FBR3ZFLE1BQU0sV0FBVyxvQkFBSSxJQUFnQjtBQUVyQyxNQUFNLFdBQVcsb0JBQUksUUFBeUI7QUFFOUMsU0FBUyxZQUE2QixTQUFZLFVBQXVCLFFBQWU7QUFDdEYsTUFBSSxZQUFZLFVBQVUsSUFBSSxPQUFPO0FBRXJDLE1BQUcsQ0FBQztBQUNGLGNBQVUsSUFBSSxTQUFTLFlBQVksb0JBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxNQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXBFLFFBQU0sU0FBUyxXQUFXLFNBQVksU0FBWSxvQkFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBRWxFLE1BQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxLQUFLLENBQUM7QUFDN0IsYUFBUyxLQUFLLFNBQVMsTUFBTSxPQUFPO0FBRXRDLFlBQVUsSUFBSSxVQUFVLE1BQU07QUFFOUIsU0FBTyxNQUFNLFVBQVUsT0FBTyxRQUFRO0FBQ3hDO0FBRUEsU0FBUyxLQUFLLE9BQWMsS0FBa0I7QUFDNUMsUUFBTSxZQUFZLFVBQVUsSUFBSSxLQUFLO0FBQ3JDLFFBQU0sV0FBVyxVQUFVLElBQUksT0FBTztBQUV0QyxNQUFHLFFBQVEsUUFBUSxDQUFDO0FBQ2xCO0FBRUYsTUFBSUEsV0FBVSxRQUFRLElBQUksS0FBSztBQUUvQixNQUFHQSxVQUFRO0FBQ1QsSUFBQUEsU0FBUSxJQUFJLEdBQUc7QUFDZjtBQUFBLEVBQ0Y7QUFFQSxVQUFRLElBQUksT0FBT0EsV0FBVSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sR0FB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LCtCQUErQjtBQUUvRCxZQUFNQyxhQUFZLFVBQVUsSUFBSSxJQUFJO0FBQ3BDLFVBQUksV0FBV0EsV0FBVSxJQUFJLFFBQVE7QUFFckMsVUFBRyxDQUFDO0FBQ0YsUUFBQUEsV0FBVSxJQUFJLFVBQVUsV0FBVyxvQkFBSSxLQUFHO0FBRTVDLGVBQVMsSUFBSSxHQUFHO0FBRWhCLFlBQU0sU0FBUyxVQUFVLElBQUksS0FBSztBQUVsQyxVQUFHO0FBQ0Qsa0JBQVU7QUFBQSxVQUNSLFFBQVEsWUFBWSxPQUFPLE1BQU07QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFFRixhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUk7QUFDRixZQUFNLE1BQU0sUUFBUSxhQUFhLEtBQUs7QUFDdEMsWUFBTSxNQUFNLFNBQVMsS0FBSyxZQUFZLFVBQVU7QUFDaEQsWUFBTSxRQUFRLElBQUk7QUFFbEIsY0FBUSxRQUFRLE9BQU8sT0FBTztBQUM5QixjQUFRLFNBQU87QUFDYixZQUFHLE9BQU8sT0FBTztBQUNmLGNBQUksR0FBRztBQUVULGNBQU07QUFBQSxNQUNSO0FBQUEsSUFDRixTQUNNLEtBQUk7QUFDUixVQUFHLGVBQWUsU0FBUTtBQUN4QixnQkFBUTtBQUNSLFlBQUksS0FBSyxNQUFNO0FBQUEsTUFDakI7QUFFRSxjQUFNO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLFVBQVM7QUFDaEIsUUFBRztBQUNELFlBQU0sS0FBSztBQUViLFlBQVE7QUFBQSxFQUNWO0FBQUM7QUFFRCxNQUFHLGlCQUFpQixhQUFhO0FBQy9CLGtCQUFjLElBQUksT0FBTztBQUUzQixjQUFZLFFBQVEsU0FBTztBQUN6QixRQUFHLFFBQVE7QUFDVCxhQUFPO0FBQUEsYUFFRCxDQUFDO0FBQ1AsYUFBTztBQUVULFFBQUcsUUFBUSxRQUFRO0FBQ2pCLFlBQU0sSUFBSTtBQUFBLEVBQ2QsQ0FBQztBQUVELFNBQU87QUFDVDtBQUVBLElBQUk7QUFFRyxTQUFTLFFBQVEsUUFBaUI7QUFDdkMsTUFBRztBQUNELFdBQU8sTUFBTSxNQUFNO0FBQUEsSUFBQztBQUV0QixRQUFNLFVBQVU7QUFDaEIsUUFBTSxNQUFNLGdCQUFnQixvQkFBSTtBQUVoQyxTQUFPLE1BQU07QUFDWCxvQkFBZ0I7QUFFaEIsV0FBTyxNQUFNO0FBQ1gsVUFBSSxRQUFRLFFBQU0sR0FBRyxDQUFDO0FBQUEsSUFDeEI7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbInBlbmRpbmciLCAia2V5IiwgInJlcyIsICJldmVudCIsICJsaXN0ZW5lcnMiXQp9Cg==
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { get } from "./instruction/get";
|
|
2
|
+
import { ref } from "./instruction/ref";
|
|
3
|
+
import { set } from "./instruction/set";
|
|
4
|
+
import { use } from "./instruction/use";
|
|
5
|
+
import { has } from "./instruction/has";
|
|
6
|
+
import { Model, Model as Model2 } from "./model";
|
|
7
|
+
import { createEffect, createProxy, addListener } from "./control";
|
|
8
|
+
import { Context } from "./context";
|
|
9
|
+
export {
|
|
10
|
+
Context,
|
|
11
|
+
Model,
|
|
12
|
+
addListener,
|
|
13
|
+
createEffect,
|
|
14
|
+
createProxy,
|
|
15
|
+
Model2 as default,
|
|
16
|
+
get,
|
|
17
|
+
has,
|
|
18
|
+
ref,
|
|
19
|
+
set,
|
|
20
|
+
use
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJleHBvcnQgeyBnZXQgfSBmcm9tICcuL2luc3RydWN0aW9uL2dldCc7XG5leHBvcnQgeyByZWYgfSBmcm9tICcuL2luc3RydWN0aW9uL3JlZic7XG5leHBvcnQgeyBzZXQgfSBmcm9tICcuL2luc3RydWN0aW9uL3NldCc7XG5leHBvcnQgeyB1c2UgfSBmcm9tICcuL2luc3RydWN0aW9uL3VzZSc7XG5leHBvcnQgeyBoYXMgfSBmcm9tICcuL2luc3RydWN0aW9uL2hhcyc7XG5cbmV4cG9ydCB7IE1vZGVsLCBNb2RlbCBhcyBkZWZhdWx0IH0gZnJvbSAnLi9tb2RlbCc7XG5leHBvcnQgeyBjcmVhdGVFZmZlY3QsIGNyZWF0ZVByb3h5LCBhZGRMaXN0ZW5lciB9IGZyb20gJy4vY29udHJvbCc7XG5leHBvcnQgeyBDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JzsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLFdBQVc7QUFDcEIsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsV0FBVztBQUNwQixTQUFTLFdBQVc7QUFDcEIsU0FBUyxXQUFXO0FBRXBCLFNBQVMsT0FBZ0IsU0FBVEEsY0FBd0I7QUFDeEMsU0FBUyxjQUFjLGFBQWEsbUJBQW1CO0FBQ3ZELFNBQVMsZUFBZTsiLAogICJuYW1lcyI6IFsiTW9kZWwiXQp9Cg==
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import { Context } from
|
|
2
|
-
import { createEffect } from
|
|
3
|
-
import { fetch, METHOD, Model, PARENT, event, update } from
|
|
4
|
-
import { use } from
|
|
5
|
-
const STALE = new WeakSet();
|
|
1
|
+
import { Context } from "../context";
|
|
2
|
+
import { createEffect } from "../control";
|
|
3
|
+
import { fetch, METHOD, Model, PARENT, event, update } from "../model";
|
|
4
|
+
import { use } from "./use";
|
|
5
|
+
const STALE = /* @__PURE__ */ new WeakSet();
|
|
6
6
|
function get(arg0, arg1) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
event(subject, key, true);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}, false);
|
|
62
|
-
}
|
|
63
|
-
function compute(initial) {
|
|
64
|
-
let next;
|
|
65
|
-
try {
|
|
66
|
-
next = getter.call(proxy, proxy, key);
|
|
67
|
-
}
|
|
68
|
-
catch (err) {
|
|
69
|
-
console.warn(`An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`);
|
|
70
|
-
if (initial)
|
|
71
|
-
throw err;
|
|
72
|
-
console.error(err);
|
|
73
|
-
}
|
|
74
|
-
update(subject, key, next, !isAsync);
|
|
75
|
-
}
|
|
76
|
-
return () => {
|
|
77
|
-
if (!proxy) {
|
|
78
|
-
source(connect);
|
|
79
|
-
isAsync = true;
|
|
80
|
-
}
|
|
81
|
-
if (STALE.delete(compute))
|
|
82
|
-
compute();
|
|
83
|
-
return fetch(subject, key, !proxy);
|
|
7
|
+
return use((key, subject, state) => {
|
|
8
|
+
if (typeof arg0 == "symbol")
|
|
9
|
+
throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`);
|
|
10
|
+
if (Model.is(arg0)) {
|
|
11
|
+
let assign2 = function(value) {
|
|
12
|
+
if (typeof arg1 == "function")
|
|
13
|
+
value.get((x) => arg1(x, key));
|
|
14
|
+
update(subject, key, value);
|
|
15
|
+
};
|
|
16
|
+
var assign = assign2;
|
|
17
|
+
const hasParent = PARENT.get(subject);
|
|
18
|
+
if (!hasParent) {
|
|
19
|
+
if (arg1 === true)
|
|
20
|
+
throw new Error(`${subject} may only exist as a child of type ${arg0}.`);
|
|
21
|
+
Context.get(subject, (context) => {
|
|
22
|
+
const model = context.get(arg0);
|
|
23
|
+
if (model)
|
|
24
|
+
assign2(model);
|
|
25
|
+
else if (arg1 !== false)
|
|
26
|
+
throw new Error(`Required ${arg0} not found in context for ${subject}.`);
|
|
27
|
+
});
|
|
28
|
+
} else if (!arg0 || hasParent instanceof arg0)
|
|
29
|
+
assign2(hasParent);
|
|
30
|
+
else
|
|
31
|
+
throw new Error(`New ${subject} created as child of ${hasParent}, but must be instanceof ${arg0}.`);
|
|
32
|
+
return {
|
|
33
|
+
get: arg1 !== false
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
let from = subject;
|
|
37
|
+
if (arg0 instanceof Model) {
|
|
38
|
+
from = arg0;
|
|
39
|
+
} else {
|
|
40
|
+
const fn = METHOD.get(arg0) || arg0;
|
|
41
|
+
arg1 = (p, k) => fn.call(p, k, p);
|
|
42
|
+
}
|
|
43
|
+
const source = (resolve) => resolve(from);
|
|
44
|
+
const getter = arg1;
|
|
45
|
+
let reset;
|
|
46
|
+
let isAsync;
|
|
47
|
+
let proxy;
|
|
48
|
+
function connect(model) {
|
|
49
|
+
reset = createEffect(model, (current) => {
|
|
50
|
+
proxy = current;
|
|
51
|
+
if (!(key in state) || STALE.delete(compute))
|
|
52
|
+
compute(!reset);
|
|
53
|
+
return (didUpdate) => {
|
|
54
|
+
if (didUpdate) {
|
|
55
|
+
STALE.add(compute);
|
|
56
|
+
event(subject, key, true);
|
|
57
|
+
}
|
|
84
58
|
};
|
|
85
|
-
|
|
59
|
+
}, false);
|
|
60
|
+
}
|
|
61
|
+
function compute(initial) {
|
|
62
|
+
let next;
|
|
63
|
+
try {
|
|
64
|
+
next = getter.call(proxy, proxy, key);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
console.warn(`An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`);
|
|
67
|
+
if (initial)
|
|
68
|
+
throw err;
|
|
69
|
+
console.error(err);
|
|
70
|
+
}
|
|
71
|
+
update(subject, key, next, !isAsync);
|
|
72
|
+
}
|
|
73
|
+
return () => {
|
|
74
|
+
if (!proxy) {
|
|
75
|
+
source(connect);
|
|
76
|
+
isAsync = true;
|
|
77
|
+
}
|
|
78
|
+
if (STALE.delete(compute))
|
|
79
|
+
compute();
|
|
80
|
+
return fetch(subject, key, !proxy);
|
|
81
|
+
};
|
|
82
|
+
});
|
|
86
83
|
}
|
|
87
|
-
export {
|
|
84
|
+
export {
|
|
85
|
+
get
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2dldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgY3JlYXRlRWZmZWN0IH0gZnJvbSAnLi4vY29udHJvbCc7XG5pbXBvcnQgeyBmZXRjaCwgTUVUSE9ELCBNb2RlbCwgUEFSRU5ULCBldmVudCwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG50eXBlIFR5cGU8VCBleHRlbmRzIE1vZGVsPiA9IE1vZGVsLlR5cGU8VD4gJiB0eXBlb2YgTW9kZWw7XG5cbmNvbnN0IFNUQUxFID0gbmV3IFdlYWtTZXQ8KCkgPT4gdm9pZD4oKTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgZ2V0IHtcbiAgdHlwZSBDb21wdXRlPFQsIFMgPSBhbnk+ID0gKG9uOiBTLCBrZXk6IHN0cmluZykgPT4gVDtcblxuICB0eXBlIEZhY3Rvcnk8VCwgUyA9IGFueT4gPSAodGhpczogUywga2V5OiBzdHJpbmcsIHRoaXNBcmc6IFMpID0+IFQ7XG5cbiAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIE1vZGVsID0gTW9kZWw+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHR5cGUgRWZmZWN0PFQ+ID0gKG1vZGVsOiBULCBrZXk6IHN0cmluZykgPT4gKCgpID0+IHZvaWQpIHwgdm9pZDtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGFuZCBhc3NpZ25zIHRoZSBjb250cm9sbGVyIHdoaWNoIHNwYXduZWQgdGhpcyBob3N0LlxuICogV2hlbiBwYXJlbnQgYXNzaWducyBhbiBpbnN0YW5jZSB2aWEgYHVzZSgpYCBkaXJlY3RpdmUsIGl0XG4gKiB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGNoaWxkIHVwb24gdGhpcyByZXF1ZXN0LlxuICpcbiAqIEBwYXJhbSBUeXBlIC0gVHlwZSBvZiBjb250cm9sbGVyIGNvbXBhdGlibGUgd2l0aCB0aGlzIGNsYXNzLiBcbiAqIEBwYXJhbSBleHBlY3RQYXJlbnQgLSBJZiB0cnVlLCB3aWxsIHRocm93IGlmIE1vZGVsIGlzIGNyZWF0ZWQgd2l0aG91dCBhIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBhc1BhcmVudD86IHRydWUpOiBUO1xuXG4vKipcbiAqIEZldGNoZXMgYW5kIGFzc2lnbnMgdGhlIGNvbnRyb2xsZXIgd2hpY2ggc3Bhd25lZCB0aGlzIGhvc3QuXG4gKiBXaGVuIHBhcmVudCBhc3NpZ25zIGFuIGluc3RhbmNlIHZpYSBgdXNlKClgIGRpcmVjdGl2ZSwgaXRcbiAqIHdpbGwgYmUgbWFkZSBhdmFpbGFibGUgdG8gY2hpbGQgdXBvbiB0aGlzIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIFR5cGUgLSBUeXBlIG9mIGNvbnRyb2xsZXIgY29tcGF0aWJsZSB3aXRoIHRoaXMgY2xhc3MuIFxuICogQHBhcmFtIHJlcXVpcmVkIC0gSWYgZmFsc2UsIHByb3BlcnR5IG1heSBiZSB1bmRlZmluZWQuIE90aGVyd2lzZSB3aWxsIHRocm93IHN1c3BlbnNlLlxuICovXG5mdW5jdGlvbiBnZXQgPFQgZXh0ZW5kcyBNb2RlbD4gKFR5cGU6IE1vZGVsLlR5cGU8VD4sIHJlcXVpcmVkPzogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlIGZyb20gYSBmb3JlaWduIG1vZGVsLiBPdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24sXG4gKiB3aGVyZSB0aGUgZm9yZWlnbiBtb2RlbCB3aWxsIGJlIHBhc3NlZCB0byB0aGF0IGZ1bmN0aW9uLlxuICogXG4gKiBAcGFyYW0gc291cmNlIC0gVHlwZSBvZiBNb2RlbCB0byBmZXRjaCBmb3IgY29tcHV0YXRpb24uXG4gKiBAcGFyYW0gY29tcHV0ZSAtIENvbXB1dGUgZnVuY3Rpb24uIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gZ2V0IDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5UeXBlPFQ+LCBlZmZlY3Q6IGdldC5FZmZlY3Q8VD4pOiBUO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIGNvbXB1dGVkIHZhbHVlIHdpbGwgYmUgYSBzdWJzY3JpYmVyLlxuICogQHBhcmFtIGNvbXB1dGUgLSBDb21wdXRlIGZ1bmN0aW9uLiBCb3VuZCB0byBhIHN1YnNjcmliZXItcHJveHkgb2Ygc291cmNlLCByZXR1cm5zIG91dHB1dCB2YWx1ZS4gV2lsbCB1cGRhdGUgYXV0b21hdGljYWxseSBhcyBpbnB1dCB2YWx1ZXMgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQgZXh0ZW5kcyBNb2RlbD4gKHNvdXJjZTogVCwgY29tcHV0ZTogZ2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgaXMgcmV0dXJuZWQgYnkgZnVuY3Rpb24gZnJvbSBwcm92aWRlZCBmYWN0b3J5LlxuICogXG4gKiBGYWN0b3J5IGlzIGJvdW5kIHRvIG93bmVyIG9mIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb21wdXRlIC0gRmFjdG9yeSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGdldHRlciB0byBzdWJzY3JpYmUgZGVwZW5kYW5jaWVzLlxuICovXG5mdW5jdGlvbiBnZXQgPFIsIFQ+IChjb21wdXRlOiBnZXQuRmFjdG9yeTxSLCBUPik6IFI7XG4gXG5mdW5jdGlvbiBnZXQ8UiwgVCBleHRlbmRzIE1vZGVsPihcbiAgYXJnMDogVCB8IGdldC5GYWN0b3J5PFIsIFQ+IHwgVHlwZTxUPixcbiAgYXJnMT86IEZ1bmN0aW9uIHwgYm9vbGVhbil7XG5cbiAgcmV0dXJuIHVzZSgoa2V5LCBzdWJqZWN0LCBzdGF0ZSkgPT4ge1xuICAgIGlmKHR5cGVvZiBhcmcwID09IFwic3ltYm9sXCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmApXG5cbiAgICBpZihNb2RlbC5pcyhhcmcwKSl7XG4gICAgICBjb25zdCBoYXNQYXJlbnQgPSBQQVJFTlQuZ2V0KHN1YmplY3QpIGFzIFQ7XG5cbiAgICAgIC8vIFRPRE86IG5vdGlmeSBvbiBkaXNjb3ZlcmVkIGNvbnRleHQgXG4gICAgICBmdW5jdGlvbiBhc3NpZ24odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmcxID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB2YWx1ZS5nZXQoeCA9PiAoYXJnMSBhcyBGdW5jdGlvbikoeCwga2V5KSk7XG5cbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZighaGFzUGFyZW50KXtcbiAgICAgICAgaWYoYXJnMSA9PT0gdHJ1ZSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c3ViamVjdH0gbWF5IG9ubHkgZXhpc3QgYXMgYSBjaGlsZCBvZiB0eXBlICR7YXJnMH0uYCk7XG5cbiAgICAgICAgQ29udGV4dC5nZXQoc3ViamVjdCwgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0KGFyZzApO1xuXG4gICAgICAgICAgaWYobW9kZWwpXG4gICAgICAgICAgICBhc3NpZ24obW9kZWwpO1xuICAgICAgICAgIGVsc2UgaWYoYXJnMSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkICR7YXJnMH0gbm90IGZvdW5kIGluIGNvbnRleHQgZm9yICR7c3ViamVjdH0uYClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKCFhcmcwIHx8IGhhc1BhcmVudCBpbnN0YW5jZW9mIGFyZzApXG4gICAgICAgIGFzc2lnbihoYXNQYXJlbnQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5ldyAke3N1YmplY3R9IGNyZWF0ZWQgYXMgY2hpbGQgb2YgJHtoYXNQYXJlbnR9LCBidXQgbXVzdCBiZSBpbnN0YW5jZW9mICR7YXJnMH0uYCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGdldDogYXJnMSAhPT0gZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIGxldCBmcm9tID0gc3ViamVjdDtcbiAgICBcbiAgICBpZihhcmcwIGluc3RhbmNlb2YgTW9kZWwpe1xuICAgICAgZnJvbSA9IGFyZzA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZm4gPSBNRVRIT0QuZ2V0KGFyZzApIHx8IGFyZzA7XG4gICAgICBhcmcxID0gKChwLCBrKSA9PiBmbi5jYWxsKHAsIGssIHApKSBhcyBnZXQuRWZmZWN0PFQ+O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZTogZ2V0LlNvdXJjZTxUPiA9IHJlc29sdmUgPT4gcmVzb2x2ZShmcm9tKTtcbiAgICBjb25zdCBnZXR0ZXIgPSBhcmcxIGFzIGdldC5Db21wdXRlPFIsIFQ+O1xuXG4gICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGlzQXN5bmM6IGJvb2xlYW47XG4gICAgbGV0IHByb3h5OiBhbnk7XG5cbiAgICBmdW5jdGlvbiBjb25uZWN0KG1vZGVsOiBNb2RlbCl7XG4gICAgICByZXNldCA9IGNyZWF0ZUVmZmVjdChtb2RlbCwgY3VycmVudCA9PiB7XG4gICAgICAgIHByb3h5ID0gY3VycmVudDtcblxuICAgICAgICBpZighKGtleSBpbiBzdGF0ZSkgfHwgU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICAgIGNvbXB1dGUoIXJlc2V0KTtcblxuICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgIGlmKGRpZFVwZGF0ZSl7XG4gICAgICAgICAgICBTVEFMRS5hZGQoY29tcHV0ZSk7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXksIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0sIGZhbHNlKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGUoaW5pdGlhbD86IGJvb2xlYW4pe1xuICAgICAgbGV0IG5leHQ6IFIgfCB1bmRlZmluZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHQgPSBnZXR0ZXIuY2FsbChwcm94eSwgcHJveHksIGtleSk7XG4gICAgICB9XG4gICAgICBjYXRjaChlcnIpe1xuICAgICAgICBjb25zb2xlLndhcm4oYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7aW5pdGlhbCA/IFwiaW5pdGlhbGl6aW5nXCIgOiBcInJlZnJlc2hpbmdcIn0gJHtzdWJqZWN0fS4ke2tleX0uYClcblxuICAgICAgICBpZihpbml0aWFsKVxuICAgICAgICAgIHRocm93IGVycjtcblxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQsICFpc0FzeW5jKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYoIXByb3h5KXtcbiAgICAgICAgc291cmNlKGNvbm5lY3QpO1xuICAgICAgICBpc0FzeW5jID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKVxuICAgICAgICBjb21wdXRlKCk7XG5cbiAgICAgIHJldHVybiBmZXRjaChzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCB7IGdldCB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFTLG9CQUFvQjtBQUM3QixTQUFTLE9BQU8sUUFBUSxPQUFPLFFBQVEsT0FBTyxjQUFjO0FBQzVELFNBQVMsV0FBVztBQUlwQixNQUFNLFFBQVEsb0JBQUksUUFBb0I7QUEwRHRDLFNBQVMsSUFDUCxNQUNBLE1BQTBCO0FBRTFCLFNBQU8sSUFBSSxDQUFDLEtBQUssU0FBUyxVQUFVO0FBQ2xDLFFBQUcsT0FBTyxRQUFRO0FBQ2hCLFlBQU0sSUFBSSxNQUFNLHVGQUF1RixPQUFPLElBQUksR0FBRyx3QkFBd0I7QUFFL0ksUUFBRyxNQUFNLEdBQUcsSUFBSSxHQUFFO0FBSWhCLFVBQVNBLFVBQVQsU0FBZ0IsT0FBVTtBQUN4QixZQUFJLE9BQU8sUUFBUTtBQUNqQixnQkFBTSxJQUFJLE9BQU0sS0FBa0IsR0FBRyxHQUFHLENBQUM7QUFFM0MsZUFBTyxTQUFTLEtBQUssS0FBSztBQUFBLE1BQzVCO0FBTFMsbUJBQUFBO0FBSFQsWUFBTSxZQUFZLE9BQU8sSUFBSSxPQUFPO0FBVXBDLFVBQUcsQ0FBQyxXQUFVO0FBQ1osWUFBRyxTQUFTO0FBQ1YsZ0JBQU0sSUFBSSxNQUFNLEdBQUcsT0FBTyxzQ0FBc0MsSUFBSSxHQUFHO0FBRXpFLGdCQUFRLElBQUksU0FBUyxDQUFDLFlBQVk7QUFDaEMsZ0JBQU0sUUFBUSxRQUFRLElBQUksSUFBSTtBQUU5QixjQUFHO0FBQ0QsWUFBQUEsUUFBTyxLQUFLO0FBQUEsbUJBQ04sU0FBUztBQUNmLGtCQUFNLElBQUksTUFBTSxZQUFZLElBQUksNkJBQTZCLE9BQU8sR0FBRztBQUFBLFFBQzNFLENBQUM7QUFBQSxNQUNILFdBQ1EsQ0FBQyxRQUFRLHFCQUFxQjtBQUNwQyxRQUFBQSxRQUFPLFNBQVM7QUFBQTtBQUVoQixjQUFNLElBQUksTUFBTSxPQUFPLE9BQU8sd0JBQXdCLFNBQVMsNEJBQTRCLElBQUksR0FBRztBQUVwRyxhQUFPO0FBQUEsUUFDTCxLQUFLLFNBQVM7QUFBQSxNQUNoQjtBQUFBLElBQ0Y7QUFFQSxRQUFJLE9BQU87QUFFWCxRQUFHLGdCQUFnQixPQUFNO0FBQ3ZCLGFBQU87QUFBQSxJQUNULE9BQ0s7QUFDSCxZQUFNLEtBQUssT0FBTyxJQUFJLElBQUksS0FBSztBQUMvQixhQUFRLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUFBLElBQ25DO0FBRUEsVUFBTSxTQUF3QixhQUFXLFFBQVEsSUFBSTtBQUNyRCxVQUFNLFNBQVM7QUFFZixRQUFJO0FBQ0osUUFBSTtBQUNKLFFBQUk7QUFFSixhQUFTLFFBQVEsT0FBYTtBQUM1QixjQUFRLGFBQWEsT0FBTyxhQUFXO0FBQ3JDLGdCQUFRO0FBRVIsWUFBRyxFQUFFLE9BQU8sVUFBVSxNQUFNLE9BQU8sT0FBTztBQUN4QyxrQkFBUSxDQUFDLEtBQUs7QUFFaEIsZUFBTyxDQUFDLGNBQWM7QUFDcEIsY0FBRyxXQUFVO0FBQ1gsa0JBQU0sSUFBSSxPQUFPO0FBQ2pCLGtCQUFNLFNBQVMsS0FBSyxJQUFJO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUEsTUFDRixHQUFHLEtBQUs7QUFBQSxJQUNWO0FBRUEsYUFBUyxRQUFRLFNBQWtCO0FBQ2pDLFVBQUk7QUFFSixVQUFJO0FBQ0YsZUFBTyxPQUFPLEtBQUssT0FBTyxPQUFPLEdBQUc7QUFBQSxNQUN0QyxTQUNNLEtBQUk7QUFDUixnQkFBUSxLQUFLLGlDQUFpQyxVQUFVLGlCQUFpQixZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsR0FBRztBQUUxRyxZQUFHO0FBQ0QsZ0JBQU07QUFFUixnQkFBUSxNQUFNLEdBQUc7QUFBQSxNQUNuQjtBQUVBLGFBQU8sU0FBUyxLQUFLLE1BQU0sQ0FBQyxPQUFPO0FBQUEsSUFDckM7QUFFQSxXQUFPLE1BQU07QUFDWCxVQUFHLENBQUMsT0FBTTtBQUNSLGVBQU8sT0FBTztBQUNkLGtCQUFVO0FBQUEsTUFDWjtBQUVBLFVBQUcsTUFBTSxPQUFPLE9BQU87QUFDckIsZ0JBQVE7QUFFVixhQUFPLE1BQU0sU0FBUyxLQUFLLENBQUMsS0FBSztBQUFBLElBQ25DO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbImFzc2lnbiJdCn0K
|